QMSCCSC检测任务

tags/yfai-mes-ext-v1.0
gsz 12 months ago
parent 91fd5c4d91
commit 71873fb9e5

@ -0,0 +1,14 @@
package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesCcscRule;
/**
* @Description :ccsc
* @Reference :
* @Author : gsz
* @CreateDate 2024/5/23 13:28
* @Modify:
**/
public interface IMesCcscRuleService extends IBaseMesService<MesCcscRule> {
}

@ -0,0 +1,19 @@
package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesCcscTask;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import java.util.List;
/**
* @Description :
* @Reference :
* @Author : gsz
* @CreateDate 2024/5/23 13:28
* @Modify:
**/
public interface IMesCcscTaskService extends IBaseMesService<MesCcscTask> {
MesCcscTask insert(MesWorkOrder mesWorkOrder,String orderNo,Integer frequency,Integer rule);
void doCcscTaskByMesWorkOrder(String organizeCode,List<MesWorkOrder> mesWorkOrderList);
}

@ -0,0 +1,14 @@
package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesComunicationLog;
/**
* @Description :线
* @Reference :
* @Author : gsz
* @CreateDate 2024/5/23 13:28
* @Modify:
**/
public interface IMesComunicationLogService extends IBaseMesService<MesComunicationLog> {
}

@ -14,4 +14,6 @@ public interface IMesWorkOrderService extends IBaseMesService<MesWorkOrder> {
void doProductReport(MesWorkOrder mesWorkOrder); void doProductReport(MesWorkOrder mesWorkOrder);
List<MesWorkOrder> sumMesWorkOrderQtyToSap(String organizeCode); List<MesWorkOrder> sumMesWorkOrderQtyToSap(String organizeCode);
List<MesWorkOrder> queryMesWorkOrderProcessToSap(String organizeCode);
} }

@ -0,0 +1,132 @@
import cn.estsh.i3plus.platform.common.convert.ConvertBean
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 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 : QMSMES_CCSC
* @Reference :
* @Author : gsz
* @CreateDate 2024/5/23 9:58
* @Modify:
* */
class sapToMesCcscTaskResult {
public static final Logger LOGGER = LoggerFactory.getLogger(sapToMesCcscTaskResult.class)
@Autowired
private MesCcscTaskRepository mesCcscTaskRDao;
@Autowired
private MesComunicationLogRepository mesComunicationLogRDao;
@Autowired
private MesProduceSnRepository mesProduceSnRDao;
@Autowired
private MesWorkOrderRepository mesWorkOrderRDao;
@Resource(name = "yfasDataSource")
private DynamicDataSourceProxy yfasDataSource;
@Resource(name = "mesDataSource")
private DynamicDataSourceProxy mesDataSource;
@Getter
@Setter
private Connection mesConn;
def filterData(WmsInterfaceDataMapper mapper, List<Map<String, Object>> srcData) {
if (srcData == null || srcData.size() == 0) {
LOGGER.error("----QMS同步MES_CCSC任务检测结果 no data to filter----");
return srcData;
}
String organizeCode = mapper.getOrganizeCode();
for (Map<String, Object> 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[]);
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<MesProduceSn> 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")
}
)
}
}
}
//
LOGGER.info("[----QMS同步MES_CCSC任务检测结果srcData:{}", srcData);
return srcData;
}
private List<Map<String, Object>> queryDataTable(String sql, Map<String, Object> params) {
NamedParameterJdbcTemplate namedJdbcTemplate = new NamedParameterJdbcTemplate(yfasDataSource.getDataSource())
List<Map<String, Object>> dataMap = namedJdbcTemplate.queryForList(sql, params)
return dataMap;
}
}

