工单范围绑定条码

tags/yfai-mes-ext-v1.0
yxw 1 year ago
parent 7d4f92000f
commit 9010f98800

@ -63,6 +63,7 @@ public class BuWorkOrderExtController extends MesBaseController {
.notNull("workCenterCode",workOrderDto.getWorkCenterCode())
.notNull("startTime",workOrderDto.getStartTime())
.notNull("endTime",workOrderDto.getEndTime());
workOrderDto.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode());
workOrderExtService.insertManualGenerate(workOrderDto);
return ResultBean.success();
} catch (ImppBusiException busExcep) {

@ -40,7 +40,7 @@ public class SxWorkCelITaktCollectRecordReportController extends MesBaseControll
try {
workCelITaktCollectRecord.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode());
ListPager listPager = workCellTaktCollectRecordService.queryWorkCellTaktCollectRecrodLByPager(workCelITaktCollectRecord, pager);
return ResultBean.success("操作成功").setListPager(listPager)
return ResultBean.success("查询成功").setListPager(listPager)
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException busExcep) {
return ResultBean.fail(busExcep);

@ -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) {

@ -128,6 +128,8 @@ public class SxNumberRuleCheckAttributeService implements ISxNumberRuleCheckAttr
}
resultMap.put("ruleLengthList", new ArrayList<>(ruleLengthList));
int snIndex = 0;
for (String s : numberRuleList) {
switch (s) {
@ -195,6 +197,8 @@ public class SxNumberRuleCheckAttributeService implements ISxNumberRuleCheckAttr
}
resultMap.put(MesExtConstWords.SN_WITHOUT_SEQNO, snWithoutSeqNoBuffer.replace(snIndex, snIndex + ruleLengthList.get(0), MesExtConstWords.SEQNO));
resultMap.put(MesExtConstWords.SEQNO_START_INDEX, snIndex);
resultMap.put(MesExtConstWords.SEQNO_END_INDEX, snIndex + ruleLengthList.get(0));
snIndex += ruleLengthList.get(0);
serialNumberList.remove(0);

@ -289,7 +289,6 @@ public class SxReworkOrderBindSnExcelService implements IExcelImportExtService {
finalWorkOrderNoBySn.put(produceSnExt.getProductSn(), workOrderNo);
if (!StringUtils.isEmpty(packageNo)) finalWorkOrderNoByPackSn.put(packageNo, workOrderNo);
produceSnDbList.add(produceSnExt);
successRowNum ++;
} else {

@ -946,5 +946,9 @@ public class MesExtConstWords {
public static final String PART_EXT = "PART_EXT";
public static final String LEFT_BRACE = "{";
public static final String RIGHT_BRACE = "}";
//流水号起始位置
public static final String SEQNO_START_INDEX = "SEQNO_START_INDEX";
//流水号截至位置
public static final String SEQNO_END_INDEX = "SEQNO_END_INDEX";
}

Loading…
Cancel
Save