|
|
|
@ -213,54 +213,7 @@ public class BuWorkOrderExtService implements IBuWorkOrderExtService {
|
|
|
|
|
mesWorkOrderExt.setOrderNo(getOrderNo(userName,organizeCode));
|
|
|
|
|
mesWorkOrderExt.setWorkOrderSource(MesExtEnumUtil.WORK_ORDER_SOURCE.MANUALLY_GENERATE.getValue());
|
|
|
|
|
|
|
|
|
|
doBindSn(workOrderDto, insertNewWorkOrder(mesWorkOrderExt), data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesWorkOrderExt insertNewWorkOrder(MesWorkOrderExt mesWorkOrderExt) {
|
|
|
|
|
String organizeCode = AuthUtil.getOrganize().getOrganizeCode();
|
|
|
|
|
Integer workOrderType = mesWorkOrderExt.getWorkOrderType();
|
|
|
|
|
//如果是返工工单 设置是否生成条码为不生成
|
|
|
|
|
if (MesExtEnumUtil.WORK_ORDER_TYPE.REWORK_ORDER.getValue() == workOrderType) {
|
|
|
|
|
mesWorkOrderExt.setSnCreateStatus(MesExtEnumUtil.WORK_ORDER_SN_CREATE_STATUS.NO_CREATE.getValue());
|
|
|
|
|
} else {
|
|
|
|
|
//不是返工工单
|
|
|
|
|
MesPartExt mesPart = partExtRepository.getByProperty(
|
|
|
|
|
new String[]{"partNo", "organizeCode", "isValid", "isDeleted"},
|
|
|
|
|
new Object[]{mesWorkOrderExt.getPartNo(), organizeCode,
|
|
|
|
|
CommonEnumUtil.IS_VAILD.VAILD.getValue(),
|
|
|
|
|
CommonEnumUtil.IS_DEAL.NO.getValue()});
|
|
|
|
|
//判断物料是否需要生成条码
|
|
|
|
|
if (!ObjectUtils.isEmpty(mesPart)) {
|
|
|
|
|
Integer isCreateSn = mesPart.getIsCreateSn();
|
|
|
|
|
if (isCreateSn != null && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == isCreateSn) {
|
|
|
|
|
mesWorkOrderExt.setSnCreateStatus(MesExtEnumUtil.WORK_ORDER_SN_CREATE_STATUS.UN_CREATE.getValue());
|
|
|
|
|
} else {
|
|
|
|
|
mesWorkOrderExt.setSnCreateStatus(MesExtEnumUtil.WORK_ORDER_SN_CREATE_STATUS.NO_CREATE.getValue());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
boolean havePart = isHavePart(mesWorkOrderExt.getPartNo(), organizeCode);
|
|
|
|
|
if (!havePart) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("物料号[%s]不存在",
|
|
|
|
|
mesWorkOrderExt.getPartNo())
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
mesWorkOrderExt.setWorkOrderStatus(MesExtEnumUtil.WORK_ORDER_STATUS.CREATE.getValue());
|
|
|
|
|
|
|
|
|
|
mesWorkOrderExt.setOrganizeCode(organizeCode);
|
|
|
|
|
|
|
|
|
|
mesWorkOrderExt.setSeq(MathOperation.add(getWorkOrderExtMaxSeq(organizeCode, 1), new Double(1)));
|
|
|
|
|
|
|
|
|
|
ConvertBean.modelInitialize(mesWorkOrderExt, AuthUtil.getSessionUser());
|
|
|
|
|
mesWorkOrderExt.setSystemSyncStatus(MesExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue());
|
|
|
|
|
new ConvertBeanExt(mesWorkOrderExt).convertBean(mesWorkOrderExt);
|
|
|
|
|
MesWorkOrderExt workOrderExt = workOrderExtRepository.insert(mesWorkOrderExt);
|
|
|
|
|
insertMesWorkOrderLog(workOrderExt);
|
|
|
|
|
|
|
|
|
|
return workOrderExt;
|
|
|
|
|
doBindSn(workOrderDto, addWorkOrder(mesWorkOrderExt), data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void doBindSn(GenerateWorkOrderDto workOrderDto, MesWorkOrderExt mesWorkOrderExt, Object data) {
|
|
|
|
@ -288,16 +241,6 @@ public class BuWorkOrderExtService implements IBuWorkOrderExtService {
|
|
|
|
|
|
|
|
|
|
for (MesProduceSnExt produceSnExt : produceSnExtList) {
|
|
|
|
|
|
|
|
|
|
ConvertBean.serviceModelUpdate(produceSnExt, mesWorkOrderExt.getModifyUser());
|
|
|
|
|
new ConvertBeanExt(produceSnExt).convertBean(produceSnExt);
|
|
|
|
|
produceSnExt.setLastWorkOrderNo(mesWorkOrderExt.getOrderNo());
|
|
|
|
|
produceSnExt.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.REPAIR.getValue());
|
|
|
|
|
produceSnExt.setRouteCode(null);
|
|
|
|
|
produceSnExt.setProcessCode(null);
|
|
|
|
|
produceSnExt.setWorkCellCode(null);
|
|
|
|
|
produceSnExt.setSystemSyncStatus(MesExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue());
|
|
|
|
|
new ConvertBeanExt(produceSnExt).convertBean(produceSnExt);
|
|
|
|
|
|
|
|
|
|
MesProduceSnRepair produceSnRepair = new MesProduceSnRepair();
|
|
|
|
|
produceSnRepair.setSerialNumber(produceSnExt.getSerialNumber());
|
|
|
|
|
produceSnRepair.setProductSn(produceSnExt.getProductSn());
|
|
|
|
@ -312,12 +255,21 @@ public class BuWorkOrderExtService implements IBuWorkOrderExtService {
|
|
|
|
|
produceSnRepair.setSystemSyncStatus(MesExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue());
|
|
|
|
|
produceSnRepairList.add(produceSnRepair);
|
|
|
|
|
|
|
|
|
|
ConvertBean.serviceModelUpdate(produceSnExt, mesWorkOrderExt.getModifyUser());
|
|
|
|
|
new ConvertBeanExt(produceSnExt).convertBean(produceSnExt);
|
|
|
|
|
produceSnExt.setLastWorkOrderNo(mesWorkOrderExt.getOrderNo());
|
|
|
|
|
produceSnExt.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.REPAIR.getValue());
|
|
|
|
|
produceSnExt.setRouteCode(null);
|
|
|
|
|
produceSnExt.setProcessCode(null);
|
|
|
|
|
produceSnExt.setWorkCellCode(null);
|
|
|
|
|
produceSnExt.setSystemSyncStatus(MesExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue());
|
|
|
|
|
new ConvertBeanExt(produceSnExt).convertBean(produceSnExt);
|
|
|
|
|
|
|
|
|
|
MesReworkOrderBindSnTravel reworkOrderBindSnTravel = new MesReworkOrderBindSnTravel();
|
|
|
|
|
BeanUtils.copyProperties(produceSnRepair, reworkOrderBindSnTravel);
|
|
|
|
|
reworkOrderBindSnTravel.setBindStatus(MesExtEnumUtil.BIND_STATUS.BINGDING.getValue());
|
|
|
|
|
reworkOrderBindSnTravelList.add(reworkOrderBindSnTravel);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MesPackageDetail packageDetail = packageExtService.getPackageDetailByProductSn(mesWorkOrderExt.getOrganizeCode(), produceSnExt.getProductSn());
|
|
|
|
|
if (null != packageDetail) {
|
|
|
|
|
MesPackageExt packageExt = packageExtService.getPackageByPackNo(mesWorkOrderExt.getOrganizeCode(), packageDetail.getPackageNo());
|
|
|
|
@ -435,51 +387,51 @@ public class BuWorkOrderExtService implements IBuWorkOrderExtService {
|
|
|
|
|
|
|
|
|
|
checkSn(workOrderDto, produceSnExtDbList);
|
|
|
|
|
|
|
|
|
|
//编码规则
|
|
|
|
|
String[] serialNoArray = numberRuleExt.getNumberRule().split("}\\{");
|
|
|
|
|
//规则属性长度拼接
|
|
|
|
|
String[] ruleLengthSpiltArray = numberRuleExt.getRuleLengthSpilt().split(",");
|
|
|
|
|
String serialNoStr = "serialno";
|
|
|
|
|
int serialNoIndex = -1;
|
|
|
|
|
for (int index = 0; index < serialNoArray.length; index++) {
|
|
|
|
|
if(serialNoArray[index].contains(serialNoStr)) serialNoIndex = index;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int ruleLengthTotal = 0;
|
|
|
|
|
if(serialNoIndex != -1){
|
|
|
|
|
for (int index = 0; index < serialNoIndex; index++) {
|
|
|
|
|
ruleLengthTotal += Integer.parseInt(ruleLengthSpiltArray[index]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
int finalRuleLengthTotal = ruleLengthTotal;
|
|
|
|
|
int finalSerialNoIndex = serialNoIndex;
|
|
|
|
|
////编码规则
|
|
|
|
|
//String[] serialNoArray = numberRuleExt.getNumberRule().split("}\\{");
|
|
|
|
|
////规则属性长度拼接
|
|
|
|
|
//String[] ruleLengthSpiltArray = numberRuleExt.getRuleLengthSpilt().split(",");
|
|
|
|
|
//String serialNoStr = "serialno";
|
|
|
|
|
//int serialNoIndex = -1;
|
|
|
|
|
//for (int index = 0; index < serialNoArray.length; index++) {
|
|
|
|
|
// if(serialNoArray[index].contains(serialNoStr)) serialNoIndex = index;
|
|
|
|
|
//}
|
|
|
|
|
//
|
|
|
|
|
//int ruleLengthTotal = 0;
|
|
|
|
|
//if(serialNoIndex != -1){
|
|
|
|
|
// for (int index = 0; index < serialNoIndex; index++) {
|
|
|
|
|
// ruleLengthTotal += Integer.parseInt(ruleLengthSpiltArray[index]);
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
//int finalRuleLengthTotal = ruleLengthTotal;
|
|
|
|
|
//int finalSerialNoIndex = serialNoIndex;
|
|
|
|
|
|
|
|
|
|
produceSnExtDbList = produceSnExtDbList.stream().sorted(Comparator.comparing(MesProduceSnExt::getProductSn)).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
Integer lastSerialNo = null;
|
|
|
|
|
String lastProductSn = null;
|
|
|
|
|
for (MesProduceSnExt produceSnExt : produceSnExtDbList) {
|
|
|
|
|
|
|
|
|
|
int curSerialNo = Integer.parseInt(produceSnExt.getSerialNumber().substring(finalRuleLengthTotal, finalRuleLengthTotal + Integer.parseInt(ruleLengthSpiltArray[finalSerialNoIndex])));
|
|
|
|
|
|
|
|
|
|
if (lastSerialNo == null) {
|
|
|
|
|
|
|
|
|
|
lastSerialNo = curSerialNo;
|
|
|
|
|
lastProductSn = produceSnExt.getProductSn();
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (curSerialNo - lastSerialNo !=1 ) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("上一个产品条码[%s]与产品条码[%s]流水号存在跳号", lastProductSn, produceSnExt.getProductSn())
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
lastProductSn = produceSnExt.getProductSn();
|
|
|
|
|
lastSerialNo = curSerialNo;
|
|
|
|
|
}
|
|
|
|
|
//Integer lastSerialNo = null;
|
|
|
|
|
//String lastProductSn = null;
|
|
|
|
|
//for (MesProduceSnExt produceSnExt : produceSnExtDbList) {
|
|
|
|
|
//
|
|
|
|
|
// int curSerialNo = Integer.parseInt(produceSnExt.getSerialNumber().substring((Integer) numberRuleResultMap.get(MesExtConstWords.SEQNO_START_INDEX), (Integer) numberRuleResultMap.get(MesExtConstWords.SEQNO_END_INDEX)));
|
|
|
|
|
//
|
|
|
|
|
// if (lastSerialNo == null) {
|
|
|
|
|
//
|
|
|
|
|
// lastSerialNo = curSerialNo;
|
|
|
|
|
// lastProductSn = produceSnExt.getProductSn();
|
|
|
|
|
// continue;
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// if (curSerialNo - lastSerialNo !=1 ) {
|
|
|
|
|
// throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
// .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
|
|
|
|
|
// .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
// .setErrorDetail("上一个产品条码[%s]与产品条码[%s]流水号存在跳号", lastProductSn, produceSnExt.getProductSn())
|
|
|
|
|
// .build();
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// lastProductSn = produceSnExt.getProductSn();
|
|
|
|
|
// lastSerialNo = curSerialNo;
|
|
|
|
|
//}
|
|
|
|
|
return produceSnExtDbList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -550,7 +502,9 @@ public class BuWorkOrderExtService implements IBuWorkOrderExtService {
|
|
|
|
|
return !CollectionUtils.isEmpty(produceSnRepairList) ? produceSnRepairList.get(0) : null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void checkProduceNumberRuleIsValid(MesPartExt partExtDb, String ruleCode, MesNumberRuleExt numberRuleExt, String... productSnArr) {
|
|
|
|
|
private Map<String,Object> checkProduceNumberRuleIsValid(MesPartExt partExtDb, String ruleCode, MesNumberRuleExt numberRuleExt, String... productSnArr) {
|
|
|
|
|
|
|
|
|
|
Map<String,Object> resultMap = new HashMap<>();
|
|
|
|
|
|
|
|
|
|
for (String productSn : productSnArr) {
|
|
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
|
@ -558,16 +512,19 @@ public class BuWorkOrderExtService implements IBuWorkOrderExtService {
|
|
|
|
|
map.put(MesExtConstWords.NUMBER_RULE_EXT, numberRuleExt);
|
|
|
|
|
map.put(MesExtConstWords.PART_EXT, partExtDb);
|
|
|
|
|
|
|
|
|
|
Map<String,Object> resultMap = numberRuleCheckAttributeService.doCheckNumberRule(map);
|
|
|
|
|
resultMap = numberRuleCheckAttributeService.doCheckNumberRule(map);
|
|
|
|
|
|
|
|
|
|
if ((Boolean)resultMap.get(MesExtConstWords.RESULT) == false) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("条码[%s]关联物料[%s]配置的编码规则代码[%s]无效", productSn, partExtDb.getPartNo(), ruleCode)
|
|
|
|
|
.setErrorDetail("条码[%s]关联物料[%s]配置的编码规则代码[%s]编码规则不匹配", productSn, partExtDb.getPartNo(), ruleCode)
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return resultMap;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void checkProductSnValid(String organizeCode, String partNo, String... produceSnArr) {
|
|
|
|
@ -790,7 +747,7 @@ public class BuWorkOrderExtService implements IBuWorkOrderExtService {
|
|
|
|
|
if(workOrderDto.getPlanQty() > workOrderDto.getQty()) throw new BaseImppException("计划返工数量不能大于计划生产数量");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void addWorkOrder(MesWorkOrderExt mesWorkOrderExt) {
|
|
|
|
|
private MesWorkOrderExt addWorkOrder(MesWorkOrderExt mesWorkOrderExt) {
|
|
|
|
|
String organizeCode = AuthUtil.getOrganize().getOrganizeCode();
|
|
|
|
|
Integer workOrderType = mesWorkOrderExt.getWorkOrderType();
|
|
|
|
|
MesPartExt mesPart = getPart(mesWorkOrderExt, organizeCode);
|
|
|
|
@ -892,7 +849,10 @@ public class BuWorkOrderExtService implements IBuWorkOrderExtService {
|
|
|
|
|
mesWorkOrderExt.setSystemSyncStatus(MesExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue());
|
|
|
|
|
new ConvertBeanExt(mesWorkOrderExt).convertBean(mesWorkOrderExt);
|
|
|
|
|
MesWorkOrderExt workOrderExt = workOrderExtRepository.save(mesWorkOrderExt);
|
|
|
|
|
|
|
|
|
|
insertMesWorkOrderLog(workOrderExt);
|
|
|
|
|
|
|
|
|
|
return workOrderExt;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesPartExt getPart(MesWorkOrderExt mesWorkOrderExt, String organizeCode) {
|
|
|
|
|