|
|
|
@ -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<ProjectOrderDO>() {{
|
|
|
|
|
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<ProjectOrderSubDO> projectSubList = projectOrderSubMapper.selectListByProjectOrderId(projectId);
|
|
|
|
|
if(projectSubList != null){
|
|
|
|
|
List<Long> projectSubIdList = projectSubList.stream().map(ProjectOrderSubDO::getId).collect(Collectors.toList());
|
|
|
|
|
List<ProcessDesignDO> processDesignDOList = processDesignMapper.selectList(new LambdaQueryWrapper<ProcessDesignDO>() {{
|
|
|
|
|
in(ProcessDesignDO::getProjectSubId, projectSubIdList);
|
|
|
|
|
}});
|
|
|
|
|
// 只考虑增加情况
|
|
|
|
|
if( projectSubIdList.size() > processDesignDOList.size()){
|
|
|
|
|
List<Long> existProjectSubIdList = processDesignDOList.stream().map(ProcessDesignDO::getProjectSubId).collect(Collectors.toList());
|
|
|
|
|
List<Long> 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<ProcessBomDO> processBomDOList = processBomMapper.selectList(new LambdaQueryWrapper<ProcessBomDO>() {{
|
|
|
|
|
eq(ProcessBomDO::getProjectId, projectId);
|
|
|
|
|
}});
|
|
|
|
|
if(!processBomDOList.isEmpty()){
|
|
|
|
|
processBomDOList.forEach(processBomDO -> {
|
|
|
|
|
processBomDO.setBomStatus(ProcessBomStatusEnum.TERMINATE.getCode());
|
|
|
|
|
});
|
|
|
|
|
processBomMapper.updateBatch(processBomDOList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|