diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesJisShipping.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesJisShipping.groovy new file mode 100644 index 0000000..7a76679 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesJisShipping.groovy @@ -0,0 +1,62 @@ +import cn.estsh.i3plus.platform.common.tool.MathOperation +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement +import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper +import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementRepository +import org.slf4j.Logger +import org.slf4j.LoggerFactory +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.util.StringUtils + +/** + * @Description : MES2PISCES-发运单 + * @Reference : + * @Author : gsz + * @CreateDate 2024/7/14 10:59 + * @Modify: + * */ +class MesToPiscesMesJisShipping { + + public static final Logger LOGGER = LoggerFactory.getLogger(MesToPiscesMesJisShipping.class) + + @Autowired + private MesShippingOrderManagementRepository mesShippingOrderManagementRepository; + + def filterData(MesInterfaceDataMapper mapper, List> srcData) throws Exception { + if (srcData == null || srcData.size() == 0) { + return srcData + } + Map mesPartShippingGroupMap = new HashMap<>(); + String organizeCode = mapper.getOrganizeCode(); + Map> destData = new HashMap<>(); + for (Map rowMap : srcData) { + if (!StringUtils.isEmpty(rowMap.get("shipping_order_code"))) { + MesShippingOrderManagement mesShipping = getMesShipping(organizeCode, String.valueOf(rowMap.get("shipping_order_code")), mesPartShippingGroupMap) + if (!Objects.isNull(mesShipping)) { + rowMap.put("HANDLE_FID", mesShipping.getFid()) + } else { + LOGGER.info("shipping_order_code:{}信息不存在", String.valueOf(rowMap.get("shipping_order_code"))) + } + } + //数据汇总 + String key = String.valueOf(rowMap.get("HANDLE_FID")) + String.valueOf("part_no") + if (destData.containsKey(key)) { + destData.get(key).put(key, MathOperation.add(Double.valueOf(destData.get(key).get("qty") + ""), Double.valueOf(rowMap.get("qty") + ""))) + } else { + destData.put(key, rowMap) + } + } + return destData; + } + + private MesShippingOrderManagement getMesShipping(String organizeCode, String shippingCode, Map mesPartShippingGroupMap) { + if (Objects.isNull(mesPartShippingGroupMap) || !mesPartShippingGroupMap.containsKey(shippingCode)) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(shippingCode, "shippingCode", ddlPackBean); + mesPartShippingGroupMap.put(shippingCode, mesShippingOrderManagementRepository.getByProperty(ddlPackBean)) + } + return mesPartShippingGroupMap.get(shippingCode); + } + +} \ 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 new file mode 100644 index 0000000..bbd4bc4 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/Pisces2Mes/PiscesToMesProductSn.groovy @@ -0,0 +1,58 @@ +import cn.estsh.i3plus.platform.plugin.datasource.DynamicDataSourceProxy +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean +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 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 PiscesToMesProductSn { + + public static final Logger LOGGER = LoggerFactory.getLogger(PiscesToMesProductSn.class) + + @Autowired + private IMesCrossOrganizeCfgRepository mesCrossOrganizeCfgRepository; + + @Resource(name = "pisces1DataSource") + private DynamicDataSourceProxy pisces1DataSource; + + def readData(MesInterfaceDataMapper mapper) throws Exception { + String organizeCode = mapper.getOrganizeCode(); + List crossOrganizeCfgList = mesCrossOrganizeCfgRepository.findByHqlWhere(DdlPackBean.getDdlPackBean(organizeCode)); + 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.getSrcOrganizeCode()) + params.put("partNo", crossOrganizeCfg.getPartNo()) + String sql = "select top "+mapper.getSrcGetLimit()+" * from " + mapper.getSrcTableName() + " where PLANT = :srcOrganizeCode and PART_NO = :partNo and " + mapper.getSrcWhere() + " order by "+mapper.getSrcOrderBy() + //查询待同步的数据 + List> dataList = queryDataTable(sql, params); + if (!CollectionUtils.isEmpty(dataList)) { + srcData.addAll(dataList); + } + } + return srcData; + } + + private List> queryDataTable(String sql, Map params) { + NamedParameterJdbcTemplate namedJdbcTemplate = new NamedParameterJdbcTemplate(pisces1DataSource.getDataSource()) + return namedJdbcTemplate.queryForList(sql, params); + } +} \ No newline at end of file diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/ccscTask/sapToMesCcscTaskResult.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/ccscTask/sapToMesCcscTaskResult.groovy index d4baeae..b80cf7a 100644 --- a/modules/i3plus-ext-mes-apiservice/src/groovy/ccscTask/sapToMesCcscTaskResult.groovy +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/ccscTask/sapToMesCcscTaskResult.groovy @@ -1,10 +1,18 @@ +import cn.estsh.i3plus.ext.mes.api.busi.IMesInputDefectRecordService import cn.estsh.i3plus.platform.common.tool.TimeTool import cn.estsh.i3plus.platform.plugin.datasource.DynamicDataSourceProxy +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack +import cn.estsh.i3plus.pojo.mes.bean.MesDefectType +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper +import cn.estsh.i3plus.pojo.mes.repository.MesDefectTypeRepository +import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderToSapRepository import lombok.Getter import lombok.Setter +import org.apache.commons.collections.CollectionUtils import org.slf4j.Logger import org.slf4j.LoggerFactory import org.springframework.beans.factory.annotation.Autowired @@ -33,6 +41,15 @@ class sapToMesCcscTaskResult { @Resource(name = "mesDataSource") private DynamicDataSourceProxy mesDataSource; + @Autowired + private MesProduceSnRepository mesProduceSnRepository; + + @Autowired + private IMesInputDefectRecordService mesInputDefectRecordService; + + @Autowired + private MesDefectTypeRepository mesDefectTypeRepository; + @Getter @Setter private Connection mesConn; @@ -46,6 +63,7 @@ class sapToMesCcscTaskResult { List> destData = new ArrayList<>(); List insertSqlList = new ArrayList<>(); + MesDefectType mesDefect = null; for (Map rowMap : srcData) { String organizeCode = String.valueOf(rowMap.get("WERKS")); String taskNo = rowMap.get("task_no").toString(); @@ -89,12 +107,18 @@ class sapToMesCcscTaskResult { , part_no, part_no, part_no, 1, work_cell_code, work_center_code, snowflakeIdMaker.nextId(), organizeCode, TimeTool.getNowTime(true), "CCSC_SAP"); insertSqlList.add(insertSql); - //更新所有条码为可疑品 - String sqlWorkSn = "update mes_produce_sn set qc_status=30 " + - " where organize_code= '"+organizeCode+"' and work_center_code= '"+work_center_code+"' " + - " and work_cell_code= '"+work_cell_code+"' "+ - " and part_no= '"+part_no+"'; "; - insertSqlList.add(sqlWorkSn); + //查询所有条码信息 + List mesProduceSnList = getMesProduceSn(organizeCode, work_center_code, work_cell_code, part_no) + if(CollectionUtils.isNotEmpty(mesProduceSnList)){ + if(Objects.isNull(mesDefect)){ + mesDefect = getMesDefect(organizeCode) + } + //更新所有条码为可疑品 生成可疑品记录 + for (MesProduceSn mesProduceSn : mesProduceSnList) { + mesInputDefectRecordService.savePartInspection(mesProduceSn, "JOB",mesDefect,"A01") + } + } + } } @@ -114,6 +138,20 @@ class sapToMesCcscTaskResult { return destData; } + private MesDefectType getMesDefect(String organizeCode) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode) + DdlPreparedPack.getStringEqualPack("CCSC", "defectTypeCode", packBean); + return mesDefectTypeRepository.getByProperty(packBean) + } + + private List getMesProduceSn(String organizeCode, String work_center_code, String work_cell_code, String part_no) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode) + DdlPreparedPack.getStringEqualPack(work_center_code, "workCenterCode", packBean); + DdlPreparedPack.getStringEqualPack(work_cell_code, "workCellCode", packBean); + DdlPreparedPack.getStringEqualPack(part_no, "partNo", packBean); + return mesProduceSnRepository.findByHqlWhere(packBean) + } + private List> queryDataTable(String sql, Map params) { NamedParameterJdbcTemplate namedJdbcTemplate = new NamedParameterJdbcTemplate(mesDataSource.getDataSource()) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/Pisces1Properties.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/Pisces1Properties.java new file mode 100644 index 0000000..5286f1a --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/Pisces1Properties.java @@ -0,0 +1,68 @@ +package cn.estsh.i3plus.ext.mes.apiservice.cus_suit; + +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.platform.plugin.datasource.DynamicDataSourceProxy; +import lombok.Getter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.concurrent.TimeUnit; + +/** + * @Description : pisces1数据源配置 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/7/9 11:14 + * @Modify: + **/ +@Configuration +public class Pisces1Properties { + + public static final Logger LOGGER = LoggerFactory.getLogger(CommonConstWords.SYSTEM_LOG); + + /*********************** + * pisces1数据源配置 + */ + @Value("${impp.pisces1.datasource.isopen}") + @Getter + private boolean piscesIsOpen; + + @Value("${impp.pisces1.datasource.driver-class-name}") + @Getter + private String piscesDriverClassName; + + @Value("${impp.pisces1.datasource.alias}") + @Getter + private String piscesDsAlias; + + @Value("${impp.pisces1.datasource.jdbc-url}") + @Getter + private String piscesDsJdbcUrl; + + @Value("${impp.pisces1.datasource.username}") + @Getter + private String piscesDsUsername; + + @Value("${impp.pisces1.datasource.password}") + @Getter + private String piscesDsPassword; + + @ConditionalOnExpression("'${impp.pisces1.datasource.isopen:false}' == 'true'") + @Bean(name = "pisces1DataSource") + public DynamicDataSourceProxy initPiscesCustomerSet(){ + LOGGER.info("【初始化客户定制化...】"); + + /** + * 注册客户定制数据源 + */ + LOGGER.info("【客户定制化:pisces1数据源加载...】"); + DynamicDataSourceProxy piscesDataSource = DynamicDataSourceProxy.initDataSourceFactory(this.getPiscesDriverClassName(), + this.getPiscesDsJdbcUrl(),this.getPiscesDsUsername(),this.getPiscesDsPassword(),TimeUnit.MINUTES.toMillis(30)); + + return piscesDataSource; + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/PiscesProperties.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/PiscesProperties.java index 0484ec2..2677039 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/PiscesProperties.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/cus_suit/PiscesProperties.java @@ -60,7 +60,6 @@ public class PiscesProperties { * 注册客户定制数据源 */ LOGGER.info("【客户定制化:pisces数据源加载...】"); - //安道拓定制业务 DynamicDataSourceProxy piscesDataSource = DynamicDataSourceProxy.initDataSourceFactory(this.getPiscesDriverClassName(), this.getPiscesDsJdbcUrl(),this.getPiscesDsUsername(),this.getPiscesDsPassword(),TimeUnit.MINUTES.toMillis(30)); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/MesSAPDbAdapter.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/MesSAPDbAdapter.java index d829e26..7b95f66 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/MesSAPDbAdapter.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/MesSAPDbAdapter.java @@ -50,6 +50,10 @@ public class MesSAPDbAdapter { @Resource(name = "piscesDataSource") private DynamicDataSourceProxy piscesDataSourceProxy; + @Resource(name = "pisces1DataSource") + private DynamicDataSourceProxy pisces1DataSourceProxy; + + @Value("${sync.redis.time:1800}") private Integer redisTime; @@ -77,7 +81,8 @@ public class MesSAPDbAdapter { private WmsSAPDbWriter buildWriter(String groupName, DynamicDataSourceProxy sapDataSourceProxy, DynamicDataSourceProxy mesDataSourceProxy, - DynamicDataSourceProxy piscesDataSourceProxy) throws Exception { + DynamicDataSourceProxy piscesDataSourceProxy, + DynamicDataSourceProxy pisces1DataSourceProxy) throws Exception { WmsSAPDbWriter wmsSAPDbWriter = null; @@ -97,7 +102,13 @@ public class MesSAPDbAdapter { wmsSAPDbWriter = new WmsSAPDbWriter(mesDataSourceProxy, piscesDataSourceProxy); } - + if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.PISCES12MES.getName())) { + wmsSAPDbWriter = new WmsSAPDbWriter(pisces1DataSourceProxy, mesDataSourceProxy); + } + + if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.MES2PISCES1.getName())) { + wmsSAPDbWriter = new WmsSAPDbWriter(mesDataSourceProxy, pisces1DataSourceProxy); + } // new 的对象需要手工注入 bean @@ -128,7 +139,8 @@ public class MesSAPDbAdapter { private WmsSAPDbReader buildReader(String groupName, DynamicDataSourceProxy sapDataSourceProxy, DynamicDataSourceProxy mesDataSourceProxy, - DynamicDataSourceProxy piscesDataSourceProxy) { + DynamicDataSourceProxy piscesDataSourceProxy, + DynamicDataSourceProxy pisces1DataSourceProxy) { WmsSAPDbReader wmsSAPDbReader = null; @@ -148,6 +160,14 @@ public class MesSAPDbAdapter { wmsSAPDbReader = new WmsSAPDbReader(mesDataSourceProxy); } + if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.PISCES12MES.getName())) { + wmsSAPDbReader = new WmsSAPDbReader(pisces1DataSourceProxy); + } + + if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.MES2PISCES1.getName())) { + wmsSAPDbReader = new WmsSAPDbReader(mesDataSourceProxy); + } + // if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.WMS2MES.getName())) { // wmsSAPDbReader = new WmsSAPDbReader(mesDataSourceProxy); // } @@ -200,11 +220,11 @@ public class MesSAPDbAdapter { // 不需要在这里处理 //initConnection(); - writer = buildWriter(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy); + writer = buildWriter(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy); writer.setSrcConn(this.srcConn); writer.setDestConn(this.destConn); - reader = buildReader(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy); + reader = buildReader(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy); reader.setSrcConn(this.srcConn); @@ -361,11 +381,11 @@ public class MesSAPDbAdapter { // 不需要在这里处理 //initConnection(); - writer = buildWriter(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy); + writer = buildWriter(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy); writer.setSrcConn(this.srcConn); writer.setDestConn(this.destConn); - reader = buildReader(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy); + reader = buildReader(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy); reader.setSrcConn(this.srcConn); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java index 5f606f6..79af43a 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java @@ -28,6 +28,7 @@ import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.UUID; import java.util.stream.Collectors; @Service @@ -315,6 +316,7 @@ public class MesShippingOrderManagementService extends BaseMesService