diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesInterfaceDataMapperService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesInterfaceDataMapperService.java new file mode 100644 index 0000000..63af50d --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesInterfaceDataMapperService.java @@ -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 { +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesScriptPersistenceService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesScriptPersistenceService.java new file mode 100644 index 0000000..850a6fc --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesScriptPersistenceService.java @@ -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 { +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesInterfaceDataMapperController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesInterfaceDataMapperController.java new file mode 100644 index 0000000..984fdfc --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesInterfaceDataMapperController.java @@ -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 { +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesScriptPersistenceController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesScriptPersistenceController.java new file mode 100644 index 0000000..b84ed67 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesScriptPersistenceController.java @@ -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 { +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/WmsSAPDbWriter.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/WmsSAPDbWriter.java index 137a467..d6a482d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/WmsSAPDbWriter.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/WmsSAPDbWriter.java @@ -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> srcDataList, List> originDataList) + private void callSqlMark(List> srcDataList, List> 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> srcDataList) throws Exception { + private void saveSrcData(List> 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 updateValueMap = getUpdateSyncMap(srcRow); + HashMap updateValueMap = getUpdateSyncMap(srcRow,isSuccess); // 存在来源表不需要更新同步标志的情况 if (updateValueMap.size() > 0) { // 拼接更新来源表同步标志的 SQL LIST @@ -345,7 +331,7 @@ public class WmsSAPDbWriter extends WmsSAPDbSyncBase { * * @return */ - private HashMap getUpdateSyncMap(Map srcRow) throws Exception { + private HashMap getUpdateSyncMap(Map srcRow,boolean isSuccess) throws Exception { HashMap 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); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEnumExtService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEnumExtService.java index 4b40bc3..80e69e9 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEnumExtService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEnumExtService.java @@ -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 implements IMesEn Map 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; } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesInterfaceDataMapperServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesInterfaceDataMapperServiceImpl.java new file mode 100644 index 0000000..dd1dfad --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesInterfaceDataMapperServiceImpl.java @@ -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 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); + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesScriptPersistenceServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesScriptPersistenceServiceImpl.java new file mode 100644 index 0000000..b747af8 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesScriptPersistenceServiceImpl.java @@ -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 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); + } + +}