@ -0,0 +1,76 @@
package cn.estsh.i3plus.ext.mes.apiservice.schedulejob;
import cn.estsh.i3plus.ext.mes.api.base.IMesCcscTaskService;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService;
import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.impp.framework.boot.init.ApplicationProperties;
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.util.CollectionUtils;
import java.util.List;
/**
* @Description : MESCCSCSAP
* @Reference :
* @Author : gsz
* @CreateDate 2024/5/23 9:58
* @Modify:
**/
// 禁止 JOB 并发执行
@DisallowConcurrentExecution
@ApiOperation("MES根据工单生成CCSC检测任务给SAP")
public class MesWorkOrderProcessCcscTaskToSapJob extends BaseMesScheduleJob {
public static final Logger LOGGER = LoggerFactory.getLogger(MesWorkOrderProcessCcscTaskToSapJob.class);
private static final long serialVersionUID = 5397182238074237383L;
@Autowired
private IMesWorkOrderService mesWorkOrderService;
@Autowired
private IMesCcscTaskService mesCcscTaskService;
@Value("${server.port}")
private String serverPort;
@Value("${impp.server.ip}")
private String ip;
public MesWorkOrderProcessCcscTaskToSapJob() {
super(MesWorkOrderProcessCcscTaskToSapJob.class, "汇总工单给SAP");
this.setMultiInstance(true);
}
@Override
public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) {
try {
String jobParam = this.getJobParam();
if (StringUtils.isBlank(jobParam)) {
throw new IllegalArgumentException("job参数为空请检查参数");
}
String[] organizeCodeList = jobParam.split(",");
LOGGER.info("汇总工单给SAP开始 -----start");
for (String organizeCode : organizeCodeList) {
List<MesWorkOrder> mesWorkOrderList = mesWorkOrderService.queryMesWorkOrderProcessToSap(organizeCode);
if (!CollectionUtils.isEmpty(mesWorkOrderList)){
mesCcscTaskService.doCcscTaskByMesWorkOrder(organizeCode,mesWorkOrderList);
}
}
LOGGER.info("汇总工单给SAP开始结束 ----- end");
} catch (Exception e) {
LOGGER.error("汇总工单给SAP任务结束e:{}",e.toString());
}
}
}

@ -0,0 +1,19 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesCcscRuleService;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesCcscRule;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class MesCcscRuleServiceImpl extends BaseMesService<MesCcscRule> implements IMesCcscRuleService {
@Override
protected void setPackQueryBean(MesCcscRule bean, DdlPackBean packBean) {
DdlPreparedPack.getStringEqualPack(bean.getPartNo(), "partNo", packBean);
}
}

@ -0,0 +1,133 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesCcscTaskService;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pojo.util.CronUtil;
import cn.estsh.i3plus.icloud.core.sdk.ICoreUtilCloud;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.platform.common.util.WmsConstWords;
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.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.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.stream.Collectors;
@Service
@Slf4j
public class MesCcscTaskServiceImpl extends BaseMesService<MesCcscTask> implements IMesCcscTaskService {
@Autowired
private MesCcscRuleRepository ccscRuleRDao;
@Autowired
private MesCcscTaskRepository ccscTaskRDao;
@Autowired
private ICoreUtilCloud sysOrderNoRuleCloud;
@Override
protected void setPackQueryBean(MesCcscTask bean, DdlPackBean packBean) {
DdlPreparedPack.getStringEqualPack(bean.getPartNo(), "partNo", packBean);
DdlPreparedPack.getStringEqualPack(bean.getTaskNo(), "taskNo", packBean);
DdlPreparedPack.getStringEqualPack(bean.getWorkOrderNo(), "workOrderNo", packBean);
}
@Override
public MesCcscTask insert(MesWorkOrder mesWorkOrder, String orderNo, Integer frequency, Integer rule) {
MesCcscTask mesCcscTask = new MesCcscTask(mesWorkOrder);
mesCcscTask.setTaskNo(orderNo);
mesCcscTask.setFrequency(frequency);
mesCcscTask.setRule(rule);
ConvertBean.serviceModelInitialize(mesCcscTask, mesWorkOrder.getModifyUser());
return baseRDao.insert(mesCcscTask);
}
@Override
public void doCcscTaskByMesWorkOrder(String organizeCode, List<MesWorkOrder> mesWorkOrderList) {
//查ccsc规则表
DdlPackBean ddlPackBeanRule = DdlPackBean.getDdlPackBean(organizeCode);
List<MesCcscRule> ccscRuleList = ccscRuleRDao.findByHqlWhere(ddlPackBeanRule);
Map<String, List<MesCcscRule>> ccscRulePartMap = ccscRuleList.stream().collect(Collectors.groupingBy(MesCcscRule::getPartNo));
Map<String, List<MesWorkOrder>> workOrderPartMap = mesWorkOrderList.stream().collect(Collectors.groupingBy(MesWorkOrder::getPartNo));
//根据物料对工单表分组
for (Map.Entry<String, List<MesWorkOrder>> stringListEntry : workOrderPartMap.entrySet()) {
String key = stringListEntry.getKey();
List<MesWorkOrder> mesWorkOrders = stringListEntry.getValue();
MesWorkOrder mesWorkOrder = mesWorkOrders.iterator().next();
//每一个加工的工单 1.查QMS同步过来的质量ccsc检查规则表
String nowTime = TimeTool.getNowTime(true);
if (StringUtil.isEmpty(ccscRulePartMap.get(mesWorkOrder.getPartNo()))) {
continue;
}
MesCcscRule ccscRule = ccscRulePartMap.get(mesWorkOrder.getPartNo()).iterator().next();
if (nowTime.compareTo(ccscRule.getNextExeTime()) > 0) {
Integer frequency = ccscRule.getFrequency();
Integer rule = ccscRule.getRule();
List<MesWorkOrder> mesWorkOrderToTask=new ArrayList<>();
//首件取第一个工单?还是全部工单都同步,取工单明细条码的首件条码?
switch (rule) {
case 1:
MesWorkOrder workOrder = mesWorkOrders.stream().sorted(Comparator.comparing(MesWorkOrder::getStartTime)).collect(Collectors.toList()).iterator().next();
mesWorkOrderToTask.add(workOrder);
break;
case 2:
mesWorkOrderToTask.add(mesWorkOrders.stream().sorted(Comparator.comparing(MesWorkOrder::getStartTime).reversed()).collect(Collectors.toList()).iterator().next());
break;
case 3://首尾件
mesWorkOrderToTask.add(mesWorkOrders.stream().sorted(Comparator.comparing(MesWorkOrder::getStartTime)).collect(Collectors.toList()).iterator().next());
MesWorkOrder next = mesWorkOrders.stream().sorted(Comparator.comparing(MesWorkOrder::getStartTime).reversed()).collect(Collectors.toList()).iterator().next();
if (!mesWorkOrderToTask.contains(next)) {
mesWorkOrderToTask.add(next);
}
break;
default:
break;
}
String orderNo;
//新增质量检验任务 MesCcscTask 工单+物料查询发送Sap的数据
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getWorkOrderNo(), "workOrderNo", ddlPackBean);
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(), "partNo", ddlPackBean);
List<MesCcscTask> mesCcscTaskList = baseRDao.findByHqlWhere(ddlPackBean);
if (CollectionUtils.isEmpty(mesCcscTaskList)) {
//全部新增task表
for (MesWorkOrder workOrder : mesWorkOrderToTask) {
//调用平台生成拉动单号流水 CCSC_TASK_NO TASKyyyyMMdd00001
BaseResultBean<LinkedHashMap> orderResutlBean = sysOrderNoRuleCloud.getOrderNo(MesCommonConstant.CCSC_TASK_NO);
if (orderResutlBean != null && orderResutlBean.isSuccess()) {
orderNo = orderResutlBean.getResultObject().get(WmsConstWords.CORE_ORDER_NO).toString();
} else {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.WMS.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("生成单号失败")
.setErrorSolution("【CCSC_TASK_NO】请重新操作或查看服务")
.build();
}
insert(workOrder, orderNo, frequency, rule);
}
}
//按照班次更新下次执行时间
ccscRule.setNextExeTime(CronUtil.getRecentTriggerTime(ccscRule.getCron()));
//设置末次执行时间
ccscRule.setLastExeTime(nowTime);
ConvertBean.serviceModelUpdate(ccscRule, mesWorkOrder.getModifyUser());
ccscRuleRDao.save(ccscRule);
}
}
}
}

