From a6c1d5a485001026fff2416712b8729f1fe25126 Mon Sep 17 00:00:00 2001 From: jun Date: Thu, 25 Jul 2024 13:47:53 +0800 Subject: [PATCH 1/2] =?UTF-8?q?CCSC=E6=A3=80=E6=B5=8B=EF=BC=8C=E9=87=8D?= =?UTF-8?q?=E6=96=B0=E6=89=93=E5=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/api/base/IMesCcscTaskService.java | 2 + .../ext/mes/api/base/IMesWorkOrderService.java | 2 +- .../controller/base/MesWorkOrderController.java | 4 +- .../serviceimpl/base/MesCcscTaskServiceImpl.java | 52 +++++++++++++++++++++- .../serviceimpl/base/MesWorkOrderService.java | 8 ++-- .../ext/mes/pojo/constant/MesCommonConstant.java | 1 + 6 files changed, 61 insertions(+), 8 deletions(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCcscTaskService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCcscTaskService.java index de1a186..653541d 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCcscTaskService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCcscTaskService.java @@ -16,4 +16,6 @@ public interface IMesCcscTaskService extends IBaseMesService { MesCcscTask insert(MesWorkOrder mesWorkOrder,String testType,String orderNo,Integer frequency,Integer rule,Integer qtyRule); void doCcscTaskByMesWorkOrder(String organizeCode,List mesWorkOrderList); + + void insertMesCcscTask(String organizeCode,List mesWorkOrderList); } 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 a744e27..5d6ae89 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 @@ -40,7 +40,7 @@ public interface IMesWorkOrderService extends IBaseMesService { void doReportWorkReversal(WmsProductModel model); @ApiOperation("重新打开") - void doReopen(String[] ids,String userName,String organizeCode); + void doReopen(Long[] ids,String userName,String organizeCode); List getPreDayReportMesProductionRecord(String organizeCode , List mesShiftList, String workCenterCode); 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 14590ed..be8bf01 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 @@ -185,11 +185,11 @@ public class MesWorkOrderController extends BaseMesController { @PutMapping(value = "/reopen") @ApiOperation(value = "重新打开") - public ResultBean doReopen(String[] ids) { + public ResultBean doReopen(Long[] ids) { try { ValidatorBean.checkNotNull(ids); mesWorkOrderService.doReopen(ids, AuthUtil.getSessionUser().getUserName(),AuthUtil.getOrganizeCode()); - return ResultBean.success("反向冲销成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + return ResultBean.success("重新打开成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); } catch (Exception e) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCcscTaskServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCcscTaskServiceImpl.java index 6793c46..5e89373 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCcscTaskServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCcscTaskServiceImpl.java @@ -12,8 +12,9 @@ import cn.estsh.i3plus.pojo.base.bean.BaseResultBean; 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.base.util.StringUtil; -import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.bean.MesCcscRule; +import cn.estsh.i3plus.pojo.mes.bean.MesCcscTask; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import cn.estsh.i3plus.pojo.mes.repository.MesCcscRuleRepository; import cn.estsh.i3plus.pojo.mes.repository.MesCcscTaskRepository; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; @@ -66,6 +67,7 @@ public class MesCcscTaskServiceImpl extends BaseMesService implemen //查ccsc规则表 LOGGER.info("-------- doCcscTaskByMesWorkOrder---{}",organizeCode); DdlPackBean ddlPackBeanRule = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(mesWorkOrderList.stream().map(MesWorkOrder::getPartNo).collect(Collectors.toList()), "partNo",ddlPackBeanRule); List ccscRuleList = ccscRuleRDao.findByHqlWhere(ddlPackBeanRule); Map> ccscRulePartMap = ccscRuleList.stream().collect(Collectors.groupingBy(MesCcscRule::getPartNo)); Map> workOrderPartMap = mesWorkOrderList.stream().collect(Collectors.groupingBy(MesWorkOrder::getPartNo)); @@ -155,4 +157,50 @@ public class MesCcscTaskServiceImpl extends BaseMesService implemen } } } + + @Override + public void insertMesCcscTask(String organizeCode, List mesWorkOrderList) { + if (CollectionUtils.isEmpty(mesWorkOrderList)) return; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(mesWorkOrderList.stream().map(MesWorkOrder::getPartNo).collect(Collectors.toList()), "partNo", packBean); + List ccscRuleList = ccscRuleRDao.findByHqlWhere(packBean); + if (CollectionUtils.isEmpty(ccscRuleList)) return; + Map> ccscRulePartMap = ccscRuleList.stream().collect(Collectors.groupingBy(MesCcscRule::getPartNo)); + //根据物料对工单表分组 + Map> workOrderPartMap = mesWorkOrderList.stream().collect(Collectors.groupingBy(MesWorkOrder::getPartNo)); + for (Map.Entry> stringListEntry : workOrderPartMap.entrySet()) { + List mesWorkOrders = stringListEntry.getValue(); + MesWorkOrder mesWorkOrder = mesWorkOrders.iterator().next(); + if (CollectionUtils.isEmpty(ccscRulePartMap.get(mesWorkOrder.getPartNo()))) continue; + MesCcscRule ccscRule = ccscRulePartMap.get(mesWorkOrder.getPartNo()).iterator().next(); + for (MesWorkOrder workOrder : mesWorkOrders) { + saveCcscTask(organizeCode, workOrder, ccscRule); + } + } + } + + private void saveCcscTask(String organizeCode, MesWorkOrder workOrder, MesCcscRule ccscRule) { + String orderNo = "1_" + workOrder.getWorkOrderNo(); + int ccscRuleQty = 1; + //新增质量检验任务 MesCcscTask + MesCcscTask mesCcscTask = getMesCcscTask(organizeCode, workOrder); + if (!Objects.isNull(mesCcscTask)) { + ccscRuleQty = mesCcscTask.getQty().intValue(); + if (mesCcscTask.getTaskNo().startsWith(MesCommonConstant.CCSC_RETEST_NO.substring(0,6))) { + String[] split = mesCcscTask.getTaskNo().split("_"); + orderNo = (Integer.parseInt(split[1]) + 1)+ "_" + split[2]; + } else { + orderNo = "1_" + mesCcscTask.getTaskNo(); + } + } + insert(workOrder, ccscRule.getTestType(), String.format(MesCommonConstant.CCSC_RETEST_NO, orderNo), ccscRule.getFrequency(), ccscRule.getRule(), ccscRuleQty); + } + + private MesCcscTask getMesCcscTask(String organizeCode, MesWorkOrder mesWorkOrder) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(mesWorkOrder.getWorkOrderNo(), "workOrderNo", ddlPackBean); + DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(), "partNo", ddlPackBean); + DdlPreparedPack.getOrderBy(null, null, ddlPackBean); + return baseRDao.getByProperty(ddlPackBean); + } } 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 98acf50..c231b03 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 @@ -1057,7 +1057,7 @@ public class MesWorkOrderService extends BaseMesService implements } @Override - public void doReopen(String[] ids,String userName,String organizeCode) { + public void doReopen(Long[] ids,String userName,String organizeCode) { //获取工单信息 List mesWorkOrderList = getMesWorkOrderList(ids, organizeCode); //数据更新 @@ -1076,11 +1076,13 @@ public class MesWorkOrderService extends BaseMesService implements mesWorkOrder.setCcscStatus(""); updateMesWorkOrder(mesWorkOrder,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.UPDATE,mesWorkOrder.getQty()); } + //重新生成CCSC task + mesCcscTaskService.insertMesCcscTask(organizeCode,mesWorkOrderList); } - private List getMesWorkOrderList(String[] ids, String organizeCode) { + private List getMesWorkOrderList(Long[] ids, String organizeCode) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPack(String.join(",", ids),"id",packBean); + DdlPreparedPack.getInPackArray(ids,"id",packBean); List mesWorkOrderList = baseRDao.findByHqlWhere(packBean); if (CollectionUtils.isEmpty(mesWorkOrderList)) { MesException.throwMesBusiException("选择工单信息不存在"); diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/constant/MesCommonConstant.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/constant/MesCommonConstant.java index 97d3951..82074a3 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/constant/MesCommonConstant.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/constant/MesCommonConstant.java @@ -38,6 +38,7 @@ public class MesCommonConstant { //CCSC生成任务号 public static final String CCSC_TASK_NO = "CCSC_TASK_NO"; + public static final String CCSC_RETEST_NO = "RETEST_%s"; //OBS public static final String OBS_AK = "TPNXQ2LUMRHNYYOBO8QO"; From 763ad4546cd24d84793054b7f21240cfe3f28090 Mon Sep 17 00:00:00 2001 From: jun Date: Thu, 25 Jul 2024 14:44:18 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E9=97=AE=E9=A2=98=E6=B8=85=E5=8D=95?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../groovy/Mes2Pisces/MesToPiscesProductSn.groovy | 66 ++++++++++++++++++++++ .../groovy/Pisces2Mes/PiscesToMesProductSn.groovy | 6 +- 2 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductSn.groovy diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductSn.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductSn.groovy new file mode 100644 index 0000000..f152686 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductSn.groovy @@ -0,0 +1,66 @@ +import cn.estsh.i3plus.platform.plugin.datasource.DynamicDataSourceProxy +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack +import cn.estsh.i3plus.pojo.mes.bean.MesCrossOrganizeCfg +import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper +import cn.estsh.i3plus.pojo.mes.repository.IMesCrossOrganizeCfgRepository +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil +import org.slf4j.Logger +import org.slf4j.LoggerFactory +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate +import org.springframework.util.CollectionUtils + +import javax.annotation.Resource + +/** + * @Description : 跨工厂防错 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/7/22 11:03 + * @Modify: + * */ +class MesToPiscesProductSn { + + public static final Logger LOGGER = LoggerFactory.getLogger(MesToPiscesProductSn.class) + + @Autowired + private IMesCrossOrganizeCfgRepository mesCrossOrganizeCfgRepository; + + @Resource(name = "mesDataSource") + private DynamicDataSourceProxy mesDataSource; + + def readData(MesInterfaceDataMapper mapper) throws Exception { + String organizeCode = mapper.getOrganizeCode(); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.CROSS_ORGANIZE_CFG_TYPE.REVERSE_SYNC.getValue(), "type", packBean) + List crossOrganizeCfgList = mesCrossOrganizeCfgRepository.findByHqlWhere(packBean); + if (CollectionUtils.isEmpty(crossOrganizeCfgList)) { + LOGGER.info("未查询到跨工厂配置"); + return new ArrayList<>(); + } + List> srcData = new ArrayList<>(); + //循环处理数据 + for (MesCrossOrganizeCfg crossOrganizeCfg : crossOrganizeCfgList) { + Map params = new HashMap<>(); + params.put("srcOrganizeCode", crossOrganizeCfg.getOrganizeCode()) + params.put("partNo", crossOrganizeCfg.getPartNo()) + String sql = "select * from " + mapper.getSrcTableName() + " where organize_code = :srcOrganizeCode and part_no = :partNo and " + mapper.getSrcWhere() + " order by " + mapper.getSrcOrderBy() + " limit " + mapper.getSrcGetLimit() + //查询待同步的数据 + List> dataList = queryDataTable(sql, params); + if (!CollectionUtils.isEmpty(dataList)) { + //目标工厂 + for (Map rowMap : dataList) { + rowMap.put("DEST_ORGANIZE_CODE", crossOrganizeCfg.getSrcOrganizeCode()) + } + srcData.addAll(dataList); + } + } + return srcData; + } + + private List> queryDataTable(String sql, Map params) { + NamedParameterJdbcTemplate namedJdbcTemplate = new NamedParameterJdbcTemplate(mesDataSource.getDataSource()) + return namedJdbcTemplate.queryForList(sql, params); + } +} \ No newline at end of file diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/Pisces2Mes/PiscesToMesProductSn.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/Pisces2Mes/PiscesToMesProductSn.groovy index bbd4bc4..37e54f0 100644 --- a/modules/i3plus-ext-mes-apiservice/src/groovy/Pisces2Mes/PiscesToMesProductSn.groovy +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/Pisces2Mes/PiscesToMesProductSn.groovy @@ -1,8 +1,10 @@ import cn.estsh.i3plus.platform.plugin.datasource.DynamicDataSourceProxy import cn.estsh.i3plus.pojo.base.bean.DdlPackBean +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack import cn.estsh.i3plus.pojo.mes.bean.MesCrossOrganizeCfg import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper import cn.estsh.i3plus.pojo.mes.repository.IMesCrossOrganizeCfgRepository +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil import org.slf4j.Logger import org.slf4j.LoggerFactory import org.springframework.beans.factory.annotation.Autowired @@ -30,7 +32,9 @@ class PiscesToMesProductSn { def readData(MesInterfaceDataMapper mapper) throws Exception { String organizeCode = mapper.getOrganizeCode(); - List crossOrganizeCfgList = mesCrossOrganizeCfgRepository.findByHqlWhere(DdlPackBean.getDdlPackBean(organizeCode)); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.CROSS_ORGANIZE_CFG_TYPE.SYNC.getValue(),"type",packBean) + List crossOrganizeCfgList = mesCrossOrganizeCfgRepository.findByHqlWhere(packBean); if (CollectionUtils.isEmpty(crossOrganizeCfgList)) { LOGGER.info("未查询到跨工厂配置"); return new ArrayList<>();