Merge branch 'mes-uat' into mes-uat-changshu0609

mes-uat-changshu0609
王杰 3 weeks ago
commit b42af31686

@ -14,9 +14,13 @@ public interface IMesCimSeresReportService {
void doSrmSunSheetJisNormal(List<Long> ids);
void doSrmSunSheetJisCancel(List<Long> ids);
ListPager<MesCimSeresJisQueue> queryJisQueueLogByPager(Integer checkStatus, String vin, String materielCode,
String partClassCode, String partClassName, Pager pager);
void doJisQueueNormal(List<Long> ids);
void doJisQueueCancel(List<Long> ids);
}

@ -56,6 +56,20 @@ public class MesCimSeresReportController {
}
}
@ApiOperation(value = "赛力斯JIS单-取消", notes = "赛力斯JIS单-取消")
@PostMapping("/srm-sun-sheet-jis-cancel")
public ResultBean doSrmSunSheetJisCancel(@RequestBody Long[] idArray) {
try {
List<Long> idList = Arrays.asList(idArray);
mesCimSeresReportService.doSrmSunSheetJisCancel(idList);
return ResultBean.success("执行成功");
} catch (ImppBusiException e) {
return ResultBean.fail(e);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@ApiOperation(value = "赛力斯JIS队列接收日志", notes = "赛力斯JIS队列接收日志")
@GetMapping("/query-jis-queue-log")
public ResultBean queryJisQueueLogByPager(Integer checkStatus, String vin, String materielCode,
@ -86,4 +100,18 @@ public class MesCimSeresReportController {
}
}
@ApiOperation(value = "赛力斯JIS队列-取消", notes = "赛力斯JIS队列-取消")
@PostMapping("/jis-queue-cancel")
public ResultBean doJisQueueCancel(@RequestBody Long[] idArray) {
try {
List<Long> idList = Arrays.asList(idArray);
mesCimSeresReportService.doJisQueueCancel(idList);
return ResultBean.success("执行成功");
} catch (ImppBusiException e) {
return ResultBean.fail(e);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -35,7 +35,7 @@ import java.io.IOException;
import java.util.*;
/**
* @Description :
* @Description : data Matrix
* @Reference :
* @Author : Castle
* @CreateDate : 2024/6/17 16:43
@ -77,7 +77,7 @@ public class ChengDuSplitFixCharPrintStrategy implements IPrintTemplateStrategyS
MesProduceSnPrintDataModel printDataModel = getModel(produceSn, custPartNo);
mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().clear();
mesProduceSnPrintModel.getMesProduceSnList().add(produceSn);
Map<String, Object> printTemplateData = new HashMap<>(getPrintContextMap(produceSn, custPartNo));
Map<String, Object> printTemplateData = new HashMap<>(getPrintContextMap(produceSn, custPartNo, isStep));
mesProduceSnPrintModel.getPrintContextList().add(printTemplateData);
//保存打印记录
mesProduceSnPrintModel.getMesPrintedSnLogList().add(mesPrintedSnLogService.getMesCustomPrintedSnLog(mesProduceSnPrintModel.getUserName(), organizeCode, printDataModel, printTemplateData));
@ -87,7 +87,7 @@ public class ChengDuSplitFixCharPrintStrategy implements IPrintTemplateStrategyS
//封装打印信息
MesProduceSnPrintDataModel printDataModel = getModel(mesProduceSn, custPartNo);
mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().clear();
Map<String, Object> printTemplateData = new HashMap<>(getPrintContextMap(mesProduceSn, custPartNo));
Map<String, Object> printTemplateData = new HashMap<>(getPrintContextMap(mesProduceSn, custPartNo, isStep));
List<Map<String, Object>> printDataMapList = new ArrayList<>();
printDataMapList.add(printTemplateData);
mesProduceSnPrintModel.getPrintContextList().add(packResultMap(mesProduceSnPrintModel, printDataMapList));
@ -131,7 +131,7 @@ public class ChengDuSplitFixCharPrintStrategy implements IPrintTemplateStrategyS
return mesProduceSnPrintDataModel;
}
private Map<String, Object> getPrintContextMap(MesProduceSn produceSn, String custPartNo) {
private Map<String, Object> getPrintContextMap(MesProduceSn produceSn, String custPartNo, boolean isStep) {
Map<String, Object> result = new HashMap<>();
String[] splitSn = produceSn.getProductSn().split("#");
if (splitSn.length < 3) {
@ -173,7 +173,11 @@ public class ChengDuSplitFixCharPrintStrategy implements IPrintTemplateStrategyS
log.error("ChengDuSplitFixCharPrintStrategy --- execute --- 报错:{}", e.getMessage());
return result;
}
result.put(MesPcnExtConstWords.CUST_SN_DATA_MATRIX, "data:image/jpeg;base64," + Base64.getEncoder().encodeToString(dataMatrixCode.toByteArray()));
String encoderCode = Base64.getEncoder().encodeToString(dataMatrixCode.toByteArray());
if (!isStep) {
encoderCode = "data:image/jpeg;base64," + encoderCode;
}
result.put(MesPcnExtConstWords.CUST_SN_DATA_MATRIX, encoderCode);
return result;
}

@ -56,6 +56,20 @@ public class MesCimSeresReportServiceImpl implements IMesCimSeresReportService {
}
@Override
public void doSrmSunSheetJisCancel(List<Long> ids) {
final String organizeCode = AuthUtil.getOrganize().getOrganizeCode();
final String username = AuthUtil.getSessionUser().getUserName();
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(ids, "id", packBean);
runSheetJisRDao.updateByProperties(
new String[]{"isValid", "isDeleted", "modifyUser", "modifyDatetime"},
new Object[]{CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(),
username, TimeTool.getNowTime(true)},
packBean);
}
@Override
public ListPager<MesCimSeresJisQueue> queryJisQueueLogByPager(Integer checkStatus, String vin, String materielCode,
String partClassCode, String partClassName, Pager pager) {
final String organizeCode = AuthUtil.getOrganize().getOrganizeCode();
@ -82,4 +96,18 @@ public class MesCimSeresReportServiceImpl implements IMesCimSeresReportService {
queueJisRDao.updateByProperties(new String[]{"checkStatus","modifyUser","modifyDatetime"},new Object[]{MesExtEnumUtil.CIM_SERES_JIS_STATUS.WAIT_CHECK.getValue(), username, TimeTool.getNowTime(true)}, packBean);
}
@Override
public void doJisQueueCancel(List<Long> ids) {
final String organizeCode = AuthUtil.getOrganize().getOrganizeCode();
final String username = AuthUtil.getSessionUser().getUserName();
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(ids, "id", packBean);
queueJisRDao.updateByProperties(
new String[]{"isValid", "isDeleted", "modifyUser", "modifyDatetime"},
new Object[]{CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(),
username, TimeTool.getNowTime(true)},
packBean);
}
}

@ -0,0 +1,182 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableRwExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam;
import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwResult;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* @Description : PLC
* @Reference :
* @Author : logic
* @CreateDate : 2025/6/9 16:58
* @Modify:
**/
@Slf4j
@Service("mesSendUserDefinedCmdStepService")
public class MesSendUserDefinedCmdStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesEquipVariableRwExtService equipVariableRwExtService;
@Override
public StepResult execute(StationRequestBean reqBean) {
StepResult stepResult = StepResult.getSuccessComplete();
StationResultBean resultBean = new StationResultBean();
//获取工步参数
Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);
//获取上下文信息
MesProductionProcessContext productionProcessContext =
productionProcessContextStepService.dispatchCurCellEquipment(reqBean, stepParamMap);
//获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext).getSuccess()) {
stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
}
//从上下文的设备数据变量接口逻辑对象集合中取出当前设备信息的逻辑类型对应的接口逻辑对象集合
List<MesEquipmentVariableCfg> equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgListByVct();
//根据变量类别[用户自定义指令]搜集设备数据变量接口逻辑信息
String userDefinedEquipVariableCfgCategory = (
null != stepParamMap &&
stepParamMap.isPresent() &&
stepParamMap.get().containsKey(MesPcnExtConstWords.USER_DEFINED_EQUIP_VARIABLE_CFG_CATEGORY)) ?
stepParamMap.get().get(MesPcnExtConstWords.USER_DEFINED_EQUIP_VARIABLE_CFG_CATEGORY).getParamValue() :
null;
equipmentVariableCfgList = productionProcessContextStepService.collectEquipmentVariableCfgList(
equipmentVariableCfgList, userDefinedEquipVariableCfgCategory);
//当前工位使用的设备
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
//配置错误 抛出异常
if (!productionProcessContextStepService.checkNecessaryEquipmentVariableCfgAndValue(productionProcessContext,
cellEquipContext, equipmentVariableCfgList, userDefinedEquipVariableCfgCategory).getSuccess()) {
stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
}
//搜集设备数据变量接口逻辑信息中的二级变量
List<String> categoryLevelTwoList = productionProcessContextStepService.collectCategoryLevelTwoList(equipmentVariableCfgList);
//根据变量类型与二级变量获取设备数据变量信息
List<MesEquipmentVariable> equipmentVariableList = productionProcessContextStepService.findEquipmentVariableList(
productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), categoryLevelTwoList);
//配置错误 抛出异常
if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext,
cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess()) {
stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
}
//存储生产过程上下文对象
productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext);
//发送数据给设备的数据变量
return execSendInitializationCmd(reqBean, resultBean, stepParamMap, stepResult, cellEquipContext,
equipmentVariableCfgList, equipmentVariableList,
cellEquipContext.getKepwareFlag(equipmentVariableList.get(0).getChannel()));
}
private StepResult execSendInitializationCmd(StationRequestBean reqBean, StationResultBean resultBean,
Optional<Map<String, MesProdRouteOptParam>> stepParamMap,
StepResult stepResult, MesCellEquipContext cellEquipContext,
List<MesEquipmentVariableCfg> equipmentVariableCfgList,
List<MesEquipmentVariable> equipmentVariableList, String kepwareFlag) {
//最大重试次数[工步参数]
Integer maxRetryTimes = getMaxRetryTimes(stepParamMap);
MesEquipVariableRwResult equipVariableRwResult = null;
Map<String, List<MesEquipmentVariableCfg>> categoryLevelTwoMap = equipmentVariableCfgList.stream().filter(
Objects::nonNull).collect(Collectors.groupingBy(MesEquipmentVariableCfg::getCategoryLevelTwo));
for (int i = 1; i <= maxRetryTimes; i ++) {
//写值
for (MesEquipmentVariable equipmentVariable : equipmentVariableList) {
equipVariableRwResult = equipVariableRwExtService.writeVariable(
categoryLevelTwoMap.get(equipmentVariable.getCategoryLevelTwo()).get(0), equipmentVariable, kepwareFlag);
if (equipVariableRwResult.getIsSuccessed()) {
this.sendMessage(reqBean, new StationResultBean().writeDbLog().checkRepeat(),
String.format("[%s]%s", cellEquipContext.getEquipmentName(), equipVariableRwResult.getMessage()),
MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
} else {
this.sendMessage(reqBean, new StationResultBean().writeDbLog().checkRepeat(),
String.format("设备[%s]:自定义指令发送失败!原因:%s", cellEquipContext.getEquipmentName(),
JSONObject.toJSONString(equipVariableRwResult)), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO,
MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
break;
}
}
if (!equipVariableRwResult.getIsSuccessed() && equipVariableRwResult.getIsNoCfg()) {
stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("设备[%s]:自定义指令发送失败!原因:%s",
cellEquipContext.getEquipmentName(), equipVariableRwResult.getMessage()));
}
if (equipVariableRwResult.getIsSuccessed()) {
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]:自定义指令发送成功!", cellEquipContext.getEquipmentName()));
}
stepNonCompleteAndSendMsg(reqBean, resultBean.writeDbLog().checkRepeat(), stepResult, String.format("设备[%s]:自定义指令发送失败!累计次数[%s]!原因:%s", cellEquipContext.getEquipmentName(), i, equipVariableRwResult.getMessage()));
//每失败一次 睡眠
if (i != maxRetryTimes) {
threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
}
}
stepSendTaskCompleteAndThrowEx(reqBean, stepResult, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
return stepResult;
}
//最大重试次数[工步参数]
private Integer getMaxRetryTimes(Optional<Map<String, MesProdRouteOptParam>> stepParamMap) {
Integer maxRetryTimes = null;
try {
maxRetryTimes = (null != stepParamMap && stepParamMap.isPresent() &&
stepParamMap.get().containsKey(MesPcnExtConstWords.MAX_RETRY_TIMES)) ?
Integer.valueOf(stepParamMap.get().get(MesPcnExtConstWords.MAX_RETRY_TIMES).getParamValue()) : null;
} catch (NumberFormatException e) {
}
return !StringUtils.isEmpty(maxRetryTimes) ? maxRetryTimes : MesPcnExtConstWords.MAX_RETRY_TIMES_DEFAULT;
}
}

