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