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 8b107c4..609e13c 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 @@ -2,6 +2,8 @@ package cn.estsh.i3plus.ext.mes.api.base; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +import java.util.List; + /** * @Description: * @CreateDate 2024/04/16 @@ -10,4 +12,6 @@ import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; public interface IMesWorkOrderService extends IBaseMesService { void doProductReport(MesWorkOrder mesWorkOrder); + + List sumMesWorkOrderQtyToSap(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 f0b13a5..2f60d89 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 @@ -3,6 +3,8 @@ package cn.estsh.i3plus.ext.mes.api.base; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderToSap; +import java.util.List; + /** * @Description : * @Reference : @@ -12,4 +14,6 @@ import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderToSap; **/ public interface IMesWorkOrderToSapService extends IBaseMesService { MesWorkOrderToSap insert(MesWorkOrder mesWorkOrder); + + void doMesWorkOrder(String organizeCode,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 83d2a36..a5d3e04 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 @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.base; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService; +import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToSapService; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.excel.MesExcelTool; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.platform.common.convert.ConvertBean; @@ -14,6 +15,7 @@ import cn.estsh.impp.framework.boot.util.ResultBean; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -27,6 +29,9 @@ public class MesWorkOrderController extends BaseMesController { @Autowired private IMesWorkOrderService mesWorkOrderService; + @Autowired + private IMesWorkOrderToSapService mesWorkOrderToSapService; + @PostMapping(value = "/import-mes-work-order") @ApiOperation(value = "导入数据") public ResultBean importMesWorkOrderExcel(@RequestParam("file") MultipartFile file, Integer type) { @@ -74,4 +79,24 @@ public class MesWorkOrderController extends BaseMesController { } + @GetMapping(value = "/sendToSap") + @ApiOperation(value = "发送给sap") + public ResultBean sendToSap(String organizeCode) { + try { + //查询汇总工单数量 + List mesWorkOrderList = mesWorkOrderService.sumMesWorkOrderQtyToSap(organizeCode); + if (!CollectionUtils.isEmpty(mesWorkOrderList)){ + mesWorkOrderToSapService.doMesWorkOrder(organizeCode,mesWorkOrderList); + } + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException e) { + return ResultBean.fail(e).build(); + } catch (Exception e) { + return ResultBean.fail(e); + } + } + + + } 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 new file mode 100644 index 0000000..d87cb5d --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesWorkOrderDao.java @@ -0,0 +1,17 @@ +package cn.estsh.i3plus.ext.mes.apiservice.dao; + +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; + +import java.util.List; + +/** + * @Description : SAP生产计划 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/5/7 15:13 + * @Modify: + **/ +public interface IMesWorkOrderDao { + + List sumMesWorkOrderQtyToSap(String organizeCode,List statusList); +} 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 new file mode 100644 index 0000000..578666c --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesWorkOrderDaoImpl.java @@ -0,0 +1,40 @@ +package cn.estsh.i3plus.ext.mes.apiservice.daoimpl; + +import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesWorkOrderDao; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.persistence.EntityManager; +import javax.persistence.Query; +import java.util.List; + +/** + * @Description :SAP生产计划 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/5/6 15:52 + * @Modify: + **/ +@Service +@Slf4j +public class MesWorkOrderDaoImpl implements IMesWorkOrderDao { + + @Autowired + private EntityManager entityManager; + + @Override + public List sumMesWorkOrderQtyToSap(String organizeCode, List statusList) { + StringBuffer hql = new StringBuffer("select new MesWorkOrder(partNo,planStartTime,sum(qty)) from MesWorkOrder " + + "where isDeleted=:isDeleted and isValid = :isValid and organizeCode = :organizeCode " + + "and workOrderStatus not in(:statusList) group by partNo,planStartTime"); + Query query = entityManager.createQuery(hql.toString(), MesWorkOrder.class); + 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); + return query.getResultList(); + } +} 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 new file mode 100644 index 0000000..85a0bf4 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderToSapJob.java @@ -0,0 +1,76 @@ +package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; + +import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService; +import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToSapService; +import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +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; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.CollectionUtils; + +import java.util.List; + +/** + * @Description : 汇总工单给SAP + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/5/11 15:58 + * @Modify: + **/ +// 禁止 JOB 并发执行 +@DisallowConcurrentExecution +@ApiOperation("汇总工单给SAP") +public class MesWorkOrderToSapJob extends BaseMesScheduleJob { + + public static final Logger LOGGER = LoggerFactory.getLogger(MesWorkOrderToSapJob.class); + + private static final long serialVersionUID = 9072058154235836696L; + + @Autowired + private IMesWorkOrderService mesWorkOrderService; + + @Autowired + private IMesWorkOrderToSapService mesWorkOrderToSapService; + + @Value("${server.port}") + private String serverPort; + @Value("${impp.server.ip}") + private String ip; + + public MesWorkOrderToSapJob() { + super(MesWorkOrderToSapJob.class, "汇总工单给SAP"); + 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("汇总工单给SAP开始 -----start"); + + for (String organizeCode : organizeCodeList) { + List mesWorkOrderList = mesWorkOrderService.sumMesWorkOrderQtyToSap(organizeCode); + if (!CollectionUtils.isEmpty(mesWorkOrderList)){ + mesWorkOrderToSapService.doMesWorkOrder(organizeCode,mesWorkOrderList); + } + } + LOGGER.info("汇总工单给SAP开始结束 ----- end"); + + } catch (Exception e) { + LOGGER.error("汇总工单给SAP任务结束e:{}",e.toString()); + } + } + +} 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 09107dd..6e4b14b 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 @@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.api.base.IMesPartService; import cn.estsh.i3plus.ext.mes.api.base.IMesProductOffLineService; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToSapService; +import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesWorkOrderDao; import cn.estsh.i3plus.ext.mes.apiservice.unit.exception.MesException; import cn.estsh.i3plus.ext.mes.pojo.util.MesExtEnumUtil; import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService; @@ -48,6 +49,8 @@ public class MesWorkOrderService extends BaseMesService implements private MesBomRepository mesBomRDao; @Autowired private IMesProductOffLineService mesProductOffLineService; + @Autowired + private IMesWorkOrderDao mesWorkOrderDao; @Override public MesWorkOrder insert(MesWorkOrder bean) { @@ -90,7 +93,7 @@ public class MesWorkOrderService extends BaseMesService implements baseRDao.insert(copyMesWorkOrder); workOrderLogService.insertBatch(orderLogList); //写入接口表 - iMesWorkOrderToSapService.insert(bean); + //iMesWorkOrderToSapService.insert(bean); return bean; } else if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) { //生成工单号 @@ -120,7 +123,7 @@ public class MesWorkOrderService extends BaseMesService implements workOrderLogService.insert(workOrderLog); bean = baseRDao.insert(bean); //写入接口表 - iMesWorkOrderToSapService.insert(bean); + //iMesWorkOrderToSapService.insert(bean); return bean; } @@ -164,6 +167,9 @@ public class MesWorkOrderService extends BaseMesService implements if (bean.getCompleteQty() > 0) { result.setCompleteQty(bean.getCompleteQty()); } + if (bean.getUnCompleteQty() > 0) { + result.setUnCompleteQty(bean.getUnCompleteQty()); + } //更新状态 if (bean.getWorkOrderStatus() > 0) { result.setWorkOrderStatus(bean.getWorkOrderStatus()); @@ -180,7 +186,7 @@ public class MesWorkOrderService extends BaseMesService implements } //发送给SAP if (sendToSap) { - iMesWorkOrderToSapService.insert(bean); + //iMesWorkOrderToSapService.insert(bean); } baseRDao.update(result); @@ -279,6 +285,8 @@ public class MesWorkOrderService extends BaseMesService implements } //更新工单状态 mesWorkOrder.setCompleteQty(MathOperation.add(mesWorkOrder.getNum(), mesWorkOrder.getCompleteQty())); + double unCompleteQty = MathOperation.sub(mesWorkOrder.getQty(), mesWorkOrder.getCompleteQty()); + mesWorkOrder.setUnCompleteQty(unCompleteQty > 0 ? unCompleteQty : 0); if (mesWorkOrder.getCompleteQty() >= mesWorkOrder.getQty()) { mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); } else { @@ -317,4 +325,13 @@ public class MesWorkOrderService extends BaseMesService implements } mesProductOffLineService.insertBatch(mesProductOffLineList); } + + @Override + public List sumMesWorkOrderQtyToSap(String organizeCode) { + List statusList = new ArrayList<>(); + statusList.add(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); + statusList.add(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()); + //查询汇总工单数量 + return mesWorkOrderDao.sumMesWorkOrderQtyToSap(organizeCode, statusList); + } } 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 6ef862a..7a4751f 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 @@ -2,10 +2,17 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToSapService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderToSap; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Objects; @Service @Slf4j @@ -14,8 +21,32 @@ public class MesWorkOrderToSapServiceImpl extends BaseMesService mesWorkOrderList) { + Pager pager = new Pager(1,1); + DdlPackBean ddlPackBean = null; + for (MesWorkOrder mesWorkOrder : mesWorkOrderList) { + mesWorkOrder.setOrganizeCode(organizeCode); + mesWorkOrder.setModifyUser("job"); + //计划开始时间+物料查询发送Sap的数据 + ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPlanStartTime(),"pedtr",ddlPackBean); + DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(),"plmat",ddlPackBean); + ddlPackBean.setOrderByStr(" order by createDatetime desc "); + List workOrderToSapList = baseRDao.findByHqlPage(ddlPackBean,pager); + if(CollectionUtils.isEmpty(workOrderToSapList)){ + insert(mesWorkOrder); + }else{ + if(!Objects.equals(workOrderToSapList.iterator().next().getGsmng(),mesWorkOrder.getQty())){ + insert(mesWorkOrder); + } + } + } + } }