|
|
|
@ -1,13 +1,20 @@
|
|
|
|
|
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base;
|
|
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdOrgExtService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesReworkTaskService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesTemplateService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyContext;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblyNosortContext;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblySortContext;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesReworkTaskModel;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesReworkTaskRequestModel;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
|
|
|
|
import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.tool.TimeTool;
|
|
|
|
@ -95,6 +102,15 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesProductionRecordRepository mesProductionRecordRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesProdOrgExtService prodOrgExtService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesNumberRuleMatchDispatchService numberRuleMatchDispatchService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesProduceSnExtService produceSnExtService;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public ListPager<MesReworkTask> queryReworkTask(MesReworkTask mesReworkTask, Pager pager) {
|
|
|
|
|
String organizeCode = !StringUtils.isEmpty(mesReworkTask.getOrganizeCode())?mesReworkTask.getOrganizeCode():AuthUtil.getOrganizeCode();
|
|
|
|
@ -156,9 +172,9 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void reworkRecord(long detailId) {
|
|
|
|
|
public void reworkRecord(long detailId,String userName,String organizeCode) {
|
|
|
|
|
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(AuthUtil.getOrganizeCode());
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(detailId, "partInspectionDetailId", packBean);
|
|
|
|
|
|
|
|
|
|
List<MesReworkTaskDetail> mesReworkTaskDetailList = mesReworkTaskDetailRepository.findByHqlWhere(packBean);
|
|
|
|
@ -167,7 +183,7 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
|
|
|
|
|
}
|
|
|
|
|
mesReworkTaskDetailList.forEach(mesReworkTaskDetail->{
|
|
|
|
|
mesReworkTaskDetail.setStatus(MesExtEnumUtil.REWORK_TASK_DETAIL_STATUS.REWORK_TASK_DETAIL_STATUS_20.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(mesReworkTaskDetail,AuthUtil.getSessionUser().getUserName());
|
|
|
|
|
ConvertBean.serviceModelUpdate(mesReworkTaskDetail,userName);
|
|
|
|
|
});
|
|
|
|
|
mesReworkTaskDetailRepository.saveAll(mesReworkTaskDetailList);
|
|
|
|
|
|
|
|
|
@ -221,6 +237,7 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mesReworkTask.setStatus(MesExtEnumUtil.REWORK_TASK_STATUS.FINISH.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(mesReworkTask,requestModel.getUserName());
|
|
|
|
|
mesReworkTaskRepository.save(mesReworkTask);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -284,6 +301,81 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
|
|
|
|
|
return strategyService.execute(null, mesProduceSnPrintModel, null, null, null, true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void doAssemblySnRepeatByScan(MesReworkTaskRequestModel requestModel) {
|
|
|
|
|
boolean checkResult = true;
|
|
|
|
|
//查询装配记录
|
|
|
|
|
requestModel.setAssemblyPartStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue());
|
|
|
|
|
List<MesProductionAssembly> mesProductionAssemblies = assemblyQuery(requestModel);
|
|
|
|
|
if (CollectionUtils.isEmpty(mesProductionAssemblies)) MesPcnException.throwFlowException("装配件记录不存在");
|
|
|
|
|
Map<String,MesWorkCenter> mesWorkCenterMap = new HashMap<>();
|
|
|
|
|
//匹配装配件
|
|
|
|
|
for (MesProductionAssembly assembly : mesProductionAssemblies) {
|
|
|
|
|
Object context = getContext(requestModel, assembly,mesWorkCenterMap);
|
|
|
|
|
//匹配规则
|
|
|
|
|
Map<String, Object> result = numberRuleMatchDispatchService.matchNumberRule(requestModel.getOrganizeCode(), requestModel.getSn(), context);
|
|
|
|
|
//匹配成功
|
|
|
|
|
if ((Boolean) result.get(MesPcnExtConstWords.RESULT)){
|
|
|
|
|
// 需要变更之前的记录
|
|
|
|
|
assembly.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_20.getValue());
|
|
|
|
|
|
|
|
|
|
// 需要新增一条替换条码的记录
|
|
|
|
|
MesProductionAssembly mesProductionRepeatAssembly = new MesProductionAssembly();
|
|
|
|
|
BeanUtils.copyProperties(assembly, mesProductionRepeatAssembly);
|
|
|
|
|
mesProductionRepeatAssembly.setAssemblySn(requestModel.getSn());
|
|
|
|
|
mesProductionRepeatAssembly.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue());
|
|
|
|
|
mesProductionRepeatAssembly.setId(null);
|
|
|
|
|
mesProductionRepeatAssembly.setIsOrigSn(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
|
|
|
|
|
mesProductionRepeatAssembly.setFid(UUID .randomUUID().toString());
|
|
|
|
|
ConvertBean.serviceModelInitialize(mesProductionRepeatAssembly,requestModel.getUserName());
|
|
|
|
|
|
|
|
|
|
assembly.setRepeatAssemblySn(requestModel.getSn());
|
|
|
|
|
// 原装配件记录为已解绑
|
|
|
|
|
ConvertBean.serviceModelUpdate(assembly,requestModel.getUserName());
|
|
|
|
|
mesProductionAssemblyRepository.update(assembly);
|
|
|
|
|
// 新装配件记录为已装配
|
|
|
|
|
mesProductionAssemblyRepository.insert(mesProductionRepeatAssembly);
|
|
|
|
|
//自制件更新条码状态
|
|
|
|
|
if(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_10.getValue() == assembly.getMatchType()){
|
|
|
|
|
List<MesProduceSn> produceSnList = produceSnExtService.getProduceSnList(requestModel.getOrganizeCode(), requestModel.getSn());
|
|
|
|
|
if (CollectionUtils.isEmpty(produceSnList)) MesPcnException.throwFlowException("零件条码[%s]信息不存在!", requestModel.getSn());
|
|
|
|
|
Optional<MesProduceSn> optional = produceSnList.stream().filter(sn->sn.getId().equals(((MesProductionAssemblyContext)context).getProductSnId())).findFirst();
|
|
|
|
|
if (!optional.isPresent()) MesPcnException.throwFlowException("零件条码[%s]信息不存在!", requestModel.getSn());
|
|
|
|
|
// 更新新替换得条码为已装配
|
|
|
|
|
updateNewSn(optional.get(),requestModel.getUserName());
|
|
|
|
|
//更新原条码状态为已拆解
|
|
|
|
|
updateOldSn(assembly);
|
|
|
|
|
}
|
|
|
|
|
checkResult = false;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(checkResult) MesPcnException.throwFlowException("条码信息不存在");
|
|
|
|
|
/**
|
|
|
|
|
* 需要更新NC标记后进入的表明细状态为已处理
|
|
|
|
|
*/
|
|
|
|
|
for (String detailId : requestModel.getDetailIds().split(",")) {
|
|
|
|
|
reworkRecord(Long.parseLong(detailId),requestModel.getUserName(),requestModel.getOrganizeCode());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Object getContext(MesReworkTaskRequestModel requestModel, MesProductionAssembly mesProductionAssembly,Map<String,MesWorkCenter> mesWorkCenterMap) {
|
|
|
|
|
if(StringUtils.isEmpty(mesProductionAssembly.getWorkCenterCode())) MesPcnException.throwFlowException("产线代码不存在");
|
|
|
|
|
Object context = null;
|
|
|
|
|
MesWorkCenter workCenterDb = null;
|
|
|
|
|
//产线类型
|
|
|
|
|
if(!mesWorkCenterMap.containsKey(mesProductionAssembly.getWorkCenterCode())){
|
|
|
|
|
workCenterDb = prodOrgExtService.getWorkCenterDb(requestModel.getOrganizeCode(), mesProductionAssembly.getWorkCenterCode());
|
|
|
|
|
if(Objects.isNull(workCenterDb)) MesPcnException.throwFlowException("产线【%s】信息不存在", mesProductionAssembly.getWorkCenterCode());
|
|
|
|
|
mesWorkCenterMap.put(mesProductionAssembly.getWorkCenterCode(),workCenterDb);
|
|
|
|
|
}else{
|
|
|
|
|
workCenterDb = mesWorkCenterMap.get(mesProductionAssembly.getWorkCenterCode());
|
|
|
|
|
}
|
|
|
|
|
if (MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == workCenterDb.getCenterType()) context = new MesProductionAssemblySortContext().copy(mesProductionAssembly);
|
|
|
|
|
else context = new MesProductionAssemblyNosortContext().copy(mesProductionAssembly);
|
|
|
|
|
return context;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String doGererateSerialNo(MesPart part,String organizeCode,String userName) {
|
|
|
|
|
if(StringUtils.isEmpty(part.getProductMatchRule())) MesPcnException.throwMesBusiException("请检查零件信息,零件[%s]信息未维护零件条码编码规则!", part.getPartNo());
|
|
|
|
|
return syncFuncService.syncSerialNo(
|
|
|
|
@ -331,7 +423,7 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
|
|
|
|
|
* @param requestModel
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public void assemblySnRepeat(MesReworkTaskRequestModel requestModel) {
|
|
|
|
|
public void doAssemblySnRepeat(MesReworkTaskRequestModel requestModel) {
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
//
|
|
|
|
@ -409,19 +501,21 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
|
|
|
|
|
|
|
|
|
|
mesProductionAssembly.setRepeatAssemblySn(sn);
|
|
|
|
|
// 更新新替换得条码为已装配
|
|
|
|
|
updateNewSn(mesProduceSn);
|
|
|
|
|
updateNewSn(mesProduceSn,requestModel.getUserName());
|
|
|
|
|
// 更新原条码状态为已拆解
|
|
|
|
|
ConvertBean.serviceModelUpdate(mesProductionAssembly,requestModel.getUserName());
|
|
|
|
|
updateOldSn(mesProductionAssembly);
|
|
|
|
|
// 原装配件记录为已解绑
|
|
|
|
|
mesProductionAssemblyRepository.update(mesProductionAssembly);
|
|
|
|
|
// 新装配件记录为已装配
|
|
|
|
|
mesProductionAssemblyRepository.save(mesProductionRepeatAssembly);
|
|
|
|
|
ConvertBean.serviceModelInitialize(mesProductionRepeatAssembly,requestModel.getUserName());
|
|
|
|
|
mesProductionAssemblyRepository.insert(mesProductionRepeatAssembly);
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 需要更新NC标记后进入的表明细状态为已处理
|
|
|
|
|
*/
|
|
|
|
|
for (String detailId : requestModel.getDetailIds().split(",")) {
|
|
|
|
|
reworkRecord(Long.valueOf(detailId));
|
|
|
|
|
reworkRecord(Long.parseLong(detailId),requestModel.getUserName(),requestModel.getOrganizeCode());
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.error("替换条码异常", e);
|
|
|
|
@ -430,9 +524,9 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void updateNewSn(MesProduceSn mesProduceSn) {
|
|
|
|
|
private void updateNewSn(MesProduceSn mesProduceSn,String userName) {
|
|
|
|
|
mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(mesProduceSn, mesProduceSn.getCreateUser());
|
|
|
|
|
ConvertBean.serviceModelUpdate(mesProduceSn, userName);
|
|
|
|
|
mesProduceSnRepository.update(mesProduceSn);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -446,7 +540,7 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
|
|
|
|
|
MesPcnException.throwFlowException(String.format("原条码信息不存在【%s】", mesProductionAssembly.getProductSn()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ConvertBean.serviceModelUpdate(oldProduceSn, oldProduceSn.getCreateUser());
|
|
|
|
|
ConvertBean.serviceModelUpdate(oldProduceSn, mesProductionAssembly.getModifyUser());
|
|
|
|
|
oldProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY_BACK.getValue());
|
|
|
|
|
mesProduceSnRepository.update(oldProduceSn);
|
|
|
|
|
}
|
|
|
|
@ -481,11 +575,8 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
|
|
|
|
|
|
|
|
|
|
DdlPackBean pictureBean = DdlPackBean.getDdlPackBean(mesReworkTask.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(mesPart.getPartTypeCode(), "partTypeCode", pictureBean);
|
|
|
|
|
MesPartTypePicture mesPartTypePicture = mesPartTypePictureRepository.getByProperty(pictureBean);
|
|
|
|
|
if (mesPartTypePicture == null) {
|
|
|
|
|
throw new ImppBusiException(String.format("图片信息不存在,根据物料号查询[%s]", mesReworkTask.getPartNo()));
|
|
|
|
|
}
|
|
|
|
|
return mesPartTypePicture;
|
|
|
|
|
|
|
|
|
|
return mesPartTypePictureRepository.getByProperty(pictureBean);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesReworkTask getMesReworkTask(MesReworkTaskRequestModel requestModel) {
|
|
|
|
@ -509,14 +600,13 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(mesReworkTask.getId(), "pid", packBean);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.REWORK_TASK_DETAIL_STATUS.REWORK_TASK_DETAIL_STATUS_10.getValue(), "status", packBean);
|
|
|
|
|
|
|
|
|
|
List<MesReworkTaskDetail> res = mesReworkTaskDetailRepository.findByHqlWhere(packBean);
|
|
|
|
|
|
|
|
|
|
return res;
|
|
|
|
|
return mesReworkTaskDetailRepository.findByHqlWhere(packBean);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void updateMesProduceSn(MesReworkTaskRequestModel requestModel) {
|
|
|
|
|
MesProduceSn produceSn = checkProduceSn(requestModel.getSn(), requestModel.getOrganizeCode());
|
|
|
|
|
produceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SCRAP.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(produceSn,requestModel.getUserName());
|
|
|
|
|
mesProduceSnRepository.update(produceSn);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|