手工查单问题修复

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) {
/**
* bom,
*
*/
Map<String,String> ptrRuleListMap = new HashMap<>();
//是否修改为P单
boolean isModifyPOrder = false;
//查询mes_part_ptr表根据物料清单查找ptr替换信息
//打印目视单使用
StringBuilder descriptionStr = new StringBuilder();
//客户ptr信息
StringBuilder ptrInfos = new StringBuilder();
boolean ptrFlag = false;
boolean fOrderFlag = false;
List<MesWorkOrderAssembly> assemblyList = new ArrayList<>();
if (!CollectionUtils.isEmpty(orderPartList)) {
Map<String, MesWorkOrderPart> orderPartMap = orderPartList.stream().collect(Collectors.toMap(MesWorkOrderPart::getPartNo, Function.identity()));
//先替换客户的ptr信息
String ptrInfo = item.getPtrInfo();
if (!StringUtils.isEmpty(ptrInfo)) {
List<String> ptrInfoList = Arrays.asList(ptrInfo.replace("_", "").split("\\|"));
if (!ptrInfoList.isEmpty()){
List<MesPartPtr> custPartPtrList = getCustPartPtrList(ptrInfoList, item.getOrganizeCode());
for (MesPartPtr mesPartPtr : custPartPtrList) {
//根据mesPartPtr的目标零件号找到零件信息
String destPartNo = mesPartPtr.getDestPartNo();
MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(destPartNo, item.getOrganizeCode());
//更新物料清单
MesWorkOrderPart orderPart = orderPartMap.get(destPartNo);
if (orderPart != null) {
orderPart.setPartNo(mesPartSap.getPartNo());
orderPart.setPartName(mesPartSap.getPartName());
orderPart.setShippingPartNo(mesPartSap.getPartNo());
if (!isModifyPOrder){
isModifyPOrder = true;
//是否基于排序加工规则--待定
//查询装配目视项
assemblyList = getAssemblyList(item.getWorkCenterCode(), item.getCarModelCode(), orderPartList, item.getOrganizeCode());
//ptr信息
List<String> partNoList = orderPartList.stream().map(MesWorkOrderPart::getPartNo).collect(Collectors.toList());
List<MesPartPtr> partPtrList = getPartPtrList(item.getOrganizeCode(), item.getWorkCenterCode(), partNoList);
for (MesWorkOrderPart orderPart : orderPartList) {
List<MesPartPtr> ptr = partPtrList.stream().filter(t -> t.getSrcPartNo().equals(orderPart.getPartNo())).collect(Collectors.toList());
if (ptr.isEmpty()) {
continue;
}
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());
List<MesPartPtr> partPtrList = getPartPtrList(item.getOrganizeCode(), item.getWorkCenterCode(), partNoList);
//装配件规则如果进行了零件替换 则使用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) {
//将工单类零件表替换位PTR条件中维护的替换零件
MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(mesPartPtr.getDestPartNo(), item.getOrganizeCode());
orderPart.setPartNo(mesPartSap.getPartNo());
orderPart.setPartName(mesPartSap.getPartName());
orderPart.setShippingPartNo(mesPartSap.getPartNo());
ptrRuleListMap.put(mesPartSap.getPartNo(), mesPartPtr.getReplacePartSnRule());
if (!isModifyPOrder){
isModifyPOrder = true;
}
//用于打印目视单
descriptionStr.append(mesPartPtr.getMemo());
//更新mes_part_ptr的实际数量 + 1
mesPartPtr.setPrtVehicleActualCount(mesPartPtr.getPrtVehicleActualCount() + 1);
ConvertBean.saveOrUpdate(mesPartPtr, item.getModifyUser());
ConvertBean.saveOrUpdate(mesPartPtr, "JOB");
partPtrRao.update(mesPartPtr);
DdlPackBean partPtrDetailPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
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);
if (mesPartPtrDetail != null) {
mesPartPtrDetail.setQty(mesPartPtrDetail.getQty() + 1);
ConvertBean.saveOrUpdate(mesPartPtrDetail, item.getModifyUser());
ConvertBean.saveOrUpdate(mesPartPtrDetail, "JOB");
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());
orderAssemblyList.setMatchRule(mesPartPtr.getReplacePartSnRule());
ptrInfos.append("INFO|").append(mesPartPtr.getId());
if (mesPartPtrDetail != null) {
ptrInfos.append("PART|").append(mesPartPtrDetail.getId());
}
// 生成装配件清单
if (isModifyPOrder){
}
}
}
if (ptrFlag && !fOrderFlag) {
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)) {
for (MesWorkOrderPart orderPart : orderPartList) {
@ -411,12 +436,8 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
workOrderPartRao.saveAll(orderPartList);
}
List<MesWorkOrderAssembly> assemblyList = getAssemblyList(item.getWorkCenterCode(), item.getCarModelCode(), orderPartList, item.getOrganizeCode());
if (!CollectionUtils.isEmpty(assemblyList)) {
for (MesWorkOrderAssembly orderAssembly : assemblyList) {
if (ptrRuleListMap.get(orderAssembly.getPartNo()) != null){
orderAssembly.setMatchRule(ptrRuleListMap.get(orderAssembly.getPartNo()));
}
orderAssembly.setPartNo(item.getPartNo());
orderAssembly.setPartName(item.getPartName());
orderAssembly.setWorkOrderNo(item.getWorkOrderNo());
@ -499,8 +520,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
//自动发布
if (CommonEnumUtil.VALID == mesPartProdGroup.getIsAutoRelease()) {
item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue());
// 创建工单打印队列
insertPrintQueue(item);
} else {
item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue());
}
@ -1780,8 +1799,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
//排序工单数量为1
bean.setQty(1d);
//生成工单号
bean.setWorkOrderNo(getOrderNo(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()));
//生成工单零件 工单装配件
insertMesWorkOrder(bean, orderPartList);
// 创建工单打印队列
if(bean.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()){
insertPrintQueue(bean);
}
//物料名称不存在,从物料信息中获取
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(bomVersion, "bomVersion", 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);
List<MesBom> mesBoms = mesBomRDao.findByHqlWhere(ddlPackBean);
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) {
/**
* 2024/11/16
* PTR
* 1.
* 2.
* 3.
*/
DdlPackBean partPtrPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", partPtrPackBean);
DdlPreparedPack.getInPackList(partNoList, "srcPartNo", partPtrPackBean);
DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "startTime", partPtrPackBean);
DdlPreparedPack.getStringBiggerPack(TimeTool.getNowTime("yyyy-MM-dd HH:mm:ss"), "endTime", partPtrPackBean);
DdlPreparedPack.getIsNotNull("prtVehicleCount", partPtrPackBean);
DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), "startTime", 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)
.filter(item-> item.getPrtVehicleCount() > item.getPrtVehicleActualCount())
.collect(Collectors.toList());
return partPtrList;
}
/**
*
*/
//根据排序信息PTR零件号 获取 ptr信息
private List<MesPartPtr> getCustPartPtrList(List<String> ptrInfoList,String organizeCode){
DdlPackBean partPtrPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(ptrInfoList, "seqInfoPrtPart", partPtrPackBean);
return partPtrRao.findByHqlWhere(partPtrPackBean);
DdlPackBean part2PtrPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", part2PtrPackBean);
DdlPreparedPack.getInPackList(partNoList, "srcPartNo", part2PtrPackBean);
DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), "startTime", part2PtrPackBean);
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) {
@ -2254,7 +2299,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
orderAssembly.setCraftCode(sortCfg.getCraftCode());
orderAssembly.setRouteSeq(sortCfg.getRouteSeq());
orderAssembly.setWorkCellCode(sortCfg.getWorkCellCode());
orderAssembly.setOrderPartId(orderPart.getId().toString());
orderAssembly.setEquipmentCode(sortCfg.getEquipmentCode());
orderAssembly.setReportType(sortCfg.getReportType());
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;
}
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