手工查单问题修复

tags/yfai-mes-ext-v2.4
jun 6 months ago
parent 55afdefd2f
commit e42891c570

@ -327,81 +327,106 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
} }
private void insertMesWorkOrder(MesWorkOrder item, List<MesWorkOrderPart> orderPartList) { private void insertMesWorkOrder(MesWorkOrder item, List<MesWorkOrderPart> orderPartList) {
/** //打印目视单使用
* bom, StringBuilder descriptionStr = new StringBuilder();
*
*/ //客户ptr信息
Map<String,String> ptrRuleListMap = new HashMap<>(); StringBuilder ptrInfos = new StringBuilder();
//是否修改为P单 boolean ptrFlag = false;
boolean isModifyPOrder = false; boolean fOrderFlag = false;
//查询mes_part_ptr表根据物料清单查找ptr替换信息 List<MesWorkOrderAssembly> assemblyList = new ArrayList<>();
if (!CollectionUtils.isEmpty(orderPartList)){ if (!CollectionUtils.isEmpty(orderPartList)) {
Map<String, MesWorkOrderPart> orderPartMap = orderPartList.stream().collect(Collectors.toMap(MesWorkOrderPart::getPartNo, Function.identity())); //是否基于排序加工规则--待定
//先替换客户的ptr信息 //查询装配目视项
String ptrInfo = item.getPtrInfo(); assemblyList = getAssemblyList(item.getWorkCenterCode(), item.getCarModelCode(), orderPartList, item.getOrganizeCode());
if (!StringUtils.isEmpty(ptrInfo)) { //ptr信息
List<String> ptrInfoList = Arrays.asList(ptrInfo.replace("_", "").split("\\|")); List<String> partNoList = orderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList());
if (!ptrInfoList.isEmpty()){ List<MesPartPtr> partPtrList = getPartPtrList(item.getOrganizeCode(), item.getWorkCenterCode(), partNoList);
List<MesPartPtr> custPartPtrList = getCustPartPtrList(ptrInfoList, item.getOrganizeCode());
for (MesPartPtr mesPartPtr : custPartPtrList) { for (MesWorkOrderPart orderPart : orderPartList) {
//根据mesPartPtr的目标零件号找到零件信息 List<MesPartPtr> ptr = partPtrList.stream().filter(t -> t.getSrcPartNo().equals(orderPart.getPartNo())).collect(Collectors.toList());
String destPartNo = mesPartPtr.getDestPartNo(); if (ptr.isEmpty()) {
MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, item.getOrganizeCode()); continue;
//更新物料清单
MesWorkOrderPart orderPart = orderPartMap.get(destPartNo);
if (orderPart != null) {
orderPart.setPartNo(mesPartSap.getPartNo());
orderPart.setPartName(mesPartSap.getPartName());
orderPart.setShippingPartNo(mesPartSap.getPartNo());
if (!isModifyPOrder){
isModifyPOrder = true;
} }
MesPartPtr mesPartPtr = null;
MesPartPtrDetail mesPartPtrDetail = null;
//获取相同总成的ptrId 在ptr详情中
List<MesPartPtr> custPartPtrList = ptr.stream().filter(t -> t.getIsCustomerSendPrtInfo() == null || t.getIsCustomerSendPrtInfo() != CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(custPartPtrList)) {
mesPartPtr = custPartPtrList.iterator().next();
//查询ptr总成--只有特定总成才会替换
DdlPackBean detailPartPtr = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(mesPartPtr.getId(), "ptrId", detailPartPtr);
DdlPreparedPack.getStringEqualPack(item.getPartNo(), "totalPartNo", detailPartPtr);
List<MesPartPtrDetail> ptrDetailList = partPtrDetailRao.findByHqlWhere(detailPartPtr);
if (!ptrDetailList.isEmpty()) {
mesPartPtrDetail = ptrDetailList.get(0);
} }
} }
if (mesPartPtr == null || mesPartPtrDetail == null) {
continue;
} }
ptrFlag = true;
if (mesPartPtr.getIsInterPrt() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) {
fOrderFlag = true;
} }
List<String> partNoList = orderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList()); //将工单类零件表替换位PTR条件中维护的替换零件
List<MesPartPtr> partPtrList = getPartPtrList(item.getOrganizeCode(), item.getWorkCenterCode(), partNoList); MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(mesPartPtr.getDestPartNo(), item.getOrganizeCode());
//装配件规则如果进行了零件替换 则使用ptr的规则 key 零件号value 是规则
for (MesPartPtr mesPartPtr : partPtrList) {
//根据mesPartPtr的目标零件号找到零件信息
String destPartNo = mesPartPtr.getDestPartNo();
String srcPartNo = mesPartPtr.getSrcPartNo();
MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, item.getOrganizeCode());
//更新物料清单
MesWorkOrderPart orderPart = orderPartMap.get(srcPartNo);
if (orderPart != null) {
orderPart.setPartNo(mesPartSap.getPartNo()); orderPart.setPartNo(mesPartSap.getPartNo());
orderPart.setPartName(mesPartSap.getPartName()); orderPart.setPartName(mesPartSap.getPartName());
orderPart.setShippingPartNo(mesPartSap.getPartNo()); //用于打印目视单
ptrRuleListMap.put(mesPartSap.getPartNo(), mesPartPtr.getReplacePartSnRule()); descriptionStr.append(mesPartPtr.getMemo());
if (!isModifyPOrder){
isModifyPOrder = true;
}
//更新mes_part_ptr的实际数量 + 1 //更新mes_part_ptr的实际数量 + 1
mesPartPtr.setPrtVehicleActualCount(mesPartPtr.getPrtVehicleActualCount() + 1); mesPartPtr.setPrtVehicleActualCount(mesPartPtr.getPrtVehicleActualCount() + 1);
ConvertBean.saveOrUpdate(mesPartPtr, item.getModifyUser()); ConvertBean.saveOrUpdate(mesPartPtr, "JOB");
partPtrRao.update(mesPartPtr); partPtrRao.update(mesPartPtr);
DdlPackBean partPtrDetailPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); if (mesPartPtrDetail != null) {
DdlPreparedPack.getNumEqualPack(mesPartPtr.getId(),"ptrId",partPtrDetailPackBean);
DdlPreparedPack.getStringEqualPack(item.getPartNo(),"totalPartNo",partPtrDetailPackBean);
List<MesPartPtrDetail> partPtrDetailList = partPtrDetailRao.findByHqlWhere(partPtrDetailPackBean);
if (!partPtrDetailList.isEmpty()){
MesPartPtrDetail mesPartPtrDetail = partPtrDetailList.get(0);
mesPartPtrDetail.setQty(mesPartPtrDetail.getQty() + 1); mesPartPtrDetail.setQty(mesPartPtrDetail.getQty() + 1);
ConvertBean.saveOrUpdate(mesPartPtrDetail, item.getModifyUser()); ConvertBean.saveOrUpdate(mesPartPtrDetail, "JOB");
partPtrDetailRao.update(mesPartPtrDetail); partPtrDetailRao.update(mesPartPtrDetail);
} }
//更新mes_part_ptr_detail 的workOrder.partNo 数量加 1 ;替换了几次还是什么 MesWorkOrderAssembly orderAssemblyList = null;
for (MesWorkOrderAssembly orderAssembly : assemblyList) {
String assemblyPartNo = orderAssembly.getAssemblyPartNo();
if (!StringUtils.isEmpty(assemblyPartNo) && assemblyPartNo.equals(mesPartPtr.getSrcPartNo())) {
orderAssemblyList = orderAssembly;
} }
} }
/**
* pisces
* add by aix 2017.4.11 PTRWORKORDERASSEMBLYpartdesc
*/
if (!Objects.isNull(orderAssemblyList)) {
if (orderAssemblyList.getDisplaySeq() != null && orderAssemblyList.getDisplaySeq() != 0) {
orderAssemblyList.setDisplayValue(mesPartPtr.getVisualItem());
} }
orderAssemblyList.setAssemblyPartNo(mesPartSap.getPartNo());
// 生成装配件清单 orderAssemblyList.setAssemblyPartName(mesPartSap.getPartName());
if (isModifyPOrder){ orderAssemblyList.setMatchRule(mesPartPtr.getReplacePartSnRule());
ptrInfos.append("INFO|").append(mesPartPtr.getId());
if (mesPartPtrDetail != null) {
ptrInfos.append("PART|").append(mesPartPtrDetail.getId());
}
}
}
}
if (ptrFlag && !fOrderFlag) {
item.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.PTR.getValue()); item.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.PTR.getValue());
} else if (ptrFlag) {
item.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.F.getValue());
} else {
item.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue());
} }
item.setPtrInfo(ptrInfos.toString());
//生成工单号
item.setWorkOrderNo(getOrderNo(item));
//获取车型remark用于目视单打印
String remark = getCarRemark(item.getCustCode(), item.getCarModelCode(), item.getOrganizeCode());
item.setDescription(descriptionStr.append(remark).toString());
if (!CollectionUtils.isEmpty(orderPartList)) { if (!CollectionUtils.isEmpty(orderPartList)) {
for (MesWorkOrderPart orderPart : orderPartList) { for (MesWorkOrderPart orderPart : orderPartList) {
@ -411,12 +436,8 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
} }
workOrderPartRao.saveAll(orderPartList); workOrderPartRao.saveAll(orderPartList);
} }
List<MesWorkOrderAssembly> assemblyList = getAssemblyList(item.getWorkCenterCode(), item.getCarModelCode(), orderPartList, item.getOrganizeCode());
if (!CollectionUtils.isEmpty(assemblyList)) { if (!CollectionUtils.isEmpty(assemblyList)) {
for (MesWorkOrderAssembly orderAssembly : assemblyList) { for (MesWorkOrderAssembly orderAssembly : assemblyList) {
if (ptrRuleListMap.get(orderAssembly.getPartNo()) != null){
orderAssembly.setMatchRule(ptrRuleListMap.get(orderAssembly.getPartNo()));
}
orderAssembly.setPartNo(item.getPartNo()); orderAssembly.setPartNo(item.getPartNo());
orderAssembly.setPartName(item.getPartName()); orderAssembly.setPartName(item.getPartName());
orderAssembly.setWorkOrderNo(item.getWorkOrderNo()); orderAssembly.setWorkOrderNo(item.getWorkOrderNo());
@ -499,8 +520,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
//自动发布 //自动发布
if (CommonEnumUtil.VALID == mesPartProdGroup.getIsAutoRelease()) { if (CommonEnumUtil.VALID == mesPartProdGroup.getIsAutoRelease()) {
item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue());
// 创建工单打印队列
insertPrintQueue(item);
} else { } else {
item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue());
} }
@ -1780,8 +1799,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
//排序工单数量为1 //排序工单数量为1
bean.setQty(1d); bean.setQty(1d);
//生成工单号
bean.setWorkOrderNo(getOrderNo(bean));
//自动发布 //自动发布
List<MesWorkOrderPart> orderPartList = autoPublish(bean); List<MesWorkOrderPart> orderPartList = autoPublish(bean);
//顺序号 //顺序号
@ -1790,6 +1807,10 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
bean.setCustSn(getCustSn(bean.getCustPartNo(), bean.getOrganizeCode(), bean.getCreateUser())); bean.setCustSn(getCustSn(bean.getCustPartNo(), bean.getOrganizeCode(), bean.getCreateUser()));
//生成工单零件 工单装配件 //生成工单零件 工单装配件
insertMesWorkOrder(bean, orderPartList); insertMesWorkOrder(bean, orderPartList);
// 创建工单打印队列
if(bean.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()){
insertPrintQueue(bean);
}
//物料名称不存在,从物料信息中获取 //物料名称不存在,从物料信息中获取
MesPartSap mesPart = mesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); MesPartSap mesPart = mesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode());
@ -2095,6 +2116,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean); DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean);
DdlPreparedPack.getStringEqualPack(bomVersion, "bomVersion", ddlPackBean); DdlPreparedPack.getStringEqualPack(bomVersion, "bomVersion", ddlPackBean);
DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), "effStartTime", ddlPackBean); DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), "effStartTime", ddlPackBean);
DdlPreparedPack.getStringBiggerPack(TimeTool.getNowTime(true), "effEndTime", ddlPackBean);
DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), ddlPackBean); DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), ddlPackBean);
List<MesBom> mesBoms = mesBomRDao.findByHqlWhere(ddlPackBean); List<MesBom> mesBoms = mesBomRDao.findByHqlWhere(ddlPackBean);
if (org.springframework.util.CollectionUtils.isEmpty(mesBoms)) { if (org.springframework.util.CollectionUtils.isEmpty(mesBoms)) {
@ -2180,24 +2202,47 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
} }
private List<MesPartPtr> getPartPtrList(String organizeCode,String workCenterCode, List<String> partNoList) { private List<MesPartPtr> getPartPtrList(String organizeCode,String workCenterCode, List<String> partNoList) {
/**
* 2024/11/16
* PTR
* 1.
* 2.
* 3.
*/
DdlPackBean partPtrPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean partPtrPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", partPtrPackBean); DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", partPtrPackBean);
DdlPreparedPack.getInPackList(partNoList, "srcPartNo", partPtrPackBean); DdlPreparedPack.getInPackList(partNoList, "srcPartNo", partPtrPackBean);
DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "startTime", partPtrPackBean); DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), "startTime", partPtrPackBean);
DdlPreparedPack.getStringBiggerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "endTime", partPtrPackBean);
DdlPreparedPack.getIsNotNull("prtVehicleCount", partPtrPackBean);
List<MesPartPtr> partPtrList = partPtrRao.findByHqlWhere(partPtrPackBean); List<MesPartPtr> partPtrList = partPtrRao.findByHqlWhere(partPtrPackBean);
/**
*
*/
DdlPackBean part1PtrPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", part1PtrPackBean);
DdlPreparedPack.getInPackList(partNoList, "srcPartNo", part1PtrPackBean);
DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), "startTime", part1PtrPackBean);
DdlPreparedPack.getIsNotNull("prtVehicleCount", part1PtrPackBean);
DdlPreparedPack.getIsNull("endTime", part1PtrPackBean);
List<MesPartPtr> partPtrList1 = partPtrRao.findByHqlWhere(part1PtrPackBean);
partPtrList.addAll(partPtrList1);
partPtrList = partPtrList.stream().filter(item -> item.getPrtVehicleCount() != null && item.getPrtVehicleCount() > 0) partPtrList = partPtrList.stream().filter(item -> item.getPrtVehicleCount() != null && item.getPrtVehicleCount() > 0)
.filter(item-> item.getPrtVehicleCount() > item.getPrtVehicleActualCount()) .filter(item-> item.getPrtVehicleCount() > item.getPrtVehicleActualCount())
.collect(Collectors.toList()); .collect(Collectors.toList());
return partPtrList; /**
} *
*/
//根据排序信息PTR零件号 获取 ptr信息 DdlPackBean part2PtrPackBean = DdlPackBean.getDdlPackBean(organizeCode);
private List<MesPartPtr> getCustPartPtrList(List<String> ptrInfoList,String organizeCode){ DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", part2PtrPackBean);
DdlPackBean partPtrPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getInPackList(partNoList, "srcPartNo", part2PtrPackBean);
DdlPreparedPack.getInPackList(ptrInfoList, "seqInfoPrtPart", partPtrPackBean); DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), "startTime", part2PtrPackBean);
return partPtrRao.findByHqlWhere(partPtrPackBean); DdlPreparedPack.getIsNull("prtVehicleCount", part2PtrPackBean);
DdlPreparedPack.getIsNull("endTime", part2PtrPackBean);
List<MesPartPtr> partPtrList2 = partPtrRao.findByHqlWhere(part2PtrPackBean);
partPtrList.addAll(partPtrList2);
return partPtrList;
} }
private MesPartProdGroup getMesPartProdGroup(String organizeCode, String workCenterCode) { private MesPartProdGroup getMesPartProdGroup(String organizeCode, String workCenterCode) {
@ -2254,7 +2299,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
orderAssembly.setCraftCode(sortCfg.getCraftCode()); orderAssembly.setCraftCode(sortCfg.getCraftCode());
orderAssembly.setRouteSeq(sortCfg.getRouteSeq()); orderAssembly.setRouteSeq(sortCfg.getRouteSeq());
orderAssembly.setWorkCellCode(sortCfg.getWorkCellCode()); orderAssembly.setWorkCellCode(sortCfg.getWorkCellCode());
orderAssembly.setOrderPartId(orderPart.getId().toString());
orderAssembly.setEquipmentCode(sortCfg.getEquipmentCode()); orderAssembly.setEquipmentCode(sortCfg.getEquipmentCode());
orderAssembly.setReportType(sortCfg.getReportType()); orderAssembly.setReportType(sortCfg.getReportType());
if (sortCfg.getReportType() != null && sortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()){ if (sortCfg.getReportType() != null && sortCfg.getReportType() == MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue()){
@ -2519,4 +2563,15 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
return mesProductVersion; return mesProductVersion;
} }
private String getCarRemark(String custCode,String carModelCode,String organizeCode){
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(custCode,"custCode",ddlPackBean);
DdlPreparedPack.getStringEqualPack(carModelCode,"carModelCode",ddlPackBean);
List<MesCustomerCarModel> carModelList = customerCarModelRepository.findByHqlTopWhere(ddlPackBean, 1);
if (carModelList != null && !carModelList.isEmpty()){
return carModelList.get(0).getRemark();
}
return "";
}
} }

Loading…
Cancel
Save