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

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

Loading…
Cancel
Save