diff --git a/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ProjectPlanStatusEnum.java b/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ProjectPlanStatusEnum.java new file mode 100644 index 00000000..144cf57a --- /dev/null +++ b/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ProjectPlanStatusEnum.java @@ -0,0 +1,26 @@ +package com.chanko.yunxi.mes.module.heli.enums; + +import lombok.Getter; + +/** + * 项目订单状态枚举 + * @author chenxi + * @date 2024-01-18 01:19 + */ +@Getter +public enum ProjectPlanStatusEnum { + START(1, "未开始"), + PRODUCING(2, "生产中"), + COMPLETE(3, "已完成"), + TERMINATE(4, "已终止"), + CHANGE(5, "已变更"), + ; + + private int code; + private String description; + + ProjectPlanStatusEnum(int code, String description) { + this.code = code; + this.description = description; + } +} diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/projectorder/ProjectOrderController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/projectorder/ProjectOrderController.java index 9af1fd17..d8da3cc6 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/projectorder/ProjectOrderController.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/projectorder/ProjectOrderController.java @@ -14,6 +14,8 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.projectorder.vo.Project import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO; import com.chanko.yunxi.mes.module.heli.enums.BusinesTypeEnum; +import com.chanko.yunxi.mes.module.heli.service.plan.PlanService; +import com.chanko.yunxi.mes.module.heli.service.plansub.PlanSubService; import com.chanko.yunxi.mes.module.heli.service.projectorder.ProjectOrderService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -43,6 +45,13 @@ public class ProjectOrderController { @Resource private ProjectOrderService projectOrderService; + @Resource + private PlanService planService; + @Resource + private PlanSubService planSubService; + + + @Resource private OperateLogFrameworkService operateLogFrameworkService; @@ -84,7 +93,13 @@ public class ProjectOrderController { // 批准、终止记录快照 switch (OperateTypeEnum.valueOf(operateReqVO.getActive())){ case APPROVE: + // 订单批准时创建或者更新生产计划数据 + planService.generatePlanByProjectId(operateReqVO.getId()); + projectOrderService.createProjectOrderSnapshot(operateReqVO); + break; case TERMINATE: + // 订单终止时更新生产计划状态 + planService.updatePlanStatusToTerminateByProjectId(operateReqVO.getId()); projectOrderService.createProjectOrderSnapshot(operateReqVO); break; } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/plan/PlanDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/plan/PlanDO.java index 6be8d3ad..0a608460 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/plan/PlanDO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/plan/PlanDO.java @@ -105,7 +105,7 @@ public class PlanDO extends BaseDO { /** * 项目变更日期 */ - private String changeLastDate; + private LocalDateTime changeLastDate; @TableField(exist = false) private String projectCode; diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plan/PlanService.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plan/PlanService.java index c52d8813..e611efd1 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plan/PlanService.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plan/PlanService.java @@ -1,55 +1,57 @@ -package com.chanko.yunxi.mes.module.heli.service.plan; - -import java.util.*; -import javax.validation.*; -import com.chanko.yunxi.mes.module.heli.controller.admin.plan.vo.*; -import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO; -import com.chanko.yunxi.mes.framework.common.pojo.PageResult; -import com.chanko.yunxi.mes.framework.common.pojo.PageParam; - -/** - * 生产计划 Service 接口 - * - * @author 管理员 - */ -public interface PlanService { - - /** - * 创建生产计划 - * - * @param createReqVO 创建信息 - * @return 编号 - */ - Long createPlan(@Valid PlanSaveReqVO createReqVO); - - /** - * 更新生产计划 - * - * @param updateReqVO 更新信息 - */ - void updatePlan(@Valid PlanSaveReqVO updateReqVO); - - /** - * 删除生产计划 - * - * @param id 编号 - */ - void deletePlan(Long id); - - /** - * 获得生产计划 - * - * @param id 编号 - * @return 生产计划 - */ - PlanDO getPlan(Long id); - - /** - * 获得生产计划分页 - * - * @param pageReqVO 分页查询 - * @return 生产计划分页 - */ - PageResult getPlanPage(PlanPageReqVO pageReqVO); - -} \ No newline at end of file +package com.chanko.yunxi.mes.module.heli.service.plan; + +import java.util.*; +import javax.validation.*; +import com.chanko.yunxi.mes.module.heli.controller.admin.plan.vo.*; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO; +import com.chanko.yunxi.mes.framework.common.pojo.PageResult; +import com.chanko.yunxi.mes.framework.common.pojo.PageParam; + +/** + * 生产计划 Service 接口 + * + * @author 管理员 + */ +public interface PlanService { + + /** + * 创建生产计划 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createPlan(@Valid PlanSaveReqVO createReqVO); + + /** + * 更新生产计划 + * + * @param updateReqVO 更新信息 + */ + void updatePlan(@Valid PlanSaveReqVO updateReqVO); + + /** + * 删除生产计划 + * + * @param id 编号 + */ + void deletePlan(Long id); + + /** + * 获得生产计划 + * + * @param id 编号 + * @return 生产计划 + */ + PlanDO getPlan(Long id); + + /** + * 获得生产计划分页 + * + * @param pageReqVO 分页查询 + * @return 生产计划分页 + */ + PageResult getPlanPage(PlanPageReqVO pageReqVO); + + void generatePlanByProjectId(Long projectId); + void updatePlanStatusToTerminateByProjectId(Long projectId); +} diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plan/PlanServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plan/PlanServiceImpl.java index eabd52ce..96656470 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plan/PlanServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plan/PlanServiceImpl.java @@ -1,15 +1,27 @@ package com.chanko.yunxi.mes.module.heli.service.plan; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO; +import com.chanko.yunxi.mes.module.heli.dal.mysql.plansub.PlanSubMapper; import com.chanko.yunxi.mes.module.heli.enums.CodeEnum; +import com.chanko.yunxi.mes.module.heli.enums.ProjectPlanStatusEnum; +import com.chanko.yunxi.mes.module.heli.service.projectorder.ProjectOrderService; import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService; +import com.github.dadiyang.equator.FieldInfo; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; import java.text.SimpleDateFormat; +import java.time.LocalDateTime; import java.util.*; +import java.util.stream.Collectors; + import com.chanko.yunxi.mes.module.heli.controller.admin.plan.vo.*; import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO; import com.chanko.yunxi.mes.framework.common.pojo.PageResult; @@ -28,6 +40,7 @@ import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*; * * @author 管理员 */ +@Slf4j @Service @Validated public class PlanServiceImpl implements PlanService { @@ -35,6 +48,12 @@ public class PlanServiceImpl implements PlanService { @Resource private PlanMapper planMapper; + @Resource + private PlanSubMapper planSubMapper; + + @Resource + private ProjectOrderService projectOrderService; + @Resource private SerialNumberService serialNumberService; @@ -90,4 +109,66 @@ public class PlanServiceImpl implements PlanService { return planMapper.selectPage(pageReqVO); } + @Override + public void generatePlanByProjectId(Long projectId){ + // 查询最近归档历史并对比变化字段 + try { + PlanDO planDO = planMapper.selectOne(new LambdaQueryWrapper() {{ + eq(PlanDO::getProjectId, projectId); + orderByDesc(PlanDO::getId); + last("LIMIT 1"); + }}); + if(planDO != null){ + // 设置项目更新次数 + planDO.setChangeNum(planDO.getChangeNum()+1); + // 设置项目更新时间 + planDO.setChangeLastDate(LocalDateTime.now()); + // 设置生产计划状态 + planDO.setStatus(ProjectPlanStatusEnum.CHANGE.getCode()); + planMapper.updateById(planDO); + }else{ + planDO = new PlanDO(); + // 设置项目更新次数 + planDO.setChangeNum(0); + // 设置生产计划状态 + planDO.setStatus(ProjectPlanStatusEnum.START.getCode()); + planMapper.insert(planDO); + + // 生成生产计划子项目信息 + List projectOrderSubDOs = projectOrderService.getProjectOrderSubListByProjectOrderId(projectId); + for(ProjectOrderSubDO item : projectOrderSubDOs){ + PlanSubDO planSubDO = new PlanSubDO(); + planSubDO.setProjectPlanId(planDO.getId()); + planSubDO.setProjectId(projectId); + planSubDO.setProjectSubId(item.getId()); + planSubMapper.insert(planSubDO); + } + } + }catch (Exception e){ + log.error("base projectId to generate planDo error, id: {}, exception: {}", projectId, e.getMessage(), e); + } + } + @Override + public void updatePlanStatusToTerminateByProjectId(Long projectId){ + // 查询最近归档历史并对比变化字段 + try { + PlanDO planDO = planMapper.selectOne(new LambdaQueryWrapper() {{ + eq(PlanDO::getProjectId, projectId); + orderByDesc(PlanDO::getId); + last("LIMIT 1"); + }}); + if(planDO != null){ + // 设置项目更新次数 + planDO.setChangeNum(planDO.getChangeNum()+1); + // 设置项目更新时间 + planDO.setChangeLastDate(LocalDateTime.now()); + // 设置生产计划状态 + planDO.setStatus(ProjectPlanStatusEnum.TERMINATE.getCode()); + planMapper.updateById(planDO); + } + }catch (Exception e){ + log.error("base projectId to update planDo's status error, id: {}, exception: {}", projectId, e.getMessage(), e); + } + } + } diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/plan/edit.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/plan/edit.vue index 08dc8067..9e9ee9d5 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/plan/edit.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/plan/edit.vue @@ -419,7 +419,10 @@ diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/plan/productionPrint.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/plan/productionPrint.vue index 60b3a80a..39cfe431 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/plan/productionPrint.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/plan/productionPrint.vue @@ -23,7 +23,7 @@ 客户名称 - {{ formData.customer.name }} + {{ formData.customerName }} {{ formData.customer.brief }} 编码: @@ -52,8 +52,8 @@ {{ getDictLabel(DICT_TYPE.HELI_COMMON_IS_OR_NOT, formData.isUrgency) }} - 项目负责: - {{ `111` }} + 项目负责人: + {{ userInit.find((user) => user.id == planData.projectOwner)?.nickname }}
@@ -88,14 +88,14 @@ - 是否要工: - {{ `是` }} + 是否要工艺: + {{ getDictLabel(DICT_TYPE.HELI_COMMON_IS_OR_NOT, planData.property) }} 开始日期 - {{ `2024/1/15` }} + {{ formatDate(new Date(planData.craftStartDate), 'YYYY-MM-DD') }} 结束日期 - {{ `2024/1/15` }} + {{ formatDate(new Date(planData.craftEndDate), 'YYYY-MM-DD') }} 负责人 - {{ `2024/1/15` }} + {{ userInit.find((user) => user.id == planData.craftOwner)?.nickname }} @@ -119,8 +119,8 @@
{{item.name}} -   - {{item.deviceModel}} +   + {{item.projectSubShortName}}
{{item.compositionName}} @@ -357,6 +357,7 @@