|
|
|
@ -2,16 +2,17 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.roundness;
|
|
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.api.base.strategy.IRoundnessStrategy;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesCustSoftInfoServiceImpl;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
|
|
|
|
|
import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.tool.TimeTool;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.*;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.IMesProdGroupPartBtoCountRepository;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.MesPartSapRepository;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.MesProductVersionRepository;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.*;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
|
|
|
|
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
|
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
@ -20,7 +21,9 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
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;
|
|
|
|
@ -52,10 +55,20 @@ public class MesTimeRoundnessService implements IRoundnessStrategy {
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesCustSoftInfoServiceImpl custSoftInfoService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private ISyncFuncService syncFuncService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesWorkCenterRepository mesWorkCenterRao;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesShiftRepository mesShiftRao;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void execute(MesPartProdGroup partProdGroup, List<MesCustSortInfo> sortInfoList, List<MesPartProdGroupDetail> details) {
|
|
|
|
|
DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
|
|
|
|
|
Long createSeq = Long.parseLong(dateFormat.format(new Date()));
|
|
|
|
|
try {
|
|
|
|
|
//遍历零件生产组零件,过滤出
|
|
|
|
|
for (MesPartProdGroupDetail detail : details) {
|
|
|
|
|
//根据detail.id 获取
|
|
|
|
@ -69,7 +82,7 @@ public class MesTimeRoundnessService implements IRoundnessStrategy {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
//本次排序需要的数量
|
|
|
|
|
Double qty = sortInfoList.stream().map(MesCustSortInfo::getQty).reduce(Double::sum).get() * detail.getProductPartQty();
|
|
|
|
|
double qty = sortInfos.stream().map(MesCustSortInfo::getQty).reduce(Double::sum).get() * detail.getProductPartQty();
|
|
|
|
|
qty -= btoCount;
|
|
|
|
|
//倍数
|
|
|
|
|
int multiple;
|
|
|
|
@ -88,22 +101,69 @@ public class MesTimeRoundnessService implements IRoundnessStrategy {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance().setErrorDetail("零件生成组零件:{}找不到对应的零件信息", detail.getProductPartNo()).build();
|
|
|
|
|
}
|
|
|
|
|
MesWorkOrder mesWorkOrder = new MesWorkOrder();
|
|
|
|
|
//工单号生成规则 【工厂号+yyyyMMdd+5位流水】
|
|
|
|
|
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));
|
|
|
|
|
mesWorkOrder.setWorkOrderType(MesExtEnumUtil.ORDER_TYPE.BTO.getValue());
|
|
|
|
|
mesWorkOrder.setWorkOrderSeq(createSeq.toString());
|
|
|
|
|
mesWorkOrder.setProduceSeq(createSeq);
|
|
|
|
|
mesWorkOrder.setCustPartNo(sortInfos.get(0).getCustPartNo());
|
|
|
|
|
//标识 -空
|
|
|
|
|
//状态 --- 根据零件发运组看是自动发布
|
|
|
|
|
if (partProdGroup.getIsAutoRelease() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()){
|
|
|
|
|
mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue());
|
|
|
|
|
}{
|
|
|
|
|
mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue());
|
|
|
|
|
}
|
|
|
|
|
//车型大类-空
|
|
|
|
|
mesWorkOrder.setOrganizeCode(detail.getOrganizeCode());
|
|
|
|
|
//erpWorkCenter 需要根据产线查询 组织模型
|
|
|
|
|
DdlPackBean workCenterPackBean = DdlPackBean.getDdlPackBean(detail.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(detail.getWorkCenterCode(),"workCenterCode",workCenterPackBean);
|
|
|
|
|
List<MesWorkCenter> centerList = mesWorkCenterRao.findByHqlWhere(workCenterPackBean);
|
|
|
|
|
if (!centerList.isEmpty()){
|
|
|
|
|
mesWorkOrder.setErpWorkCenter(centerList.get(0).getErpWorkCenter());
|
|
|
|
|
}
|
|
|
|
|
//产线
|
|
|
|
|
mesWorkOrder.setWorkCenterCode(detail.getWorkCenterCode());
|
|
|
|
|
//工位
|
|
|
|
|
mesWorkOrder.setWorkCellCode(detail.getWorkCellCode());
|
|
|
|
|
//生产日期,计划时间
|
|
|
|
|
List<MesCustSortInfo> sortInfosSorted = sortInfos.stream().sorted(Comparator.comparing(MesCustSortInfo::getMatchTime)).collect(Collectors.toList());
|
|
|
|
|
// workorderinfo.ProductDate = custsortinfopartlist.Min(d => d.MatchTime.GetValueOrDefault()).ToString("yyyy-MM-dd");
|
|
|
|
|
// workorderinfo.PlanStartTime = custsortinfopartlist.Min(d => d.MatchTime.GetValueOrDefault());
|
|
|
|
|
// workorderinfo.PlanEndTime = custsortinfopartlist.Max(d => d.MatchTime.GetValueOrDefault());
|
|
|
|
|
|
|
|
|
|
// 10. 根据工厂,产线,planStartTime 获取班次名称
|
|
|
|
|
String matchTime = sortInfosSorted.get(0).getMatchTime();
|
|
|
|
|
// 计划开始时间 工单创建时间(获取到的时间)
|
|
|
|
|
mesWorkOrder.setPlanStartTime(matchTime);
|
|
|
|
|
//计划结束时间 工单创建时间(获取到的时间)
|
|
|
|
|
mesWorkOrder.setPlanEndTime(matchTime);
|
|
|
|
|
// 生产时间 工单获取计划开始时间日期
|
|
|
|
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
|
Date parse = format.parse(matchTime);
|
|
|
|
|
String productTime = format.format(parse);
|
|
|
|
|
mesWorkOrder.setProductTime(productTime);
|
|
|
|
|
// 11. 是否将生成日期减一天
|
|
|
|
|
// 班次 根据产线+计划时间匹配班次
|
|
|
|
|
DdlPackBean shiftPackBean = DdlPackBean.getDdlPackBean(detail.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(detail.getWorkCenterCode(),"workCenterCode",shiftPackBean);
|
|
|
|
|
List<MesShift> shiftList = mesShiftRao.findByHqlWhere(shiftPackBean);
|
|
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
Date date = sdf.parse(matchTime);
|
|
|
|
|
Calendar calendar = Calendar.getInstance();
|
|
|
|
|
calendar.setTime(date);
|
|
|
|
|
int hours = calendar.get(Calendar.HOUR_OF_DAY);
|
|
|
|
|
int minutes = calendar.get(Calendar.MINUTE);
|
|
|
|
|
int shiftTime = Integer.parseInt(hours+""+minutes);
|
|
|
|
|
for (MesShift shift : shiftList) {
|
|
|
|
|
int startTime = Integer.parseInt(shift.getStartTime() );
|
|
|
|
|
int endTime = Integer.parseInt(shift.getEndTime() );
|
|
|
|
|
if (shiftTime >= startTime && shiftTime <= endTime) {
|
|
|
|
|
mesWorkOrder.setShiftName(shift.getShiftName());
|
|
|
|
|
mesWorkOrder.setShiftCode(shift.getShiftCode());
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 12.零件相关
|
|
|
|
|
mesWorkOrder.setPartNo(mesPartSap.getPartNo());
|
|
|
|
|
mesWorkOrder.setPartName(mesPartSap.getPartName());
|
|
|
|
@ -145,6 +205,9 @@ public class MesTimeRoundnessService implements IRoundnessStrategy {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
} catch (ParseException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|