diff --git a/mes-framework/mes-spring-boot-starter-biz-operatelog/src/main/java/com/chanko/yunxi/mes/framework/operatelog/core/service/OperateLogFrameworkService.java b/mes-framework/mes-spring-boot-starter-biz-operatelog/src/main/java/com/chanko/yunxi/mes/framework/operatelog/core/service/OperateLogFrameworkService.java index 3e55b025..475922b0 100644 --- a/mes-framework/mes-spring-boot-starter-biz-operatelog/src/main/java/com/chanko/yunxi/mes/framework/operatelog/core/service/OperateLogFrameworkService.java +++ b/mes-framework/mes-spring-boot-starter-biz-operatelog/src/main/java/com/chanko/yunxi/mes/framework/operatelog/core/service/OperateLogFrameworkService.java @@ -28,4 +28,15 @@ public interface OperateLogFrameworkService { * @param content */ void createOperateLog(HttpServletRequest request, LocalDateTime startTime, String businessType, Long businessId, Integer type, String content); + + /** + * 记录操作日志 + * + * @param startTime + * @param businessType + * @param businessId + * @param type + * @param content + */ + void createOperateLog(LocalDateTime startTime, String businessType, Long businessId, Integer type, String content); } diff --git a/mes-framework/mes-spring-boot-starter-biz-operatelog/src/main/java/com/chanko/yunxi/mes/framework/operatelog/core/service/OperateLogFrameworkServiceImpl.java b/mes-framework/mes-spring-boot-starter-biz-operatelog/src/main/java/com/chanko/yunxi/mes/framework/operatelog/core/service/OperateLogFrameworkServiceImpl.java index 9f1624e4..45249470 100644 --- a/mes-framework/mes-spring-boot-starter-biz-operatelog/src/main/java/com/chanko/yunxi/mes/framework/operatelog/core/service/OperateLogFrameworkServiceImpl.java +++ b/mes-framework/mes-spring-boot-starter-biz-operatelog/src/main/java/com/chanko/yunxi/mes/framework/operatelog/core/service/OperateLogFrameworkServiceImpl.java @@ -58,4 +58,28 @@ public class OperateLogFrameworkServiceImpl implements OperateLogFrameworkServic operateLogApi.createOperateLog(reqDTO); } + @Override + public void createOperateLog(LocalDateTime startTime, String businessType, Long businessId, Integer type, String content) { + OperateLog operateLogObj = new OperateLog(); + operateLogObj.setTraceId(TracerUtils.getTraceId()); + operateLogObj.setStartTime(startTime); + operateLogObj.setBusinessType(businessType); + operateLogObj.setBusinessId(businessId); + operateLogObj.setUserId(WebFrameworkUtils.getLoginUserId()); + operateLogObj.setUserType(WebFrameworkUtils.getLoginUserType()); + operateLogObj.setModule("ignore"); + operateLogObj.setName("ignore"); + operateLogObj.setType(type); + operateLogObj.setContent(content); + operateLogObj.setRequestMethod("system"); + operateLogObj.setRequestUrl("system"); + operateLogObj.setUserIp("127.0.0.1"); + operateLogObj.setUserAgent("system"); + operateLogObj.setJavaMethod("system"); + operateLogObj.setDuration((int) (LocalDateTimeUtil.between(startTime, LocalDateTime.now()).toMillis())); + operateLogObj.setResultCode(SUCCESS.getCode()); + OperateLogCreateReqDTO reqDTO = BeanUtil.toBean(operateLogObj, OperateLogCreateReqDTO.class); + operateLogApi.createOperateLog(reqDTO); + } + } diff --git a/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ValidStatusEnum.java b/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ValidStatusEnum.java new file mode 100644 index 00000000..7820f42f --- /dev/null +++ b/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ValidStatusEnum.java @@ -0,0 +1,22 @@ +package com.chanko.yunxi.mes.module.heli.enums; + +import lombok.Getter; + +/** + * 有效状态枚举 + * @author chenxi + * @date 2024-02-27 10:28 + */ +@Getter +public enum ValidStatusEnum { + VALID(1, "有效"), + INVALID(2, "无效"); + + private int code; + private String description; + + ValidStatusEnum(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/processbom/vo/ProcessBomSaveReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processbom/vo/ProcessBomSaveReqVO.java index 45a4eddc..ff088a15 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processbom/vo/ProcessBomSaveReqVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processbom/vo/ProcessBomSaveReqVO.java @@ -14,8 +14,7 @@ public class ProcessBomSaveReqVO { @Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "18511") private Long id; - @Schema(description = "编号,唯一", requiredMode = Schema.RequiredMode.REQUIRED) - @NotEmpty(message = "编号,唯一不能为空") + @Schema(description = "编号") private String code; @Schema(description = "生产计划id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19403") 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 d8da3cc6..4a090cbb 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,8 +14,7 @@ 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.manager.CrossOrderManager; import com.chanko.yunxi.mes.module.heli.service.projectorder.ProjectOrderService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -45,19 +44,15 @@ public class ProjectOrderController { @Resource private ProjectOrderService projectOrderService; - @Resource - private PlanService planService; - @Resource - private PlanSubService planSubService; - - - @Resource private OperateLogFrameworkService operateLogFrameworkService; @Resource private HttpServletRequest request; + @Resource + private CrossOrderManager crossOrderManager; + @PostMapping("/create") @Operation(summary = "创建项目订单") @PreAuthorize("@ss.hasPermission('heli:project-order:create')") @@ -94,12 +89,12 @@ public class ProjectOrderController { switch (OperateTypeEnum.valueOf(operateReqVO.getActive())){ case APPROVE: // 订单批准时创建或者更新生产计划数据 - planService.generatePlanByProjectId(operateReqVO.getId()); + crossOrderManager.generatePlan(operateReqVO.getId()); projectOrderService.createProjectOrderSnapshot(operateReqVO); break; case TERMINATE: // 订单终止时更新生产计划状态 - planService.updatePlanStatusToTerminateByProjectId(operateReqVO.getId()); + crossOrderManager.updatePlanStatusToTerminate(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/mysql/processbom/ProcessBomDetailMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/processbom/ProcessBomDetailMapper.java index 4ea6dc32..9b085521 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/processbom/ProcessBomDetailMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/processbom/ProcessBomDetailMapper.java @@ -1,14 +1,11 @@ package com.chanko.yunxi.mes.module.heli.dal.mysql.processbom; -import java.util.*; - -import com.chanko.yunxi.mes.framework.common.pojo.PageResult; -import com.chanko.yunxi.mes.framework.common.pojo.PageParam; -import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX; import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX; import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO; import org.apache.ibatis.annotations.Mapper; +import java.util.List; + /** * 工艺bom明细 Mapper * diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/processbom/ProcessBomMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/processbom/ProcessBomMapper.java index 98aece90..96e8fd2f 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/processbom/ProcessBomMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/processbom/ProcessBomMapper.java @@ -5,7 +5,9 @@ import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX; import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.ProcessBomPageReqVO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.customer.CustomerDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdesign.ProcessDesignDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO; import com.github.yulichang.wrapper.MPJLambdaWrapper; @@ -23,9 +25,11 @@ public interface ProcessBomMapper extends BaseMapperX { default PageResult selectPage(ProcessBomPageReqVO reqVO) { MPJLambdaWrapper query = new MPJLambdaWrapper<>(); query.selectAll(ProcessBomDO.class) + .select("concat('BOM-', e.project_sub_code) as code") .select("a.plan_no as planCode", "b.code as projectCode", "c.name as customerName", "b.project_name as projectName") .select("d.name as projectSubName") .leftJoin(PlanDO.class, "a", PlanDO::getId, ProcessBomDO::getPlanId) + .leftJoin(PlanSubDO.class, "e", PlanSubDO::getProjectSubId, ProcessBomDO::getProjectSubId) .leftJoin(ProjectOrderDO.class, "b", ProjectOrderDO::getId, ProcessBomDO::getProjectId) .leftJoin(CustomerDO.class, "c", CustomerDO::getId, ProjectOrderDO::getCustomerId) .leftJoin(ProjectOrderSubDO.class, "d", ProjectOrderSubDO::getId, ProcessBomDO::getProjectSubId) @@ -45,4 +49,22 @@ public interface ProcessBomMapper extends BaseMapperX { return selectPage(reqVO, query); } + default ProcessBomDO selectById(Long id) { + MPJLambdaWrapper query = new MPJLambdaWrapper<>(); + query.selectAll(ProcessBomDO.class) + .select("concat('BOM-', e.project_sub_code) as code") + .select("a.plan_no as planCode", "b.code as projectCode", "c.name as customerName", "b.project_name as projectName") + .select("d.name as projectSubName") + .leftJoin(PlanDO.class, "a", PlanDO::getId, ProcessBomDO::getPlanId) + .leftJoin(PlanSubDO.class, "e", PlanSubDO::getProjectSubId, ProcessBomDO::getProjectSubId) + .leftJoin(ProjectOrderDO.class, "b", ProjectOrderDO::getId, ProcessBomDO::getProjectId) + .leftJoin(CustomerDO.class, "c", CustomerDO::getId, ProjectOrderDO::getCustomerId) + .leftJoin(ProjectOrderSubDO.class, "d", ProjectOrderSubDO::getId, ProcessBomDO::getProjectSubId) + .eq(ProcessBomDO::getId, id) + .last("LIMIT 1") + .disableSubLogicDel() + ; + return selectOne(query); + } + } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/manager/CrossOrderManager.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/manager/CrossOrderManager.java index 71a2f05e..c9c303d9 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/manager/CrossOrderManager.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/manager/CrossOrderManager.java @@ -3,10 +3,16 @@ package com.chanko.yunxi.mes.module.heli.manager; import cn.hutool.core.lang.UUID; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; +import com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum; +import com.chanko.yunxi.mes.framework.operatelog.core.service.OperateLogFrameworkService; import com.chanko.yunxi.mes.module.heli.controller.admin.deliverorder.vo.DeliverOrderSaveReqVO; +import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.ProcessBomSaveReqVO; +import com.chanko.yunxi.mes.module.heli.controller.admin.processdesign.vo.ProcessDesignSaveReqVO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderSubDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdesign.ProcessDesignDO; 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.storage.StorageDO; @@ -14,25 +20,31 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelog.StorageLogDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagemat.StorageMatDO; import com.chanko.yunxi.mes.module.heli.dal.mysql.deliverorder.DeliverOrderSubMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.processdesign.ProcessDesignMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderSubMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.storage.StorageMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.storagemat.StorageMatMapper; import com.chanko.yunxi.mes.module.heli.enums.*; +import com.chanko.yunxi.mes.module.heli.service.plan.PlanService; +import com.chanko.yunxi.mes.module.heli.service.processbom.ProcessBomService; +import com.chanko.yunxi.mes.module.heli.service.processdesign.ProcessDesignService; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.STOCK_IN; /** - * 跨订单状态交互管理器 + * 跨订单交互管理器 * * @author chenxi * @date 2024-01-31 10:03 @@ -54,6 +66,18 @@ public class CrossOrderManager { private StorageLogMapper storageLogMapper; @Resource private MaterialMapper materialMapper; + @Resource + private PlanService planService; + @Resource + private ProcessDesignService processDesignService; + @Resource + private ProcessDesignMapper processDesignMapper; + @Resource + private ProcessBomService processBomService; + @Resource + private OperateLogFrameworkService operateLogFrameworkService; + @Resource + private ProcessBomMapper processBomMapper; /** * 刷新项目订单发货状态 @@ -191,4 +215,126 @@ public class CrossOrderManager { } }); } + + /** + * 生成或者更新生产计划 + * @param projectId + */ + @Transactional(rollbackFor = Exception.class) + public void generatePlan(Long projectId) { + // 锁定该订单 + projectOrderMapper.selectOne(new LambdaQueryWrapper() {{ + eq(ProjectOrderDO::getId, projectId); + last("LIMIT 1 FOR UPDATE"); + }}); + Long planId = planService.generatePlanByProjectId(projectId); + // 同时生成工艺设计 + generateProcessDesign(projectId, planId); + } + + /** + * 生成或更新工艺设计 + * @param projectId + * @param planId + */ + @Transactional(rollbackFor = Exception.class) + public void generateProcessDesign(Long projectId, Long planId){ + // 判断是否已经生成 + List projectSubList = projectOrderSubMapper.selectListByProjectOrderId(projectId); + if(projectSubList != null){ + List projectSubIdList = projectSubList.stream().map(ProjectOrderSubDO::getId).collect(Collectors.toList()); + List processDesignDOList = processDesignMapper.selectList(new LambdaQueryWrapper() {{ + in(ProcessDesignDO::getProjectSubId, projectSubIdList); + }}); + // 只考虑增加情况 + if( projectSubIdList.size() > processDesignDOList.size()){ + List existProjectSubIdList = processDesignDOList.stream().map(ProcessDesignDO::getProjectSubId).collect(Collectors.toList()); + List needSavedProjectSubIdList = projectSubIdList.stream().filter(projectSubId -> !existProjectSubIdList.contains(projectSubId)).collect(Collectors.toList()); + // 如未插入过 则生成铸造工艺 + if(existProjectSubIdList.isEmpty()){ + ProcessDesignSaveReqVO saveReqVO = new ProcessDesignSaveReqVO(); + saveReqVO.setPlanId(planId) + .setProcessDesignType(ProcessDesignTypeEnum.BLUEPRINT_FOUNDRY_TECHNOLOGY.name()) + .setStatus(ValidStatusEnum.VALID.getCode()) + .setProjectId(projectId); + processDesignService.createProcessDesign(saveReqVO); + } + // 按每个子项目生成工艺设计 + if(!needSavedProjectSubIdList.isEmpty()){ + LocalDateTime startTime = LocalDateTime.now(); + needSavedProjectSubIdList.forEach(projectSubId -> { + ProcessDesignSaveReqVO threeD = new ProcessDesignSaveReqVO(); + threeD.setPlanId(planId) + .setProcessDesignType(ProcessDesignTypeEnum.BLUEPRINT_3D.name()) + .setStatus(ValidStatusEnum.VALID.getCode()) + .setProjectSubId(projectSubId) + .setProjectId(projectId); + processDesignService.createProcessDesign(threeD); + + ProcessDesignSaveReqVO twoD = new ProcessDesignSaveReqVO(); + twoD.setPlanId(planId) + .setProcessDesignType(ProcessDesignTypeEnum.BLUEPRINT_2D.name()) + .setStatus(ValidStatusEnum.VALID.getCode()) + .setProjectSubId(projectSubId) + .setProjectId(projectId); + processDesignService.createProcessDesign(twoD); + + ProcessDesignSaveReqVO blank = new ProcessDesignSaveReqVO(); + blank.setPlanId(planId) + .setProcessDesignType(ProcessDesignTypeEnum.BLUEPRINT_WORKBLANK.name()) + .setStatus(ValidStatusEnum.VALID.getCode()) + .setProjectSubId(projectSubId) + .setProjectId(projectId); + processDesignService.createProcessDesign(blank); + + ProcessBomSaveReqVO bomSaveReqVO = new ProcessBomSaveReqVO(); + bomSaveReqVO.setPlanId(planId) + .setProjectId(projectId) + .setProjectSubId(projectSubId) + .setVersion(0) + .setBomStatus(ProcessBomStatusEnum.SAVE.getCode()) + .setStatus(ValidStatusEnum.VALID.getCode()) + .setActive(OperateTypeEnum.CREATE.name()); + processBomService.operateProcessBom(bomSaveReqVO); + + // 手动记录日志 + operateLogFrameworkService.createOperateLog(startTime, + BusinesTypeEnum.PROCESS_BOM.name(), + bomSaveReqVO.getId(), + OperateTypeEnum.CREATE.getType(), + bomSaveReqVO.getActiveOpinion()); + }); + } + } + } + } + + /** + * 订单终止 更新计划状态 + * @param projectId + */ + @Transactional(rollbackFor = Exception.class) + public void updatePlanStatusToTerminate(Long projectId) { + planService.updatePlanStatusToTerminateByProjectId(projectId); + // 同时更新工艺设计状态 + updateProcessDesignStatusToTerminate(projectId); + } + + /** + * 订单终止 更新工艺设计状态 + * @param projectId + */ + public void updateProcessDesignStatusToTerminate(Long projectId){ + List processBomDOList = processBomMapper.selectList(new LambdaQueryWrapper() {{ + eq(ProcessBomDO::getProjectId, projectId); + }}); + if(!processBomDOList.isEmpty()){ + processBomDOList.forEach(processBomDO -> { + processBomDO.setBomStatus(ProcessBomStatusEnum.TERMINATE.getCode()); + }); + processBomMapper.updateBatch(processBomDOList); + } + } + + } 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 83265a0e..efc6028c 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,11 +1,11 @@ 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; +import com.chanko.yunxi.mes.module.heli.controller.admin.plan.vo.PlanPageReqVO; +import com.chanko.yunxi.mes.module.heli.controller.admin.plan.vo.PlanSaveReqVO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO; + +import javax.validation.Valid; /** * 生产计划 Service 接口 @@ -54,6 +54,7 @@ public interface PlanService { PageResult getPlanPageByStatus(PlanPageReqVO pageReqVO); - void generatePlanByProjectId(Long projectId); + Long 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 5f293570..6010e648 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,39 +1,33 @@ package com.chanko.yunxi.mes.module.heli.service.plan; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.chanko.yunxi.mes.framework.common.pojo.PageResult; +import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; +import com.chanko.yunxi.mes.module.heli.controller.admin.plan.vo.PlanPageReqVO; +import com.chanko.yunxi.mes.module.heli.controller.admin.plan.vo.PlanSaveReqVO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO; 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.plan.PlanMapper; 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 org.springframework.validation.annotation.Validated; +import javax.annotation.Resource; 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; -import com.chanko.yunxi.mes.framework.common.pojo.PageParam; -import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; - -import com.chanko.yunxi.mes.module.heli.dal.mysql.plan.PlanMapper; +import java.util.Date; +import java.util.List; import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.PROJECT_PLAN; -import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.STOCK_IN; -import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*; +import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.PLAN_NOT_EXISTS; /** * 生产计划 Service 实现类 @@ -115,7 +109,9 @@ public class PlanServiceImpl implements PlanService { } @Override - public void generatePlanByProjectId(Long projectId){ + @Transactional(rollbackFor = Exception.class) + public Long generatePlanByProjectId(Long projectId){ + Long id = null; // 查询最近归档历史并对比变化字段 try { PlanDO planDO = planMapper.selectOne(new LambdaQueryWrapper() {{ @@ -160,9 +156,11 @@ public class PlanServiceImpl implements PlanService { planSubMapper.insert(planSubDO); } } + id = planDO.getId(); }catch (Exception e){ log.error("base projectId to generate planDo error, id: {}, exception: {}", projectId, e.getMessage(), e); } + return id; } @Override public void updatePlanStatusToTerminateByProjectId(Long projectId){ diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processbom/ProcessBomServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processbom/ProcessBomServiceImpl.java index 3e1eab2b..1c7edb50 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processbom/ProcessBomServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processbom/ProcessBomServiceImpl.java @@ -7,8 +7,8 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.ProcessBo import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.ProcessBomSaveReqVO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO; -import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper; import com.chanko.yunxi.mes.module.heli.enums.ProcessBomStatusEnum; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -43,6 +43,7 @@ public class ProcessBomServiceImpl implements ProcessBomService { // 插入子表 if(createReqVO.getProcessBomDetails() != null && !createReqVO.getProcessBomDetails().isEmpty()) createProcessBomDetailList(processBom.getId(), createReqVO.getProcessBomDetails()); + createReqVO.setId(processBom.getId()); // 返回 return processBom.getId(); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processdesign/ProcessDesignServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processdesign/ProcessDesignServiceImpl.java index 7ac459a4..59f94fe2 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processdesign/ProcessDesignServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processdesign/ProcessDesignServiceImpl.java @@ -1,23 +1,17 @@ package com.chanko.yunxi.mes.module.heli.service.processdesign; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; import com.chanko.yunxi.mes.framework.security.core.util.SecurityFrameworkUtils; import com.chanko.yunxi.mes.module.heli.controller.admin.processdesign.vo.ProcessDesignPageReqVO; import com.chanko.yunxi.mes.module.heli.controller.admin.processdesign.vo.ProcessDesignSaveReqVO; -import com.chanko.yunxi.mes.module.heli.dal.dataobject.customer.CustomerDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdesign.ProcessDesignDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdesignprogress.ProcessDesignProgressDO; -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.mysql.processdesign.ProcessDesignMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.processdesign.ProcessDesignProgressMapper; import com.chanko.yunxi.mes.module.heli.enums.ProcessDesignTypeEnum; import com.chanko.yunxi.mes.module.heli.enums.WarningEnum; import com.chanko.yunxi.mes.module.heli.vo.WarningMessageVO; -import com.github.yulichang.query.MPJLambdaQueryWrapper; -import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -27,7 +21,6 @@ import java.time.Duration; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Comparator; -import java.util.Date; import java.util.List; import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -55,7 +48,10 @@ public class ProcessDesignServiceImpl implements ProcessDesignService { processDesignMapper.insert(processDesign); // 插入子表 - createProcessDesignProgressList(processDesign.getId(), createReqVO.getProcessDesignProgressList()); + if(createReqVO.getProcessDesignProgressList() != null && !createReqVO.getProcessDesignProgressList().isEmpty()) { + createProcessDesignProgressList(processDesign.getId(), createReqVO.getProcessDesignProgressList()); + } + // 返回 return processDesign.getId(); } diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/overview.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/overview.vue index 84760d37..26f75f5b 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/overview.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/overview.vue @@ -72,7 +72,7 @@ @@ -85,7 +85,7 @@ @@ -98,7 +98,7 @@ diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/projectorder/detail.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/projectorder/detail.vue index a7221709..7a323c7f 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/projectorder/detail.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/projectorder/detail.vue @@ -666,16 +666,6 @@ const queryData = async (type: string, id?: number) => { customerList.value = customerData.list customerSelectList.value = customerData.list - // 获得列表 - let compositionParams = { - pageNo: 1, - pageSize: 10, - status: '1' - } - const compositionData = await CompositionApi.getCompositionPage(compositionParams) - compositionList.value = compositionData.list - compositionSelectList.value = compositionData.list - // 绑定默认部门与业务员 if (!formData.value.businessMan) { formData.value.businessMan = useUserStore().getUser.id // 当前登录的编码 diff --git a/sql/v1.3.0/1.structure.sql b/sql/v1.3.0/1.structure.sql index 0b9407d1..58558572 100644 --- a/sql/v1.3.0/1.structure.sql +++ b/sql/v1.3.0/1.structure.sql @@ -193,7 +193,7 @@ DROP TABLE IF EXISTS `pro_plan`; DROP TABLE IF EXISTS `pro_process_bom`; CREATE TABLE `pro_process_bom` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增字段,唯一', - `code` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '编号,唯一', + `code` varchar(255) COMMENT '编号,唯一', `plan_id` BIGINT(20) NOT NULL COMMENT '生产计划id', `project_id` BIGINT(20) NOT NULL COMMENT '项目id', `project_sub_id` bigint(20) NOT NULL COMMENT '子项目id', @@ -208,7 +208,6 @@ CREATE TABLE `pro_process_bom` ( `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '租户编号', PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `uk_code`(`code`) USING BTREE, INDEX `idx_plan`(`plan_id`) USING BTREE, INDEX `idx_project`(`project_id`) USING BTREE ) ENGINE=InnoDB COMMENT='工艺bom表'; @@ -283,4 +282,4 @@ CREATE TABLE `project_purchase_order_material` ( `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '租户编号', PRIMARY KEY (`id`) -) ENGINE=InnoDB COMMENT='采购单物料表'; \ No newline at end of file +) ENGINE=InnoDB COMMENT='采购单物料表';