From 4320d7bd19b1583fda5e57c7e2d8704b8e43325a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=BE=E5=AF=8C=E6=96=8C?= Date: Mon, 17 Nov 2025 22:47:40 +0800 Subject: [PATCH] =?UTF-8?q?fix=20(farm):=20=E5=9C=B0=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 地块数量多导致加载数据缓慢问题 --- .../controller/admin/home/HomeController.java | 11 +- .../admin/home/vo/PlotListRespVO.java | 38 ++++ .../dal/mysql/plotinfo/PlotInfoMapper.java | 4 + .../module/farm/service/home/HomeService.java | 4 +- .../farm/service/home/HomeServiceImpl.java | 184 +++++++++--------- .../service/plotinfo/PlotInfoService.java | 7 + .../service/plotinfo/PlotInfoServiceImpl.java | 8 + .../mapper/plotinfo/PlotInfoMapper.xml | 30 +++ 8 files changed, 195 insertions(+), 91 deletions(-) create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/home/vo/PlotListRespVO.java diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/home/HomeController.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/home/HomeController.java index 6c51866e..11edfa39 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/home/HomeController.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/home/HomeController.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.farm.controller.admin.home; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.module.farm.controller.admin.home.vo.BaseNameVO; import cn.iocoder.yudao.module.farm.controller.admin.home.vo.HomeInfo; +import cn.iocoder.yudao.module.farm.controller.admin.home.vo.PlotListRespVO; import cn.iocoder.yudao.module.farm.controller.admin.home.vo.QrDetailsRespVO; import cn.iocoder.yudao.module.farm.service.home.HomeService; import cn.iocoder.yudao.module.farm.utils.WeatherUtil; @@ -14,7 +15,6 @@ import jakarta.annotation.security.PermitAll; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -49,7 +49,14 @@ public class HomeController { return success(homeService.getHomeInfo(baseId)); } - @Operation(summary = "农场首页-地块详情") + @Operation(summary = "农场首页-地块详情-集合") + @GetMapping("/plot/list") + @Parameter(name = "baseId", description = "基地ID") + public CommonResult> listPlotInfo(@RequestParam("baseId") String baseId) { + return success(homeService.listPlotInfo(baseId)); + } + + @Operation(summary = "农场首页-地块详情") // 在用 @GetMapping("/plot/get") @Parameter(name = "plotId", description = "地块ID") public CommonResult getPlotInfo(@RequestParam("plotId") String plotId) { diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/home/vo/PlotListRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/home/vo/PlotListRespVO.java new file mode 100644 index 00000000..92780408 --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/home/vo/PlotListRespVO.java @@ -0,0 +1,38 @@ +package cn.iocoder.yudao.module.farm.controller.admin.home.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +/** + * @description: TODO + * @author: binda + * @date: 2025/11/17 20:37 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PlotListRespVO { + @Schema(description = "基地名称") + private String baseName; + @Schema(description = "地块ID") + private String plotId; + @Schema(description = "地块名称") + private String plotName; + @Schema(description = "地块面积") + private BigDecimal plotArea; + @Schema(description = "基地坐标") + private String point; + @Schema(description = "基地颜色") + private String plotColor; + + @Schema(description = "基地负责人") + private String manager; + @Schema(description = "在种面积") + private String beingBaseArea; + @Schema(description = "在种作物-名称") + private String beingCropName; +} diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/plotinfo/PlotInfoMapper.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/plotinfo/PlotInfoMapper.java index b5d4bb85..d8c96868 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/plotinfo/PlotInfoMapper.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/plotinfo/PlotInfoMapper.java @@ -3,10 +3,13 @@ package cn.iocoder.yudao.module.farm.dal.mysql.plotinfo; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.farm.controller.admin.home.vo.PlotListRespVO; import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo.PlotInfoPageReqVO; import cn.iocoder.yudao.module.farm.dal.dataobject.plotinfo.PlotInfoDO; import org.apache.ibatis.annotations.Mapper; +import java.util.List; + /** * 地块 Mapper * @@ -28,4 +31,5 @@ public interface PlotInfoMapper extends BaseMapperX { .orderByDesc(PlotInfoDO::getCreateTime)); } + List listPlotInfo(String baseId); } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/home/HomeService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/home/HomeService.java index c7d9b219..a3a96a19 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/home/HomeService.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/home/HomeService.java @@ -2,10 +2,10 @@ package cn.iocoder.yudao.module.farm.service.home; import cn.iocoder.yudao.module.farm.controller.admin.home.vo.BaseNameVO; import cn.iocoder.yudao.module.farm.controller.admin.home.vo.HomeInfo; +import cn.iocoder.yudao.module.farm.controller.admin.home.vo.PlotListRespVO; import cn.iocoder.yudao.module.farm.controller.admin.home.vo.QrDetailsRespVO; import java.util.List; -import java.util.Map; /** * @description: 首页接口 @@ -33,4 +33,6 @@ public interface HomeService { * @return */ QrDetailsRespVO scanQrCodes(String baseId,String tenantId); + + List listPlotInfo(String baseId); } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/home/HomeServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/home/HomeServiceImpl.java index 718c788f..6af457da 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/home/HomeServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/home/HomeServiceImpl.java @@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.farm.controller.admin.digitalcockpit.vo.DeviceMon import cn.iocoder.yudao.module.farm.controller.admin.home.vo.BaseNameVO; import cn.iocoder.yudao.module.farm.controller.admin.home.vo.HomeInfo; import cn.iocoder.yudao.module.farm.controller.admin.home.vo.HomeInfo.*; +import cn.iocoder.yudao.module.farm.controller.admin.home.vo.PlotListRespVO; import cn.iocoder.yudao.module.farm.controller.admin.home.vo.QrDetailsRespVO; import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo.PlotLesseeDetailsRespVO; import cn.iocoder.yudao.module.farm.dal.dataobject.baseinfo.BaseInfoDO; @@ -30,6 +31,7 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -115,12 +117,81 @@ public class HomeServiceImpl implements HomeService { return new HomeInfo(null, null,baseList); } + @Override + public PlotInfo getPlotInfo(String plotId) { + // 员工集合 + Map employeeNameMap = personnelManagementService.getEmployeeNameMap(); + + PlotInfoDO pObj = plotInfoService.getPlotInfo(plotId); + BaseInfoDO bOjb = baseInfoService.getBaseInfo(pObj.getBaseId()); + + return this.getPlotInfo(pObj,bOjb,employeeNameMap); + } + + @Override + public List getBaseNameList() { + List baseNameList = baseInfoService.getBaseInfos(); + if (ObjectUtils.isEmpty(baseNameList)) { + return new ArrayList<>(); + } + return baseNameList.stream().map(e -> new BaseNameVO(e.getId(), e.getName())).collect(Collectors.toList()); + } + + @Override + public QrDetailsRespVO scanQrCodes(String baseId,String tenantId) { + BaseInfoDO bObj = baseInfoService.getBaseInfo(baseId); + if (ObjectUtils.isEmpty(bObj)) { + return null; + } + + List plotList = new ArrayList<>(); + List plotInfos = plotInfoService.getPlotInfos(baseId); + for (PlotInfoDO p : plotInfos) { + List ls = this.getLs(p.getId()); + List ds = this.getDs(p.getId(),tenantId); + + QrDetailsRespVO.PlotInfo targetP = new QrDetailsRespVO.PlotInfo(); + targetP.setPlotName(p.getPlotName()); + targetP.setPlotManagerName(p.getEmployeeName()); + targetP.setPlotArea(p.getPlotArea().intValue()); + targetP.setDeviceInfos(ds); + targetP.setLesseeInfos(ls); + plotList.add(targetP); + } + + + QrDetailsRespVO res = new QrDetailsRespVO(); + res.setBaseName(bObj.getName()); + res.setBaseManagerName(bObj.getManagerName()); + res.setBaseArea(bObj.getArea().intValue()); + res.setPlotCount(plotList.size()); + res.setPlotInfo(plotList); + return res; + } + + @Override + public List listPlotInfo(String baseId) { + return plotInfoService.listPlotInfo(baseId); + } + + private List getPlotInfoList(BaseInfoDO baseObj) { + List plotList = plotInfoService.getPlotInfos(baseObj.getId(), baseObj.getName()); + List targetList = BeanUtils.toBean(plotList, PlotInfo.class); + targetList.forEach(e -> { + List plotPopupFrame = this.getPlotPopupFrame(e.getPlotId(), e.getManager()); + e.setPlotPopupFrames(plotPopupFrame.get(0)); + }); + + return targetList; + } + private BaseInfo getBaseInfo(BaseInfoDO baseObj) { String baseId = baseObj.getId(); String baseName = baseObj.getName(); String point = baseObj.getPoint(); - List plotInfos = this.getPlotInfoList(baseObj); - return new BaseInfo(baseId,baseName,point,plotInfos); +// List plotInfos = this.getPlotInfoList(baseObj); + List plotInfos = Collections.EMPTY_LIST; + return new BaseInfo(baseId, baseName, point, plotInfos); } private StatisticalInfo getStatisticalInfo(String baseId) { @@ -129,7 +200,7 @@ public class HomeServiceImpl implements HomeService { } Integer taskCount = productionPlanService.getTodayTaskCount(baseId); - Integer warningCount = 0; // TODO: 2025/9/1 告警数量 + Integer warningCount = 0; // TODO: 2025/9/1 告警数量 Integer iotCount = deviceService.countDevice(baseId, getLoginUser().getTenantId().toString()); return new StatisticalInfo(taskCount,warningCount,iotCount); } @@ -179,17 +250,31 @@ public class HomeServiceImpl implements HomeService { return targetList; } - @Override - public PlotInfo getPlotInfo(String plotId) { - // 员工集合 - Map employeeNameMap = personnelManagementService.getEmployeeNameMap(); + private List getLs(String plotId) { + return plotLesseeService.getPlotLesseeHistoryList(plotId); - PlotInfoDO pObj = plotInfoService.getPlotInfo(plotId); - BaseInfoDO bOjb = baseInfoService.getBaseInfo(pObj.getBaseId()); - - return this.getPlotInfo(pObj,bOjb,employeeNameMap); } + private List getDs(String plotId,String tenantId) { + return deviceService.deviceList(plotId,tenantId); + } + + private BaseOverviewInfo getCompanyInfo() { + LoginUser user = getLoginUser(); + int baseCount = baseInfoService.getBaseCount(user.getTenantId()); // 基地数量 + int cropCount = cropFarmingCenterService.getCropCount(user.getTenantId()); // 作物数量 +// Double temp = cropFarmingCenterService.getTotalArea(user.getTenantId()); // 总面积 + Double temp = baseInfoService.getBaseTotalArea(user.getTenantId().toString()); // 总面积 + int totalArea = 0; + if (!ObjectUtils.isEmpty(temp)) { + totalArea = (int) Math.round(temp); + } + + int personnelCount = personnelManagementService.personnelCount(user.getTenantId()); // 在职人员 + return new BaseOverviewInfo("",baseCount,cropCount,totalArea,personnelCount); + } + + private PlotInfo getPlotInfo(PlotInfoDO e, BaseInfoDO baseObj, Map employeeNameMap) { String employeeName = personnelManagementService.getEmployeeNameMap(employeeNameMap, e.getEmployeeId()); // 地块详情 (包含计划信息) @@ -214,18 +299,6 @@ public class HomeServiceImpl implements HomeService { return t; } - private List getPlotInfoList(BaseInfoDO baseObj) { - - List plotList = plotInfoService.getPlotInfos(baseObj.getId(), baseObj.getName()); - List targetList = BeanUtils.toBean(plotList, PlotInfo.class); - targetList.forEach(e -> { - List plotPopupFrame = this.getPlotPopupFrame(e.getPlotId(), e.getManager()); - e.setPlotPopupFrames(plotPopupFrame.get(0)); - }); - - return targetList; - } - private PlotOrCropInfo getPlotOrCropInfoList(PlotInfoDO e, String label, String employeeName) { Double predictedArea = productionPlanService.getBeingPlotArea(e.getPlotId()); if (ObjectUtils.isEmpty(predictedArea)) { @@ -324,69 +397,4 @@ public class HomeServiceImpl implements HomeService { } return targetList; } - - @Override - public List getBaseNameList() { - List baseNameList = baseInfoService.getBaseInfos(); - if (ObjectUtils.isEmpty(baseNameList)) { - return new ArrayList<>(); - } - return baseNameList.stream().map(e -> new BaseNameVO(e.getId(), e.getName())).collect(Collectors.toList()); - } - - @Override - public QrDetailsRespVO scanQrCodes(String baseId,String tenantId) { - BaseInfoDO bObj = baseInfoService.getBaseInfo(baseId); - if (ObjectUtils.isEmpty(bObj)) { - return null; - } - - List plotList = new ArrayList<>(); - List plotInfos = plotInfoService.getPlotInfos(baseId); - for (PlotInfoDO p : plotInfos) { - List ls = this.getLs(p.getId()); - List ds = this.getDs(p.getId(),tenantId); - - QrDetailsRespVO.PlotInfo targetP = new QrDetailsRespVO.PlotInfo(); - targetP.setPlotName(p.getPlotName()); - targetP.setPlotManagerName(p.getEmployeeName()); - targetP.setPlotArea(p.getPlotArea().intValue()); - targetP.setDeviceInfos(ds); - targetP.setLesseeInfos(ls); - plotList.add(targetP); - } - - - QrDetailsRespVO res = new QrDetailsRespVO(); - res.setBaseName(bObj.getName()); - res.setBaseManagerName(bObj.getManagerName()); - res.setBaseArea(bObj.getArea().intValue()); - res.setPlotCount(plotList.size()); - res.setPlotInfo(plotList); - return res; - } - - private List getLs(String plotId) { - return plotLesseeService.getPlotLesseeHistoryList(plotId); - - } - - private List getDs(String plotId,String tenantId) { - return deviceService.deviceList(plotId,tenantId); - } - - private BaseOverviewInfo getCompanyInfo() { - LoginUser user = getLoginUser(); - int baseCount = baseInfoService.getBaseCount(user.getTenantId()); // 基地数量 - int cropCount = cropFarmingCenterService.getCropCount(user.getTenantId()); // 作物数量 -// Double temp = cropFarmingCenterService.getTotalArea(user.getTenantId()); // 总面积 - Double temp = baseInfoService.getBaseTotalArea(user.getTenantId().toString()); // 总面积 - int totalArea = 0; - if (!ObjectUtils.isEmpty(temp)) { - totalArea = (int) Math.round(temp); - } - - int personnelCount = personnelManagementService.personnelCount(user.getTenantId()); // 在职人员 - return new BaseOverviewInfo("",baseCount,cropCount,totalArea,personnelCount); - } } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotInfoService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotInfoService.java index ff503de5..96d1fbf8 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotInfoService.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotInfoService.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.farm.service.plotinfo; +import cn.iocoder.yudao.module.farm.controller.admin.home.vo.PlotListRespVO; import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo.*; import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo.wx.RegularPlotInfoRespVO; import cn.iocoder.yudao.module.farm.dal.dataobject.plotinfo.PlotInfoDO; @@ -110,4 +111,10 @@ public interface PlotInfoService { Long countPlotByTenantId(String tenantId); + /** + * 获取在种地块集合 + * @param baseId + * @return + */ + List listPlotInfo(String baseId); } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotInfoServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotInfoServiceImpl.java index 8a4b2910..48a33087 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotInfoServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotInfoServiceImpl.java @@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.security.core.LoginUser; +import cn.iocoder.yudao.module.farm.controller.admin.home.vo.PlotListRespVO; import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo.*; import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo.wx.RegularPlotInfoRespVO; import cn.iocoder.yudao.module.farm.dal.dataobject.baseinfo.BaseInfoDO; @@ -303,6 +304,13 @@ public class PlotInfoServiceImpl implements PlotInfoService { return plotInfoMapper.selectCount(wrapperX); } + @Override + public List listPlotInfo(String baseId) { + List pList = plotInfoMapper.listPlotInfo(baseId); + + return pList; + } + // ==================== 私有方法 ==================== /** diff --git a/yudao-module-farm/src/main/resources/mapper/plotinfo/PlotInfoMapper.xml b/yudao-module-farm/src/main/resources/mapper/plotinfo/PlotInfoMapper.xml index 128dba5f..97449d5d 100644 --- a/yudao-module-farm/src/main/resources/mapper/plotinfo/PlotInfoMapper.xml +++ b/yudao-module-farm/src/main/resources/mapper/plotinfo/PlotInfoMapper.xml @@ -9,4 +9,34 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + \ No newline at end of file