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 68b8cb1..d7c9353 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 @@ -36,6 +36,8 @@ public interface IMesWorkOrderService extends IBaseMesService { @ApiOperation("ccscTest") List queryMesWorkOrderProcessToSap(String organizeCode); + MesWorkOrder getWorkOrder(String organizeCode, String workOrderNo); + @ApiOperation("反向冲销") void doReportWorkReversal(WmsProductModel model); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/TestController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/TestController.java new file mode 100644 index 0000000..0b43ca1 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/TestController.java @@ -0,0 +1,23 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.busi; + +import cn.estsh.i3plus.ext.mes.apiservice.schedulejob.MesWorkOrderUpdateQtyJob; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/test") +public class TestController { + + + @Autowired + private MesWorkOrderUpdateQtyJob mesWorkOrderUpdateQtyJob; + + @GetMapping("/reportOrder") + @ApiOperation(value = "报工") + public void reportOrder() { + mesWorkOrderUpdateQtyJob.executeMesJob(null, null); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderUpdateQtyJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderUpdateQtyJob.java new file mode 100644 index 0000000..8a0dc15 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderUpdateQtyJob.java @@ -0,0 +1,148 @@ +package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; + +import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService; +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.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.MesProductionRecord; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +import cn.estsh.i3plus.pojo.mes.model.MesWorkOrderModel; +import cn.estsh.i3plus.pojo.mes.repository.MesProductionRecordRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import com.google.common.base.Objects; +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.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @Description : 汇总工单给SAP + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/5/11 15:58 + * @Modify: + **/ +// 禁止 JOB 并发执行 +@DisallowConcurrentExecution +@ApiOperation("汇总工单报工数量") +@Service +public class MesWorkOrderUpdateQtyJob extends BaseMesScheduleJob { + + public static final Logger LOGGER = LoggerFactory.getLogger(MesWorkOrderUpdateQtyJob.class); + + private static final long serialVersionUID = 9072058154235836696L; + + @Autowired + private IMesWorkOrderService mesWorkOrderService; + + @Autowired + private MesProductionRecordRepository productionRecordRao; + + @Autowired + private MesWorkOrderRepository workOrderRepository; + + public MesWorkOrderUpdateQtyJob() { + super(MesWorkOrderUpdateQtyJob.class, "汇总工单报工数量"); + this.setMultiInstance(true); + } + + @Override + public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + try { + //String jobParam = this.getJobParam(); + String jobParam = "CK01"; + if (StringUtils.isBlank(jobParam)) { + throw new IllegalArgumentException("job参数为空,请检查参数"); + } + String[] organizeCodeList = jobParam.split(","); + LOGGER.info("汇总工单报工数量开始 -----start"); + String userName = "job"; + for (String organizeCode : organizeCodeList) { + List recordList = getUnReportMesProduceSn(organizeCode, null); + if (CollectionUtils.isEmpty(recordList)) { + continue; + } + Map> map = recordList.stream().collect(Collectors.groupingBy(MesProductionRecord::getWorkOrderNo)); + List orders = new ArrayList<>(); + map.forEach((k,v) -> { + MesWorkOrder workOrder = mesWorkOrderService.getWorkOrder(organizeCode, k); + + List productionRecords = getUnReportMesProduceSn(organizeCode, workOrder.getWorkOrderNo()); + + workOrder.setReportedQty(Double.valueOf(productionRecords.size())); + workOrder.setCompleteQty(Double.valueOf(productionRecords.size())); + Double uncompleteQty = workOrder.getQty() - Double.valueOf(productionRecords.size()); + if (uncompleteQty < 0) { + uncompleteQty = 0d; + } + List list = Stream.of(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(), MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue(), MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()).collect(Collectors.toList()); + + if (!list.contains(workOrder.getWorkOrderStatus())) { + workOrder.setSystemSyncStatus(1); + orders.add(workOrder); + LOGGER.info("工单号【{}】状态不是已发布、加工中、已完成,不进行累积"); + } else { + // 如果工单是已发布则修改成加工中 + if (Objects.equal(workOrder.getWorkOrderStatus(), MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue())) { + workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); + } + // 如果数量满足,则修改成已完成 + if (workOrder.getQty() <= workOrder.getReportedQty()) { + workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); + } + + workOrder.setUnCompleteQty(uncompleteQty); + workOrder.setSystemSyncStatus(1); + orders.add(workOrder); + } + }); + workOrderRepository.saveAll(orders); + } + LOGGER.info("汇总工单报工数量结束 ----- end"); + + } catch (Exception e) { + LOGGER.error("汇总工单报工数量结束e:{}", e.toString()); + } + } + + public List getUnReportMesProduceSn(String organizeCode, String workOrderNo) { + + //1.获取生产加工记录production_record表中,report_status为待汇报状态的工单 + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + + DdlPreparedPack.getIsNotNull("workOrderNo", ddlPackBean); + if (!StringUtils.isEmpty(workOrderNo)) { + DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", ddlPackBean); + } else { + DdlPreparedPack.getNumEqualPack(2,"systemSyncStatus", ddlPackBean); + } + + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue(), "reportStatus", ddlPackBean); + + + List mesProductionRecordList = productionRecordRao.findByHqlTopWhere(ddlPackBean, 500); + List recordList = new ArrayList<>(); + + recordList.addAll(mesProductionRecordList); + + return recordList; + } +} 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 e75e9e0..0a95afd 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 @@ -1312,6 +1312,15 @@ public class MesWorkOrderService extends BaseMesService implements return mesWorkOrderRDao.findByHqlWhere(packBean); } + @Override + public MesWorkOrder getWorkOrder(String organizeCode, String workOrderNo) { +// statusList.add(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + + DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", packBean); + return mesWorkOrderRDao.getByProperty(packBean); + } + private MesMove createMove(MesPartSap mesPart, String source, String target, String org, String workCenterCode, double qty, String sn, Integer moveType) { MesMove move = new MesMove(); if (!Objects.isNull(mesPart)) {