diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductSn.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductSn.groovy index f152686..01efd03 100644 --- a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductSn.groovy +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductSn.groovy @@ -1,3 +1,4 @@ +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.tool.DdlPreparedPack @@ -5,13 +6,17 @@ 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 lombok.Getter +import lombok.Setter 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 org.springframework.util.StringUtils import javax.annotation.Resource +import java.sql.Connection /** * @Description : 跨工厂防错 @@ -30,6 +35,10 @@ class MesToPiscesProductSn { @Resource(name = "mesDataSource") private DynamicDataSourceProxy mesDataSource; + @Getter + @Setter + private Connection mesConn; + def readData(MesInterfaceDataMapper mapper) throws Exception { String organizeCode = mapper.getOrganizeCode(); DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); @@ -40,12 +49,19 @@ class MesToPiscesProductSn { return new ArrayList<>(); } List> srcData = new ArrayList<>(); + List updateList = 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() + if (StringUtils.isEmpty(crossOrganizeCfg.getLastCreateDatetime())) { + params.put("createDateTime", TimeTool.pareDateToString(new Date(0))); + } else { + params.put("createDateTime", crossOrganizeCfg.getLastCreateDatetime()) + } + + String sql = "select * from " + mapper.getSrcTableName() + " where organize_code = :srcOrganizeCode and part_no = :partNo and create_date_time >= :createDateTime and " + mapper.getSrcWhere() + " order by " + mapper.getSrcOrderBy() + " limit " + mapper.getSrcGetLimit() //查询待同步的数据 List> dataList = queryDataTable(sql, params); if (!CollectionUtils.isEmpty(dataList)) { @@ -54,8 +70,17 @@ class MesToPiscesProductSn { rowMap.put("DEST_ORGANIZE_CODE", crossOrganizeCfg.getSrcOrganizeCode()) } srcData.addAll(dataList); + String createDateTime = dataList.iterator().next().get("create_date_time") + //更新配置 + updateList.add("update mes_cross_organize_cfg set last_create_date_time = '"+createDateTime+"',last_exe_time = '"+ TimeTool.getNowTime(true)+"' where id= " + crossOrganizeCfg.getId() + " ;") } } + //更新同步标识 + if (!CollectionUtils.isEmpty(updateList) && updateList.size() > 0) { + this.mesConn = mesDataSource.getWriteConnectionWithoutPool(); + mesDataSource.executeAsBatch(updateList, mesConn) + mesDataSource.closeConnectionWithoutPoll(this.mesConn) + } return srcData; } diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/MesProductionRecordToPisces.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/MesProductionRecordToPisces.groovy index d5a4747..aa7e57c 100644 --- a/modules/i3plus-ext-mes-apiservice/src/groovy/MesProductionRecordToPisces.groovy +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/MesProductionRecordToPisces.groovy @@ -1,13 +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.MesEquipment -import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn -import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder +import cn.estsh.i3plus.pojo.base.util.StringUtil +import cn.estsh.i3plus.pojo.mes.bean.* import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper -import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentRepository -import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository -import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository +import cn.estsh.i3plus.pojo.mes.repository.* import lombok.Getter import lombok.Setter import org.slf4j.Logger @@ -51,24 +48,37 @@ class MesProductionRecordToPisces { @Setter private Connection mesConn; + @Autowired + private MesWorkCenterRepository mesWorkCenterRepository; + + @Autowired + private MesWorkCellRepository mesWorkCellRepository; + + @Autowired + private MesProcessRepository mesProcessRepository; + def filterData(MesInterfaceDataMapper mapper, List> srcData) throws Exception { if (srcData == null || srcData.size() == 0) { return srcData } + String organizeCode = mapper.getOrganizeCode(); + Map mesWorkCenterMap = new HashMap<>(); + Map mesWorkCellMap = new HashMap<>(); + Map mesProcessMap = new HashMap<>(); List updateList = new ArrayList<>(); List> destData = new ArrayList<>(); for (Map rowMap : srcData) { Map params = new HashMap<>(); - params.put("partNo",rowMap.get("part_no")) - params.put("productSn",rowMap.get("product_sn")) - String sql = "select ID from MES.TT_PC_PART_BARCODE where PART_NO = :partNo and BARCODE = :productSn order by GENERATION_TIME desc"; - List> dataMap = queryDataTable(sql,params); + params.put("partNo", rowMap.get("part_no")) + params.put("productSn", rowMap.get("product_sn")) + String sql = "select top 1 ID from MES.TT_PC_PART_BARCODE where PART_NO = :partNo and BARCODE = :productSn order by GENERATION_TIME desc"; + List> dataMap = queryDataTable(sql, params); - if (!CollectionUtils.isEmpty(dataMap) && dataMap.size() >0) { + if (!CollectionUtils.isEmpty(dataMap) && dataMap.size() > 0) { rowMap.put("BARCODE_ID", dataMap.iterator().next().get("ID")) - updateList.add("update mes_production_record set system_sync_status = 1 where id= "+rowMap.get("id")+" ;") - }else{ + updateList.add("update mes_production_record set system_sync_status = 1 where id= " + rowMap.get("id") + " ;") + } else { continue } String workCenterCode = String.valueOf(rowMap.get("work_center_code")); @@ -83,6 +93,48 @@ class MesProductionRecordToPisces { } else { rowMap.put("WORK_ORDER_FID", null) } + //工作中心 + MesWorkCenter mesWorkCenter = getMesWorkCenter(organizeCode, workCenterCode, mesWorkCenterMap) + if (!Objects.isNull(mesWorkCenter)) { + rowMap.put("work_center_code", mesWorkCenter.getDescription()) + } else { + LOGGER.info("工作中心{},信息不存在", workCenterCode) + } + //工位 + if (!StringUtil.isEmpty(rowMap.get("work_cell_code"))) { + String workCellCode = String.valueOf(rowMap.get("work_cell_code")); + MesWorkCell mesWorkCell = getMesWorkCell(organizeCode, workCellCode, mesWorkCellMap) + if (!Objects.isNull(mesWorkCell)) { + rowMap.put("work_cell_code", mesWorkCell.getDescription()) + } else { + LOGGER.info("工位{},信息不存在", workCellCode) + } + } + //工序信息 + if (!StringUtil.isEmpty(rowMap.get("process_code"))) { + String processCode = String.valueOf(rowMap.get("process_code")); + MesProcess mesProcess = getMesProcess(organizeCode, processCode, mesProcessMap) + if (!Objects.isNull(mesProcess)) { + rowMap.put("process_code", mesProcess.getDescription()) + } else { + LOGGER.info("工序{},信息不存在", processCode) + } + } + //开班记录 + if (!StringUtil.isEmpty(rowMap.get("work_center_code")) && !StringUtil.isEmpty(rowMap.get("process_code")) && !StringUtil.isEmpty(rowMap.get("shift_code"))) { + params = new HashMap<>(); + params.put("workCenterCode", rowMap.get("work_center_code")) + params.put("processCode", rowMap.get("process_code")) + params.put("shiftCode", 1 == Integer.parseInt(rowMap.get("shift_code").toString()).intValue() ? "早班" : "晚班") + sql = "select top 1 ID from MES.TL_PS_SHIFT_START where ASSEMBLY_LINE = :workCenterCode and SHIFT_NAME = :shiftCode and SHIFT_GROUP_CODE = :processCode order by ID desc"; + dataMap = queryDataTable(sql, params); + if (!CollectionUtils.isEmpty(dataMap) && dataMap.size() > 0) { + rowMap.put("SHIFT_START_ID", dataMap.iterator().next().get("ID")) + } + } + if (StringUtil.isEmpty(rowMap.get("SHIFT_START_ID"))) { + rowMap.put("SHIFT_START_ID", null) + } String equipmentCode = String.valueOf(rowMap.get("equipment_code")); MesEquipment equipmentDb = getEquipmentDb(mapper.getOrganizeCode(), equipmentCode); @@ -93,23 +145,15 @@ class MesProductionRecordToPisces { } //更新同步标识 - if(!CollectionUtils.isEmpty(updateList) && updateList.size() > 0){ + if (!CollectionUtils.isEmpty(updateList) && updateList.size() > 0) { this.mesConn = mesDataSource.getWriteConnectionWithoutPool(); - mesDataSource.executeAsBatch(updateList,mesConn) + mesDataSource.executeAsBatch(updateList, mesConn) mesDataSource.closeConnectionWithoutPoll(this.mesConn) } return destData; } - def getProduceSnDb(String organizeCode, String productSn, String partNo) { - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(productSn, "productSn", ddlPackBean); - DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean); - MesProduceSn produceSnDb = produceSnRepository.getByProperty(ddlPackBean); - return produceSnDb; - } - MesWorkOrder getWorkOrderDb(String organizeCode, String workOrderNo) { DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", ddlPackBean); @@ -130,4 +174,32 @@ class MesProductionRecordToPisces { return dataMap; } + private MesWorkCenter getMesWorkCenter(String organizeCode, String workCenterCode, Map mesWorkCenterMap) { + if (Objects.isNull(mesWorkCenterMap) || !mesWorkCenterMap.containsKey(workCenterCode)) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", ddlPackBean); + mesWorkCenterMap.put(workCenterCode, mesWorkCenterRepository.getByProperty(ddlPackBean)) + } + return mesWorkCenterMap.get(workCenterCode); + } + + private MesWorkCell getMesWorkCell(String organizeCode, String workCenterCell, Map mesWorkCellMap) { + if (Objects.isNull(mesWorkCellMap) || !mesWorkCellMap.containsKey(workCenterCell)) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCell, "workCellCode", ddlPackBean); + mesWorkCellMap.put(workCenterCell, mesWorkCellRepository.getByProperty(ddlPackBean)) + } + return mesWorkCellMap.get(workCenterCell); + } + + + private MesProcess getMesProcess(String organizeCode, String processCode, Map mesProcessMap) { + if (Objects.isNull(mesProcessMap) || !mesProcessMap.containsKey(processCode)) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(processCode, "processCode", ddlPackBean); + mesProcessMap.put(processCode, mesProcessRepository.getByProperty(ddlPackBean)) + } + return mesProcessMap.get(processCode); + } + } \ No newline at end of file diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/WmsSAPDbQuery.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/WmsSAPDbQuery.java index 854c57d..b6a01a8 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/WmsSAPDbQuery.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/WmsSAPDbQuery.java @@ -119,6 +119,7 @@ public class WmsSAPDbQuery { * @throws Exception */ public String partName(String organizeCode, String partNo) throws Exception { + if(StringUtil.isEmpty(partNo) || StringUtil.isEmpty(organizeCode)) return ""; String sqlString = "select part_name from mes_part where organize_code='" + organizeCode + "' and part_no='" + partNo + "'"; @@ -138,9 +139,12 @@ public class WmsSAPDbQuery { * @throws Exception */ public String getColumnDateBySql(String sql, String params, String column) throws Exception { + if(StringUtil.isEmpty(sql)) return ""; String[] split = null; if (!StringUtil.isEmpty(params)) { split = params.split(","); + }else{ + if(sql.contains("?")) return ""; } List> result = mesDataSourceProxy.queryMapList(srcConn, sql, split); if (CollectionUtils.isNotEmpty(result)) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java index c0c4b5c..3e1b4a4 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java @@ -232,11 +232,14 @@ public class MesYfReportServiceImpl implements IMesYfReportService { } private Map> getMesEquipmentLogDetailMap(String organizeCode, List productionRecordList, List organizeCodeEquipList) { - DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackList(organizeCodeEquipList, MesExtConstWords.ORG_EQUIP_ID, packBean); - DdlPreparedPack.getInPackList(productionRecordList.stream().map(MesProductionRecord::getMouldRecordId).distinct().collect(Collectors.toList()), "mouldRecordId", packBean); - DdlPreparedPack.getInPackArray(new Object[]{MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PROCESS_FINISH.getValue(), MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PROCESS.getValue()}, "variableType", packBean); - List mesEquipmentLogDetailList = mesEquipmentLogDetailRepository.findByHqlWhere(packBean); + List mesEquipmentLogDetailList = new ArrayList<>(); + for (String organizeCodeEquip : organizeCodeEquipList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(organizeCodeEquip, MesExtConstWords.ORG_EQUIP_ID, packBean); + DdlPreparedPack.getInPackList(productionRecordList.stream().map(MesProductionRecord::getMouldRecordId).distinct().collect(Collectors.toList()), "mouldRecordId", packBean); + DdlPreparedPack.getInPackArray(new Object[]{MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PROCESS_FINISH.getValue(), MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PROCESS.getValue()}, "variableType", packBean); + mesEquipmentLogDetailList.addAll(mesEquipmentLogDetailRepository.findByHqlWhere(packBean)); + } if (CollectionUtils.isEmpty(mesEquipmentLogDetailList)) return null; return mesEquipmentLogDetailList.stream().collect(Collectors.groupingBy(t -> new StringJoiner(MesExtConstWords.COMMA).add(t.getMouldRecordId().toString()).add(t.getWorkCenterCode()).add(t.getWorkCellCode()).add(t.getEquipmentCode()).toString())); }