diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java index 6da2132..95eeb28 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java @@ -28,10 +28,10 @@ public interface IMesWorkOrderService extends IBaseMesService { void doProductReportExt(MesWorkOrder mesWorkOrder); @ApiOperation("非排序工单导入前删除") - void deleteUnSortOrder(String organizeCode, List partNoList); + void deleteUnSortOrder(String organizeCode, List partNoList,String userName); @ApiOperation("汇总工单给SAP") - List sumMesWorkOrderQtyToSap(String organizeCode,String lastSendToSapTime); + List sumMesWorkOrderQtyToSap(String organizeCode); @ApiOperation("ccscTest") List queryMesWorkOrderProcessToSap(String organizeCode); diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderToSapService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderToSapService.java index a0a49be..e73563b 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderToSapService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderToSapService.java @@ -13,7 +13,6 @@ import java.util.List; * @Modify: **/ public interface IMesWorkOrderToSapService extends IBaseMesService { - MesWorkOrderToSap insert(MesWorkOrderModel mesWorkOrder); void doMesWorkOrder(String organizeCode,String userName,List mesWorkOrderList); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java index 807572f..8919f88 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java @@ -82,14 +82,6 @@ public class MesWorkOrderController extends BaseMesController { } String userName = AuthUtil.getSessionUser().getUserName(); String organizeCode = AuthUtil.getOrganize().getOrganizeCode(); - //非排序工单导入前删除 - if (MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue() == type) { - List partNoList = beanList.stream().map(MesWorkOrderModel::getPartNo).filter(partNo -> !StringUtils.isEmpty(partNo)).distinct().collect(Collectors.toList()); - if(CollectionUtils.isEmpty(partNoList)){ - MesException.throwMesBusiException("导入物料信息数据无效"); - } - mesWorkOrderService.deleteUnSortOrder(organizeCode,partNoList); - } List mesWorkOrderList = new ArrayList<>(); // 导入数据初始化 for (MesWorkOrderModel bean : beanList) { @@ -159,17 +151,8 @@ public class MesWorkOrderController extends BaseMesController { @ApiOperation(value = "发送给sap") public ResultBean sendToSap(String organizeCode) { try { - MesConfig sendToSap = mesConfigService.getCfgValueByCode(organizeCode, "LAST_SEND_TO_SAP_TIME"); - String lastSendToSapTime = null; - if (Objects.isNull(sendToSap) || StringUtils.isEmpty(sendToSap.getCfgValue())) { - lastSendToSapTime = TimeTool.pareDateToString(new Date(0)); - } else { - lastSendToSapTime = sendToSap.getCfgValue(); - sendToSap.setCfgValue(TimeTool.pareDateToString(DateUtil.addMinutes(new Date(), -10))); - mesConfigService.update(sendToSap, ""); - } //查询汇总工单数量 - List mesWorkOrderList = mesWorkOrderService.sumMesWorkOrderQtyToSap(organizeCode,lastSendToSapTime); + List mesWorkOrderList = mesWorkOrderService.sumMesWorkOrderQtyToSap(organizeCode); if (!CollectionUtils.isEmpty(mesWorkOrderList)){ mesWorkOrderToSapService.doMesWorkOrder(organizeCode,"",mesWorkOrderList); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesWorkOrderDao.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesWorkOrderDao.java index eafd358..3b35c9b 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesWorkOrderDao.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesWorkOrderDao.java @@ -13,5 +13,5 @@ import java.util.List; **/ public interface IMesWorkOrderDao { - List sumMesWorkOrderQtyToSap(String organizeCode, List statusList,List partNoList); + List sumMesWorkOrderQtyToSap(String organizeCode); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesWorkOrderDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesWorkOrderDaoImpl.java index 5845d92..05147e9 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesWorkOrderDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesWorkOrderDaoImpl.java @@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.daoimpl; import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesWorkOrderDao; import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanUtil; +import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.mes.model.MesWorkOrderModel; import lombok.extern.slf4j.Slf4j; @@ -31,18 +32,17 @@ public class MesWorkOrderDaoImpl implements IMesWorkOrderDao { private EntityManager entityManager; @Override - public List sumMesWorkOrderQtyToSap(String organizeCode, List statusList,List partNoList) { - StringBuffer hql = new StringBuffer("select organize_Code as organizeCode,part_No as partNo, date_format(plan_start_time, '%Y-%m-%d' ) as planStartTime, product_Version as productVersion, " + - " sum( CASE WHEN work_Order_Status = 40 THEN complete_Qty ELSE qty END ) AS qty " + - " from Mes_Work_Order where is_Deleted=:isDeleted and is_Valid = :isValid and organize_Code = :organizeCode " + - " and work_order_type = 20 and order_flag !='P' and part_no in (:partNoList) "+ - " and work_Order_Status not in(:statusList) group by organize_code,part_No, date_format(plan_start_time, '%Y-%m-%d' ), product_Version "); + public List sumMesWorkOrderQtyToSap(String organizeCode) { + StringBuffer hql = new StringBuffer("select organize_code as organizeCode,part_no as partNo, date_format(plan_start_time, '%Y-%m-%d' ) as planStartTime, product_version as productVersion, " + + " sum(case when work_order_status = 40 then complete_qty else qty end ) as qty " + + " from mes_work_order where is_deleted=:isDeleted and is_valid = :isValid and organize_code = :organizeCode " + + " and work_order_type = 20 and order_flag !='P' and work_order_status != 10 and plan_start_time >= :today" + + " group by organize_code,part_no, date_format(plan_start_time, '%Y-%m-%d' ), product_version "); Query query = entityManager.createNativeQuery(hql.toString()); query.setParameter("organizeCode", organizeCode); query.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); - query.setParameter("statusList", statusList); - query.setParameter("partNoList", partNoList); + query.setParameter("today", TimeTool.getToday()); query.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); List> hashMaps = query.getResultList(); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderCloseOrderJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderCloseOrderJob.java new file mode 100644 index 0000000..104981e --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderCloseOrderJob.java @@ -0,0 +1,57 @@ +package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; + +import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService; +import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * @Description : 工单关闭 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/8/28 9:52 + * @Modify: + **/ +@DisallowConcurrentExecution +@ApiOperation("工单关闭") +public class MesWorkOrderCloseOrderJob extends BaseMesScheduleJob { + + public static final Logger LOGGER = LoggerFactory.getLogger(MesWorkOrderCloseOrderJob.class); + + @Autowired + private IMesWorkOrderService mesWorkOrderService; + + public MesWorkOrderCloseOrderJob() { + super(MesWorkOrderCloseOrderJob.class, "工单关闭"); + this.setMultiInstance(true); + } + + @Override + public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + try { + String jobParam = this.getJobParam(); + + if (StringUtils.isBlank(jobParam)) { + throw new IllegalArgumentException("job参数为空,请检查参数"); + } + String[] organizeCodeList = jobParam.split(","); + LOGGER.info("工单关闭开始 -----start"); + String userName = "CLOSE_JOB"; + + for (String organizeCode : organizeCodeList) { + mesWorkOrderService.deleteUnSortOrder(organizeCode, null, userName); + } + LOGGER.info("工单关闭开始结束 ----- end"); + + } catch (Exception e) { + LOGGER.error("工单关闭任务结束e:{}", e.toString()); + } + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderToSapJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderToSapJob.java index ada84ee..5e2d8a3 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderToSapJob.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderToSapJob.java @@ -71,16 +71,7 @@ public class MesWorkOrderToSapJob extends BaseMesScheduleJob { String userName = "job"; for (String organizeCode : organizeCodeList) { - MesConfig sendToSap = mesConfigService.getCfgValueByCode(organizeCode,"LAST_SEND_TO_SAP_TIME"); - String lastSendToSapTime = null; - if(Objects.isNull(sendToSap) || StringUtils.isEmpty(sendToSap.getCfgValue())){ - lastSendToSapTime = TimeTool.pareDateToString(new Date(0)); - }else{ - lastSendToSapTime = sendToSap.getCfgValue(); - sendToSap.setCfgValue(TimeTool.pareDateToString(DateUtil.addMinutes(new Date(), -10))); - mesConfigService.update(sendToSap,userName); - } - List mesWorkOrderList = mesWorkOrderService.sumMesWorkOrderQtyToSap(organizeCode,lastSendToSapTime); + List mesWorkOrderList = mesWorkOrderService.sumMesWorkOrderQtyToSap(organizeCode); if (!CollectionUtils.isEmpty(mesWorkOrderList)) { mesWorkOrderToSapService.doMesWorkOrder(organizeCode,userName, mesWorkOrderList); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 1f69ab9..2c38ce1 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -150,10 +150,6 @@ public class MesWorkOrderService extends BaseMesService implements baseRDao.insert(copyMesWorkOrder); workOrderLogService.saveMesWorkOrderLog(copyMesWorkOrder,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,copyMesWorkOrder.getQty()); return bean; - }else if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()){ - //生产工单-非排序手工插单,关闭该零件当天之前日期非排序工单 - List partNoList = Collections.singletonList(bean.getPartNo()); - this.deleteUnSortOrder(bean.getOrganizeCode(),partNoList); } else if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.BTO.getValue()) { Long produceSeq = 0L; if (null != result && result.getProduceSeq() != null) { @@ -351,6 +347,7 @@ public class MesWorkOrderService extends BaseMesService implements ValidatorBean.checkNotNull(item.getProductVersion(), "生产版本不能为空"); //校验物料生产版本是否存在 MesProductVersion mesProductVersion = checkMesProductVersion(item); + item.setErpWorkCenter(mesProductVersion.getWorkCenterCode()); //获取bom信息 List bomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); //发送工单信息给WMS @@ -751,6 +748,7 @@ public class MesWorkOrderService extends BaseMesService implements MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", item.getPartNo(), item.getProductVersion()); } MesProductVersion mesProductVersion = versionList.iterator().next(); + item.setErpWorkCenter(mesProductVersion.getWorkCenterCode()); //获取bom信息 if (mesBomMap.containsKey(item.getPartNo() + mesProductVersion.getAlternativePartList())) { mesBomList = mesBomMap.get(item.getPartNo() + mesProductVersion.getAlternativePartList()); @@ -1036,14 +1034,14 @@ public class MesWorkOrderService extends BaseMesService implements } @Override - public void deleteUnSortOrder(String organizeCode, List partNoList) { + public void deleteUnSortOrder(String organizeCode, List partNoList,String userName) { DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getInPackList(partNoList, "partNo", ddlPackBean); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue(), "workOrderType", ddlPackBean); DdlPreparedPack.getStringSmallerNotEqualPack(TimeTool.getToday(), "planStartTime", ddlPackBean); DdlPreparedPack.getNumberSmallerPack(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue(), "workOrderStatus", ddlPackBean); baseRDao.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "workOrderStatus"}, - new Object[]{"CLOSE_JOB", TimeTool.getNowTime(true), MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()}, ddlPackBean); + new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()}, ddlPackBean); } @@ -1271,21 +1269,9 @@ public class MesWorkOrderService extends BaseMesService implements } @Override - public List sumMesWorkOrderQtyToSap(String organizeCode,String lastSendToSapTime) { - List statusList = new ArrayList<>(); - statusList.add(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); -// statusList.add(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()); - DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue(),MesExtConstWords.WORK_ORDER_TYPE,packBean); - DdlPreparedPack.getStringNoEqualPack(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue(),"orderFlag",packBean); - DdlPreparedPack.getNotInPack(statusList, MesExtConstWords.WORK_ORDER_STATUS, packBean); - DdlPreparedPack.getStringBiggerPack(lastSendToSapTime,"modifyDatetime",packBean); - List mesWorkOrderList = mesWorkOrderRDao.findByHqlWhere(packBean); - if(CollectionUtils.isEmpty(mesWorkOrderList)) return null; - List partNoList = mesWorkOrderList.stream().map(MesWorkOrder::getPartNo).filter(partNo -> !StringUtil.isEmptyAndNull(partNo)).distinct().collect(Collectors.toList()); - if(CollectionUtils.isEmpty(partNoList)) return null; + public List sumMesWorkOrderQtyToSap(String organizeCode) { //查询汇总工单数量 - return mesWorkOrderDao.sumMesWorkOrderQtyToSap(organizeCode, statusList,partNoList); + return mesWorkOrderDao.sumMesWorkOrderQtyToSap(organizeCode); } @Override diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderToSapServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderToSapServiceImpl.java index cfc38b1..fa23a7e 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderToSapServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderToSapServiceImpl.java @@ -19,50 +19,14 @@ import java.util.stream.Collectors; public class MesWorkOrderToSapServiceImpl extends BaseMesService implements IMesWorkOrderToSapService { @Override - public MesWorkOrderToSap insert(MesWorkOrderModel mesWorkOrder) { - MesWorkOrderToSap mesWorkOrderToSap = new MesWorkOrderToSap(mesWorkOrder.getOrganizeCode(), - mesWorkOrder.getOrganizeCode(), mesWorkOrder.getPartNo(), mesWorkOrder.getProductVersion(), - mesWorkOrder.getQty(), mesWorkOrder.getPlanStartTime()); - ConvertBean.serviceModelUpdate(mesWorkOrderToSap,mesWorkOrder.getModifyUser()); - return baseRDao.insert(mesWorkOrderToSap); - } - - @Override public void doMesWorkOrder(String organizeCode,String userName,List mesWorkOrderList) { - //查询表里原有数据 - Map workOrderToSapMap = getStringMesWorkOrderToSapMap(organizeCode, mesWorkOrderList); + List mesWorkOrderToSapList = new ArrayList<>(); //数据处理 for (MesWorkOrderModel mesWorkOrder : mesWorkOrderList) { - String key = new StringJoiner(MesExtConstWords.COMMA).add(mesWorkOrder.getPartNo()).add(mesWorkOrder.getPlanStartTime()).toString(); - mesWorkOrder.setModifyUser(userName); - //计划开始时间+物料查询发送Sap的数据 - if(!workOrderToSapMap.containsKey(key)){ - insert(mesWorkOrder); - }else{ - if(!Objects.equals(workOrderToSapMap.get(key).getGsmng(),mesWorkOrder.getQty())){ - insert(mesWorkOrder); - } - } - } - } - - private Map getStringMesWorkOrderToSapMap(String organizeCode, List mesWorkOrderList) { - List partNoList = mesWorkOrderList.stream().map(MesWorkOrderModel::getPartNo).distinct().collect(Collectors.toList()); - List planStartTime = mesWorkOrderList.stream().map(MesWorkOrderModel::getPlanStartTime).distinct().collect(Collectors.toList()); - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackList(planStartTime,"pedtr",ddlPackBean); - DdlPreparedPack.getInPackList(partNoList,"plmat",ddlPackBean); - ddlPackBean.setOrderByStr(" order by createDatetime desc "); - List workOrderToSapList = baseRDao.findByHqlWhere(ddlPackBean); - Map workOrderToSapMap = new HashMap<>(); - if(!CollectionUtils.isEmpty(workOrderToSapList)){ - for (MesWorkOrderToSap mesWorkOrderToSap : workOrderToSapList) { - String key = new StringJoiner(MesExtConstWords.COMMA).add(mesWorkOrderToSap.getPlmat()).add(mesWorkOrderToSap.getPedtr()).toString(); - if(!workOrderToSapMap.containsKey(key)){ - workOrderToSapMap.put(key,mesWorkOrderToSap); - } - } + MesWorkOrderToSap orderToSap = new MesWorkOrderToSap(mesWorkOrder.getOrganizeCode(), mesWorkOrder.getPartNo(), mesWorkOrder.getProductVersion(), mesWorkOrder.getQty(), mesWorkOrder.getPlanStartTime()); + ConvertBean.serviceModelUpdate(orderToSap,userName); + mesWorkOrderToSapList.add(orderToSap); } - return workOrderToSapMap; + baseRDao.saveAll(mesWorkOrderToSapList); } }