feat (farm): 业务功能

- 种植中心 - 生产计划
- 模型管理 - 引用模型案例
This commit is contained in:
达富斌
2025-08-21 15:09:42 +08:00
parent 19ff6f1a26
commit f2d41b0ee5
7 changed files with 199 additions and 7 deletions

View File

@@ -63,9 +63,9 @@ public class CropFarmingCenterController {
@GetMapping("/production-plan/get/{id}") @GetMapping("/production-plan/get/{id}")
@Operation(summary = "生产计划-查看") @Operation(summary = "生产计划-查看")
public CommonResult<ProductionPlanRespVO> getProductionPlan(@PathVariable("id") String id) { public CommonResult<cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanRespVO> getProductionPlan(@PathVariable("id") String id) {
ProductionPlanDO productionPlan = productionPlanService.getProductionPlan(id); cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanRespVO res = cropFarmingCenterService.getProductionPlan(id);
return success(BeanUtils.toBean(productionPlan, ProductionPlanRespVO.class)); return success(res);
} }
@PostMapping("/production-plan/create") @PostMapping("/production-plan/create")
@@ -82,6 +82,10 @@ public class CropFarmingCenterController {
return success(true); return success(true);
} }
// 农事记录 // 农事记录
@GetMapping("/farming-record/page") @GetMapping("/farming-record/page")
@Operation(summary = "农事记录-分页") @Operation(summary = "农事记录-分页")

View File

@@ -0,0 +1,75 @@
package cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo;
import cn.iocoder.yudao.module.farm.controller.admin.modelmanagement.vo.ModelManagementRespVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDate;
/**
* @description:
* @author: binda
* @date: 2025/8/21 14:17
*/
@Data
public class ProductionPlanRespVO {
@Schema(description = "ID")
private String id;
@Schema(description = "计划编号")
private String planNumber;
@Schema(description = "种植物种-编码")
private String plantSpeciesCode;
@Schema(description = "物种模型-ID")
private String speciesModelId;
@Schema(description = "排产开始日期")
private LocalDate productionStartDate;
@Schema(description = "排产结束日期")
private LocalDate productionEndDate;
@Schema(description = "采收开始日期")
private LocalDate harvestStartDate;
@Schema(description = "计划执行状态")
private Integer planStatus;
@Schema(description = "租户ID")
private String tenantId;
@Schema(description = "基地ID")
private String baseId;
@Schema(description = "基地名称")
private String baseName;
@Schema(description = "地块ID")
private String plotId;
@Schema(description = "地块名称")
private String plotName;
/**
* 种植区域信息
*/
@Schema(description = "种植日期")
private LocalDate plantingDate;
@Schema(description = "种植株数")
private Integer plantingQuantity;
@Schema(description = "预计产量")
private Integer predictedYields;
@Schema(description = "总面积")
private Double totalArea;
@Schema(description = "计划面积")
private Double predictedArea;
@Schema(description = "剩余面积")
private Double remainingArea;
@Schema(description = "占地面积")
private Integer usagePercentage;
@Schema(description = "备注")
private String remark;
@Schema(description = "模型", example = "芋艿")
private ModelManagementRespVO modelManagementRespVO;
}

View File

@@ -0,0 +1,74 @@
package cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDate;
/**
* @description: 更新
* @author: binda
* @date: 2025/8/21 14:55
*/
@Data
public class ProductionPlanUpdateReqVO {
@Schema(description = "ID")
private String id;
@Schema(description = "计划编号")
private String planNumber;
@Schema(description = "种植物种-编码")
private String plantSpeciesCode;
@Schema(description = "物种模型-ID")
private String speciesModelId;
@Schema(description = "排产开始日期")
private LocalDate productionStartDate;
@Schema(description = "排产结束日期")
private LocalDate productionEndDate;
@Schema(description = "采收开始日期")
private LocalDate harvestStartDate;
@Schema(description = "计划执行状态")
private Integer planStatus;
@Schema(description = "租户ID")
private String tenantId;
@Schema(description = "基地ID")
private String baseId;
@Schema(description = "基地名称")
private String baseName;
@Schema(description = "地块ID")
private String plotId;
@Schema(description = "地块名称")
private String plotName;
/**
* 种植区域信息
*/
@Schema(description = "种植日期")
private LocalDate plantingDate;
@Schema(description = "种植株数")
private Integer plantingQuantity;
@Schema(description = "预计产量")
private Integer predictedYields;
@Schema(description = "总面积")
private Double totalArea;
@Schema(description = "计划面积")
private Double predictedArea;
@Schema(description = "剩余面积")
private Double remainingArea;
@Schema(description = "占地面积")
private Integer usagePercentage;
@Schema(description = "备注")
private String remark;
}

View File

