Merge remote-tracking branch 'origin/main'
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user