|
|
|
@ -23,10 +23,7 @@ import org.springframework.stereotype.Service;
|
|
|
|
|
import java.text.DateFormat;
|
|
|
|
|
import java.text.ParseException;
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
|
import java.util.Calendar;
|
|
|
|
|
import java.util.Comparator;
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -64,11 +61,21 @@ public class MesTimeRoundnessService implements IRoundnessStrategy {
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesShiftRepository mesShiftRao;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesPartProdGroupWindowTimeRepository windowTimeRao;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void execute(MesPartProdGroup partProdGroup, List<MesCustSortInfo> sortInfoList, List<MesPartProdGroupDetail> details) {
|
|
|
|
|
try { //4. 如果没有订单需要更新窗口时间 TM_BAS_PRODUCT_GROUP_WINDOW_TIME
|
|
|
|
|
MesPartProdGroupWindowTime time = getWindowTimeByProductGroup(partProdGroup.id, partProdGroup.getOrganizeCode());
|
|
|
|
|
if (Objects.isNull(time)) {
|
|
|
|
|
log.info("当前零件生产组:{}没有维护时间窗口", partProdGroup.getPartProdGroupName());
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
|
|
|
|
|
Long createSeq = Long.parseLong(dateFormat.format(new Date()));
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
|
|
//遍历零件生产组零件,过滤出
|
|
|
|
|
for (MesPartProdGroupDetail detail : details) {
|
|
|
|
|
//根据detail.id 获取
|
|
|
|
@ -105,7 +112,7 @@ public class MesTimeRoundnessService implements IRoundnessStrategy {
|
|
|
|
|
//工单号生成规则 【工厂号+yyyyMMdd+5位流水】
|
|
|
|
|
GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.MES_WORK_CENTER_ORDER_NO);
|
|
|
|
|
genSerialNoModel.setPartNo(detail.getWorkCenterCode());
|
|
|
|
|
List<String> resultList = syncFuncService.syncSerialNo(genSerialNoModel, "JOB", detail.getOrganizeCode(), 1).getResultList();
|
|
|
|
|
List<String> resultList = syncFuncService.syncSerialNo(genSerialNoModel, "edi", detail.getOrganizeCode(), 1).getResultList();
|
|
|
|
|
// GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.MES_WORK_ORDER_NO);
|
|
|
|
|
// List<String> resultList = syncFuncService.syncSerialNo(genSerialNoModel,"JOB", detail.getOrganizeCode(), 1).getResultList();
|
|
|
|
|
mesWorkOrder.setWorkOrderNo(resultList.get(0));
|
|
|
|
@ -184,11 +191,11 @@ public class MesTimeRoundnessService implements IRoundnessStrategy {
|
|
|
|
|
mesWorkOrder.setQty(realQty);
|
|
|
|
|
mesWorkOrder.setUnCompleteQty(realQty);
|
|
|
|
|
mesWorkOrder.setUnit(mesPartSap.getUnit());
|
|
|
|
|
// if (partProdGroup.getIsAutoRelease() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) {
|
|
|
|
|
// mesWorkOrder.setStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue());
|
|
|
|
|
// } else {
|
|
|
|
|
// mesWorkOrder.setStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue());
|
|
|
|
|
// }
|
|
|
|
|
if (partProdGroup.getIsAutoRelease() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) {
|
|
|
|
|
mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue());
|
|
|
|
|
} else {
|
|
|
|
|
mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue());
|
|
|
|
|
}
|
|
|
|
|
mesWorkOrder.setPartProdGroupCode(partProdGroup.getPartProdGroupCode());
|
|
|
|
|
|
|
|
|
|
//bto
|
|
|
|
@ -209,13 +216,53 @@ public class MesTimeRoundnessService implements IRoundnessStrategy {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
} catch (ParseException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
ConvertBean.saveOrUpdate(time, "JOB");
|
|
|
|
|
time.setLastRunTime(TimeTool.getNowTime(true));
|
|
|
|
|
windowTimeRao.update(time);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.error("创建工单报错:{}", Arrays.toString(e.getStackTrace()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private MesPartProdGroupWindowTime getWindowTimeByProductGroup(Long partProdGroupId, String organizeCode) throws ParseException {
|
|
|
|
|
DdlPackBean windowTimPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(partProdGroupId, "pid", windowTimPackBean);
|
|
|
|
|
List<MesPartProdGroupWindowTime> windowTimeList = windowTimeRao.findByHqlWhere(windowTimPackBean);
|
|
|
|
|
if (windowTimeList.isEmpty()) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
//获取当前时间的HH mm
|
|
|
|
|
Date now = new Date();
|
|
|
|
|
Calendar calendar = Calendar.getInstance();
|
|
|
|
|
calendar.setTime(now);
|
|
|
|
|
String hour = calendar.get(Calendar.HOUR_OF_DAY) + ""; // 获取小时(24小时制)
|
|
|
|
|
String minute = calendar.get(Calendar.MINUTE) + "";
|
|
|
|
|
String nowTime = hour + minute;
|
|
|
|
|
//遍历窗口时间获取最新的窗口时间
|
|
|
|
|
String nowTimeStr = String.format("%04d", Integer.parseInt(nowTime));
|
|
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
List<MesPartProdGroupWindowTime> sortedTime = windowTimeList.stream().sorted(Comparator.comparing(MesPartProdGroupWindowTime::getWindowTime)).collect(Collectors.toList());
|
|
|
|
|
for (MesPartProdGroupWindowTime time : sortedTime) {
|
|
|
|
|
if (nowTimeStr.compareTo(time.getWindowTime()) < 0) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
calendar.set(Calendar.HOUR, Integer.parseInt(time.getWindowTime().substring(0, 2)));
|
|
|
|
|
calendar.set(Calendar.MINUTE, Integer.parseInt(time.getWindowTime().substring(2, 4)));
|
|
|
|
|
Date dateCreateOrder = calendar.getTime();
|
|
|
|
|
if (Objects.isNull(time.getLastRunTime())){
|
|
|
|
|
return time;
|
|
|
|
|
}
|
|
|
|
|
Date lastRunTime = sdf.parse(time.getLastRunTime());
|
|
|
|
|
if (dateCreateOrder.compareTo(lastRunTime) < 0) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
return time;
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesProdGroupPartBtoCount getByGroupPartId(Long groupPartId, String organizeCode) {
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(groupPartId, "groupPartId", ddlPackBean);
|
|
|
|
|