feat (farm): 种植中心-生产计划
- 开始, 结束 ,重启, 删除 按钮
This commit is contained in:
@@ -9,9 +9,11 @@ import cn.iocoder.yudao.module.farm.controller.admin.farmingrecord.vo.FarmingRec
|
||||
import cn.iocoder.yudao.module.farm.controller.admin.farmingrecord.vo.FarmingRecordRespVO;
|
||||
import cn.iocoder.yudao.module.farm.controller.admin.farmingrecord.vo.FarmingRecordSaveReqVO;
|
||||
import cn.iocoder.yudao.module.farm.dal.dataobject.farmingrecord.FarmingRecordDO;
|
||||
import cn.iocoder.yudao.module.farm.enums.CommonConstants;
|
||||
import cn.iocoder.yudao.module.farm.service.cropFarmingCenter.CropFarmingCenterService;
|
||||
import cn.iocoder.yudao.module.farm.service.farmingrecord.FarmingRecordService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.validation.Valid;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -45,14 +47,11 @@ public class CropFarmingCenterController {
|
||||
this.farmingRecordService = farmingRecordService;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 生产计划
|
||||
@GetMapping("/production-plan/page")
|
||||
@Operation(summary = "生产计划-分页")
|
||||
public CommonResult<ProductionPlanPageRespVO> getProductionPlanPage(@Valid cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanPageReqVO pageReqVO) {
|
||||
ProductionPlanPageRespVO pageResult = cropFarmingCenterService.getProductionPlanPage(pageReqVO);
|
||||
return success(pageResult);
|
||||
public CommonResult<PageResult<ProductionPlanPageRespVO>> getProductionPlanPage(@Valid cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanPageReqVO pageReqVO) {
|
||||
return success(cropFarmingCenterService.getProductionPlanPage(pageReqVO));
|
||||
}
|
||||
|
||||
@GetMapping("/production-plan/get/{id}")
|
||||
@@ -77,6 +76,38 @@ public class CropFarmingCenterController {
|
||||
}
|
||||
|
||||
|
||||
@DeleteMapping("/production-plan/delete")
|
||||
@Operation(summary = "删除种植中心-生产计划-生产计划")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
public CommonResult<Boolean> deleteProductionPlan(@RequestParam("id") String id) {
|
||||
cropFarmingCenterService.deleteProductionPlan(id);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@Operation(summary = "生产计划-重启按钮")
|
||||
@PutMapping("/production-plan/restart")
|
||||
public CommonResult<Boolean> restartPlanning(@RequestBody ProductionPlanUpdateReqVO updateReqVO) {
|
||||
updateReqVO.setPlanStatus(CommonConstants.PLAN_STATUS_2);
|
||||
cropFarmingCenterService.updateProductionPlan(updateReqVO);
|
||||
return success(true);
|
||||
}
|
||||
@Operation(summary = "生产计划-开始按钮")
|
||||
@PutMapping("/production-plan/start")
|
||||
public CommonResult<Boolean> startPlanning(@RequestBody ProductionPlanUpdateReqVO updateReqVO) {
|
||||
updateReqVO.setPlanStatus(CommonConstants.PLAN_STATUS_2);
|
||||
cropFarmingCenterService.updateProductionPlan(updateReqVO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@Operation(summary = "生产计划-结束按钮")
|
||||
@PutMapping("/production-plan/finish")
|
||||
public CommonResult<Boolean> finishPlanning(@RequestBody ProductionPlanUpdateReqVO updateReqVO) {
|
||||
updateReqVO.setPlanStatus(CommonConstants.PLAN_STATUS_3);
|
||||
cropFarmingCenterService.updateProductionPlan(updateReqVO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
|
||||
// 农事记录
|
||||
@GetMapping("/farming-record/page")
|
||||
@Operation(summary = "农事记录-分页")
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
package cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
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: 分页响应实体
|
||||
@@ -18,27 +17,11 @@ import java.math.BigDecimal;
|
||||
@NoArgsConstructor
|
||||
public class ProductionPlanPageRespVO {
|
||||
|
||||
|
||||
@Schema(description = "分页数据")
|
||||
private PageResult<ProductionPlanRespVO> list;
|
||||
|
||||
@Schema(description = "计划概括信息")
|
||||
private PlanOverview planOverview;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public static class PlanOverview{
|
||||
@Schema(description = "总面积")
|
||||
private BigDecimal totalArea;
|
||||
@Schema(description = "计划总数")
|
||||
private Integer planCount;
|
||||
@Schema(description = "已完成-计划个数")
|
||||
private Integer planCompletedCount;
|
||||
@Schema(description = "进行中-计划个数")
|
||||
private Integer planInProgressCount;
|
||||
@Schema(description = "逾期-计划个数")
|
||||
private Integer planOverdueCount;
|
||||
}
|
||||
@Schema(description = "基地ID")
|
||||
private String baseId;
|
||||
@Schema(description = "基地名称")
|
||||
private String baseName;
|
||||
@Schema(description = "生产计划集合")
|
||||
private List<ProductionPlanRespVO> plans;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo;
|
||||
|
||||
import cn.iocoder.yudao.module.farm.controller.admin.modelmanagement.vo.ModelManagementRespVO;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
|
||||
/**
|
||||
@@ -31,14 +33,25 @@ public class ProductionPlanRespVO {
|
||||
private String speciesModelId;
|
||||
|
||||
@Schema(description = "排产开始日期")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private LocalDate productionStartDate;
|
||||
|
||||
@Schema(description = "排产结束日期")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private LocalDate productionEndDate;
|
||||
|
||||
@Schema(description = "采收开始日期")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private LocalDate harvestStartDate;
|
||||
|
||||
@Schema(description = "计划开始日期")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private LocalDate plantingStartDate;
|
||||
|
||||
@Schema(description = "计划结束日期")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private LocalDate plantingEndDate;
|
||||
|
||||
@Schema(description = "计划执行状态")
|
||||
private Integer planStatus;
|
||||
@Schema(description = "计划执行状态-名称")
|
||||
@@ -60,6 +73,7 @@ public class ProductionPlanRespVO {
|
||||
* 种植区域信息
|
||||
*/
|
||||
@Schema(description = "种植日期")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private LocalDate plantingDate;
|
||||
@Schema(description = "种植株数")
|
||||
private Integer plantingQuantity;
|
||||
@@ -76,7 +90,26 @@ public class ProductionPlanRespVO {
|
||||
@Schema(description = "备注")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "模型", example = "芋艿")
|
||||
@Schema(description = "模型")
|
||||
private ModelManagementRespVO modelManagementRespVO;
|
||||
|
||||
@Schema(description = "计划概括信息")
|
||||
private ProductionPlanRespVO.PlanOverview planOverview;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public static class PlanOverview{
|
||||
@Schema(description = "总面积")
|
||||
private BigDecimal totalArea;
|
||||
@Schema(description = "计划总数")
|
||||
private Integer planCount;
|
||||
@Schema(description = "已完成-计划个数")
|
||||
private Integer planCompletedCount;
|
||||
@Schema(description = "进行中-计划个数")
|
||||
private Integer planInProgressCount;
|
||||
@Schema(description = "逾期-计划个数")
|
||||
private Integer planOverdueCount;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -35,6 +35,12 @@ public class ProductionPlanUpdateReqVO {
|
||||
@Schema(description = "采收开始日期")
|
||||
private LocalDate harvestStartDate;
|
||||
|
||||
@Schema(description = "计划开始日期")
|
||||
private LocalDate plantingStartDate;
|
||||
|
||||
@Schema(description = "计划结束日期")
|
||||
private LocalDate plantingEndDate;
|
||||
|
||||
@Schema(description = "计划执行状态 (1:未开始;2:进行中;3:已完成;4:逾期)")
|
||||
private Integer planStatus;
|
||||
|
||||
|
||||
@@ -52,6 +52,14 @@ public class ProductionPlanDO extends BaseDO {
|
||||
* 采收开始日期
|
||||
*/
|
||||
private LocalDate harvestStartDate;
|
||||
/**
|
||||
* 计划开始日期
|
||||
*/
|
||||
private LocalDate plantingStartDate;
|
||||
/**
|
||||
* 计划结束日期
|
||||
*/
|
||||
private LocalDate plantingEndDate;
|
||||
/**
|
||||
* 执行状态
|
||||
*/
|
||||
|
||||
@@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.farm.dal.mysql.productionplan;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanPageRespVO;
|
||||
import cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanRespVO;
|
||||
import cn.iocoder.yudao.module.farm.controller.admin.productionplan.vo.ProductionPlanPageReqVO;
|
||||
import cn.iocoder.yudao.module.farm.dal.dataobject.productionplan.ProductionPlanDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
@@ -36,12 +36,16 @@ public interface ProductionPlanMapper extends BaseMapperX<ProductionPlanDO> {
|
||||
|
||||
default PageResult<ProductionPlanDO> selectPage2(cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<ProductionPlanDO>()
|
||||
.betweenIfPresent(ProductionPlanDO::getProductionStartDate, reqVO.getProductionStartDate())
|
||||
.betweenIfPresent(ProductionPlanDO::getProductionStartDate,
|
||||
reqVO.getProductionStartDate() != null ? reqVO.getProductionStartDate()[0] : null,
|
||||
reqVO.getProductionStartDate() != null ? reqVO.getProductionStartDate()[1] : null
|
||||
)
|
||||
.eqIfPresent(ProductionPlanDO::getBaseId, reqVO.getBaseId())
|
||||
.eqIfPresent(ProductionPlanDO::getPlotId, reqVO.getPlotId())
|
||||
.eqIfPresent(ProductionPlanDO::getPlanStatus, reqVO.getPlanStatus())
|
||||
.orderByDesc(ProductionPlanDO::getCreateTime)
|
||||
);
|
||||
}
|
||||
|
||||
ProductionPlanPageRespVO.PlanOverview getPlanOverview(@Param("baseId") String baseId);
|
||||
ProductionPlanRespVO.PlanOverview getPlanOverview(@Param("baseId") String baseId);
|
||||
}
|
||||
@@ -24,14 +24,19 @@ public class CommonConstants {
|
||||
public final static Integer PLAN_STATUS_2 = 2;
|
||||
public final static Integer PLAN_STATUS_3 = 3;
|
||||
public final static Integer PLAN_STATUS_4 = 4;
|
||||
public final static Integer PLAN_STATUS_5 = 5;
|
||||
public final static Integer PLAN_STATUS_6 = 6;
|
||||
public final static Integer PLAN_STATUS_7 = 7;
|
||||
|
||||
public static Map<Integer, String> PLAN_MAP = new HashMap<>();
|
||||
static{
|
||||
PLAN_MAP.put(1, "未开始");
|
||||
PLAN_MAP.put(2, "进行中");
|
||||
PLAN_MAP.put(3, "已完成");
|
||||
PLAN_MAP.put(4, "逾期");
|
||||
PLAN_MAP.put(5, "已结束");
|
||||
PLAN_MAP.put(PLAN_STATUS_1, "未开始");
|
||||
PLAN_MAP.put(PLAN_STATUS_2, "进行中");
|
||||
PLAN_MAP.put(PLAN_STATUS_3, "已完成");
|
||||
PLAN_MAP.put(PLAN_STATUS_4, "逾期");
|
||||
PLAN_MAP.put(PLAN_STATUS_5, "逾期未开始");
|
||||
PLAN_MAP.put(PLAN_STATUS_6, "逾期未结束");
|
||||
PLAN_MAP.put(PLAN_STATUS_7, "已结束");
|
||||
}
|
||||
|
||||
// 模型类型 (1:模型模板; 2:引用案例)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package cn.iocoder.yudao.module.farm.service.cropFarmingCenter;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.*;
|
||||
|
||||
/**
|
||||
@@ -23,9 +24,11 @@ public interface CropFarmingCenterService {
|
||||
|
||||
void updateProductionPlan(ProductionPlanUpdateReqVO updateReqVO);
|
||||
|
||||
ProductionPlanPageRespVO getProductionPlanPage(ProductionPlanPageReqVO reqVO);
|
||||
PageResult<ProductionPlanPageRespVO> getProductionPlanPage(ProductionPlanPageReqVO reqVO);
|
||||
|
||||
int getCropCount(Long tenantId);
|
||||
|
||||
Double getTotalArea(Long tenantId);
|
||||
|
||||
void deleteProductionPlan(String id);
|
||||
}
|
||||
|
||||
@@ -25,11 +25,14 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.AbstractMap;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
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.PLAN_MAP;
|
||||
import static cn.iocoder.yudao.module.farm.enums.ErrorCodeConstants.PRODUCTION_PLAN_NOT_EXISTS;
|
||||
|
||||
/**
|
||||
@@ -208,22 +211,39 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProductionPlanPageRespVO getProductionPlanPage(ProductionPlanPageReqVO reqVO) {
|
||||
public PageResult<ProductionPlanPageRespVO> getProductionPlanPage(ProductionPlanPageReqVO reqVO) {
|
||||
|
||||
PageResult<ProductionPlanDO> productionPlanDOPageResult = productionPlanMapper.selectPage2(reqVO);
|
||||
PageResult<ProductionPlanRespVO> resultData = BeanUtils.toBean(productionPlanDOPageResult, ProductionPlanRespVO.class);
|
||||
resultData.getList().forEach(e -> {
|
||||
|
||||
// 计划状态-名称
|
||||
e.setPlanStatusName(PLAN_MAP.get(e.getPlanStatus()));
|
||||
// 模型
|
||||
ModelManagementRespVO modelManagementRespVO = modelManagementService.getModelManagement(e.getSpeciesModelId());
|
||||
e.setModelManagementRespVO(modelManagementRespVO);
|
||||
|
||||
// 计划概述
|
||||
BaseInfoDO baseObj = baseInfoMapper.selectOne("id", e.getBaseId());
|
||||
ProductionPlanRespVO.PlanOverview planOverview = productionPlanMapper.getPlanOverview(e.getBaseId());
|
||||
planOverview.setTotalArea(baseObj.getArea());
|
||||
e.setPlanOverview(planOverview);
|
||||
});
|
||||
|
||||
// 计划概述
|
||||
BaseInfoDO baseObj = baseInfoMapper.selectOne("base_id", reqVO.getBaseId());
|
||||
ProductionPlanPageRespVO.PlanOverview planOverview = productionPlanMapper.getPlanOverview(reqVO.getBaseId());
|
||||
planOverview.setTotalArea(baseObj.getArea());
|
||||
return new ProductionPlanPageRespVO(resultData,planOverview);
|
||||
// 响应结构包装 (包装成符合前端需要的格式)
|
||||
List<ProductionPlanPageRespVO> collect = resultData.getList().stream()
|
||||
.collect(Collectors.groupingBy(plan -> new AbstractMap.SimpleEntry<>(plan.getBaseId(), plan.getBaseName()), Collectors.toList()))
|
||||
.entrySet().stream()
|
||||
.map(entry -> {
|
||||
ProductionPlanPageRespVO groupedVO = new ProductionPlanPageRespVO();
|
||||
groupedVO.setBaseId(entry.getKey().getKey());
|
||||
groupedVO.setBaseName(entry.getKey().getValue());
|
||||
groupedVO.setPlans(entry.getValue());
|
||||
return groupedVO;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
long size = collect.size();
|
||||
return new PageResult<>(collect,size);
|
||||
|
||||
}
|
||||
|
||||
@@ -237,6 +257,14 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService {
|
||||
return productionPlanMapper.getTotalArea(tenantId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteProductionPlan(String id) {
|
||||
// 校验存在
|
||||
validateProductionPlanExists(id);
|
||||
// 删除
|
||||
productionPlanMapper.deleteById(id);
|
||||
}
|
||||
|
||||
private void validateProductionPlanExists(String id) {
|
||||
if (productionPlanMapper.selectById(id) == null) {
|
||||
throw exception(PRODUCTION_PLAN_NOT_EXISTS);
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
<select id="getPlanOverview"
|
||||
parameterType="string"
|
||||
resultType="cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanPageRespVO$PlanOverview">
|
||||
resultType="cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanRespVO$PlanOverview">
|
||||
SELECT
|
||||
base_id,
|
||||
COUNT(*) AS planCount,
|
||||
|
||||
Reference in New Issue
Block a user