接口映射,自定义脚本页面开发

tags/yfai-mes-ext-v1.6
jun 9 months ago
parent 3006fc0d13
commit 3267d04197

@ -0,0 +1,13 @@
package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/8/22 9:59
* @Modify:
**/
public interface IMesInterfaceDataMapperService extends IBaseMesService<MesInterfaceDataMapper> {
}

@ -0,0 +1,13 @@
package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesScriptPersistence;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/8/22 11:03
* @Modify:
**/
public interface IMesScriptPersistenceService extends IBaseMesService<MesScriptPersistence> {
}

@ -0,0 +1,20 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/8/22 9:57
* @Modify:
**/
@Api(description = "接口数据映射")
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesInterfaceDataMapper")
public class MesInterfaceDataMapperController extends BaseMesController<MesInterfaceDataMapper> {
}

@ -0,0 +1,20 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.pojo.mes.bean.MesScriptPersistence;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/8/22 9:57
* @Modify:
**/
@Api(description = "动态脚本")
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesScriptPersistence")
public class MesScriptPersistenceController extends BaseMesController<MesScriptPersistence> {
}

@ -1,5 +1,6 @@
package cn.estsh.i3plus.ext.mes.apiservice.dbinterface;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.mes.apiservice.serviceimpl.engine.script.EngineScriptManager;
import cn.estsh.i3plus.mes.apiservice.util.datatable.DataRow;
import cn.estsh.i3plus.mes.apiservice.util.datatable.DataSet;
@ -8,17 +9,16 @@ import cn.estsh.i3plus.platform.plugin.datasource.DynamicDataSourceProxy;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.wms.dbinterface.UpdateSyncItem;
import cn.estsh.i3plus.pojo.wms.dbinterface.WmsInterfaceEnumUtil;
import cn.estsh.impp.framework.boot.util.ImppRedis;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.sql.Connection;
@ -85,29 +85,15 @@ public class WmsSAPDbWriter extends WmsSAPDbSyncBase {
saveDestData(destDataSet);
}
} catch (Exception e) {
//记录sap过来的数据 超过一定的请求次数放弃数据
if (WmsInterfaceEnumUtil.DIRECTION_TYPE.SAP2WMS.getName().equals(this.dataMapper.getGroupName())) {
if (!CollectionUtils.isEmpty(srcDataList)) {
String key = this.dataMapper.getSoftAdaptorCode() + ":" + srcDataList.get(0).get("SID");
if (redisMes.hasKey(key)) {
int reqCount = Integer.parseInt(String.valueOf(redisMes.getObject(key)));
if (reqCount + 1 > REQ_COUNT) {
if (this.dataMapper.getUseScriptMark() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) {
callScriptMark(srcDataList, originDataList);
} else {
callSqlMark(srcDataList, originDataList);
}
LOGGER.error("超过请求次数放弃数据 WmsSAPDbWriter.saveData SoftAdaptorCode:{}, SID:{}", this.dataMapper.getSoftAdaptorCode(), srcDataList.get(0).get("SID"));
return;
} else {
redisMes.incr(key, 1);
}
} else {
redisMes.incr(key, 1);
}
}
LOGGER.info(ExceptionUtils.getStackTrace(e));
return;
} finally {
//同步失败,更新同步状态为同步失败
if (this.dataMapper.getUseScriptMark() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) {
callScriptMark(srcDataList, originDataList);
} else {
callSqlMark(srcDataList, originDataList, false);
}
throw e;
}
// 再更新来源数据的同步标志
@ -115,7 +101,7 @@ public class WmsSAPDbWriter extends WmsSAPDbSyncBase {
if (this.dataMapper.getUseScriptMark() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) {
callScriptMark(srcDataList, originDataList);
} else {
callSqlMark(srcDataList, originDataList);
callSqlMark(srcDataList, originDataList,true);
}
}
@ -125,12 +111,12 @@ public class WmsSAPDbWriter extends WmsSAPDbSyncBase {
* @param originDataList
* @throws Exception
*/
private void callSqlMark(List<Map<String, Object>> srcDataList, List<Map<String, Object>> originDataList)
private void callSqlMark(List<Map<String, Object>> srcDataList, List<Map<String, Object>> originDataList,boolean isSuccess)
throws Exception {
if (originDataList != null) {
saveSrcData(originDataList);
saveSrcData(originDataList,isSuccess);
} else {
saveSrcData(srcDataList);
saveSrcData(srcDataList,isSuccess);
}
}
@ -243,7 +229,7 @@ public class WmsSAPDbWriter extends WmsSAPDbSyncBase {
* @param srcDataList
* @throws Exception
*/
private void saveSrcData(List<Map<String, Object>> srcDataList) throws Exception {
private void saveSrcData(List<Map<String, Object>> srcDataList,boolean isSuccess) throws Exception {
if (srcDataList == null || srcDataList.size() == 0) {
LOGGER.error("no data in src datalist!");
throw new IllegalArgumentException("no data in src datalist!");
@ -275,7 +261,7 @@ public class WmsSAPDbWriter extends WmsSAPDbSyncBase {
}
// 把来源表的数据行放到表达式中,确保表达式可以引用
HashMap<String, Object> updateValueMap = getUpdateSyncMap(srcRow);
HashMap<String, Object> updateValueMap = getUpdateSyncMap(srcRow,isSuccess);
// 存在来源表不需要更新同步标志的情况
if (updateValueMap.size() > 0) {
// 拼接更新来源表同步标志的 SQL LIST
@ -345,7 +331,7 @@ public class WmsSAPDbWriter extends WmsSAPDbSyncBase {
*
* @return
*/
private HashMap<String, Object> getUpdateSyncMap(Map<String, Object> srcRow) throws Exception {
private HashMap<String, Object> getUpdateSyncMap(Map<String, Object> srcRow,boolean isSuccess) throws Exception {
HashMap<String, Object> updateSyncMap = new HashMap<>();
if (this.getSrcUpdateSync() == null) {
@ -354,9 +340,12 @@ public class WmsSAPDbWriter extends WmsSAPDbSyncBase {
for (UpdateSyncItem item : this.getSrcUpdateSync()) {
Object updateValue = item.getUpdateValue();
if(!StringUtils.isEmpty(item.getUpdateValue()) && item.getUpdateValue().contains(MesExtConstWords.COLON)){
updateValue = isSuccess ? item.getUpdateValue().split(MesExtConstWords.COLON)[0]:item.getUpdateValue().split(MesExtConstWords.COLON)[1];
}
// 如果包含表达式,则计算后赋值
if (item.getUpdateValue().indexOf("#") != -1) {
if (item.getUpdateValue().contains("#")) {
updateValue = wmsSAPDbExpression.parse(item.getUpdateValue(), srcRow);
}

@ -11,6 +11,7 @@ import cn.estsh.i3plus.pojo.base.enumutil.MesEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesEnum;
import cn.estsh.i3plus.pojo.mes.bean.MesEnumDetail;
import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceEnumUtil;
import cn.estsh.i3plus.pojo.mes.repository.MesEnumDetailRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesEnumRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
@ -75,6 +76,7 @@ public class MesEnumExtService extends BaseMesService<MesEnum> implements IMesEn
Map<String, Object> enumMap = getEnumMap(organizeCode, enumName);
if (CollectionUtils.isEmpty(enumMap)) enumMap = getEnumByClazzEnum(enumName, MesExtEnumUtil.class);
if (CollectionUtils.isEmpty(enumMap)) enumMap = getEnumByClazzEnum(enumName, MesEnumUtil.class);
if (CollectionUtils.isEmpty(enumMap)) enumMap = getEnumByClazzEnum(enumName, MesInterfaceEnumUtil.class);
return enumMap;
}

@ -0,0 +1,68 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesInterfaceDataMapperService;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/8/22 10:04
* @Modify:
**/
@Service
@Slf4j
public class MesInterfaceDataMapperServiceImpl extends BaseMesService<MesInterfaceDataMapper> implements IMesInterfaceDataMapperService {
@Override
protected void onInsertBean(MesInterfaceDataMapper item) {
// 数据校验
ValidatorBean.checkNotNull(item.getSrcTableName(), "来源表名不能为空");
ValidatorBean.checkNotNull(item.getSrcWhere(), "来源表的查询条件不能为空");
ValidatorBean.checkNotNull(item.getDestBeanName(), "目标实体对象的名字不能为空");
DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getSrcTableName(), "srcTableName", seriesPackBean);
DdlPreparedPack.getStringEqualPack(item.getSrcWhere(), "srcWhere", seriesPackBean);
DdlPreparedPack.getStringEqualPack(item.getDestBeanName(), "destBeanName", seriesPackBean);
if (baseRDao.isExitByHql(seriesPackBean)) {
MesException.throwMesBusiException("来源表名为【%s】、查询条件为【%s】、目标实体对象为【%s】接口映射信息已存在",
item.getSrcTableName(), item.getSrcWhere(), item.getDestBeanName());
}
}
@Override
protected void onUpdateBean(MesInterfaceDataMapper item) {
// 数据校验
ValidatorBean.checkNotNull(item.getSrcTableName(), "来源表名不能为空");
ValidatorBean.checkNotNull(item.getSrcWhere(), "来源表的查询条件不能为空");
ValidatorBean.checkNotNull(item.getDestBeanName(), "目标实体对象的名字不能为空");
DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getSrcTableName(), "srcTableName", seriesPackBean);
DdlPreparedPack.getStringEqualPack(item.getSrcWhere(), "srcWhere", seriesPackBean);
DdlPreparedPack.getStringEqualPack(item.getDestBeanName(), "destBeanName", seriesPackBean);
DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", seriesPackBean);
if (baseRDao.isExitByHql(seriesPackBean)) {
MesException.throwMesBusiException("来源表名为【%s】、查询条件为【%s】、目标实体对象为【%s】接口映射信息已存在",
item.getSrcTableName(), item.getSrcWhere(), item.getDestBeanName());
}
}
@Override
protected void setPackQueryBean(MesInterfaceDataMapper bean, DdlPackBean packBean) {
DdlPreparedPack.getStringLikerPack(bean.getSrcTableName(), "srcTableName", packBean);
DdlPreparedPack.getStringLikerPack(bean.getDestBeanName(), "destBeanName", packBean);
DdlPreparedPack.getStringLikerPack(bean.getBusiRoute(), "busiRoute", packBean);
DdlPreparedPack.getStringLikerPack(bean.getGroupName(), "groupName", packBean);
DdlPreparedPack.getStringLikerPack(bean.getInterfaceName(), "interfaceName", packBean);
}
}

@ -0,0 +1,58 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesScriptPersistenceService;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesScriptPersistence;
import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/8/22 10:04
* @Modify:
**/
@Service
@Slf4j
public class MesScriptPersistenceServiceImpl extends BaseMesService<MesScriptPersistence> implements IMesScriptPersistenceService {
@Override
protected void onInsertBean(MesScriptPersistence item) {
// 数据校验
ValidatorBean.checkNotNull(item.getScriptNo(), "脚本编号不能为空");
DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getScriptNo(), "scriptNo", seriesPackBean);
if (baseRDao.isExitByHql(seriesPackBean)) {
MesException.throwMesBusiException("脚本编号【%s】已存在", item.getScriptNo());
}
}
@Override
protected void onUpdateBean(MesScriptPersistence item) {
// 数据校验
ValidatorBean.checkNotNull(item.getScriptNo(), "脚本编号不能为空");
DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getScriptNo(), "scriptNo", seriesPackBean);
DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", seriesPackBean);
if (baseRDao.isExitByHql(seriesPackBean)) {
MesException.throwMesBusiException("脚本编号【%s】已存在", item.getScriptNo());
}
}
@Override
protected void setPackQueryBean(MesScriptPersistence bean, DdlPackBean packBean) {
DdlPreparedPack.getStringLikerPack(bean.getScriptNo(), "scriptNo", packBean);
DdlPreparedPack.getStringRightLikerPack(bean.getScriptName(), "scriptName", packBean);
DdlPreparedPack.getNumEqualPack(bean.getScriptType(), "scriptType", packBean);
DdlPreparedPack.getNumEqualPack(bean.getLanguageType(), "languageType", packBean);
}
}
Loading…
Cancel
Save