|
|
|
@ -674,7 +674,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
|
|
|
|
|
//保存数据
|
|
|
|
|
List<MesProductOffLine> mesProductOffLineList = new ArrayList<>();
|
|
|
|
|
MesProductOffLine newMesProductOffLine;
|
|
|
|
|
List<MesMove> mesMoveList = new ArrayList<>();
|
|
|
|
|
// 排除重复的数据
|
|
|
|
|
Map<MesBom, List<MesBom>> map = mesBoms.stream().collect(Collectors.groupingBy(mesBom -> {
|
|
|
|
|
MesBom bom = new MesBom();
|
|
|
|
@ -682,35 +682,24 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
bom.setItemPartNo(mesBom.getItemPartNo());
|
|
|
|
|
return bom;
|
|
|
|
|
}));
|
|
|
|
|
for (Map.Entry<MesBom, List<MesBom>> entry : map.entrySet()) {
|
|
|
|
|
MesBom mesBom = entry.getValue().get(0);
|
|
|
|
|
newMesProductOffLine = new MesProductOffLine();
|
|
|
|
|
newMesProductOffLine.setReportPartNo(oldMesWorkOrder.getPartNo());
|
|
|
|
|
newMesProductOffLine.setReportPartNameRdd(oldMesWorkOrder.getPartName());
|
|
|
|
|
newMesProductOffLine.setItemPartNo(mesBom.getItemPartNo());
|
|
|
|
|
newMesProductOffLine.setItemPartName(mesBom.getItemPartName());
|
|
|
|
|
newMesProductOffLine.setItemQty(mesBom.getItemQty());
|
|
|
|
|
newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint());
|
|
|
|
|
newMesProductOffLine.setStgeLoc(mesProductVersion.getShipInventoryPoint());
|
|
|
|
|
newMesProductOffLine.setQty(1d);
|
|
|
|
|
newMesProductOffLine.setReportSn(productionRecord.getProductSn());
|
|
|
|
|
newMesProductOffLine.setBomVersion(oldMesWorkOrder.getProductVersion());
|
|
|
|
|
newMesProductOffLine.setSerialNumber(productionRecord.getSerialNumber());
|
|
|
|
|
newMesProductOffLine.setUnit(mesBom.getUnit());
|
|
|
|
|
newMesProductOffLine.setBomCode(mesBom.getBomCode());
|
|
|
|
|
newMesProductOffLine.setItemUnit(mesBom.getItemUnit());
|
|
|
|
|
newMesProductOffLine.setWorkOrderNo(oldMesWorkOrder.getWorkOrderNo());
|
|
|
|
|
newMesProductOffLine.setWorkOrderType(oldMesWorkOrder.getWorkOrderType());
|
|
|
|
|
newMesProductOffLine.setWorkCenterCode(oldMesWorkOrder.getWorkCenterCode());
|
|
|
|
|
newMesProductOffLine.setWorkCellCode(oldMesWorkOrder.getWorkCellCode());
|
|
|
|
|
newMesProductOffLine.setReportType(oldMesWorkOrder.getReportType());
|
|
|
|
|
newMesProductOffLine.setSapWorkCenter(mesProductVersion.getWorkCenterCode());
|
|
|
|
|
newMesProductOffLine.setOrganizeCode(oldMesWorkOrder.getOrganizeCode());
|
|
|
|
|
newMesProductOffLine.setDescription(productionRecord.getCompleteDateTime());
|
|
|
|
|
ConvertBean.serviceModelInitialize(newMesProductOffLine, userName);
|
|
|
|
|
mesProductOffLineList.add(newMesProductOffLine);
|
|
|
|
|
if(MesExtEnumUtil.NOSORT_REPORT_TYPE.REPORT.getValue() == productionRecord.getReportType()){
|
|
|
|
|
for (Map.Entry<MesBom, List<MesBom>> entry : map.entrySet()) {
|
|
|
|
|
mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, oldMesWorkOrder, mesProductVersion, entry.getValue().get(0)));
|
|
|
|
|
}
|
|
|
|
|
} else if (MesExtEnumUtil.NOSORT_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() == productionRecord.getReportType()) {
|
|
|
|
|
customerSupplyMove(productionRecord,oldMesWorkOrder, mesProductVersion, mesBoms, productionRecord.getProductSn(), mesProductOffLineList, mesMoveList,userName);
|
|
|
|
|
} else {
|
|
|
|
|
LOGGER.info("汇报类型不存在");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(!CollectionUtils.isEmpty(mesProductOffLineList)){
|
|
|
|
|
mesProductOffLineRDao.saveAll(mesProductOffLineList);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(!CollectionUtils.isEmpty(mesMoveList)){
|
|
|
|
|
mesMoveRepository.saveAll(mesMoveList);
|
|
|
|
|
}
|
|
|
|
|
mesProductOffLineRDao.saveAll(mesProductOffLineList);
|
|
|
|
|
|
|
|
|
|
// 同步工单信息给加工记录、条码信息
|
|
|
|
|
DdlPackBean snDdlPackBean = DdlPackBean.getDdlPackBean();
|
|
|
|
@ -729,6 +718,35 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesProductOffLine getMesProductOffLine(MesProductionRecord productionRecord, String userName, MesWorkOrder oldMesWorkOrder, MesProductVersion mesProductVersion, MesBom mesBom) {
|
|
|
|
|
MesProductOffLine newMesProductOffLine;
|
|
|
|
|
newMesProductOffLine = new MesProductOffLine();
|
|
|
|
|
newMesProductOffLine.setReportPartNo(oldMesWorkOrder.getPartNo());
|
|
|
|
|
newMesProductOffLine.setReportPartNameRdd(oldMesWorkOrder.getPartName());
|
|
|
|
|
newMesProductOffLine.setItemPartNo(mesBom.getItemPartNo());
|
|
|
|
|
newMesProductOffLine.setItemPartName(mesBom.getItemPartName());
|
|
|
|
|
newMesProductOffLine.setItemQty(mesBom.getItemQty());
|
|
|
|
|
newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint());
|
|
|
|
|
newMesProductOffLine.setStgeLoc(mesProductVersion.getShipInventoryPoint());
|
|
|
|
|
newMesProductOffLine.setQty(1d);
|
|
|
|
|
newMesProductOffLine.setReportSn(productionRecord.getProductSn());
|
|
|
|
|
newMesProductOffLine.setBomVersion(oldMesWorkOrder.getProductVersion());
|
|
|
|
|
newMesProductOffLine.setSerialNumber(productionRecord.getSerialNumber());
|
|
|
|
|
newMesProductOffLine.setUnit(mesBom.getUnit());
|
|
|
|
|
newMesProductOffLine.setBomCode(mesBom.getBomCode());
|
|
|
|
|
newMesProductOffLine.setItemUnit(mesBom.getItemUnit());
|
|
|
|
|
newMesProductOffLine.setWorkOrderNo(oldMesWorkOrder.getWorkOrderNo());
|
|
|
|
|
newMesProductOffLine.setWorkOrderType(oldMesWorkOrder.getWorkOrderType());
|
|
|
|
|
newMesProductOffLine.setWorkCenterCode(oldMesWorkOrder.getWorkCenterCode());
|
|
|
|
|
newMesProductOffLine.setWorkCellCode(oldMesWorkOrder.getWorkCellCode());
|
|
|
|
|
newMesProductOffLine.setReportType(oldMesWorkOrder.getReportType());
|
|
|
|
|
newMesProductOffLine.setSapWorkCenter(mesProductVersion.getWorkCenterCode());
|
|
|
|
|
newMesProductOffLine.setOrganizeCode(oldMesWorkOrder.getOrganizeCode());
|
|
|
|
|
newMesProductOffLine.setDescription(productionRecord.getCompleteDateTime());
|
|
|
|
|
ConvertBean.serviceModelInitialize(newMesProductOffLine, userName);
|
|
|
|
|
return newMesProductOffLine;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取对应的工单
|
|
|
|
|
*
|
|
|
|
@ -1503,6 +1521,64 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void customerSupplyMove(MesProductionRecord productionRecord,MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, List<MesBom> mesBoms, String sn, List<MesProductOffLine> mesProductOffLineList, List<MesMove> mesMoveList,String userName) {
|
|
|
|
|
boolean isItemMove;
|
|
|
|
|
boolean isItemReport;
|
|
|
|
|
MesMoveRule moveRule;
|
|
|
|
|
//查询零件生产组的移库规则
|
|
|
|
|
List<MesMoveRule> moveRules = mesMoveRuleService.findMesMoveRuleByPartProdGroupCode(mesWorkOrder.getPartProdGroupCode(), mesWorkOrder.getOrganizeCode());
|
|
|
|
|
Map<String, List<MesMoveRule>> mesMoveRuleMap = moveRules.stream().filter(t -> Objects.nonNull(t.getSrcType())).collect(Collectors.groupingBy(MesMoveRule::getSrcType));
|
|
|
|
|
List<String> itemPartNoList = mesBoms.stream().map(MesBom::getItemPartNo).collect(Collectors.toList());
|
|
|
|
|
//子物料SAP下发信息
|
|
|
|
|
Map<String, List<MesPartSap>> mesPartSapMap = getPartSapMap(mesWorkOrder, itemPartNoList);
|
|
|
|
|
//获取物料信息
|
|
|
|
|
Map<String, List<MesPart>> itemPartMap = getItemPartMap(mesWorkOrder, itemPartNoList);
|
|
|
|
|
for (MesBom mesBom : mesBoms) {
|
|
|
|
|
isItemReport = false;
|
|
|
|
|
isItemMove = false;
|
|
|
|
|
moveRule = null;
|
|
|
|
|
if (itemPartMap.containsKey(mesBom.getItemPartNo())) {
|
|
|
|
|
MesPart itemPart = itemPartMap.get(mesBom.getItemPartNo()).iterator().next();
|
|
|
|
|
if (!StringUtil.isEmpty(itemPart.getEsd()) && mesMoveRuleMap.containsKey(itemPart.getEsd())) {
|
|
|
|
|
moveRule = mesMoveRuleMap.get(itemPart.getEsd()).iterator().next();
|
|
|
|
|
if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.REPORT_MOVE.getValue() == moveRule.getReportType()) {
|
|
|
|
|
isItemMove = true;
|
|
|
|
|
isItemReport = true;
|
|
|
|
|
} else if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.REPORT.getValue() == moveRule.getReportType()) {
|
|
|
|
|
isItemReport = true;
|
|
|
|
|
} else if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.MOVE.getValue() == moveRule.getReportType()) {
|
|
|
|
|
isItemMove = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//汇报
|
|
|
|
|
if (isItemReport) {
|
|
|
|
|
mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, mesWorkOrder, mesProductVersion, mesBom));
|
|
|
|
|
}
|
|
|
|
|
//移库
|
|
|
|
|
if (isItemMove) {
|
|
|
|
|
MesPartSap mesPartSap = null;
|
|
|
|
|
if (mesPartSapMap.containsKey(mesBom.getItemPartNo())) {
|
|
|
|
|
mesPartSap = mesPartSapMap.get(mesBom.getItemPartNo()).iterator().next();
|
|
|
|
|
}
|
|
|
|
|
MesMove move = createMove(mesPartSap, moveRule.getErpSrcLocateNo(), moveRule.getErpDestLocateNo(), mesBom.getOrganizeCode(), mesWorkOrder.getErpWorkCenter(), mesBom.getItemQty(), MesExtEnumUtil.MOVE_TYPE.RAW_MATERIAL_MOVE.getValue());
|
|
|
|
|
move.setMatnr(mesBom.getItemPartNo());
|
|
|
|
|
ConvertBean.serviceModelInitialize(move, userName);
|
|
|
|
|
mesMoveList.add(move);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Map<String, List<MesPartSap>> getPartSapMap(MesWorkOrder mesWorkOrder, List<String> itemPartNoList) {
|
|
|
|
|
List<MesPartSap> mesPartSapList = iMesPartService.findMesPartSapByPartNo(itemPartNoList, mesWorkOrder.getOrganizeCode());
|
|
|
|
|
return mesPartSapList.stream().filter(t -> Objects.nonNull(t.getPartNo())).collect(Collectors.groupingBy(MesPartSap::getPartNo));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Map<String, List<MesPart>> getItemPartMap(MesWorkOrder mesWorkOrder, List<String> itemPartNoList) {
|
|
|
|
|
List<MesPart> itemPartList = iMesPartService.findMesPartByPartNo(itemPartNoList, mesWorkOrder.getOrganizeCode());
|
|
|
|
|
return itemPartList.stream().filter(t -> Objects.nonNull(t.getPartNo())).collect(Collectors.groupingBy(MesPart::getPartNo));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesWorkOrder getMesWorkOrder(Map<String, List<MesWorkOrder>> workOrderMap, String workOrderNo) {
|
|
|
|
|
MesWorkOrder workOrder = Objects.isNull(workOrderMap) || StringUtils.isEmpty(workOrderNo) || !workOrderMap.containsKey(workOrderNo) ? null : workOrderMap.get(workOrderNo).iterator().next();
|
|
|
|
|
if (Objects.isNull(workOrder)) {
|
|
|
|
@ -1608,4 +1684,21 @@ public class MesWorkOrderService implements IMesWorkOrderService {
|
|
|
|
|
ConvertBean.serviceModelInitialize(move, userName);
|
|
|
|
|
return move;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesMove createMove(MesPartSap mesPart, String source, String target, String org, String workCenterCode, double qty, Integer moveType) {
|
|
|
|
|
MesMove move = new MesMove();
|
|
|
|
|
if (!Objects.isNull(mesPart)) {
|
|
|
|
|
move.setMeins(mesPart.getUnit());
|
|
|
|
|
}
|
|
|
|
|
move.setOrganizeCode(org);
|
|
|
|
|
move.setFactoryCode(org);
|
|
|
|
|
move.setLgort(source);
|
|
|
|
|
move.setUmlgo(target);
|
|
|
|
|
move.setMenge(qty);
|
|
|
|
|
move.setPostDate(TimeTool.getToday());
|
|
|
|
|
move.setMoveType(moveType);
|
|
|
|
|
move.setPostTime(TimeTool.getTimeShortWithColon());
|
|
|
|
|
move.setWorkCenter(workCenterCode);
|
|
|
|
|
return move;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|