@ -0,0 +1,13 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesComunicationLogService;
import cn.estsh.i3plus.pojo.mes.bean.MesComunicationLog;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class MesComunicationLogServiceImpl extends BaseMesService<MesComunicationLog> implements IMesComunicationLogService {
}

@ -54,6 +54,8 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
@Autowired @Autowired
private IMesWorkOrderDao mesWorkOrderDao; private IMesWorkOrderDao mesWorkOrderDao;
@Autowired @Autowired
private MesWorkOrderRepository mesWorkOrderRDao;
@Autowired
private MesWorkCenterRepository mesWorkCenterRDao; private MesWorkCenterRepository mesWorkCenterRDao;
@Autowired @Autowired
private MesShiftRepository mesShiftRDao; private MesShiftRepository mesShiftRDao;
@ -539,4 +541,14 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
//查询汇总工单数量 //查询汇总工单数量
return mesWorkOrderDao.sumMesWorkOrderQtyToSap(organizeCode, statusList); return mesWorkOrderDao.sumMesWorkOrderQtyToSap(organizeCode, statusList);
} }
@Override
public List<MesWorkOrder> queryMesWorkOrderProcessToSap(String organizeCode) {
List<Integer> statusList = new ArrayList<>();
statusList.add(MesExtEnumUtil.ORDER_STATUS.process.getValue());
// statusList.add(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue());
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(statusList, "workOrderStatus", packBean);
return mesWorkOrderRDao.findByHqlWhere(packBean);
}
} }

@ -30,6 +30,7 @@ public class MesCommonConstant {
public static final String ORDER_NO_JIS_SORT = "ORDER_NO_JIS_SORT"; public static final String ORDER_NO_JIS_SORT = "ORDER_NO_JIS_SORT";
//报工条码规则 //报工条码规则
public static final String REPORT_SN = "REPORT_SN"; public static final String REPORT_SN = "REPORT_SN";
//CCSC生成任务号
public static final String CCSC_TASK_NO = "CCSC_TASK_NO";
} }

Loading…
Cancel
Save