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 1695e63..6cfad28 100644 --- a/modules/i3plus-ext-mes-apiservice/src/groovy/ccscTask/sapToMesCcscTaskResult.groovy +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/ccscTask/sapToMesCcscTaskResult.groovy @@ -1,45 +1,32 @@ -import cn.estsh.i3plus.platform.common.convert.ConvertBean +import cn.estsh.i3plus.platform.common.tool.TimeTool import cn.estsh.i3plus.platform.plugin.datasource.DynamicDataSourceProxy -import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil -import cn.estsh.i3plus.pojo.mes.bean.MesComunicationLog -import cn.estsh.i3plus.pojo.mes.bean.MesCcscTask -import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn -import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder -import cn.estsh.i3plus.pojo.mes.repository.MesCcscTaskRepository -import cn.estsh.i3plus.pojo.mes.repository.MesComunicationLogRepository -import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository -import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository -import cn.estsh.i3plus.pojo.wms.dbinterface.WmsInterfaceDataMapper +import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker +import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper +import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderToSapRepository 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 javax.annotation.Resource import java.sql.Connection /** - * @Description : QMS同步MES_CCSC任务检测结果 - * @Reference : + * QMS同步MES_CCSC任务检测结果 * @Author : gsz * @CreateDate 2024/5/23 9:58 - * @Modify: - * */ + */ class sapToMesCcscTaskResult { public static final Logger LOGGER = LoggerFactory.getLogger(sapToMesCcscTaskResult.class) @Autowired - private MesCcscTaskRepository mesCcscTaskRDao; + private SnowflakeIdMaker snowflakeIdMaker; @Autowired - private MesComunicationLogRepository mesComunicationLogRDao; - @Autowired - private MesProduceSnRepository mesProduceSnRDao; - @Autowired - private MesWorkOrderRepository mesWorkOrderRDao; + private MesWorkOrderToSapRepository mesWorkOrderToSapRDao; + @Resource(name = "yfasDataSource") private DynamicDataSourceProxy yfasDataSource; @@ -50,80 +37,85 @@ class sapToMesCcscTaskResult { @Setter private Connection mesConn; - def filterData(WmsInterfaceDataMapper mapper, List> srcData) { + def filterData(MesInterfaceDataMapper mapper, List> srcData) throws Exception { if (srcData == null || srcData.size() == 0) { - LOGGER.error("----QMS同步MES_CCSC任务检测结果 no data to filter----"); - return srcData; + return srcData } - String organizeCode = mapper.getOrganizeCode(); - - for (Map map : srcData) { - String taskNo = map.get("task_no").toString(); - String taskResult = map.get("task_result").toString(); //1:合格 2:不合格 - //查询 mesCcscTask - MesCcscTask mesCcscTask = mesCcscTaskRDao.getByProperty( - ["taskNo", "organizeCode", "isValid", "isDeleted"] as String[], - [taskNo, organizeCode, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue()] as Object[]); - - if (null == mesCcscTask) { - continue; - } - LOGGER.info("QMS同步MES_CCSC任务检测结果 taskNo:{}", taskNo); - - //根据任务工单号和物料查工单表 - MesWorkOrder mesWorkOrder = mesWorkOrderRDao.getByProperty( - ["workOrderNo", "partNo", "organizeCode", "isValid", "isDeleted"] as String[], - [mesCcscTask.getWorkOrderNo(), mesCcscTask.getPartNo(), organizeCode, - CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue()] as Object[]); + Map> destMapData = new HashMap<>(); + LOGGER.info("-------- filterData Start QMS同步MES_CCSC任务检测结果 ---------------") + + List> destData = new ArrayList<>(); + List insertSqlList = new ArrayList<>(); + for (Map rowMap : srcData) { + String organizeCode = String.valueOf(rowMap.get("WERKS")); + String taskNo = rowMap.get("task_no").toString(); + String taskResult = rowMap.get("task_result").toString(); //1:合格 2:不合格 + + Map sqlParams = new HashMap<>(6) + sqlParams.put("organizeCode", organizeCode); + sqlParams.put("task_no", taskNo); + StringBuffer sql = new StringBuffer("select * from mes_ccsc_task where " + + " organize_code=:organizeCode and task_no=:task_no ; "); + List> resultMap = this.queryDataTable(sql.toString(), sqlParams) + + insertSqlList.add("update mes_ccsc_task set task_result = '"+taskResult+ "' " + + " where organize_code= '"+organizeCode+"' and task_no= '"+taskNo+"'; "); + + LOGGER.info("-------- filterData Start QMS同步MES_CCSC任务检测结果 60----------") + + if (resultMap.size() > 0) { + sqlParams.put("work_order_no", resultMap.get(0).get("work_order_no")); + String part_no = resultMap.get(0).get("part_no") + sqlParams.put("part_no", part_no); + StringBuffer sqlWork = new StringBuffer("select * from mes_work_order where " + + " organize_code=:organizeCode and work_order_no=:work_order_no and part_no=:part_no ; "); + List> resultWorkMap = this.queryDataTable(sqlWork.toString(), sqlParams) + + if (resultWorkMap.size() > 0) { + String work_center_code = resultWorkMap.get(0).get("work_center_code") + String work_cell_code = resultWorkMap.get(0).get("work_cell_code") + + LOGGER.info("-------- filterData Start QMS同步MES_CCSC任务检测结果 70{}",work_center_code) + String logUpdateSql="update mes_comunication_log set is_deleted = 1 " + + " where organize_code= '"+organizeCode+"' and work_center_code= '"+work_center_code+"' " + + " and work_cell_code= '"+work_cell_code+"' and parameter_name= '"+part_no+"'; " + insertSqlList.add(logUpdateSql); + + if (taskResult.equals("2")) { //1:合格 2:不合格 + String insertSql = String.format(" INSERT INTO mes_comunication_log " + + "(`parameter_name`,`parameter_desc`,`value`,`status`,`work_cell_code`,`work_center_code`, " + + "`id`,`organize_code`,`create_date_time`,`create_user` )" + + "VALUES('%s', '%s','%s','%s','%s','%s','%s','%s','%s','%s') ; " + , 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); + } - if (null == mesWorkOrder) { - continue; - } - - MesComunicationLog comunicationLog = mesComunicationLogRDao.getByProperty( - ["workCenterCode", "workOrderNo", "value", "organizeCode", "isValid", "isDeleted"] as String[], - [mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getWorkCellCode(), mesCcscTask.getPartNo(), - organizeCode, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue()] as Object[]); - //软删记录 不合格时新增一条 - if (null != comunicationLog) { - mesComunicationLogRDao.deleteWeaklyById(comunicationLog.getId()) - } - if (taskResult.equals("2")) { //1:合格 2:不合格 - MesComunicationLog mesComunicationLog = new MesComunicationLog(); - mesComunicationLog.setOrganizeCode(organizeCode); - mesComunicationLog.setWorkCellCode(mesCcscTask.getWorkOrderNo()); - mesComunicationLog.setWorkCenterCode(mesCcscTask.getWorkOrderNo()); - mesComunicationLog.setStatus(1); - mesComunicationLog.setParameterName(mesCcscTask.getPartNo()); - mesComunicationLog.setParameterDesc(mesCcscTask.getPartNameRdd()); - mesComunicationLog.setValue(mesCcscTask.getPartNo()); - ConvertBean.serviceModelInitialize(mesComunicationLog, "CCSC_SAP"); - mesComunicationLogRDao.save(mesComunicationLog); - //更新所有条码为可疑品 - List mesProduceSnList = mesProduceSnRDao.findByProperty( - ["workCenterCode", "workOrderNo", "partNo", "organizeCode", "isValid", "isDeleted"] as String[], - [mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getWorkCellCode(), mesCcscTask.getPartNo(), - organizeCode, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue()] as Object[]); - if (!CollectionUtils.isEmpty(mesProduceSnList)) {//todo 可疑品状态? - mesProduceSnList.forEach( - { - sn -> - sn.setQcStatus(30) - ConvertBean.serviceModelUpdate(sn, "CCSC_SAP") - } - ) } + } else { + destData.add(rowMap); } - } - - // 过滤逻辑处理完后一定要把数据集返回,否则后续的处理逻辑不会执行 - LOGGER.info("[----QMS同步MES_CCSC任务检测结果srcData:{}", srcData); - return srcData; + //更新同步标识 + this.mesConn = mesDataSource.getWriteConnectionWithoutPool(); + mesDataSource.executeAsBatch(insertSqlList, mesConn) + mesDataSource.closeConnectionWithoutPoll(this.mesConn) + + //更新同步标识 +// this.mesConn = yfasDataSource.getWriteConnectionWithoutPool(); +// yfasDataSource.executeAsBatch(updateSqlList,mesConn) +// yfasDataSource.closeConnectionWithoutPoll(this.mesConn) + return destData; } private List> queryDataTable(String sql, Map params) { - NamedParameterJdbcTemplate namedJdbcTemplate = new NamedParameterJdbcTemplate(yfasDataSource.getDataSource()) + NamedParameterJdbcTemplate namedJdbcTemplate = new NamedParameterJdbcTemplate(mesDataSource.getDataSource()) List> dataMap = namedJdbcTemplate.queryForList(sql, params) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java index bb63d67..38e5799 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java @@ -1,17 +1,20 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.busi; +import cn.estsh.i3plus.ext.mes.api.base.IMesCcscTaskService; +import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService; import cn.estsh.i3plus.ext.mes.api.busi.IMaximoService; import cn.estsh.i3plus.ext.mes.pojo.model.MaximoParamModel; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import cn.estsh.impp.framework.base.controller.MesBaseController; +import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.*; +import java.util.List; import java.util.Map; @@ -23,6 +26,11 @@ public class MesWhiteListController extends MesBaseController { @Autowired private IMaximoService maximoService; + @Autowired + private IMesWorkOrderService mesWorkOrderService; + + @Autowired + private IMesCcscTaskService mesCcscTaskService; @PostMapping(value = "/meter/main-data") @ApiOperation(value = "Maximo仪表主数据", notes = "Maximo仪表主数据") public Map doMeterMainData(@RequestBody MaximoParamModel paramModel) { @@ -56,5 +64,14 @@ public class MesWhiteListController extends MesBaseController { // return ResultBean.success().setResultMap(resultMap).setSuccess((Boolean) resultMap.get("success")); } + @GetMapping(value = "/ccscTest") + @ApiOperation(value = "ccsc", notes = " ") + public ResultBean doCcscTest(String organizeCode) { + List mesWorkOrderList = mesWorkOrderService.queryMesWorkOrderProcessToSap(organizeCode); + if (!CollectionUtils.isEmpty(mesWorkOrderList)){ + mesCcscTaskService.doCcscTaskByMesWorkOrder(organizeCode,mesWorkOrderList); + } + return ResultBean.success().setSuccess(true); + } } 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 7ced9f7..55886f2 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 @@ -18,6 +18,8 @@ import cn.estsh.i3plus.pojo.mes.repository.MesCcscRuleRepository; import cn.estsh.i3plus.pojo.mes.repository.MesCcscTaskRepository; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -28,6 +30,7 @@ import java.util.stream.Collectors; @Service @Slf4j public class MesCcscTaskServiceImpl extends BaseMesService implements IMesCcscTaskService { + public static final Logger LOGGER = LoggerFactory.getLogger(MesCcscTaskServiceImpl.class); @Autowired private MesCcscRuleRepository ccscRuleRDao; @@ -58,6 +61,7 @@ public class MesCcscTaskServiceImpl extends BaseMesService implemen @Override public void doCcscTaskByMesWorkOrder(String organizeCode, List mesWorkOrderList) { //查ccsc规则表 + LOGGER.info("-------- doCcscTaskByMesWorkOrder---{}",organizeCode); DdlPackBean ddlPackBeanRule = DdlPackBean.getDdlPackBean(organizeCode); List ccscRuleList = ccscRuleRDao.findByHqlWhere(ddlPackBeanRule); Map> ccscRulePartMap = ccscRuleList.stream().collect(Collectors.groupingBy(MesCcscRule::getPartNo)); @@ -70,13 +74,16 @@ public class MesCcscTaskServiceImpl extends BaseMesService implemen //每一个加工的工单 1.查QMS同步过来的质量ccsc检查规则表 String nowTime = TimeTool.getNowTime(true); - if (StringUtil.isEmpty(ccscRulePartMap.get(mesWorkOrder.getPartNo()))) { + if (CollectionUtils.isEmpty(ccscRulePartMap.get(mesWorkOrder.getPartNo()))) { continue; } + LOGGER.info("-------- doCcscTaskByMesWorkOrder--80-{}",ccscRulePartMap.get(mesWorkOrder.getPartNo())); MesCcscRule ccscRule = ccscRulePartMap.get(mesWorkOrder.getPartNo()).iterator().next(); if (nowTime.compareTo(ccscRule.getNextExeTime()) > 0) { + Integer frequency = ccscRule.getFrequency(); Integer rule = ccscRule.getRule(); + LOGGER.info("-------- doCcscTaskByMesWorkOrder--83-{}",rule); List mesWorkOrderToTask=new ArrayList<>(); //首件取第一个工单?还是全部工单都同步,取工单明细条码的首件条码? switch (rule) { @@ -97,6 +104,7 @@ public class MesCcscTaskServiceImpl extends BaseMesService implemen default: break; } + LOGGER.info("-------- doCcscTaskByMesWorkOrder--105-"); String orderNo; //新增质量检验任务 MesCcscTask 工单+物料查询发送Sap的数据 DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); @@ -118,9 +126,11 @@ public class MesCcscTaskServiceImpl extends BaseMesService implemen .setErrorSolution("【CCSC_TASK_NO】请重新操作或查看服务!") .build(); } + LOGGER.info("-------- doCcscTaskByMesWorkOrder--129-insert"); insert(workOrder, orderNo, frequency, rule); } } + LOGGER.info("-------- doCcscTaskByMesWorkOrder--133-ccscRuleRDao.save"); //按照班次更新下次执行时间 ccscRule.setNextExeTime(CronUtil.getRecentTriggerTime(ccscRule.getCron())); //设置末次执行时间