@@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.farm.service.cropFarmingCenter; package cn.iocoder.yudao.module.farm.service.cropFarmingCenter;
import cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanRespVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanSaveReqVO; import cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanSaveReqVO;
/** /**
@@ -13,11 +14,14 @@ public interface CropFarmingCenterService {
* 生产计划-新增 * 生产计划-新增
* 1份生产计划 -> n种植区域 (区域: 一个基地的某个地块,划分为多亩地,交叉种植) * 1份生产计划 -> n种植区域 (区域: 一个基地的某个地块,划分为多亩地,交叉种植)
* -> 1模型案例(可以修改,不影响原有模版) * -> 1模型案例(可以修改,不影响原有模版)
* @param createReqVO * @param
* @return * @return
*/ */
void createProductionPlan(ProductionPlanSaveReqVO createReqVO); void createProductionPlan(ProductionPlanSaveReqVO createReqVO);
ProductionPlanRespVO getProductionPlan(String id);
void updateProductionPlan(ProductionPlanSaveReqVO updateReqVO);
int getCropCount(Long tenantId); int getCropCount(Long tenantId);

View File

@@ -1,7 +1,11 @@
package cn.iocoder.yudao.module.farm.service.cropFarmingCenter; package cn.iocoder.yudao.module.farm.service.cropFarmingCenter;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
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.cropFarmingCenter.vo.ProductionPlanRespVO;
import cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanSaveReqVO; import cn.iocoder.yudao.module.farm.controller.admin.cropFarmingCenter.vo.ProductionPlanSaveReqVO;
import cn.iocoder.yudao.module.farm.controller.admin.modelmanagement.vo.ModelManagementRespVO;
import cn.iocoder.yudao.module.farm.dal.dataobject.productionplan.ProductionPlanDO; import cn.iocoder.yudao.module.farm.dal.dataobject.productionplan.ProductionPlanDO;
import cn.iocoder.yudao.module.farm.dal.mysql.productionplan.ProductionPlanMapper; import cn.iocoder.yudao.module.farm.dal.mysql.productionplan.ProductionPlanMapper;
import cn.iocoder.yudao.module.farm.enums.CommonConstants; import cn.iocoder.yudao.module.farm.enums.CommonConstants;
@@ -15,6 +19,8 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
/** /**
* @description: 种植中心 * @description: 种植中心
* @author: binda * @author: binda
@@ -40,7 +46,8 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService {
public void createProductionPlan(ProductionPlanSaveReqVO reqVO) { public void createProductionPlan(ProductionPlanSaveReqVO reqVO) {
String taskId = IdUtil.fastUUID(); String taskId = IdUtil.fastUUID();
String speciesModelId = reqVO.getSpeciesModelId(); String speciesModelId = reqVO.getSpeciesModelId();
// 创建模型案例
// 创建模型案例 todo
speciesModelId = modelManagementService.createModelManagementCase(speciesModelId,taskId); speciesModelId = modelManagementService.createModelManagementCase(speciesModelId,taskId);
if (speciesModelId.equals("")) { if (speciesModelId.equals("")) {
return; return;
@@ -75,7 +82,7 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService {
// 随机字符串 + 地块名称 // 随机字符串 + 地块名称
obj.setPlanNumber(StrHelperUtil.generate() + e.getPlotName()); obj.setPlanNumber(StrHelperUtil.generate() +"-"+ e.getPlotName());
obj.setId(taskId); obj.setId(taskId);
list.add(obj); list.add(obj);
} }
@@ -83,6 +90,30 @@ public class CropFarmingCenterServiceImpl implements CropFarmingCenterService {
} }
@Override
public ProductionPlanRespVO getProductionPlan(String id) {
LoginUser user = getLoginUser();
ProductionPlanDO productionPlanDO = productionPlanMapper.selectOne(
ProductionPlanDO::getId, id,
ProductionPlanDO::getTenantId,user.getTenantId());
if (productionPlanDO == null) {
return new ProductionPlanRespVO();
}
ModelManagementRespVO modelManagementRespVO = modelManagementService.getModelManagement(productionPlanDO.getSpeciesModelId());
ProductionPlanRespVO productionPlanRespVO = BeanUtils.toBean(productionPlanDO, ProductionPlanRespVO.class);
productionPlanRespVO.setModelManagementRespVO(modelManagementRespVO);
return productionPlanRespVO;
}
@Override
public void updateProductionPlan(ProductionPlanSaveReqVO updateReqVO) {
}
@Override @Override
public int getCropCount(Long tenantId) { public int getCropCount(Long tenantId) {
return productionPlanMapper.getCropCount(tenantId); return productionPlanMapper.getCropCount(tenantId);

View File

@@ -84,8 +84,11 @@ public class ModelManagementServiceImpl implements ModelManagementService {
return ""; return "";
} }
this.getModelManagement(modelManagementDO.getId()); ModelManagementRespVO modelManagement = this.getModelManagement(modelManagementDO.getId());
// 将新建的的模型id返回
return null; return null;
} }

View File

@@ -133,6 +133,7 @@
FROM farm_sys_dict t FROM farm_sys_dict t
WHERE WHERE
t.deleted = 0 t.deleted = 0
AND t.status = 1
AND t.dict_type_code = #{dictTypeCode} AND t.dict_type_code = #{dictTypeCode}
</select> </select>