Merge remote-tracking branch 'origin/main'

This commit is contained in:
顾君禹
2025-08-27 17:27:10 +08:00
8 changed files with 256 additions and 54 deletions

View File

@@ -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<TenantInfoRespVO> getBaseOverviewInfo() {
TenantInfoRespVO res = baseInfoService.getBaseOverviewInfo();
return success(res);
}
@GetMapping("/export-excel")
@Operation(summary = "导出基地 Excel")
@ApiAccessLog(operateType = EXPORT)

View File

@@ -4,8 +4,9 @@ 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 java.util.List;
import cn.idev.excel.annotation.*;
@Schema(description = "管理后台 - 基地 Response VO")
@@ -37,8 +38,46 @@ public class BaseInfoRespVO {
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "租户编号", example = "27629")
@Schema(description = "租户编号", example = "1")
@ExcelProperty("租户编号")
private String tenantId;
@Schema(description = "基地概述信息")
private BaseInfo baseOverview;
@Schema(description = "地块概述信息")
private List<PlotInfo> 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;
}
}

View File

@@ -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;
}

View File

@@ -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<BaseInfoRespVO> 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;
}
}

View File

@@ -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<SpeciesLibraryDO> {
.orderByDesc(SpeciesLibraryDO::getCreateTime));
}
int getSpeciesCount(@Param("tenantId") long tenantId,@Param("baseId") String baseId);
}

View File

@@ -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<BaseNameRespVO> getBaseNameList();
List<BaseInfoDO> getList(@Valid BaseInfoPageReqVO pageReqVO);
/**
* 租户与基地
* @return
*/
TenantInfoRespVO getBaseOverviewInfo();
}

View File

@@ -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<PersonnelManagementDO> personnels = personnelManagementMapper.selectList("tenant_id", tenantId);
int employeeCount = personnels.size();
Map<String, String> employeeMap = personnels.stream().collect(Collectors.toMap(PersonnelManagementDO::getId, PersonnelManagementDO::getName, (v1, v2) -> v1));
// 租户
TenantInfoRespVO.TenantInfo tenantInfo = this.getTenantInfo(tenantId, employeeCount);
// 基地
List<BaseInfoDO> pageResult = this.getList(new BaseInfoPageReqVO());
List<BaseInfoRespVO> 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<BaseInfoDO> 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<BaseInfoRespVO> respVOS, Map<String, String> 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<BaseInfoRespVO.PlotInfo> targetList = new ArrayList<>();
List<PlotInfoDO> 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);
}
}
}

View File

@@ -9,4 +9,14 @@
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
-->
<select id="getSpeciesCount" parameterType="Long" resultType="java.lang.Integer">
SELECT count(*)
FROM farm_species_library
<where>
deleted = 0
<if test="tenantId != null and tenantId !=''">AND tenant_id = #{tenantId}</if>
<if test="baseId != null and baseId !=''">AND base_id = #{baseId}</if>
</where>
</select>
</mapper>