|
|
|
@ -2,6 +2,8 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
|
|
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.api.base.IMesCustomerPartService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.api.base.IMesPullingOrderInfoService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderPartService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
|
|
|
|
|
import cn.estsh.i3plus.icloud.core.sdk.ICoreUtilCloud;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
|
|
|
|
@ -52,6 +54,8 @@ public class MesPullingOrderInfoService extends BaseMesService<MesPullingOrderIn
|
|
|
|
|
private IMesPrintedSnLogRepository snLogRao;
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesCustomerPartService mesCustomerPartService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesWorkOrderPartService mesWorkOrderPartService;
|
|
|
|
|
protected void setPackQueryBean(MesPullingOrderInfo bean, DdlPackBean packBean) {
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(bean.getPullCode(), "pullCode", packBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(bean.getPullingOrderNo(), "pullingOrderNo", packBean);
|
|
|
|
@ -88,7 +92,7 @@ public class MesPullingOrderInfoService extends BaseMesService<MesPullingOrderIn
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void doCreatePullOrderByPullGroupAndWorkOrder(String organizeCode, String userName) {
|
|
|
|
|
public void doCreatePullOrderByPullGroupAndWorkOrder(String organizeCode,Integer pageSize, String userName) {
|
|
|
|
|
//1.拉动组集合+拉动组明细集合pullingGroupList+ pullingpartlist
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
List<MesPartPull> pulliGroupList = mesPartPullRDao.findByHqlWhere(ddlPackBean);
|
|
|
|
@ -107,33 +111,27 @@ public class MesPullingOrderInfoService extends BaseMesService<MesPullingOrderIn
|
|
|
|
|
Map<String, List<MesPartPullDetail>> partPullDetailListMap = pullDetailList.stream().collect(Collectors.groupingBy(MesPartPullDetail::getPartNo));
|
|
|
|
|
//2.客户物料集合 [PART_NO] in 拉动组明细物料集合
|
|
|
|
|
//3.产线数据
|
|
|
|
|
DdlPackBean workPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
List<String> workCenterList = pulliGroupList.stream().map(MesPartPull::getWorkCenterCode).collect(Collectors.toList());
|
|
|
|
|
DdlPreparedPack.getInPackList(workCenterList, "workCenterCode", workPackBean);
|
|
|
|
|
List<MesWorkCenter> mesWorkCenterList = mesWorkCenterRepository.findByHqlWhere(workPackBean);
|
|
|
|
|
if (CollectionUtils.isEmpty(mesWorkCenterList)) {
|
|
|
|
|
LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},拉动组对应产线信息不存在-->{}", organizeCode, workCenterList);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
Map<String, List<MesWorkCenter>> workCenterListMap = mesWorkCenterList.stream().collect(Collectors.groupingBy(MesWorkCenter::getWorkCenterCode));
|
|
|
|
|
// DdlPackBean workPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
// DdlPreparedPack.getInPackList(workCenterList, "workCenterCode", workPackBean);
|
|
|
|
|
// List<MesWorkCenter> mesWorkCenterList = mesWorkCenterRepository.findByHqlWhere(workPackBean);
|
|
|
|
|
// if (CollectionUtils.isEmpty(mesWorkCenterList)) {
|
|
|
|
|
// LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},拉动组对应产线信息不存在-->{}", organizeCode, workCenterList);
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
// Map<String, List<MesWorkCenter>> workCenterListMap = mesWorkCenterList.stream().collect(Collectors.groupingBy(MesWorkCenter::getWorkCenterCode));
|
|
|
|
|
List<String> workCenterList = pulliGroupList.stream().map(MesPartPull::getWorkCenterCode).distinct().collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
//4.生产工单 在加工状态 [PULLING_STATUS] =0 未创建
|
|
|
|
|
DdlPackBean packBeanWorkOrder = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getInPackList(workCenterList, "workCenterCode", packBeanWorkOrder);
|
|
|
|
|
DdlPreparedPack.getInPackList(Arrays.asList(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(),MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()), "workOrderStatus", packBeanWorkOrder);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.WORK_ORDER_PULLING_STATUS.NOTCREATE.getValue(), "pullingStatus", packBeanWorkOrder);
|
|
|
|
|
List<MesWorkOrder> workOrderList = mesWorkOrderRepository.findByHqlWhere(packBeanWorkOrder);
|
|
|
|
|
List<MesWorkOrder> workOrderList = getMesWorkOrderList(organizeCode, pageSize, workCenterList);
|
|
|
|
|
if (CollectionUtils.isEmpty(workOrderList)) {
|
|
|
|
|
LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},产线信息没有【未创建】【在加工】状态的工单-->{}", organizeCode, workCenterList);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
Map<String, List<MesWorkOrder>> workOrderListMap = workOrderList.stream().collect(Collectors.groupingBy(MesWorkOrder::getWorkOrderNo));
|
|
|
|
|
|
|
|
|
|
DdlPackBean packBeanWorkOrderPart = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getInPackList(workOrderList.stream().map(MesWorkOrder::getWorkOrderNo).collect(Collectors.toList()), "workOrderNo", packBeanWorkOrderPart);
|
|
|
|
|
List<MesWorkOrderPart> mesWorkOrderPartList = workOrderPartRepository.findByHqlWhere(packBeanWorkOrderPart);
|
|
|
|
|
List<MesWorkOrderPart> mesWorkOrderPartList = mesWorkOrderPartService.findMesWorkOrderPart(workOrderList.stream().map(MesWorkOrder::getWorkOrderNo).collect(Collectors.toList()),organizeCode);
|
|
|
|
|
if (CollectionUtils.isEmpty(mesWorkOrderPartList)) {
|
|
|
|
|
LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},产线对应的工单对应工单零件不存在-->{}", organizeCode, workCenterList);
|
|
|
|
|
LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},产线对应的工单对应工单零件不存在-->{}", organizeCode, workOrderList.stream().map(MesWorkOrder::getWorkOrderNo).collect(Collectors.toList()));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},产线对应的工单对应工单零件mesWorkOrderPartList-->{}", organizeCode, mesWorkOrderPartList);
|
|
|
|
@ -143,7 +141,10 @@ public class MesPullingOrderInfoService extends BaseMesService<MesPullingOrderIn
|
|
|
|
|
List<MesCustomerPart> mesCustomerPartByPartNoList = mesCustomerPartService.findMesCustomerPartByPartNo(organizeCode, partPullDetailListMap.keySet().stream().distinct().collect(Collectors.toList()));
|
|
|
|
|
Map<String, List<MesCustomerPart>> customerPartMap = CollectionUtils.isEmpty(mesCustomerPartByPartNoList) ? null : mesCustomerPartByPartNoList.stream().collect(Collectors.groupingBy(MesCustomerPart::getErpPartNo));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<MesPullingOrderInfo> mesPullingOrderInfoList = new ArrayList<>();
|
|
|
|
|
List<MesPullingOrderPartInfo> mesPullingOrderPartInfoList = new ArrayList<>();
|
|
|
|
|
List<MesPullingOrderExtends> mesPullingOrderExtendsList = new ArrayList<>();
|
|
|
|
|
List<String> workOrderNoList = new ArrayList<>();
|
|
|
|
|
for (Map.Entry<String, List<MesWorkOrderPart>> stringListEntry : workOrderNoListMap.entrySet()) {
|
|
|
|
|
//需要生成拉动单的工单号 对应工单
|
|
|
|
|
List<MesWorkOrder> mesWorkOrders = workOrderListMap.get(stringListEntry.getKey());
|
|
|
|
@ -176,29 +177,6 @@ public class MesPullingOrderInfoService extends BaseMesService<MesPullingOrderIn
|
|
|
|
|
//拉动组号+年月日+工单后5位
|
|
|
|
|
String orderNo = mesPartPull.getPullCode()+ TimeTool.getNowTime("yyMMdd") +
|
|
|
|
|
mesWorkOrder.getWorkOrderNo().substring(mesWorkOrder.getWorkOrderNo().length()-5);
|
|
|
|
|
// if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.KITTING_PULL.getValue()) {
|
|
|
|
|
// orderNo = "KITTING";
|
|
|
|
|
// } else if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.JIS_PULL.getValue()) {
|
|
|
|
|
// orderNo = "JIS";
|
|
|
|
|
// } else if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.SPS_PULL.getValue()) {
|
|
|
|
|
// orderNo = "SPS";
|
|
|
|
|
// } else if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.BENZ_PULL.getValue()) {
|
|
|
|
|
// orderNo = "BENZ";
|
|
|
|
|
// } else if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.PICK_PULL.getValue()) {
|
|
|
|
|
// orderNo = "PICK";
|
|
|
|
|
// }
|
|
|
|
|
//调用平台生成拉动单号流水 -yyyyMMdd00001
|
|
|
|
|
// BaseResultBean<LinkedHashMap> orderResutlBean = sysOrderNoRuleCloud.getOrderNo(MesCommonConstant.MES_PULL_ORDER_NO);
|
|
|
|
|
// if (orderResutlBean != null && orderResutlBean.isSuccess()) {
|
|
|
|
|
// orderNo += orderResutlBean.getResultObject().get(WmsConstWords.CORE_ORDER_NO).toString();
|
|
|
|
|
// } else {
|
|
|
|
|
// throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
// .setSystemID(CommonEnumUtil.SOFT_TYPE.WMS.getCode())
|
|
|
|
|
// .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
|
|
|
|
|
// .setErrorDetail("生成单号失败")
|
|
|
|
|
// .setErrorSolution("【MES_PULL_ORDER_NO】请重新操作或查看服务!")
|
|
|
|
|
// .build();
|
|
|
|
|
// }
|
|
|
|
|
MesPullingOrderInfo pullingOrder = new MesPullingOrderInfo();
|
|
|
|
|
pullingOrder.setOrganizeCode(organizeCode);
|
|
|
|
|
pullingOrder.setPullingOrderNo(orderNo);
|
|
|
|
@ -219,7 +197,7 @@ public class MesPullingOrderInfoService extends BaseMesService<MesPullingOrderIn
|
|
|
|
|
pullingOrder.setOrderFlag(StringUtil.isEmpty(mesWorkOrder.getOrderFlag())?"":mesWorkOrder.getOrderFlag().substring(0,1));
|
|
|
|
|
|
|
|
|
|
ConvertBean.serviceModelInitialize(pullingOrder, userName);
|
|
|
|
|
mesPullingOrderInfoRepository.insert(pullingOrder);
|
|
|
|
|
mesPullingOrderInfoList.add(pullingOrder);
|
|
|
|
|
|
|
|
|
|
for (MesPartPullDetail partInfo : mesPartPullDetails) {
|
|
|
|
|
MesPullingOrderPartInfo pullingOrderPartInfo = new MesPullingOrderPartInfo();
|
|
|
|
@ -250,7 +228,7 @@ public class MesPullingOrderInfoService extends BaseMesService<MesPullingOrderIn
|
|
|
|
|
pullingOrderPartInfo.setOrderFlag(pullingOrder.getOrderFlag());
|
|
|
|
|
|
|
|
|
|
ConvertBean.serviceModelInitialize(pullingOrderPartInfo, userName);
|
|
|
|
|
mesPullingOrderPartInfoRepository.insert(pullingOrderPartInfo);
|
|
|
|
|
mesPullingOrderPartInfoList.add(pullingOrderPartInfo);
|
|
|
|
|
}
|
|
|
|
|
//7.拉动组+加工单号+生成拉动单状态的对应关系中间表,每次新增都要记录
|
|
|
|
|
MesPullingOrderExtends mesPullingOrderExtends= new MesPullingOrderExtends();
|
|
|
|
@ -260,17 +238,51 @@ public class MesPullingOrderInfoService extends BaseMesService<MesPullingOrderIn
|
|
|
|
|
mesPullingOrderExtends.setWorkOrderNo(pullingOrder.getWorkOrderNo());
|
|
|
|
|
mesPullingOrderExtends.setPullOrderStatus(pullingOrder.getPullOrderStatus());
|
|
|
|
|
ConvertBean.serviceModelInitialize(mesPullingOrderExtends, userName);
|
|
|
|
|
|
|
|
|
|
mesPullingOrderExtendsRepository.insert(mesPullingOrderExtends);
|
|
|
|
|
mesPullingOrderExtendsList.add(mesPullingOrderExtends);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
//6.产生拉动单后更新工单拉动状态为已拉动
|
|
|
|
|
mesWorkOrder.setPullingStatus(MesExtEnumUtil.WORK_ORDER_PULLING_STATUS.SUBMIT.getValue());
|
|
|
|
|
mesWorkOrderRepository.update(mesWorkOrder);
|
|
|
|
|
workOrderNoList.add(mesWorkOrder.getWorkOrderNo());
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
//数据持久化
|
|
|
|
|
if (!CollectionUtils.isEmpty(mesPullingOrderInfoList)) {
|
|
|
|
|
mesPullingOrderInfoRepository.saveAll(mesPullingOrderInfoList);
|
|
|
|
|
}
|
|
|
|
|
if (!CollectionUtils.isEmpty(mesPullingOrderPartInfoList)) {
|
|
|
|
|
mesPullingOrderPartInfoRepository.saveAll(mesPullingOrderPartInfoList);
|
|
|
|
|
}
|
|
|
|
|
if (!CollectionUtils.isEmpty(mesPullingOrderExtendsList)) {
|
|
|
|
|
mesPullingOrderExtendsRepository.saveAll(mesPullingOrderExtendsList);
|
|
|
|
|
}
|
|
|
|
|
//更新拉动状态
|
|
|
|
|
if (!CollectionUtils.isEmpty(workOrderNoList)) {
|
|
|
|
|
updateMesWorkOrder(organizeCode, userName, workOrderNoList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<MesWorkOrder> getMesWorkOrderList(String organizeCode, Integer pageSize, List<String> workCenterList) {
|
|
|
|
|
DdlPackBean packBeanWorkOrder = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
if (workCenterList.size() == MesExtConstWords.ONE) {
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(workCenterList.get(MesExtConstWords.ZERO), MesExtConstWords.WORK_CENTER_CODE, packBeanWorkOrder);
|
|
|
|
|
} else {
|
|
|
|
|
DdlPreparedPack.getInPackList(workCenterList, MesExtConstWords.WORK_CENTER_CODE, packBeanWorkOrder);
|
|
|
|
|
}
|
|
|
|
|
DdlPreparedPack.getInPackList(Arrays.asList(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(),MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()), "workOrderStatus", packBeanWorkOrder);
|
|
|
|
|
DdlPreparedPack.getNumberSmallerPack(MesExtEnumUtil.WORK_ORDER_PULLING_STATUS.SUBMIT.getValue(), "pullingStatus", packBeanWorkOrder);
|
|
|
|
|
return mesWorkOrderRepository.findByHqlTopWhere(packBeanWorkOrder, StringUtil.isEmpty(pageSize) ? MesExtConstWords.TEN : pageSize);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void updateMesWorkOrder(String organizeCode, String userName, List<String> workOrderNoList) {
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
if (workOrderNoList.size() == MesExtConstWords.ONE) {
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(workOrderNoList.get(MesExtConstWords.ZERO), MesExtConstWords.WORK_ORDER_NO, packBean);
|
|
|
|
|
} else {
|
|
|
|
|
DdlPreparedPack.getInPackList(workOrderNoList, MesExtConstWords.WORK_ORDER_NO, packBean);
|
|
|
|
|
}
|
|
|
|
|
mesWorkOrderRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "pullingStatus"},
|
|
|
|
|
new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.WORK_ORDER_PULLING_STATUS.SUBMIT.getValue()}, packBean);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|