Merge branch 'dev_temp_xw_202503310000_45843' into uat-temp-wj-chongqingdaqu-dev

uat-temp-wj-chongqingdaqu-dev
xiangwei.zhang 4 months ago
commit c17d1fb871

@ -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);

@ -54,48 +54,7 @@ public class TestController {
@GetMapping("/reportWorkByPreDayJob")
@ApiOperation(value = "查询设备交互")
public ResultBean queryReworkTaskByPager(String organizeCode) {
try {
//遍历系统参数指定的产线获取对应班次,找到早班的开始时间,
String workCenterCodes = configService.getCfgValue(organizeCode, "MES_PCN_WORK_CENTER_NO");
List<String> workCenterCodeList = Arrays.asList(workCenterCodes.split(","));
String userName = "REPORT_PRE_DAY_JOB";
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
List<MesShift> mesShiftListAll = mesShiftRepository.findByHqlWhere(packBean);
for (String workCenterCode : workCenterCodeList) {
List<MesShift> mesShiftList = mesShiftListAll.stream().filter(s -> s.getWorkCenterCode().equalsIgnoreCase(workCenterCode)).collect(Collectors.toList());
//1.获取生产加工记录production_record表中report_status为待汇报状态的工单
List<MesProductionRecord> mesProductionRecordList = workOrderService.getPreDayReportMesProductionRecord(organizeCode, mesShiftList, workCenterCode);
if (CollectionUtils.isEmpty(mesProductionRecordList)) {
continue;
}
//3.插入生产工单表
List<MesWorkOrder> mesWorkOrders = workOrderService.insertMesWorkOrder(mesProductionRecordList, mesShiftList, organizeCode, userName);
if (CollectionUtils.isEmpty(mesWorkOrders)) {
continue;
}
//4.根据产线+物料产生的工单报工
for (MesWorkOrder mesWorkOrder : mesWorkOrders) {
List<MesProductionRecord> mesProductionRecords = mesProductionRecordList.stream().filter(
w -> w.getWorkCenterCode().equalsIgnoreCase(mesWorkOrder.getWorkCenterCode())
&& w.getPartNo().equalsIgnoreCase(mesWorkOrder.getPartNo())).collect(Collectors.toList());
workOrderService.doPcnJobProductReport(mesProductionRecords, mesShiftList, organizeCode, userName, mesWorkOrder);
}
for (MesProductionRecord mesProductionRecord : mesProductionRecordList) {
mesProductionRecord.setReportStatus(20);
ConvertBean.serviceModelUpdate(mesProductionRecord, userName);
}
productionRecordRao.saveAll(mesProductionRecordList);
}
return ResultBean.success("查询成功").setResultList(null);
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
return null;
}
@GetMapping("/reportOrder")

@ -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);
}
}
}
}

@ -818,19 +818,40 @@ public class MesWorkOrderService implements IMesWorkOrderService {
throw new ImppBusiException(String.format("班次信息未维护,产线=%s",workCenterCode));
}
List<MesShift> shifts = shiftList.stream().filter(mesShift -> Objects.equals(mesShift.getWorkCenterCode(), workCenterCode)).collect(Collectors.toList());
// 获取产品加工记录对应时间的班次
Integer hours = transfer(productionRecord.getCompleteDateTime()).getHours();
Date currentDate = TimeTool.stringParseToDate(productionRecord.getCompleteDateTime());
String lotNo = productionRecord.getLotNo();
// 基于加工时间判断具体的班次
MesShift currentShift = shiftList.stream().filter(shift -> {
String startTime = lotNo + " " + shift.getStartTime();
String endTime = lotNo + " " + shift.getEndTime();
// 如果是晚班12点前结束时间要加一天如果是12点后开始时间要减一天
if (Objects.equals(shift.getShiftCode(),"20")) {
if (hours < 12) {
startTime = getDateTime(lotNo, 1) + " " + shift.getStartTime();
} else {
endTime = getDateTime(lotNo, 2) + " " + shift.getEndTime();
}
}
Date startDate = DateUtil.parse(startTime);
Date endDate = DateUtil.parse(endTime);
return currentDate.getTime() >= startDate.getTime() && currentDate.getTime() <= endDate.getTime();
}).findFirst().orElse(null);
MesShift currentShift = shifts.stream().filter(mesShift -> Objects.equals(mesShift.getShiftCode(), shiftCode)).findFirst().orElse(null);
String orderDate = productionRecord.getLotNo();
if (currentShift.getStartTime().compareTo(currentShift.getEndTime()) > 0) {
// 如果比0点大需要找日期前一天的班次的工单号,如果是0点前date =lotNO 如果是0点后则找lot的前一天
int hours = transfer(productionRecord.getCompleteDateTime()).getHours();
if (hours < 12) {
orderDate = getDate(productionRecord.getLotNo(), 1);
} else {
orderDate = getDate(productionRecord.getLotNo(), 0);
}
}
List<MesWorkOrder> list = new ArrayList<>();
@ -856,7 +877,6 @@ public class MesWorkOrderService implements IMesWorkOrderService {
// 如果开始时间大于结束时间,说明跨天了,跨天说明是晚班,需要找, 如果是晚班, 则找早中班的工单
if (currentShift.getStartTime().compareTo(currentShift.getEndTime()) > 0) {
// 如果比0点大需要找日期前一天的班次的工单号,如果是0点前date =lotNO 如果是0点后则找lot的前一天
int hours = transfer(productionRecord.getCompleteDateTime()).getHours();
if (hours < 12) {
date = getDate(productionRecord.getLotNo(), 1);
} else {
@ -1292,15 +1312,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 +1361,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 +1379,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 +1394,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;
}
@ -1752,4 +1774,28 @@ public class MesWorkOrderService implements IMesWorkOrderService {
move.setWorkCenter(workCenterCode);
return move;
}
/**
* flag = 1 1 = 2
*
* @param lotNo
* @param flag
* @return
*/
public String getDateTime(String lotNo, int flag) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date d = null;
try {
d = df.parse(lotNo);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar cal = Calendar.getInstance();
cal.setTime(d);
if (flag == 1) {
cal.add(Calendar.DATE, -1); //减1天
} else if (flag == 2) {
cal.add(Calendar.DATE, 1); //加1天
}
return df.format(cal.getTime()).substring(0, 10);
}
}

Loading…
Cancel
Save