|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base;
|
|
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.base.IQualityDecisionService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.base.ISxRepairWorkService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.base.IWorkCenterExtService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IProduceSnExtService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IProduceSnRepairService;
|
|
|
|
@ -66,48 +67,123 @@ public class QualityDecisionService implements IQualityDecisionService {
|
|
|
|
|
private IWorkCenterExtService workCenterExtService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private ISxRepairWorkService repairWorkService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesProcessCellRepository mesProcessCellRDao;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesProduceSnMcRecordRepository produceSnMcRecordRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesBadCellDetailRepository badCellDetailRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesRepairRecordExtRepository repairRecordExtRepository;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public MesProduceSnExt doCheckSerialNumber(String serialNumber, String organizeCode,String workCenterCode) {
|
|
|
|
|
MesProduceSnExt produceSnExt = produceSnExtService.getProduceSnExtBySn(organizeCode, serialNumber);
|
|
|
|
|
public Map<String, Object> doCheckSerialNumberExt(String serialNumber, String organizeCode, String workCenterCode) {
|
|
|
|
|
|
|
|
|
|
if(produceSnExt == null){
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
|
|
|
|
|
.setErrorDetail("条码信息不存在,请检查")
|
|
|
|
|
.build();
|
|
|
|
|
Map<String, Object> resultMap = new HashMap<>();
|
|
|
|
|
|
|
|
|
|
MesProduceSnExt produceSnExt = doCheckSerialNumber(serialNumber, organizeCode, workCenterCode);
|
|
|
|
|
|
|
|
|
|
if (produceSnExt.getOperateType() == MesPcnExtEnumUtil.SN_OPERATE_TYPE.REPAIR.getValue()) {
|
|
|
|
|
resultMap.put("isFreeze", false);
|
|
|
|
|
} else {
|
|
|
|
|
resultMap.put("isFreeze", false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(produceSnExt.getSnStatus() == MesPcnExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()){
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
|
|
|
|
|
.setErrorDetail("扫描的条码的条码状态为【下线】,不可以操作")
|
|
|
|
|
.build();
|
|
|
|
|
resultMap.put("object", produceSnExt);
|
|
|
|
|
|
|
|
|
|
return resultMap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public MesProduceSnExt doCheckSerialNumber(String serialNumber, String organizeCode, String workCenterCode) {
|
|
|
|
|
|
|
|
|
|
MesProduceSnMcRecord produceSnMcRecordDb = produceSnMcRecordRepository.getByProperty(
|
|
|
|
|
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.MANAGE_CODE, MesPcnExtConstWords.SN_STATUS},
|
|
|
|
|
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), serialNumber, MesPcnExtEnumUtil.MC_RECORD_SN_STATUS.CREATE.getValue()});
|
|
|
|
|
|
|
|
|
|
MesProduceSnExt produceSnExt = null;
|
|
|
|
|
|
|
|
|
|
if(produceSnMcRecordDb != null){
|
|
|
|
|
|
|
|
|
|
produceSnExt = produceSnExtService.getProduceSnExtBySn(organizeCode, produceSnMcRecordDb.getSerialNumber());
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 先查询条码信息,判断最终工单号字段与工单号字段是否一致,一致的话判断生产线跟条码信息的生产线是否一致,工单不一样的话,根据最终工单号与条码查询返工条码表,判断生产线是否一致
|
|
|
|
|
if(produceSnExt.getLastWorkOrderNo().equals(produceSnExt.getWorkOrderNo())){
|
|
|
|
|
if(!workCenterCode.equals(produceSnExt.getWorkCenterCode())){
|
|
|
|
|
if(produceSnExt == null){
|
|
|
|
|
|
|
|
|
|
MesProduceSnRepair produceSnRepair = produceSnRepairService.getProduceSnRepairBySn(organizeCode, serialNumber);
|
|
|
|
|
|
|
|
|
|
if (produceSnRepair == null) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
|
|
|
|
|
.setErrorDetail("当前扫描的条码[%s]的产线为[%s],与当前选择的产线[%s]不一致,请重新扫描", serialNumber, produceSnExt.getWorkCenterCode(), workCenterCode)
|
|
|
|
|
.build();
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
|
|
|
|
|
.setErrorDetail("条码信息不存在,请检查")
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
}else {
|
|
|
|
|
MesProduceSnRepair produceSnRepair = produceSnRepairService.getProduceSnRepairBySnAndOrderNo(organizeCode, serialNumber,produceSnExt.getLastWorkOrderNo());
|
|
|
|
|
if(null!=produceSnRepair && !workCenterCode.equals(produceSnRepair.getWorkCenterCode())){
|
|
|
|
|
|
|
|
|
|
if (!StringUtils.isEmpty(produceSnRepair.getOutWorkCenterTime())) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
|
|
|
|
|
.setErrorDetail("扫描的条码的条码状态为【下线】,不可以操作", produceSnRepair.getSerialNumber())
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(null != produceSnRepair && !workCenterCode.equals(produceSnRepair.getWorkCenterCode())){
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
|
|
|
|
|
.setErrorDetail("当前扫描的条码[%s]的产线为[%s],与当前选择的产线[%s]不一致,请重新扫描", serialNumber,produceSnRepair.getWorkCenterCode(), workCenterCode)
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
produceSnExt = produceSnExtService.getProduceSnExtBySn(organizeCode, produceSnRepair.getSerialNumber());
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
if(produceSnExt.getSnStatus() == MesPcnExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()){
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
|
|
|
|
|
.setErrorDetail("扫描的条码的条码状态为【下线】,不可以操作")
|
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 先查询条码信息,判断最终工单号字段与工单号字段是否一致,一致的话判断生产线跟条码信息的生产线是否一致,工单不一样的话,根据最终工单号与条码查询返工条码表,判断生产线是否一致
|
|
|
|
|
if (produceSnExt.getLastWorkOrderNo().equals(produceSnExt.getWorkOrderNo())) {
|
|
|
|
|
if (!workCenterCode.equals(produceSnExt.getWorkCenterCode())) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
|
|
|
|
|
.setErrorDetail("当前扫描的条码[%s]的产线为[%s],与当前选择的产线[%s]不一致,请重新扫描", serialNumber, produceSnExt.getWorkCenterCode(), workCenterCode)
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
MesProduceSnRepair produceSnRepair = produceSnRepairService.getProduceSnRepairBySnAndOrderNo(organizeCode, serialNumber, produceSnExt.getLastWorkOrderNo());
|
|
|
|
|
|
|
|
|
|
if (produceSnRepair == null) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
|
|
|
|
|
.setErrorDetail("条码信息不存在,请检查")
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (null != produceSnRepair && !workCenterCode.equals(produceSnRepair.getWorkCenterCode())) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
|
|
|
|
|
.setErrorDetail("当前扫描的条码[%s]的产线为[%s],与当前选择的产线[%s]不一致,请重新扫描", serialNumber,produceSnRepair.getWorkCenterCode(), workCenterCode)
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return produceSnExt;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -148,25 +224,11 @@ public class QualityDecisionService implements IQualityDecisionService {
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
String workOrderNo;
|
|
|
|
|
MesProduceSnExt produceSnExt = produceSnExtService.getProduceSnExtBySn(repairRequestModel.getOrganizeCode(), repairRequestModel.getSerialNumber());
|
|
|
|
|
if (null == produceSnExt) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
|
|
|
|
|
.setErrorDetail("产品条码[%s]不存在", repairRequestModel.getSerialNumber())
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MesProduceSnExt produceSnExt = doCheckSerialNumber(repairRequestModel.getSerialNumber(), repairRequestModel.getOrganizeCode(), repairRequestModel.getWorkCenterCode());
|
|
|
|
|
|
|
|
|
|
if (!StringUtils.isEmpty(produceSnExt.getLastWorkOrderNo()) && !produceSnExt.getLastWorkOrderNo().equals(produceSnExt.getWorkOrderNo())) {
|
|
|
|
|
MesProduceSnRepair produceSnRepair = produceSnRepairService.getProduceSnRepairBySn(repairRequestModel.getOrganizeCode(), repairRequestModel.getSerialNumber());
|
|
|
|
|
if (null == produceSnRepair) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
|
|
|
|
|
.setErrorDetail("产品条码[%s]与返工工单[%s]的关联关系不存在", repairRequestModel.getSerialNumber(), produceSnExt.getLastWorkOrderNo())
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
workOrderNo = produceSnRepair.getWorkOrderNo();
|
|
|
|
|
workOrderNo = produceSnExt.getLastWorkOrderNo();
|
|
|
|
|
} else {
|
|
|
|
|
workOrderNo = produceSnExt.getWorkOrderNo();
|
|
|
|
|
}
|
|
|
|
@ -241,6 +303,71 @@ public class QualityDecisionService implements IQualityDecisionService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void doUnfreeze(RepairRequestModel repairRequestModel) {
|
|
|
|
|
|
|
|
|
|
MesProduceSnExt produceSnExt = doCheckSerialNumber(repairRequestModel.getSerialNumber(), repairRequestModel.getOrganizeCode(), repairRequestModel.getWorkCenterCode());
|
|
|
|
|
|
|
|
|
|
List<MesBadCellDetail> badCellDetailList = repairWorkService.getMesBadCellDetailBySerialNumber(produceSnExt.getSerialNumber(), repairRequestModel.getOrganizeCode());
|
|
|
|
|
|
|
|
|
|
boolean isCompleteRepair = CollectionUtils.isEmpty(badCellDetailList) ? false : badCellDetailList.stream().filter(o -> o.getRepairStatus() == MesPcnExtEnumUtil.MES_REPAIR_STATUS.REPAIRED.getValue()).collect(Collectors.toList()).size() > 0 ;
|
|
|
|
|
|
|
|
|
|
if (produceSnExt.getSnStatus() != MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getValue()) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("当前条码状态为[%s],不为[%s]", MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSnExt.getSnStatus()), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getDescription())
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (produceSnExt.getQcStatus() != MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.DEFECTED.getValue()) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("当前条码状态为[%s],不为[%s]", MesPcnExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSnExt.getSnStatus()), MesPcnExtEnumUtil.PRODUCE_SN_STATUS.PROCESS.getDescription())
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!isCompleteRepair) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("未维修完成")
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
produceSnExt.setOperateType(MesPcnExtEnumUtil.SN_OPERATE_TYPE.QUALIFIED.getValue());
|
|
|
|
|
produceSnExt.setQcStatus(MesPcnExtEnumUtil.PRODUCE_SN_QC_STATUS.QUALIFIED.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(produceSnExt, repairRequestModel.getModifyUser());
|
|
|
|
|
new ConvertBeanExt(produceSnExt).convertBean(produceSnExt);
|
|
|
|
|
produceSnExtRepository.save(produceSnExt);
|
|
|
|
|
|
|
|
|
|
List<MesBadCellDetail> badCellDetailBySerialNumberList = repairWorkService.getMesBadCellDetailBySerialNumber(produceSnExt.getSerialNumber(), produceSnExt.getOrganizeCode());
|
|
|
|
|
|
|
|
|
|
List<MesRepairRecordExt> repairRecordBySerialNumberList = repairWorkService.getMesRepairRecordBySerialNumber(produceSnExt.getSerialNumber(), produceSnExt.getOrganizeCode());
|
|
|
|
|
|
|
|
|
|
if (!CollectionUtils.isEmpty(badCellDetailBySerialNumberList)) {
|
|
|
|
|
for (MesBadCellDetail badCellDetail : badCellDetailBySerialNumberList) {
|
|
|
|
|
badCellDetail.setIsFreeze(MesPcnExtEnumUtil.IS_UNFREEZE.BIND.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(badCellDetail, repairRequestModel.getModifyUser());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
badCellDetailRepository.saveAll(badCellDetailBySerialNumberList);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!CollectionUtils.isEmpty(repairRecordBySerialNumberList)) {
|
|
|
|
|
for (MesRepairRecordExt repairRecordExt : repairRecordBySerialNumberList) {
|
|
|
|
|
repairRecordExt.setIsFreeze(MesPcnExtEnumUtil.IS_UNFREEZE.BIND.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(repairRecordExt, repairRequestModel.getModifyUser());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
repairRecordExtRepository.saveAll(repairRecordBySerialNumberList);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public MesProcessCell getMesProcessCell(String workCenterCode, String workCellCode, String organizeCode) {
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(workCenterCode, MesPcnExtConstWords.WORK_CENTER_CODE, packBean);
|
|
|
|
@ -248,5 +375,4 @@ public class QualityDecisionService implements IQualityDecisionService {
|
|
|
|
|
return mesProcessCellRDao.getByProperty(packBean);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|