From dbab7c35225c3167d37384828c52c883b729ec1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=BE=E5=AF=8C=E6=96=8C?= Date: Wed, 15 Oct 2025 20:17:55 +0800 Subject: [PATCH] =?UTF-8?q?fix=20(farm):=20=E6=88=B7=E4=B8=BB=E5=88=97?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 --- .../controller/admin/home/HomeController.java | 98 +------------------ .../controller/admin/home/vo/HomeInfo.java | 7 +- .../admin/home/vo/QrDetailsRespVO.java | 22 ++--- .../baseinfo/PlotInfoController.java | 12 +-- .../baseinfo/vo/PlotInfoRespVO.java | 19 +++- .../baseinfo/vo/PlotInfoSaveReqVO.java | 11 ++- .../baseinfo/vo/PlotLesseeDetailsRespVO.java | 34 +++++++ .../baseinfo/vo/PlotLesseeInfoRespVO.java | 66 +++++++++++++ .../baseinfo/vo/PlotLesseeSaveReqVO.java | 33 +++++++ .../dal/dataobject/baseinfo/BaseInfoDO.java | 2 + .../dal/dataobject/plotinfo/PlotInfoDO.java | 9 ++ .../dal/dataobject/plotinfo/PlotLesseeDO.java | 39 ++++++++ .../dal/mysql/plotinfo/PlotLesseeMapper.java | 17 ++++ .../module/farm/enums/CommonConstants.java | 4 + .../service/baseinfo/BaseInfoServiceImpl.java | 7 +- .../service/deviceinfo/DeviceInfoService.java | 1 + .../deviceinfo/DeviceInfoServiceImpl.java | 21 +++- .../module/farm/service/home/HomeService.java | 7 ++ .../farm/service/home/HomeServiceImpl.java | 67 ++++++++++++- .../ModelManagementService.java | 7 ++ .../ModelManagementServiceImpl.java | 6 ++ .../service/plotinfo/PlotInfoService.java | 16 +++ .../service/plotinfo/PlotInfoServiceImpl.java | 90 +++++++++++++++-- .../service/plotinfo/PlotLesseeService.java | 9 ++ .../plotinfo/PlotLesseeServiceImpl.java | 19 ++++ .../productionplan/ProductionPlanService.java | 1 + .../ProductionPlanServiceImpl.java | 15 +++ 27 files changed, 493 insertions(+), 146 deletions(-) create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeDetailsRespVO.java create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeInfoRespVO.java create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeSaveReqVO.java create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/plotinfo/PlotLesseeDO.java create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/plotinfo/PlotLesseeMapper.java create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotLesseeService.java create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotLesseeServiceImpl.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 8808af07..957aa8c8 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 @@ -56,107 +56,13 @@ public class HomeController { return success(res); } - -// @Operation(summary = "农场首页-天气信息-获取天气信息") -// @GetMapping("/weather/{city}") -// public CommonResult getBaseNameList(@PathVariable("city") String city) { -// -// return success("天气信息!"); -// } - @PermitAll @Operation(summary = "农场首页-扫描二维码") @GetMapping("/scan-qr") @Parameter(name = "baseId", description = "基地ID") public CommonResult scanQrCodes(@RequestParam("baseId") String baseId) { - // TODO: 2025/10/11 待实现 - QrDetailsRespVO mockData = new QrDetailsRespVO(); - - // 设置基地基本信息 - mockData.setBaseName("阳光农业示范基地"); - mockData.setBaseManagerName("张伟"); - mockData.setBaseArea(500); - mockData.setPlotCount(3); - - // 创建地块列表 - List plotInfoList = new ArrayList<>(); - - // 第一个地块 - QrDetailsRespVO.PlotInfo plot1 = new QrDetailsRespVO.PlotInfo(); - plot1.setPlotName("蔬菜种植区A"); - plot1.setPlotManagerName("李丽"); - plot1.setPlotArea(150); - - List deviceInfos1 = new ArrayList<>(); - QrDetailsRespVO.DeviceInfo device1 = new QrDetailsRespVO.DeviceInfo(); - device1.setDeviceUniqueId("SENSOR-001-XYZ-2024"); - device1.setDeviceTypeName("土壤湿度传感器"); - device1.setDeviceStateName(1); - deviceInfos1.add(device1); - - QrDetailsRespVO.DeviceInfo device2 = new QrDetailsRespVO.DeviceInfo(); - device2.setDeviceUniqueId("CAM-002-ABC-2024"); - device2.setDeviceTypeName("高清监控摄像头"); - device2.setDeviceStateName(1); - deviceInfos1.add(device2); - - plot1.setDeviceInfos(deviceInfos1); - plotInfoList.add(plot1); - - // 第二个地块 - QrDetailsRespVO.PlotInfo plot2 = new QrDetailsRespVO.PlotInfo(); - plot2.setPlotName("水果种植区B"); - plot2.setPlotManagerName("王强"); - plot2.setPlotArea(200); - - List deviceInfos2 = new ArrayList<>(); - QrDetailsRespVO.DeviceInfo device3 = new QrDetailsRespVO.DeviceInfo(); - device3.setDeviceUniqueId("SENSOR-003-DEF-2024"); - device3.setDeviceTypeName("温湿度传感器"); - device3.setDeviceStateName(2); - deviceInfos2.add(device3); - - QrDetailsRespVO.DeviceInfo device4 = new QrDetailsRespVO.DeviceInfo(); - device4.setDeviceUniqueId("VALVE-004-GHI-2024"); - device4.setDeviceTypeName("智能灌溉阀门"); - device4.setDeviceStateName(4); - deviceInfos2.add(device4); - - plot2.setDeviceInfos(deviceInfos2); - plotInfoList.add(plot2); - - // 第三个地块 - QrDetailsRespVO.PlotInfo plot3 = new QrDetailsRespVO.PlotInfo(); - plot3.setPlotName("粮食作物区C"); - plot3.setPlotManagerName("赵敏"); - plot3.setPlotArea(150); - - List deviceInfos3 = new ArrayList<>(); - QrDetailsRespVO.DeviceInfo device5 = new QrDetailsRespVO.DeviceInfo(); - device5.setDeviceUniqueId("SENSOR-005-JKL-2024"); - device5.setDeviceTypeName("光照强度传感器"); - device5.setDeviceStateName(3); - deviceInfos3.add(device5); - - QrDetailsRespVO.DeviceInfo device6 = new QrDetailsRespVO.DeviceInfo(); - device6.setDeviceUniqueId("WEATHER-006-MNO-2024"); - device6.setDeviceTypeName("微型气象站"); - device6.setDeviceStateName(1); - deviceInfos3.add(device6); - - QrDetailsRespVO.DeviceInfo device7 = new QrDetailsRespVO.DeviceInfo(); - device7.setDeviceUniqueId("CAM-007-PQR-2024"); - device7.setDeviceTypeName("全景监控摄像头"); - device7.setDeviceStateName(0); - deviceInfos3.add(device7); - - plot3.setDeviceInfos(deviceInfos3); - plotInfoList.add(plot3); - - // 设置地块列表到基地 - mockData.setPlotInfo(plotInfoList); - - return success(mockData); + QrDetailsRespVO res = homeService.scanQrCodes(baseId); + return success(res); } } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/home/vo/HomeInfo.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/home/vo/HomeInfo.java index 24020d05..3b94c423 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/home/vo/HomeInfo.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/home/vo/HomeInfo.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.farm.controller.admin.home.vo; +import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo.PlotLesseeDetailsRespVO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; @@ -130,6 +131,8 @@ public class HomeInfo { private PlotOrCropInfo plotOrCropInfo; @Schema(description = "基地弹框信息") private List plotPopupFrames; + @Schema(description = "户主流转信息") + private List lesseeList; } @@ -149,9 +152,9 @@ public class HomeInfo { private String plotName; @Schema(description = "种植状态 (1: 在种; 2: 未种;)") private String growFlag; - @Schema(description = "种植面积") + @Schema(description = "种植面积") // 2025/10/15 种植面积 修改为 地块面积 , 字段名为修改!! 只是修改了取值!!! private Double growArea; - @Schema(description = "在种作物数量") + @Schema(description = "在种作物数量") // 2025/10/15 在种作物数量 修改为 物种数量 , 字段名未修改!! 只是修改了取值!!! private Integer beingCrop; @Schema(description = "生产计划任务数量") private Integer taskCount; diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/home/vo/QrDetailsRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/home/vo/QrDetailsRespVO.java index 3e68195d..d1ee7a33 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/home/vo/QrDetailsRespVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/home/vo/QrDetailsRespVO.java @@ -1,6 +1,9 @@ package cn.iocoder.yudao.module.farm.controller.admin.home.vo; import cn.iocoder.yudao.module.farm.controller.admin.deviceinfo.vo.v2.DeviceInfoDetailV2RespVO; +import cn.iocoder.yudao.module.farm.controller.admin.digitalcockpit.vo.DeviceMonitorDataRespVO; +import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo.PlotLesseeDetailsRespVO; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; @@ -41,23 +44,10 @@ public class QrDetailsRespVO { @Schema(description = "地块面积") private Integer plotArea; @Schema(description = "地块绑定设备信息列表") - private List deviceInfos; + private List deviceInfos; + @Schema(description = "地块绑定设备信息列表") + private List lesseeInfos; } - @Data - @AllArgsConstructor - @NoArgsConstructor - public static class DeviceInfo { - @Schema(description = "设备全局唯一标识(设备厂商提供)") - private String deviceUniqueId; - @Schema(description = "设备类型 (设备类型-名称)") - private String deviceTypeName; - @Schema(description = "设备状态:0-未激活,1-在线,2-离线,3-维护中,4-故障") - private Integer deviceStateName; - @Schema(description = "土壤墒情") - private DeviceInfoDetailV2RespVO.SoilInfo soilInfo; - @Schema(description = "水肥机") - private DeviceInfoDetailV2RespVO.WfInfo wfInfo; - } } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/PlotInfoController.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/PlotInfoController.java index d6397b32..e13cc5bb 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/PlotInfoController.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/PlotInfoController.java @@ -1,8 +1,6 @@ package cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo; -import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo.PlotInfoPageReqVO; -import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo.PlotInfoRespVO; -import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo.PlotInfoSaveReqVO; +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 org.springframework.web.bind.annotation.*; import jakarta.validation.Valid; @@ -75,10 +73,10 @@ public class PlotInfoController { @GetMapping("/get") @Operation(summary = "获得地块") - @Parameter(name = "id", description = "编号", required = true, example = "1024") - public CommonResult getPlotInfo(@RequestParam("id") String id) { - PlotInfoDO plotInfo = plotInfoService.getPlotInfo(id); - return success(BeanUtils.toBean(plotInfo, PlotInfoRespVO.class)); + @Parameter(name = "id", description = "编号", required = true) + public CommonResult getPlotInfo(@RequestParam("id") String id) { + PlotLesseeInfoRespVO plotInfo = plotInfoService.getPlotLesseeInfo(id); + return success(plotInfo); } @GetMapping("/page") diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotInfoRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotInfoRespVO.java index 2debccf2..caabb200 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotInfoRespVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotInfoRespVO.java @@ -13,19 +13,20 @@ import cn.idev.excel.annotation.*; @ExcelIgnoreUnannotated public class PlotInfoRespVO { - @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "11262") + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("id") private String id; - @Schema(description = "所属基地ID", example = "1431") + @Schema(description = "所属基地ID") @ExcelProperty("所属基地ID") private String baseId; private String baseName; - @Schema(description = "地块ID", example = "4027") + + @Schema(description = "地块ID") @ExcelProperty("地块ID") private String plotId; - @Schema(description = "地块名称", example = "王五") + @Schema(description = "地块名称") @ExcelProperty("地块名称") private String plotName; @@ -41,14 +42,22 @@ public class PlotInfoRespVO { @ExcelProperty("地块经纬度 (json字符串保存)") private String point; - @Schema(description = "技术员ID", example = "653") + @Schema(description = "技术员ID") @ExcelProperty("技术员ID") private String employeeId; @Schema(description = "创建时间") @ExcelProperty("创建时间") + private LocalDateTime createTime; @Schema(description = "租户id") private String tenantId; + + @Schema(description = "种植类型") private String type; + + @Schema(description = " 租赁状态 (1: 已租; 0: 未租;)") + private Integer plotLeaseStatus; + private String plotLeaseStatusName; + } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotInfoSaveReqVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotInfoSaveReqVO.java index ea1fd96e..3a5702ef 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotInfoSaveReqVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotInfoSaveReqVO.java @@ -12,7 +12,7 @@ public class PlotInfoSaveReqVO { @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "11262") private String id; - @Schema(description = "所属基地ID", example = "1431") + @Schema(description = "基地ID", example = "1431") private String baseId; @Schema(description = "地块ID", example = "4027") @@ -32,8 +32,17 @@ public class PlotInfoSaveReqVO { @Schema(description = "技术员ID", example = "653") private String employeeId; + @Schema(description = "租户id") private String tenantId; + @Schema(description = "种植类型") private String type; + + @Schema(description = " 租赁状态 (1: 已租; 0: 未租;)") + private Integer plotLeaseStatus; + + @Schema(description = "租赁人信息") + private PlotLesseeSaveReqVO plotLesseeSaveReqVO; + } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeDetailsRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeDetailsRespVO.java new file mode 100644 index 00000000..95085c8f --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeDetailsRespVO.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @description: TODO + * @author: binda + * @date: 2025/10/15 14:05 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PlotLesseeDetailsRespVO { + @Schema(description = "ID") + private String id; + @Schema(description = "姓名") + private String leaseName; + @Schema(description = "身份证号码") + private String leaseIdCard; + @Schema(description = "手机号码") + private String leasePhone; + @Schema(description = "租赁开始日期") + @JsonFormat(pattern = "yyyy-MM-dd") + private String leaseStartDate; + @Schema(description = "租赁接口日期") + @JsonFormat(pattern = "yyyy-MM-dd") + private String leaseEndDate; + @Schema(description = "租赁状态 (1: 当前租赁人; 2: 历史租赁人)") + private String leaseStatus; +} diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeInfoRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeInfoRespVO.java new file mode 100644 index 00000000..2daf5d2a --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeInfoRespVO.java @@ -0,0 +1,66 @@ +package cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo; + +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 地块") +@Data +@ExcelIgnoreUnannotated +public class PlotLesseeInfoRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("id") + private String id; + + @Schema(description = "所属基地ID") + @ExcelProperty("所属基地ID") + private String baseId; + private String baseName; + + @Schema(description = "地块ID") + @ExcelProperty("地块ID") + private String plotId; + + @Schema(description = "地块名称") + @ExcelProperty("地块名称") + private String plotName; + + @Schema(description = "地块面积") + @ExcelProperty("地块面积") + private BigDecimal plotArea; + + @Schema(description = "地块颜色") + @ExcelProperty("地块颜色") + private String plotColor; + + @Schema(description = "地块经纬度 (json字符串保存)") + @ExcelProperty("地块经纬度 (json字符串保存)") + private String point; + + @Schema(description = "技术员ID") + @ExcelProperty("技术员ID") + private String employeeId; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + + private LocalDateTime createTime; + @Schema(description = "租户id") + private String tenantId; + + @Schema(description = "种植类型") + private String type; + + @Schema(description = " 租赁状态 (1: 已租; 0: 未租;)") + private Integer plotLeaseStatus; + private String plotLeaseStatusName; + + @Schema(description = "租赁人信息") + private PlotLesseeDetailsRespVO plotLesseeDetailsRespVO; + +} \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeSaveReqVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeSaveReqVO.java new file mode 100644 index 00000000..e6fac64d --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/baseinfo/vo/PlotLesseeSaveReqVO.java @@ -0,0 +1,33 @@ +package cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @description: 租赁人信息 + * @author: binda + * @date: 2025/10/15 11:23 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PlotLesseeSaveReqVO { + + @Schema(description = "ID") + private String id; + @Schema(description = "姓名") + private String leaseName; + @Schema(description = "身份证号码") + private String leaseIdCard; + @Schema(description = "手机号码") + private String leasePhone; + @Schema(description = "租赁开始日期") + private String leaseStartDate; + @Schema(description = "租赁接口日期") + private String leaseEndDate; + @Schema(description = "租赁状态 (1: 当前租赁人; 2: 历史租赁人)") + private String leaseStatus; + +} diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/baseinfo/BaseInfoDO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/baseinfo/BaseInfoDO.java index 046b3b48..a9055156 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/baseinfo/BaseInfoDO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/baseinfo/BaseInfoDO.java @@ -36,6 +36,8 @@ public class BaseInfoDO extends BaseDO { * 用户id用,隔开 */ private String manager; + @TableField(exist = false) + private String managerName; /** * 面积 */ diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/plotinfo/PlotInfoDO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/plotinfo/PlotInfoDO.java index 4f5f3615..1eded488 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/plotinfo/PlotInfoDO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/plotinfo/PlotInfoDO.java @@ -58,8 +58,17 @@ public class PlotInfoDO extends BaseDO { * 技术员ID */ private String employeeId; + @TableField(exist = false) + private String employeeName; private String tenantId; + /** + * 种植类型 + */ private String type; + /** + * 租赁状态 (1: 已租; 0: 未租;) + */ + private Integer plotLeaseStatus; } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/plotinfo/PlotLesseeDO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/plotinfo/PlotLesseeDO.java new file mode 100644 index 00000000..73174f19 --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/plotinfo/PlotLesseeDO.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.module.farm.dal.dataobject.plotinfo; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +import java.time.LocalDate; + +/** + * @description: TODO + * @author: binda + * @date: 2025/10/15 14:00 + */ +@TableName("farm_plot_lessee") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PlotLesseeDO extends BaseDO { + + @TableId(type = IdType.INPUT) + private String id; + private String leaseName; + private String leaseIdCard; + private String leasePhone; + private LocalDate leaseStartDate; + private LocalDate leaseEndDate; + private Integer leaseStatus; + + private String baseId; + private String baseName; + private String plotId; + private String plotName; + private String tenantId; +} diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/plotinfo/PlotLesseeMapper.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/plotinfo/PlotLesseeMapper.java new file mode 100644 index 00000000..00772a94 --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/plotinfo/PlotLesseeMapper.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.farm.dal.mysql.plotinfo; + +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.farm.dal.dataobject.plotinfo.PlotLesseeDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @description: TODO + * @author: binda + * @date: 2025/10/15 13:59 + */ +@Mapper +public interface PlotLesseeMapper extends BaseMapperX { + + + +} diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/enums/CommonConstants.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/enums/CommonConstants.java index d8cbc507..686d9bf1 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/enums/CommonConstants.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/enums/CommonConstants.java @@ -48,6 +48,7 @@ public class CommonConstants { public static Map BINDING_STATE_MAP = new HashMap<>(); public static Map NEWS_TYPE_MAP = new HashMap<>(); public static Map ONLINE_MAP = new HashMap<>(); + public static Map LEASE_STATUS_MAP = new HashMap<>(); static { PLAN_MAP.put(PLAN_STATUS_1, "未开始"); @@ -82,6 +83,9 @@ public class CommonConstants { ONLINE_MAP.put("online", "在线"); ONLINE_MAP.put("offline", "离线"); + + LEASE_STATUS_MAP.put(1, "已租"); + LEASE_STATUS_MAP.put(0, "未租"); } // 模型类型 (1:模型模板; 2:引用案例) diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/baseinfo/BaseInfoServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/baseinfo/BaseInfoServiceImpl.java index f84a405b..76a1428c 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/baseinfo/BaseInfoServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/baseinfo/BaseInfoServiceImpl.java @@ -164,7 +164,12 @@ public class BaseInfoServiceImpl implements BaseInfoService { @Override public BaseInfoDO getBaseInfo(String id) { - return baseInfoMapper.selectById(id); + List personnelList = personnelManagementMapper.selectList(); + Map employeeMap = personnelList.stream().collect(Collectors.toMap(PersonnelManagementDO::getId, PersonnelManagementDO::getName, (v1, v2) -> v1)); + BaseInfoDO baseInfoDO = baseInfoMapper.selectById(id); + baseInfoDO.setManagerName(employeeMap.get(baseInfoDO.getManager())); + + return baseInfoDO; } @Override 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 058d4274..35446543 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 @@ -137,5 +137,6 @@ public interface DeviceInfoService { DeviceInfoRespVO getDeviceInfoByDp(String baseId); List deviceList(); + List deviceList(String plotId); } \ 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 d23278e0..76182079 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 @@ -363,13 +363,16 @@ public class DeviceInfoServiceImpl implements DeviceInfoService { } @Override - public List deviceList() { - Long tenantId = getLoginUser().getTenantId(); + public List deviceList(String plotId) { LambdaQueryWrapperX wrapperX = new LambdaQueryWrapperX<>(); - wrapperX.eq(DeviceInfoDO::getTenantId, tenantId); + wrapperX.eq(DeviceInfoDO::getPlotId, plotId); wrapperX.eq(DeviceInfoDO::getDeleted, CommonConstants.NO_CODE); List doList = deviceInfoMapper.selectList(wrapperX); + return execute(doList); + } + + private List execute(List doList) { Map> groupedByDeviceType = doList.stream().collect(Collectors.groupingBy(DeviceInfoDO::getDeviceType)); Map typeCodeMap = deviceClassifyService.getTypeCodeMap(); @@ -389,6 +392,18 @@ public class DeviceInfoServiceImpl implements DeviceInfoService { return res; } + @Override + public List deviceList() { + Long tenantId = getLoginUser().getTenantId(); + LambdaQueryWrapperX wrapperX = new LambdaQueryWrapperX<>(); + wrapperX.eq(DeviceInfoDO::getTenantId, tenantId); + wrapperX.eq(DeviceInfoDO::getDeleted, CommonConstants.NO_CODE); + + List doList = deviceInfoMapper.selectList(wrapperX); + + return execute(doList); + } + private List getRealTimeList(String typeCode, List doList) { List rows = new ArrayList<>(); 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 dc362d91..24b11150 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 @@ -3,6 +3,7 @@ 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.OutlinedInfoVO; +import cn.iocoder.yudao.module.farm.controller.admin.home.vo.QrDetailsRespVO; import java.util.List; import java.util.Map; @@ -24,4 +25,10 @@ public interface HomeService { List getBaseNameList(); + /** + * 二维码信息 + * @param baseId + * @return + */ + QrDetailsRespVO scanQrCodes(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 92cafaac..95e06182 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 @@ -1,15 +1,20 @@ package cn.iocoder.yudao.module.farm.service.home; import cn.iocoder.yudao.framework.security.core.LoginUser; +import cn.iocoder.yudao.module.farm.controller.admin.digitalcockpit.vo.DeviceMonitorDataRespVO; 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.QrDetailsRespVO; +import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo.PlotLesseeDetailsRespVO; import cn.iocoder.yudao.module.farm.dal.dataobject.baseinfo.BaseInfoDO; import cn.iocoder.yudao.module.farm.dal.dataobject.plotinfo.PlotInfoDO; import cn.iocoder.yudao.module.farm.dal.dataobject.productionplan.ProductionPlanDO; import cn.iocoder.yudao.module.farm.dal.dataobject.specieslibrary.SpeciesLibraryDO; +import cn.iocoder.yudao.module.farm.manager.equipmentproducer.service.DeviceService; import cn.iocoder.yudao.module.farm.service.baseinfo.BaseInfoService; import cn.iocoder.yudao.module.farm.service.cropFarmingCenter.CropFarmingCenterService; +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.modelmanagement.ModelManagementService; import cn.iocoder.yudao.module.farm.service.personnelmanagement.PersonnelManagementService; @@ -46,8 +51,9 @@ public class HomeServiceImpl implements HomeService { private final ModelManagementService modelManagementService; private final SpeciesLibraryService speciesLibraryService; private final FarmingRecordService farmingRecordService; + private final DeviceInfoService deviceService; - public HomeServiceImpl(BaseInfoService baseInfoService, PlotInfoService plotInfoService, ProductionPlanService productionPlanService, CropFarmingCenterService cropFarmingCenterService, PersonnelManagementService personnelManagementService, ModelManagementService modelManagementService, SpeciesLibraryService speciesLibraryService, FarmingRecordService farmingRecordService) { + public HomeServiceImpl(BaseInfoService baseInfoService, PlotInfoService plotInfoService, ProductionPlanService productionPlanService, CropFarmingCenterService cropFarmingCenterService, PersonnelManagementService personnelManagementService, ModelManagementService modelManagementService, SpeciesLibraryService speciesLibraryService, FarmingRecordService farmingRecordService, DeviceInfoService deviceService) { this.baseInfoService = baseInfoService; this.plotInfoService = plotInfoService; this.productionPlanService = productionPlanService; @@ -56,6 +62,7 @@ public class HomeServiceImpl implements HomeService { this.modelManagementService = modelManagementService; this.speciesLibraryService = speciesLibraryService; this.farmingRecordService = farmingRecordService; + this.deviceService = deviceService; } @Override @@ -100,7 +107,7 @@ public class HomeServiceImpl implements HomeService { Integer taskCount = productionPlanService.getTodayTaskCount(baseId); Integer warningCount = 0; // TODO: 2025/9/1 告警数量 - Integer iotCount = 0; // TODO: 2025/9/1 物联设备数量 + Integer iotCount = deviceService.countDevice(baseId, getLoginUser().getTenantId().toString()); return new StatisticalInfo(taskCount,warningCount,iotCount); } @@ -147,6 +154,8 @@ public class HomeServiceImpl implements HomeService { PlotOrCropInfo plotOrCropInfo = this.getPlotOrCropInfoList(e,"地块详情",employeeName); // 地块浮框信息 List plotPopupFrame = this.getPlotPopupFrame(e.getId(), employeeNameMap); + // 户主流转信息 + List lesseeList = plotInfoService.getPlotLesseeList(e.getPlotId()); PlotInfo t = new PlotInfo(); t.setBaseId(e.getBaseId()); @@ -159,6 +168,7 @@ public class HomeServiceImpl implements HomeService { t.setPlotColor(e.getPlotColor()); t.setPlotOrCropInfo(plotOrCropInfo); t.setPlotPopupFrames(plotPopupFrame); + t.setLesseeList(lesseeList); targetList.add(t); } return targetList; @@ -171,9 +181,13 @@ public class HomeServiceImpl implements HomeService { } String growFlag = predictedArea == 0.0 ? GROW_FLAG_2 : GROW_FLAG_1; // 在种作物数量 - int growingCropCount = productionPlanService.getGrowingCropCount(e.getBaseId(), e.getPlotId()); + int growingCropCount = productionPlanService.getNotGrowingCropCount(e.getBaseId(), e.getPlotId()); // 生产计划数量 int taskCount = productionPlanService.getPlanCount(e.getPlotId()); + // 设备数量 + Integer iotCount = deviceService.countDevice(e.getBaseId() , getLoginUser().getTenantId().toString()); + // 物种数量 +// int speciesNum = modelManagementService.getSpeciesNum(getLoginUser().getTenantId().toString()); PlotOrCropInfo t = new PlotOrCropInfo(); t.setLabel(label); @@ -182,10 +196,10 @@ public class HomeServiceImpl implements HomeService { t.setPlotId(e.getPlotId()); t.setPlotName(e.getPlotName()); t.setGrowFlag(growFlag); - t.setGrowArea(predictedArea); + t.setGrowArea(e.getPlotArea().doubleValue()); t.setBeingCrop(growingCropCount); t.setTaskCount(taskCount); - t.setLotCount(0); // TODO: 2025/8/31 物联设备数量 + t.setLotCount(iotCount); t.setManager(employeeName); t.setQrCodeUrl(e.getBaseId()); t.setPlanInfos(this.getPlanInfoList(e.getBaseId(), e.getPlotId(), employeeName)); @@ -247,6 +261,49 @@ public class HomeServiceImpl implements HomeService { return baseNameList.stream().map(e -> new BaseNameVO(e.getId(), e.getName())).collect(Collectors.toList()); } + @Override + public QrDetailsRespVO scanQrCodes(String baseId) { + 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()); + + 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) { + List res = plotInfoService.getPlotLesseeList(plotId); + return res; + + } + + private List getDs(String plotId) { + List res = deviceService.deviceList(plotId); + return res; + } + private BaseOverviewInfo getCompanyInfo() { LoginUser user = getLoginUser(); int baseCount = baseInfoService.getBaseCount(user.getTenantId()); // 基地数量 diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementService.java index 7c657a66..867eb013 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementService.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementService.java @@ -106,4 +106,11 @@ public interface ModelManagementService { int getFarmRecordCount(String speciesModelId); ModelManagementDO getTopQuoteCount(); + + /** + * 获取物种信息 + * @param toString + * @return + */ + int getSpeciesNum(String toString); } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementServiceImpl.java index 009b1d63..b3a8be27 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/modelmanagement/ModelManagementServiceImpl.java @@ -617,6 +617,12 @@ public class ModelManagementServiceImpl implements ModelManagementService { return mostQuoted.orElse(null); } + @Override + public int getSpeciesNum(String toString) { + + return 0; + } + private List getModelCycleListByModelId(String modelId) { LambdaQueryWrapperX wrapperXx = new LambdaQueryWrapperX<>(); wrapperXx.eq(ModelCycleDO::getModelId, modelId); 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 1ef9042e..9455c5d5 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 @@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.farm.service.plotinfo; import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo.PlotInfoPageReqVO; import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo.PlotInfoSaveReqVO; +import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo.PlotLesseeDetailsRespVO; +import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo.PlotLesseeInfoRespVO; import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo.wx.RegularPlotInfoRespVO; import cn.iocoder.yudao.module.farm.dal.dataobject.plotinfo.PlotInfoDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -50,6 +52,13 @@ public interface PlotInfoService { */ PlotInfoDO getPlotInfo(String id); + /** + * 地块&租户信息 + * @param id + * @return + */ + PlotLesseeInfoRespVO getPlotLesseeInfo(String id); + /** * 通过基地ID获取地块集合 * @param baseId @@ -104,4 +113,11 @@ public interface PlotInfoService { int countPlot(String baseId); Long countPlotByTenantId(String tenantId); + + /** + * 获取地块下 有多户主信息 + * @param plotId + * @return + */ + List getPlotLesseeList(String plotId); } \ 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 811e22c3..8c258d8b 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,26 +5,31 @@ 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.managementcenter.baseinfo.vo.PlotInfoPageReqVO; -import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.baseinfo.vo.PlotInfoSaveReqVO; +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; import cn.iocoder.yudao.module.farm.dal.dataobject.plotinfo.PlotInfoDO; +import cn.iocoder.yudao.module.farm.dal.dataobject.plotinfo.PlotLesseeDO; import cn.iocoder.yudao.module.farm.dal.mysql.baseinfo.BaseInfoMapper; import cn.iocoder.yudao.module.farm.dal.mysql.plotinfo.PlotInfoMapper; +import cn.iocoder.yudao.module.farm.dal.mysql.plotinfo.PlotLesseeMapper; import cn.iocoder.yudao.module.farm.enums.CommonConstants; +import cn.iocoder.yudao.module.farm.service.personnelmanagement.PersonnelManagementService; import cn.iocoder.yudao.module.farm.service.productionplan.ProductionPlanService; import cn.iocoder.yudao.module.farm.utils.StrHelperUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import jakarta.annotation.Resource; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import java.math.BigDecimal; import java.util.List; +import java.util.Map; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUser; +import static cn.iocoder.yudao.module.farm.enums.CommonConstants.LEASE_STATUS_MAP; import static cn.iocoder.yudao.module.farm.enums.ErrorCodeConstants.*; /** @@ -36,13 +41,22 @@ import static cn.iocoder.yudao.module.farm.enums.ErrorCodeConstants.*; @Validated public class PlotInfoServiceImpl implements PlotInfoService { - @Resource - private BaseInfoMapper baseInfoMapper; - @Resource - private PlotInfoMapper plotInfoMapper; - @Resource - private ProductionPlanService productionPlanService; + private final BaseInfoMapper baseInfoMapper; + private final PlotInfoMapper plotInfoMapper; + private final PlotLesseeMapper plotLesseeMapper; + private final ProductionPlanService productionPlanService; + private final PersonnelManagementService personnelManagementService; + + public PlotInfoServiceImpl(BaseInfoMapper baseInfoMapper, PlotInfoMapper plotInfoMapper, PlotLesseeMapper plotLesseeMapper, ProductionPlanService productionPlanService, PersonnelManagementService personnelManagementService) { + this.baseInfoMapper = baseInfoMapper; + this.plotInfoMapper = plotInfoMapper; + this.plotLesseeMapper = plotLesseeMapper; + this.productionPlanService = productionPlanService; + this.personnelManagementService = personnelManagementService; + } + + @Transactional @Override public String createPlotInfo(PlotInfoSaveReqVO createReqVO) { LoginUser user = getLoginUser(); @@ -55,10 +69,17 @@ public class PlotInfoServiceImpl implements PlotInfoService { plotInfo.setTenantId(String.valueOf(user.getTenantId())); plotInfoMapper.insert(plotInfo); + PlotLesseeSaveReqVO plotLesseeSaveReqVO = createReqVO.getPlotLesseeSaveReqVO(); + PlotLesseeDO plotLesseeDO = BeanUtils.toBean(plotLesseeSaveReqVO, PlotLesseeDO.class); + plotLesseeDO.setTenantId(String.valueOf(user.getTenantId())); + plotLesseeDO.setLeaseStatus(CommonConstants.YES_CODE); + plotLesseeMapper.insert(plotLesseeDO); + // 返回 return plotInfo.getId(); } + @Transactional @Override public void updatePlotInfo(PlotInfoSaveReqVO updateReqVO) { // 校验存在 @@ -68,6 +89,17 @@ public class PlotInfoServiceImpl implements PlotInfoService { // 更新 PlotInfoDO updateObj = BeanUtils.toBean(updateReqVO, PlotInfoDO.class); plotInfoMapper.updateById(updateObj); + + // 重置所有租赁状态为: 未租 + List doList = plotLesseeMapper.selectList("plot_id", updateReqVO.getId()); + doList.forEach(e -> e.setLeaseStatus(CommonConstants.NO_CODE)); + plotLesseeMapper.updateBatch(doList); + + // 指定当前的租户状态为: 已租 + PlotLesseeSaveReqVO plotLesseeSaveReqVO = updateReqVO.getPlotLesseeSaveReqVO(); + PlotLesseeDO plotLesseeDO = BeanUtils.toBean(plotLesseeSaveReqVO, PlotLesseeDO.class); + plotLesseeDO.setLeaseStatus(CommonConstants.YES_CODE); + plotLesseeMapper.updateById(plotLesseeDO); } @Override @@ -113,9 +145,36 @@ public class PlotInfoServiceImpl implements PlotInfoService { return plotInfoDO; } + @Override + public PlotLesseeInfoRespVO getPlotLesseeInfo(String id) { + LambdaQueryWrapperX x = new LambdaQueryWrapperX<>(); + x.eq(PlotLesseeDO::getTenantId, getLoginUser().getTenantId().toString()); + x.eq(PlotLesseeDO::getDeleted, CommonConstants.NO_CODE); + x.eq(PlotLesseeDO::getLeaseStatus, CommonConstants.YES_CODE); + x.eq(PlotLesseeDO::getPlotId, id); + PlotLesseeDO plotLesseeDO = plotLesseeMapper.selectOne(x); + + PlotLesseeDetailsRespVO subLesseeInfo = new PlotLesseeDetailsRespVO(); + if (ObjectUtils.isNotEmpty(plotLesseeDO)) { + subLesseeInfo = BeanUtils.toBean(plotLesseeDO, PlotLesseeDetailsRespVO.class); + } + + PlotInfoDO plotInfoDO = this.getPlotInfo(id); + PlotLesseeInfoRespVO plotLesseeDetailsRespVO = BeanUtils.toBean(plotInfoDO, PlotLesseeInfoRespVO.class); + plotLesseeDetailsRespVO.setPlotLesseeDetailsRespVO(subLesseeInfo); + plotLesseeDetailsRespVO.setPlotLeaseStatusName(LEASE_STATUS_MAP.get(plotLesseeDetailsRespVO.getPlotLeaseStatus())); + return plotLesseeDetailsRespVO; + } + @Override public List getPlotInfos(String baseId) { - return plotInfoMapper.selectList("base_id", baseId); + // 员工集合 + Map employeeNameMap = personnelManagementService.getEmployeeNameMap(); + + List list = plotInfoMapper.selectList("base_id", baseId); + list.forEach(e -> e.setEmployeeName(employeeNameMap.get(e.getEmployeeId()))); + + return list; } @Override @@ -216,4 +275,15 @@ public class PlotInfoServiceImpl implements PlotInfoService { wrapperX.eq(PlotInfoDO::getDeleted, CommonConstants.NO_CODE); return plotInfoMapper.selectCount(wrapperX); } + + @Override + public List getPlotLesseeList(String plotId) { + LambdaQueryWrapperX x = new LambdaQueryWrapperX<>(); + x.eq(PlotLesseeDO::getDeleted, CommonConstants.NO_CODE); + x.eq(PlotLesseeDO::getLeaseStatus, CommonConstants.NO_CODE); + x.eq(PlotLesseeDO::getPlotId, plotId); + List list = plotLesseeMapper.selectList(x); + + return BeanUtils.toBean(list, PlotLesseeDetailsRespVO.class); + } } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotLesseeService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotLesseeService.java new file mode 100644 index 00000000..da1b86c8 --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotLesseeService.java @@ -0,0 +1,9 @@ +package cn.iocoder.yudao.module.farm.service.plotinfo; + +/** + * @description: 租赁信息 + * @author: binda + * @data: 2025/10/15 13:57 + */ +public interface PlotLesseeService { +} diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotLesseeServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotLesseeServiceImpl.java new file mode 100644 index 00000000..be6ad01c --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/plotinfo/PlotLesseeServiceImpl.java @@ -0,0 +1,19 @@ +package cn.iocoder.yudao.module.farm.service.plotinfo; + +import cn.iocoder.yudao.module.farm.dal.mysql.plotinfo.PlotLesseeMapper; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +/** + * @description: 租赁信息 + * @author: binda + * @date: 2025/10/15 13:57 + */ +@Service +public class PlotLesseeServiceImpl implements PlotLesseeService { + + @Resource + private PlotLesseeMapper plotLesseeMaper; + + +} diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanService.java index fd7173da..e232ff6c 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanService.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanService.java @@ -129,6 +129,7 @@ public interface ProductionPlanService { */ int getGrowingCropCount(String baseId); int getGrowingCropCount(String baseId,String plotId); + int getNotGrowingCropCount(String baseId, String plotId); int getGrowingCropCountByTenantId(String tenantId); /** diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanServiceImpl.java index 2a3a29c2..dfd2adc5 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanServiceImpl.java @@ -264,6 +264,21 @@ public class ProductionPlanServiceImpl implements ProductionPlanService { .count(); } + @Override + public int getNotGrowingCropCount(String baseId, String plotId) { + QueryWrapper qw = new QueryWrapper<>(); + qw.eq("base_id", baseId); + qw.eq("plot_id", plotId); + List planList = productionPlanMapper.selectList(qw); + return (int) planList.stream() + .filter(Objects::nonNull) +// .filter(plan -> Objects.equals(plan.getPlanStatus(), PLAN_STATUS_2)) + .map(ProductionPlanDO::getPlantSpeciesCode) + .filter(Objects::nonNull) + .distinct() + .count(); + } + @Override public int getGrowingCropCountByTenantId(String tenantId) { QueryWrapper qw = new QueryWrapper<>();