@ -0,0 +1,81 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingQueue;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.repository.seres.shipping.MesCimSeresLastOrderShippingCodeRepository;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
/**
* @Description :
* @Reference :
* @Author : logic
* @CreateDate : 2025/6/9 16:38
* @Modify:
**/
@Slf4j
@Service("mesShippingCheckCimSeresLastOrderShippingCodeStepService")
public class MesShippingCheckCimSeresLastOrderShippingCodeStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private MesCimSeresLastOrderShippingCodeRepository mesCimSeresLastOrderShippingCodeRepository;
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete();
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean);
//配置错误 抛出异常
if (!productionProcessContext.getSuccess()) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//存储生产过程上下文对象
productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext);
//获取上下文发运队列信息
MesShippingQueue shippingQueue = productionDispatchContextStepService.getShippingQueueContext(reqBean);
if ((null == shippingQueue || StringUtils.isEmpty(shippingQueue.getRfidSn())))
return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, true,
MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, "当前未获取到缓存中有效的发运队列,默认跳过发送空托盘!");
//判断当前扫描的发运单号是否是“末单”
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(shippingQueue.getShippingCode(), MesPcnExtConstWords.SHIPPING_CODE, ddlPackBean);
boolean exitByHql = mesCimSeresLastOrderShippingCodeRepository.isExitByHql(ddlPackBean);
if (exitByHql) {
this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("当前发运单号[%s]为末单,即将执行发送空托盘!",
shippingQueue.getShippingCode()), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
//当前发运单号为“末单”则调用“向PLC点位发送自定义指令”工步向PLC点位发送用户自定义指令
return ((IStepService) SpringContextsUtil.getBean("mesSendUserDefinedCmdStepService")).executeInState(reqBean);
}else {
return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, true,
MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前发运单号[%s]非末单,默认跳过发送空托盘!", shippingQueue.getShippingCode()));
}
}
}

@ -942,4 +942,7 @@ public class MesPcnExtConstWords {
public static final String VOLVO_SEQUENCENUMBER = "sequenceNumber";
public static final String VOLVO_RACKID = "rackId";
public static final String VOLVO_POSITION = "position";
//向PLC点位发送用户自定义指令的变量类别
public static final String USER_DEFINED_EQUIP_VARIABLE_CFG_CATEGORY = "USER_DEFINED_EQUIP_VARIABLE_CFG_CATEGORY";
}

Loading…
Cancel
Save