1 无工单补报工JOB针对多生产版本场景,默认使用SAP 主数据0001进行补报工
2 无工单报工,根据产线物料号为一个事务去校验生产版本是否存在
dev_temp_xw_202503310000_45843
xiangwei.zhang 4 months ago
parent c4154e0696
commit 5673649ce4

@ -38,7 +38,7 @@ public interface IMesWorkOrderService {
List<MesProductionRecord> getPreDayReportMesProductionRecord(String organizeCode , List<MesShift> mesShiftList, String workCenterCode); List<MesProductionRecord> getPreDayReportMesProductionRecord(String organizeCode , List<MesShift> mesShiftList, String workCenterCode);
@ApiOperation("新增工单") @ApiOperation("新增工单")
List<MesWorkOrder> insertMesWorkOrder(List<MesProductionRecord> mesProductionRecordList,List<MesShift> mesShiftList,String organizeCode, String userName ); MesWorkOrder insertMesWorkOrder(List<MesProductionRecord> mesProductionRecordList,List<MesShift> mesShiftList,String organizeCode, String userName );
@ApiOperation(value = "根据前一天待报工记录数插入工单并报工JOB(工单报工)") @ApiOperation(value = "根据前一天待报工记录数插入工单并报工JOB(工单报工)")
void doPcnJobProductReport(List<MesProductionRecord> mesProductionRecordList,List<MesShift> mesShiftList,String organizeCode, String userName, MesWorkOrder mesWorkOrder); void doPcnJobProductReport(List<MesProductionRecord> mesProductionRecordList,List<MesShift> mesShiftList,String organizeCode, String userName, MesWorkOrder mesWorkOrder);

@ -28,10 +28,7 @@ import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.*;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -81,19 +78,22 @@ public class MesReportWorkByPreDayJob extends BaseMesScheduleJob {
if (CollectionUtils.isEmpty(mesProductionRecordList)) { if (CollectionUtils.isEmpty(mesProductionRecordList)) {
continue; continue;
} }
try { Map<String,List<MesProductionRecord>> recordMap = mesProductionRecordList.stream().collect(Collectors.groupingBy(sn -> sn.getWorkCenterCode() + "=" + sn.getPartNo()));
LOGGER.info("产线:{}报工mesProductionRecordList:{}", workCenterCode, mesProductionRecordList.size()); for (Map.Entry<String, List<MesProductionRecord>> entry : recordMap.entrySet()) {
//3.插入生产工单表 String k = entry.getKey();
List<MesWorkOrder> mesWorkOrders = workOrderService.insertMesWorkOrder(mesProductionRecordList, mesShiftList, wmsJobParamModel.getOrganizeCode(), userName); List<MesProductionRecord> v = entry.getValue();
if (CollectionUtils.isEmpty(mesWorkOrders)) { try {
continue; LOGGER.info("产线=-零件号:{},:{},报工mesProductionRecordList:{}",k, v.size());
} //3.插入生产工单表,根据产线和零件号会创建又给工单
LOGGER.info("产线:{}报工mesWorkOrders:{}", workCenterCode, mesWorkOrders.size()); MesWorkOrder mesWorkOrder = workOrderService.insertMesWorkOrder(v, mesShiftList, wmsJobParamModel.getOrganizeCode(), userName);
//4.根据产线+物料产生的工单报工 if (mesWorkOrder == null) {
for (MesWorkOrder mesWorkOrder : mesWorkOrders) { continue;
}
LOGGER.info("产线:{}报工mesWorkOrder:{}", workCenterCode, mesWorkOrder.getWorkOrderNo());
//4.根据产线+物料产生的工单报工
List<MesProductionRecord> mesProductionRecords = new ArrayList<>(); List<MesProductionRecord> mesProductionRecords = new ArrayList<>();
try { try {
mesProductionRecords = mesProductionRecordList.stream().filter( mesProductionRecords = v.stream().filter(
w -> w.getWorkCenterCode().equalsIgnoreCase(mesWorkOrder.getWorkCenterCode()) w -> w.getWorkCenterCode().equalsIgnoreCase(mesWorkOrder.getWorkCenterCode())
&& w.getPartNo().equalsIgnoreCase(mesWorkOrder.getPartNo())).collect(Collectors.toList()); && w.getPartNo().equalsIgnoreCase(mesWorkOrder.getPartNo())).collect(Collectors.toList());
workOrderService.doPcnJobProductReport(mesProductionRecords, mesShiftList, wmsJobParamModel.getOrganizeCode(), userName, mesWorkOrder); workOrderService.doPcnJobProductReport(mesProductionRecords, mesShiftList, wmsJobParamModel.getOrganizeCode(), userName, mesWorkOrder);
@ -101,11 +101,7 @@ public class MesReportWorkByPreDayJob extends BaseMesScheduleJob {
for (MesProductionRecord mesProductionRecord : mesProductionRecords) { for (MesProductionRecord mesProductionRecord : mesProductionRecords) {
if (StringUtil.isEmpty(mesProductionRecord.getWorkOrderNo())) { if (StringUtil.isEmpty(mesProductionRecord.getWorkOrderNo())) {
List<MesWorkOrder> collect = mesWorkOrders.stream().filter(w -> w.getWorkCenterCode().equalsIgnoreCase(mesProductionRecord.getWorkCenterCode()) mesProductionRecord.setWorkOrderNo(mesWorkOrder.getWorkOrderNo());
&& w.getPartNo().equalsIgnoreCase(mesProductionRecord.getPartNo())).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(collect)) {
mesProductionRecord.setWorkOrderNo(collect.get(0).getWorkOrderNo());
}
} }
mesProductionRecord.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue()); mesProductionRecord.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue());
mesProductionRecord.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); mesProductionRecord.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
@ -122,13 +118,13 @@ public class MesReportWorkByPreDayJob extends BaseMesScheduleJob {
productionRecordService.updateProductionRecord(mesProductionRecord.getOrganizeCode(), userName, mesProductionRecord.getId(), errorMsg); productionRecordService.updateProductionRecord(mesProductionRecord.getOrganizeCode(), userName, mesProductionRecord.getId(), errorMsg);
} }
} }
} } catch (ImppBusiException e) {
} catch (ImppBusiException e) { List<String> snList = v.stream().map(MesProductionRecord::getProductSn).collect(Collectors.toList());
List<String> snList = mesProductionRecordList.stream().map(MesProductionRecord::getProductSn).collect(Collectors.toList()); String errorMsg = StringUtil.isEmpty(e.getErrorDetail()) ? e.getErrorMsg() : e.getErrorDetail();
String errorMsg = StringUtil.isEmpty(e.getErrorDetail()) ? e.getErrorMsg() : e.getErrorDetail(); LOGGER.info("条码:{}报工失败,{}", snList, errorMsg);
LOGGER.info("条码:{}报工失败,{}", snList, errorMsg); for (MesProductionRecord mesProductionRecord : v) {
for (MesProductionRecord mesProductionRecord : mesProductionRecordList) { productionRecordService.updateProductionRecord(mesProductionRecord.getOrganizeCode(), userName, mesProductionRecord.getId(), errorMsg);
productionRecordService.updateProductionRecord(mesProductionRecord.getOrganizeCode(), userName, mesProductionRecord.getId(), errorMsg); }
} }
} }
} }

