diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/digitalcockpit/DigitalCockpitController.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/digitalcockpit/DigitalCockpitController.java index f9c3fc70..76ae6c16 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/digitalcockpit/DigitalCockpitController.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/digitalcockpit/DigitalCockpitController.java @@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.farm.controller.admin.digitalcockpit; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.farm.controller.admin.api.vo.FarmingDistributionReqVO; +import cn.iocoder.yudao.module.farm.controller.admin.api.vo.FarmingDistributionRespVO; import cn.iocoder.yudao.module.farm.controller.admin.digitalcockpit.vo.*; import cn.iocoder.yudao.module.farm.dal.dataobject.baseinfo.BaseInfoDO; import cn.iocoder.yudao.module.farm.dal.dataobject.companyinfo.CompanyInfoDO; @@ -11,7 +13,6 @@ import cn.iocoder.yudao.module.farm.service.baseinfo.BaseInfoService; import cn.iocoder.yudao.module.farm.service.companyinfo.CompanyInfoService; import cn.iocoder.yudao.module.farm.service.deviceinfo.DeviceInfoService; import cn.iocoder.yudao.module.farm.service.farmingrecord.FarmingRecordService; -import cn.iocoder.yudao.module.farm.service.modelcycle.ModelCycleService; import cn.iocoder.yudao.module.farm.service.modelmanagement.ModelManagementService; import cn.iocoder.yudao.module.farm.service.plotinfo.PlotInfoService; import cn.iocoder.yudao.module.farm.service.productionplan.ProductionPlanService; @@ -23,7 +24,6 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.error; @@ -160,21 +160,16 @@ public class DigitalCockpitController { @GetMapping("/farm-records/type/1") @Operation(summary = "农事分布") @Parameter(name = "baseId", description = "基地ID", required = true) - public CommonResult getFarmRecords(@RequestParam("baseId") String baseId) { - // TODO: 2025/9/24 待实现 - FarmRecordsRespVO res = new FarmRecordsRespVO(); - res.setTotalCount(0); - res.setOverdueStatusCount(0); - res.setCompletedStatusCount(0); - res.setPendingStatusCount(0); - res.setExecutingStatusCount(0); - return success(res); + public CommonResult getFarmRecords(@RequestParam("baseId") String baseId) { + FarmingDistributionReqVO req = new FarmingDistributionReqVO(baseId,""); + return farmingRecordService.getFarmingDistributionChart(req); } @GetMapping("/farm-records/type/2") @Operation(summary = "农事活动趋势") @Parameter(name = "baseId", description = "基地ID", required = true) public CommonResult getFarmRecordsDirection(@RequestParam("baseId") String baseId) { + // 移除 return success("暂时不做"); } @@ -182,15 +177,7 @@ public class DigitalCockpitController { @Operation(summary = "设备统计") @Parameter(name = "baseId", description = "基地ID", required = true) public CommonResult getDeviceInfo(@RequestParam("baseId") String baseId) { - // TODO: 2025/9/24 待实现 - DeviceInfoRespVO res = new DeviceInfoRespVO(); - res.setTotal(17); - res.setDeviceInfos( - Arrays.asList( - new DeviceInfoRespVO.DeviceInfo("水肥机", 1), - new DeviceInfoRespVO.DeviceInfo("土壤墒情", 16) - ) - ); + DeviceInfoRespVO res = deviceInfoService.getDeviceInfoByDp(baseId); return success(res); } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/deviceinfo/DeviceInfoMapper.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/deviceinfo/DeviceInfoMapper.java index 71d5d8ae..17b114f4 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/deviceinfo/DeviceInfoMapper.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/deviceinfo/DeviceInfoMapper.java @@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.module.farm.controller.admin.api.vo.DeviceStateRespVO; import cn.iocoder.yudao.module.farm.controller.admin.deviceinfo.vo.DeviceInfoPageReqVO; import cn.iocoder.yudao.module.farm.controller.admin.deviceinfo.vo.v2.DeviceStatisticsRespVO; +import cn.iocoder.yudao.module.farm.controller.admin.digitalcockpit.vo.DeviceInfoRespVO; import cn.iocoder.yudao.module.farm.dal.dataobject.deviceinfo.DeviceInfoDO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -99,8 +100,12 @@ public interface DeviceInfoMapper extends BaseMapperX { /** * 设备在线状态统计 + * * @param tenantId * @return */ - DeviceStateRespVO countDeviceState(@Param("baseId") String baseId,@Param("tenantId") String tenantId); + DeviceStateRespVO countDeviceState(@Param("baseId") String baseId, @Param("tenantId") String tenantId); + + List selectDeviceTypeCount(@Param("baseId") String baseId); + } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/manager/equipmentproducer/dto/soil/history/HistoryDataListPageReqVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/manager/equipmentproducer/dto/soil/history/HistoryDataListPageReqVO.java index ca76e347..1b10d93a 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/manager/equipmentproducer/dto/soil/history/HistoryDataListPageReqVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/manager/equipmentproducer/dto/soil/history/HistoryDataListPageReqVO.java @@ -68,6 +68,7 @@ public class HistoryDataListPageReqVO { case 24 -> target = HistoryDataTimeRangeUtil.getLast24Hours(); case 3 -> target = HistoryDataTimeRangeUtil.getLast3Days(); case 7 -> target = HistoryDataTimeRangeUtil.getLast7Days(); + default -> target = HistoryDataTimeRangeUtil.getLast7Days(); } target.setDeviceAddr(deviceAddr); return target; diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/cropFarmingCenter/CropFarmingCenterServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/cropFarmingCenter/CropFarmingCenterServiceImpl.java index 986ff17e..b98d18c9 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/cropFarmingCenter/CropFarmingCenterServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/cropFarmingCenter/CropFarmingCenterServiceImpl.java @@ -384,7 +384,7 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService { // 任务进度 - 分子 (添加到: 种植中心-农事记录里的记录数) int progressNumerator = farmingRecordService.getFarmRecordCount(planObj.getId()); // 任务进度 - 分母 (引用模型中的所有模型周期的农事记录总和) - int progressDenominator = modelManagementService.getFarmRecordCount(planObj.getSpeciesModelId()); + int progressDenominator = this.setProgressBar(planObj); String progressBar = progressNumerator + "/" + progressDenominator; // 进度条 String progressRatio = (int) Math.round((double) progressNumerator / progressDenominator * 100) + "%"; @@ -411,6 +411,20 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService { } + /** + * 农事记录总数 = 模型中的农事记录 + 自定义农事记录 + * @return + */ + private int setProgressBar(ProductionPlanDO planObj) { + String speciesModelId = planObj.getSpeciesModelId(); + String planNumber = planObj.getPlanNumber(); + + int num1 = modelManagementService.getFarmRecordCount(speciesModelId); + int num2 = farmingRecordService.getFarmRecordCountByTaskScope(planNumber); + + return num1 + num2; + } + private int countIntervalDays(ProductionPlanDO aDo) { LocalDate productionStartDate = aDo.getProductionStartDate(); LocalDate productionEndDate = aDo.getProductionEndDate(); diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/deviceinfo/DeviceInfoService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/deviceinfo/DeviceInfoService.java index 06cd12d7..3ce78260 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/deviceinfo/DeviceInfoService.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/deviceinfo/DeviceInfoService.java @@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.farm.controller.admin.deviceinfo.vo.DeviceInfoPag import cn.iocoder.yudao.module.farm.controller.admin.deviceinfo.vo.DeviceInfoSaveReqVO; import cn.iocoder.yudao.module.farm.controller.admin.deviceinfo.vo.v2.DeviceInfoDetailV2RespVO; import cn.iocoder.yudao.module.farm.controller.admin.deviceinfo.vo.v2.DeviceStatisticsRespVO; +import cn.iocoder.yudao.module.farm.controller.admin.digitalcockpit.vo.DeviceInfoRespVO; import cn.iocoder.yudao.module.farm.dal.dataobject.deviceinfo.DeviceInfoDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.farm.manager.equipmentproducer.dto.RealTimeDataResponse; @@ -119,4 +120,11 @@ public interface DeviceInfoService { */ int countDevice(String baseId, String tenantId); + /** + * 设备统计 (大屏) + * @param baseId + * @return + */ + DeviceInfoRespVO getDeviceInfoByDp(String baseId); + } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/deviceinfo/DeviceInfoServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/deviceinfo/DeviceInfoServiceImpl.java index a052c2ec..cbdd3fde 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/deviceinfo/DeviceInfoServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/deviceinfo/DeviceInfoServiceImpl.java @@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.farm.controller.admin.deviceinfo.vo.DeviceInfoPag import cn.iocoder.yudao.module.farm.controller.admin.deviceinfo.vo.DeviceInfoSaveReqVO; import cn.iocoder.yudao.module.farm.controller.admin.deviceinfo.vo.v2.DeviceInfoDetailV2RespVO; import cn.iocoder.yudao.module.farm.controller.admin.deviceinfo.vo.v2.DeviceStatisticsRespVO; +import cn.iocoder.yudao.module.farm.controller.admin.digitalcockpit.vo.DeviceInfoRespVO; import cn.iocoder.yudao.module.farm.dal.dataobject.baseinfo.BaseInfoDO; import cn.iocoder.yudao.module.farm.dal.dataobject.deviceclassify.DeviceClassifyDO; import cn.iocoder.yudao.module.farm.dal.dataobject.plotinfo.PlotInfoDO; @@ -24,6 +25,7 @@ import cn.iocoder.yudao.module.farm.manager.equipmentproducer.dto.UnifiedLoginRe import cn.iocoder.yudao.module.farm.manager.equipmentproducer.dto.soil.history.HistoryDataListPageReqVO; import cn.iocoder.yudao.module.farm.manager.equipmentproducer.dto.soil.realtime.RealTimeDataReqVO; import cn.iocoder.yudao.module.farm.manager.equipmentproducer.dto.wf.realtime.RealTimeDeviceDataReqVO; +import cn.iocoder.yudao.module.farm.service.deviceclassify.DeviceClassifyService; import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; @@ -63,6 +65,8 @@ public class DeviceInfoServiceImpl implements DeviceInfoService { @Resource private DeviceClassifyMapper deviceClassifyMapper; @Resource + private DeviceClassifyService deviceClassifyService; + @Resource private BaseInfoMapper baseInfoMapper; @Resource private PlotInfoMapper plotInfoMapper; @@ -183,8 +187,7 @@ public class DeviceInfoServiceImpl implements DeviceInfoService { String token = login.getData().getToken(); // 实时数据 - RealTimeDataReqVO soilRequest = new RealTimeDataReqVO(); - soilRequest.setDeviceAddrs(deviceUniqueId); + RealTimeDataReqVO soilRequest = new RealTimeDataReqVO(deviceUniqueId,tenantId); RealTimeDataResponse realTimeData = equipmentProducerManager.getRealTimeData(DEVICE_TYPE_SOIL, tenantId, token, soilRequest); // 历史数据 @@ -270,7 +273,7 @@ public class DeviceInfoServiceImpl implements DeviceInfoService { UnifiedLoginResponse login = equipmentProducerManager.login(DEVICE_TYPE_SOIL, Long.valueOf(req.getTenantId()), req.getTenantId()); String token = login.getData().getToken(); - RealTimeDataReqVO soilRequest = new RealTimeDataReqVO(""); + RealTimeDataReqVO soilRequest = new RealTimeDataReqVO("",Long.valueOf(req.getTenantId())); RealTimeDataResponse realTimeData = equipmentProducerManager.getRealTimeData(DEVICE_TYPE_SOIL, Long.valueOf(req.getTenantId()), token, soilRequest); return success(realTimeData); @@ -324,4 +327,17 @@ public class DeviceInfoServiceImpl implements DeviceInfoService { return deviceInfoMapper.selectCount(wrapperX).intValue(); } + @Override + public DeviceInfoRespVO getDeviceInfoByDp(String baseId) { + Map typeNameMap = deviceClassifyService.getTypeNameMap(); + + List deviceInfos = deviceInfoMapper.selectDeviceTypeCount(baseId); + deviceInfos.forEach(e -> e.setDeviceTypeName(typeNameMap.getOrDefault(e.getDeviceTypeName(), ""))); + // deviceCount 总和 + Integer totalCount = deviceInfos.stream().mapToInt(DeviceInfoRespVO.DeviceInfo::getDeviceCount).sum(); + + return new DeviceInfoRespVO(totalCount, deviceInfos); + } + + } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/farmingrecord/FarmingRecordService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/farmingrecord/FarmingRecordService.java index 899e3b42..9bea30cc 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/farmingrecord/FarmingRecordService.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/farmingrecord/FarmingRecordService.java @@ -85,6 +85,8 @@ public interface FarmingRecordService { */ int getFarmRecordCount(String planId); + int getFarmRecordCountByTaskScope(String taskScope); + /** * api 接口 * 灾害统计-农事分布 diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/farmingrecord/FarmingRecordServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/farmingrecord/FarmingRecordServiceImpl.java index 62bf44c2..ebdae802 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/farmingrecord/FarmingRecordServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/farmingrecord/FarmingRecordServiceImpl.java @@ -18,6 +18,7 @@ import cn.iocoder.yudao.module.farm.dal.mysql.farmingnamemaintenance.FarmingName import cn.iocoder.yudao.module.farm.dal.mysql.farmingrecord.FarmingRecordMapper; import cn.iocoder.yudao.module.farm.dal.mysql.farmingrecordinput.FarmingRecordInputMapper; import cn.iocoder.yudao.module.farm.dal.mysql.farmingtypemaintenance.FarmingTypeMaintenanceMapper; +import cn.iocoder.yudao.module.farm.enums.CommonConstants; import jakarta.annotation.Resource; import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; @@ -268,6 +269,15 @@ public class FarmingRecordServiceImpl implements FarmingRecordService { return count.intValue(); } + @Override + public int getFarmRecordCountByTaskScope(String taskScope) { + LambdaQueryWrapperX x = new LambdaQueryWrapperX<>(); + x.eq(FarmingRecordDO::getTaskScope, taskScope); + x.eq(FarmingRecordDO::getDeleted, CommonConstants.NO_CODE); + Long count = farmingRecordMapper.selectCount(x); + return count.intValue(); + } + @Override public CommonResult getFarmingDistributionChart(FarmingDistributionReqVO req) { FarmingDistributionRespVO res = farmingRecordMapper.getFarmingDistributionChart(req); diff --git a/yudao-module-farm/src/main/resources/mapper/deviceinfo/DeviceInfoMapper.xml b/yudao-module-farm/src/main/resources/mapper/deviceinfo/DeviceInfoMapper.xml index 1d445389..b30b12d4 100644 --- a/yudao-module-farm/src/main/resources/mapper/deviceinfo/DeviceInfoMapper.xml +++ b/yudao-module-farm/src/main/resources/mapper/deviceinfo/DeviceInfoMapper.xml @@ -46,5 +46,24 @@ + + + \ No newline at end of file