From 36091b8368f3797666ec036fee714866dcab0c69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=BE=E5=AF=8C=E6=96=8C?= Date: Wed, 27 Aug 2025 17:26:00 +0800 Subject: [PATCH] =?UTF-8?q?feat=20(farm):=20=E5=9F=BA=E5=9C=B0=E8=A7=84?= =?UTF-8?q?=E5=88=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 首次进入加载所有的基地信息 --- .../admin/baseinfo/BaseInfoController.java | 12 +- .../admin/baseinfo/vo/BaseInfoRespVO.java | 127 ++++++++++++------ .../admin/baseinfo/vo/BaseOverviewRespVO.java | 32 +++++ .../admin/baseinfo/vo/TenantInfoRespVO.java | 41 ++++++ .../specieslibrary/SpeciesLibraryMapper.java | 2 + .../service/baseinfo/BaseInfoService.java | 10 +- .../service/baseinfo/BaseInfoServiceImpl.java | 76 ++++++++++- .../specieslibrary/SpeciesLibraryMapper.xml | 10 ++ 8 files changed, 256 insertions(+), 54 deletions(-) create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/baseinfo/vo/BaseOverviewRespVO.java create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/baseinfo/vo/TenantInfoRespVO.java diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/baseinfo/BaseInfoController.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/baseinfo/BaseInfoController.java index c80374ba..029f4c32 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/baseinfo/BaseInfoController.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/baseinfo/BaseInfoController.java @@ -1,9 +1,6 @@ package cn.iocoder.yudao.module.farm.controller.admin.baseinfo; -import cn.iocoder.yudao.module.farm.controller.admin.baseinfo.vo.BaseInfoPageReqVO; -import cn.iocoder.yudao.module.farm.controller.admin.baseinfo.vo.BaseInfoRespVO; -import cn.iocoder.yudao.module.farm.controller.admin.baseinfo.vo.BaseInfoSaveReqVO; -import cn.iocoder.yudao.module.farm.controller.admin.baseinfo.vo.BaseNameRespVO; +import cn.iocoder.yudao.module.farm.controller.admin.baseinfo.vo.*; import org.springframework.web.bind.annotation.*; import jakarta.validation.Valid; import jakarta.servlet.http.HttpServletResponse; @@ -92,6 +89,13 @@ public class BaseInfoController { return success(BeanUtils.toBean(pageResult, BaseInfoRespVO.class)); } + @GetMapping("/base-overview") + @Operation(summary = "租户所属基地列表") + public CommonResult getBaseOverviewInfo() { + TenantInfoRespVO res = baseInfoService.getBaseOverviewInfo(); + return success(res); + } + @GetMapping("/export-excel") @Operation(summary = "导出基地 Excel") @ApiAccessLog(operateType = EXPORT) diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/baseinfo/vo/BaseInfoRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/baseinfo/vo/BaseInfoRespVO.java index 1c13cf5b..95b7ef83 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/baseinfo/vo/BaseInfoRespVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/baseinfo/vo/BaseInfoRespVO.java @@ -1,44 +1,83 @@ -package cn.iocoder.yudao.module.farm.controller.admin.baseinfo.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; - -import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import cn.idev.excel.annotation.*; - -@Schema(description = "管理后台 - 基地 Response VO") -@Data -@ExcelIgnoreUnannotated -public class BaseInfoRespVO { - - @Schema(description = "基地id", requiredMode = Schema.RequiredMode.REQUIRED, example = "13189") - @ExcelProperty("基地id") - private String id; - - @Schema(description = "基地名称", example = "张三") - @ExcelProperty("基地名称") - private String name; - - @Schema(description = "用户id用,隔开") - @ExcelProperty("用户id用,隔开") - private String manager; - - @Schema(description = "面积") - @ExcelProperty("面积") - private BigDecimal area; - - @Schema(description = "json字符串保存") - @ExcelProperty("json字符串保存") - private String point; - - @Schema(description = "创建时间") - @ExcelProperty("创建时间") - private LocalDateTime createTime; - - @Schema(description = "租户编号", example = "27629") - @ExcelProperty("租户编号") - private String tenantId; - -} \ No newline at end of file +package cn.iocoder.yudao.module.farm.controller.admin.baseinfo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +import cn.idev.excel.annotation.*; + +@Schema(description = "管理后台 - 基地 Response VO") +@Data +@ExcelIgnoreUnannotated +public class BaseInfoRespVO { + + @Schema(description = "基地id", requiredMode = Schema.RequiredMode.REQUIRED, example = "13189") + @ExcelProperty("基地id") + private String id; + + @Schema(description = "基地名称", example = "张三") + @ExcelProperty("基地名称") + private String name; + + @Schema(description = "用户id用,隔开") + @ExcelProperty("用户id用,隔开") + private String manager; + + @Schema(description = "面积") + @ExcelProperty("面积") + private BigDecimal area; + + @Schema(description = "json字符串保存") + @ExcelProperty("json字符串保存") + private String point; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "租户编号", example = "1") + @ExcelProperty("租户编号") + private String tenantId; + + @Schema(description = "基地概述信息") + private BaseInfo baseOverview; + + @Schema(description = "地块概述信息") + private List plotOverviewList; + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class BaseInfo{ + @Schema(description = "基地id") + private String id; + @Schema(description = "基地名称") + private String name; + @Schema(description = "基地面积") + private BigDecimal areaCount; + @Schema(description = "在种作物数量") + private Integer cropCount; + @Schema(description = "在种地块数量") + private Integer plotCount; + @Schema(description = "在种地块占比") + private Integer plotRatio; + } + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class PlotInfo{ + @Schema(description = "地块ID") + private String plotId; + @Schema(description = "地块名称") + private String plotName; + @Schema(description = "地块面积") + private BigDecimal plotArea; + @Schema(description = "地块负责人") + private String plotManager; + } + +} diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/baseinfo/vo/BaseOverviewRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/baseinfo/vo/BaseOverviewRespVO.java new file mode 100644 index 00000000..a5932d9e --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/baseinfo/vo/BaseOverviewRespVO.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.module.farm.controller.admin.baseinfo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +/** + * @description: + * @author: binda + * @date: 2025/8/26 23:18 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class BaseOverviewRespVO { + + @Schema(description = "商户所属-基地数量") + private Integer baseCount; + + @Schema(description = "商户所属-在种作物数量") + private Integer cropCount; + + @Schema(description = "商户所属-基地总面积") + private BigDecimal areaCount; + + @Schema(description = "商户所属-员工数量") + private BigDecimal employeeCount; + +} diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/baseinfo/vo/TenantInfoRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/baseinfo/vo/TenantInfoRespVO.java new file mode 100644 index 00000000..df521a04 --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/baseinfo/vo/TenantInfoRespVO.java @@ -0,0 +1,41 @@ +package cn.iocoder.yudao.module.farm.controller.admin.baseinfo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.List; + +/** + * @description: 租户-基地信息 + * @author: binda + * @date: 2025/8/27 16:02 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class TenantInfoRespVO { + + @Schema(description = "租户概述信息") + private TenantInfo tenantInfo; + + @Schema(description = "基地信息集合") + private List baseList; + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class TenantInfo { + @Schema(description = "商户所属-基地总数") + private Integer baseCount; + @Schema(description = "商户所属-在种作物总数") + private Integer cropCount; + @Schema(description = "商户所属-基地总面积") + private BigDecimal areaCount; + @Schema(description = "商户所属-员工总数") + private Integer employeeCount; + } + +} diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/specieslibrary/SpeciesLibraryMapper.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/specieslibrary/SpeciesLibraryMapper.java index f2610795..80cec899 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/specieslibrary/SpeciesLibraryMapper.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/specieslibrary/SpeciesLibraryMapper.java @@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.module.farm.controller.admin.specieslibrary.vo.SpeciesLibraryPageReqVO; import cn.iocoder.yudao.module.farm.dal.dataobject.specieslibrary.SpeciesLibraryDO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; /** * 物种库维护 Mapper @@ -33,4 +34,5 @@ public interface SpeciesLibraryMapper extends BaseMapperX { .orderByDesc(SpeciesLibraryDO::getCreateTime)); } + int getSpeciesCount(@Param("tenantId") long tenantId,@Param("baseId") String baseId); } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/baseinfo/BaseInfoService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/baseinfo/BaseInfoService.java index c13e2fc6..8a0ac896 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/baseinfo/BaseInfoService.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/baseinfo/BaseInfoService.java @@ -1,9 +1,7 @@ package cn.iocoder.yudao.module.farm.service.baseinfo; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.farm.controller.admin.baseinfo.vo.BaseInfoPageReqVO; -import cn.iocoder.yudao.module.farm.controller.admin.baseinfo.vo.BaseInfoSaveReqVO; -import cn.iocoder.yudao.module.farm.controller.admin.baseinfo.vo.BaseNameRespVO; +import cn.iocoder.yudao.module.farm.controller.admin.baseinfo.vo.*; import cn.iocoder.yudao.module.farm.dal.dataobject.baseinfo.BaseInfoDO; import jakarta.validation.Valid; @@ -70,4 +68,10 @@ public interface BaseInfoService { List getBaseNameList(); List getList(@Valid BaseInfoPageReqVO pageReqVO); + + /** + * 租户与基地 + * @return + */ + TenantInfoRespVO getBaseOverviewInfo(); } \ No newline at end of file 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 85d7cd01..2735e736 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 @@ -4,18 +4,22 @@ import cn.hutool.core.util.IdUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.security.core.LoginUser; -import cn.iocoder.yudao.module.farm.controller.admin.baseinfo.vo.BaseInfoPageReqVO; -import cn.iocoder.yudao.module.farm.controller.admin.baseinfo.vo.BaseInfoSaveReqVO; -import cn.iocoder.yudao.module.farm.controller.admin.baseinfo.vo.BaseNameRespVO; +import cn.iocoder.yudao.module.farm.controller.admin.baseinfo.vo.*; import cn.iocoder.yudao.module.farm.dal.dataobject.baseinfo.BaseInfoDO; +import cn.iocoder.yudao.module.farm.dal.dataobject.personnelmanagement.PersonnelManagementDO; import cn.iocoder.yudao.module.farm.dal.dataobject.plotinfo.PlotInfoDO; import cn.iocoder.yudao.module.farm.dal.mysql.baseinfo.BaseInfoMapper; +import cn.iocoder.yudao.module.farm.dal.mysql.personnelmanagement.PersonnelManagementMapper; import cn.iocoder.yudao.module.farm.dal.mysql.plotinfo.PlotInfoMapper; +import cn.iocoder.yudao.module.farm.dal.mysql.productionplan.ProductionPlanMapper; +import cn.iocoder.yudao.module.farm.dal.mysql.specieslibrary.SpeciesLibraryMapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -38,6 +42,13 @@ public class BaseInfoServiceImpl implements BaseInfoService { private BaseInfoMapper baseInfoMapper; @Resource private PlotInfoMapper plotInfoMapper; + @Resource + private ProductionPlanMapper productionPlanMapper; + @Resource + private SpeciesLibraryMapper speciesLibraryMapper; + @Resource + private PersonnelManagementMapper personnelManagementMapper; + @Override public String createBaseInfo(BaseInfoSaveReqVO createReqVO) { @@ -132,4 +143,63 @@ public class BaseInfoServiceImpl implements BaseInfoService { return baseInfoMapper.selectList(qw); } + @Override + public TenantInfoRespVO getBaseOverviewInfo() { + long tenantId = getLoginUser().getTenantId(); + // 人员管理 + List personnels = personnelManagementMapper.selectList("tenant_id", tenantId); + int employeeCount = personnels.size(); + Map employeeMap = personnels.stream().collect(Collectors.toMap(PersonnelManagementDO::getId, PersonnelManagementDO::getName, (v1, v2) -> v1)); + // 租户 + TenantInfoRespVO.TenantInfo tenantInfo = this.getTenantInfo(tenantId, employeeCount); + // 基地 + List pageResult = this.getList(new BaseInfoPageReqVO()); + List baseList = BeanUtils.toBean(pageResult, BaseInfoRespVO.class); + this.packageBaseInfo(tenantId,baseList, employeeMap); + + return new TenantInfoRespVO(tenantInfo, baseList); + } + + private TenantInfoRespVO.TenantInfo getTenantInfo(long tenantId, Integer employeeCount) { + // 基地总数 + Integer baseCount = baseInfoMapper.getBaseCount(tenantId); + // 在种作物总数 + Integer cropCount = speciesLibraryMapper.getSpeciesCount(tenantId,""); + // 基地总面积 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("tenant_id", tenantId); + wrapper.select("SUM(area) as total_area"); + Object result = baseInfoMapper.selectObjs(wrapper).stream().findFirst().orElse(BigDecimal.ZERO); + BigDecimal areaCount = (BigDecimal) result; + + return new TenantInfoRespVO.TenantInfo(baseCount, cropCount, areaCount, employeeCount); + } + + private void packageBaseInfo(long tenantId,List respVOS, Map employeeMap) { + + for (BaseInfoRespVO obj : respVOS) { + String baseId = obj.getId(); + String baseName = obj.getName(); + BigDecimal baseArea = obj.getArea(); + + // 在种作物数量 + Integer cropCount = speciesLibraryMapper.getSpeciesCount(tenantId,baseId);; + // 在种地块数量 + Integer plotCount = 0; // todo + // 在种地块占比 + Integer plotRatio = 0; // todo + + obj.setBaseOverview(new BaseInfoRespVO.BaseInfo(baseId,baseName,baseArea,cropCount,plotCount,plotRatio)); + + // 地块集合 + List targetList = new ArrayList<>(); + List plotList = plotInfoMapper.selectList("base_id", baseId); + for (PlotInfoDO aDo : plotList) { + String plotManager = employeeMap.getOrDefault(aDo.getEmployeeId(), "系统"); + BaseInfoRespVO.PlotInfo target = new BaseInfoRespVO.PlotInfo(aDo.getPlotId(), aDo.getPlotName(), aDo.getPlotArea(), plotManager); + targetList.add(target); + } + obj.setPlotOverviewList(targetList); + } + } } \ No newline at end of file diff --git a/yudao-module-farm/src/main/resources/mapper/specieslibrary/SpeciesLibraryMapper.xml b/yudao-module-farm/src/main/resources/mapper/specieslibrary/SpeciesLibraryMapper.xml index a9be03d3..a65752f4 100644 --- a/yudao-module-farm/src/main/resources/mapper/specieslibrary/SpeciesLibraryMapper.xml +++ b/yudao-module-farm/src/main/resources/mapper/specieslibrary/SpeciesLibraryMapper.xml @@ -9,4 +9,14 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + \ No newline at end of file