@ -1292,15 +1292,12 @@ public class MesWorkOrderService implements IMesWorkOrderService {
} }
@Override @Override
public List<MesWorkOrder> insertMesWorkOrder(List<MesProductionRecord> mesProductionRecordList, List<MesShift> mesShiftList, String organizeCode, String userName) { public MesWorkOrder insertMesWorkOrder(List<MesProductionRecord> mesProductionRecordList, List<MesShift> mesShiftList, String organizeCode, String userName) {
List<MesWorkOrder> mesWorkOrderList = new ArrayList<>();
Map<String, List<MesProductionRecord>> mesProductionRecordListMap = mesProductionRecordList.stream().collect(Collectors.groupingBy(sn -> sn.getWorkCenterCode() + "=" + sn.getPartNo())); MesProductionRecord mesProductionRecord = mesProductionRecordList.get(0);
for (Map.Entry<String, List<MesProductionRecord>> stringListEntry : mesProductionRecordListMap.entrySet()) {
List<MesProductionRecord> value = stringListEntry.getValue(); String workCenterCode = mesProductionRecord.getWorkCenterCode();
MesProductionRecord mesProductionRecord = value.get(0); String partNo = mesProductionRecord.getPartNo();
String[] split = stringListEntry.getKey().split("=");
String workCenterCode = split[0];
String partNo = split[1];
//查询工作中心 //查询工作中心
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", ddlPackBean); DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", ddlPackBean);
@ -1344,7 +1341,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
item.setProduceTime(TimeTool.getToday()); item.setProduceTime(TimeTool.getToday());
item.setProductTime(item.getProduceTime()); item.setProductTime(item.getProduceTime());
item.setUnCompleteQty(0d); item.setUnCompleteQty(0d);
item.setQty(value.stream().mapToDouble(MesProductionRecord::getQty).sum()); item.setQty(mesProductionRecordList.stream().mapToDouble(MesProductionRecord::getQty).sum());
item.setCompleteQty(item.getQty()); item.setCompleteQty(item.getQty());
item.setReportedQty(item.getQty()); item.setReportedQty(item.getQty());
item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue());
@ -1362,13 +1359,13 @@ public class MesWorkOrderService implements IMesWorkOrderService {
//校验物料生产版本是否存在 //校验物料生产版本是否存在
MesProductVersion mesProductVersion = checkMesProductVersion(item); MesProductVersion mesProductVersion = checkMesProductVersion(item);
if (Objects.isNull(mesProductVersion)) { if (Objects.isNull(mesProductVersion)) {
continue; return null;
} }
item.setProductVersion(mesProductVersion.getProductVersion()); item.setProductVersion(mesProductVersion.getProductVersion());
//获取bom信息 //获取bom信息
List<MesBom> bomList = findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); List<MesBom> bomList = findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList());
if (org.springframework.util.CollectionUtils.isEmpty(bomList)) { if (org.springframework.util.CollectionUtils.isEmpty(bomList)) {
continue; return null;
} }
} }
@ -1377,21 +1374,26 @@ public class MesWorkOrderService implements IMesWorkOrderService {
ConvertBean.serviceModelInitialize(item, userName); ConvertBean.serviceModelInitialize(item, userName);
MesWorkOrder mesWorkOrder = workOrderRepository.insert(item); MesWorkOrder mesWorkOrder = workOrderRepository.insert(item);
saveMesWorkOrderLog(mesWorkOrder,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT.getValue(),item.getQty()); saveMesWorkOrderLog(mesWorkOrder,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT.getValue(),item.getQty());
mesWorkOrderList.add(mesWorkOrder);
}
return mesWorkOrderList; return mesWorkOrder;
} }
private MesProductVersion checkMesProductVersion(MesWorkOrder item) { private MesProductVersion checkMesProductVersion(MesWorkOrder item) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", ddlPackBean); DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", ddlPackBean);
DdlPreparedPack.getStringEqualPack(item.getErpWorkCenter(), "workCenterCode", ddlPackBean); DdlPreparedPack.getStringEqualPack(item.getErpWorkCenter(), "workCenterCode", ddlPackBean);
MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); List<MesProductVersion> mesProductVersions = mesProductVersionRDao.findByHqlWhere(ddlPackBean);
if (Objects.isNull(mesProductVersion)) { if (CollectionUtils.isEmpty(mesProductVersions)) {
LOGGER.info("物料{}产线{}生产版本{}信息不存在", item.getPartNo(), item.getWorkCenterCode(), item.getProductVersion() ); LOGGER.info("物料{}产线{}生产版本{}信息不存在", item.getPartNo(), item.getWorkCenterCode(), item.getProductVersion() );
MesPcnException.throwMesBusiException("物料【%s】产线【%s】生产版本【%s】信息不存在", item.getPartNo(), item.getWorkCenterCode(), item.getProductVersion()); MesPcnException.throwMesBusiException("物料【%s】产线【%s】生产版本【%s】信息不存在", item.getPartNo(), item.getWorkCenterCode(), item.getProductVersion());
} }
MesProductVersion mesProductVersion = null;
List<MesProductVersion> mesProductOneVersions = mesProductVersions.stream().filter(productVersion -> Objects.equals(productVersion.getProductVersion(),"0001")).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(mesProductOneVersions)) {
mesProductVersion = mesProductOneVersions.get(0);
} else {
mesProductVersion = mesProductVersions.get(0);
}
return mesProductVersion; return mesProductVersion;
} }

Loading…
Cancel
Save