正在显示
20 个修改的文件
包含
1025 行增加
和
6 行删除
| @@ -21,6 +21,10 @@ spring.mvc.view.prefix=.jsp | @@ -21,6 +21,10 @@ spring.mvc.view.prefix=.jsp | ||
| 21 | 21 | ||
| 22 | spring.redis.host=192.168.1.53 | 22 | spring.redis.host=192.168.1.53 |
| 23 | spring.redis.port=6379 | 23 | spring.redis.port=6379 |
| 24 | +#spring.redis.database=2 | ||
| 25 | +spring.redis.lettuce.pool.max-active=16 | ||
| 26 | +spring.redis.lettuce.pool.min-idle=16 | ||
| 27 | +spring.redis.lettuce.pool.max-wait=5000 | ||
| 24 | 28 | ||
| 25 | spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver | 29 | spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver |
| 26 | # 测试环境 | 30 | # 测试环境 |
| @@ -72,6 +76,8 @@ feign.httpclient.connection-timeout=3000 | @@ -72,6 +76,8 @@ feign.httpclient.connection-timeout=3000 | ||
| 72 | #logback日志配置 | 76 | #logback日志配置 |
| 73 | 77 | ||
| 74 | logging.config=config/logback-dev.xml | 78 | logging.config=config/logback-dev.xml |
| 79 | +logging.level.org.basis=info | ||
| 80 | +logging.level.org.basis.groovy.mapper=debug | ||
| 75 | # 这个是刷新接口 | 81 | # 这个是刷新接口 |
| 76 | #curl -X POST http://localhost:8080/actuator/refresh | 82 | #curl -X POST http://localhost:8080/actuator/refresh |
| 77 | management.endpoints.web.exposure.include=refresh | 83 | management.endpoints.web.exposure.include=refresh |
| @@ -88,3 +94,18 @@ custom.receptDirectory= bw/read/ | @@ -88,3 +94,18 @@ custom.receptDirectory= bw/read/ | ||
| 88 | interface.lock.url=http://127.0.0.1:8848 | 94 | interface.lock.url=http://127.0.0.1:8848 |
| 89 | devdebug=true | 95 | devdebug=true |
| 90 | g2.onoff=false | 96 | g2.onoff=false |
| 97 | + | ||
| 98 | +# 规则引擎相关配置 | ||
| 99 | +# 脚本检查更新周期(单位:秒),(默认300L) | ||
| 100 | +enhance.groovy.engine.polling-cycle=10000 | ||
| 101 | +# 开启功能 | ||
| 102 | +enhance.groovy.engine.enable=true | ||
| 103 | +# 缓存过期时间(默认600L分钟) | ||
| 104 | +enhance.groovy.engine.cache-expire-after-write=20 | ||
| 105 | +#缓存初始容量(默认100) | ||
| 106 | +enhance.groovy.engine.cache-initial-capacity=50 | ||
| 107 | +# 缓存最大容量(默认500) | ||
| 108 | +enhance.groovy.engine.cache-maximum-size=50 | ||
| 109 | +# 开启基于Redis加载groovy脚本 | ||
| 110 | +enhance.groovy.engine.redis-loader.namespace=kako-release-check | ||
| 111 | +enhance.groovy.engine.redis-loader.enable=true |
| @@ -5,7 +5,7 @@ | @@ -5,7 +5,7 @@ | ||
| 5 | 5 | ||
| 6 | <groupId>com.sy</groupId> | 6 | <groupId>com.sy</groupId> |
| 7 | <artifactId>analysis_imf</artifactId> | 7 | <artifactId>analysis_imf</artifactId> |
| 8 | - <version>4.0-LOCK-SNAPSHOT</version> | 8 | + <version>4.5-ENGINE-SNAPSHOT</version> |
| 9 | <packaging>jar</packaging> | 9 | <packaging>jar</packaging> |
| 10 | <name>analysis_imf</name> | 10 | <name>analysis_imf</name> |
| 11 | <description>北货集成金二抬杆指令判定</description> | 11 | <description>北货集成金二抬杆指令判定</description> |
| @@ -133,6 +133,29 @@ | @@ -133,6 +133,29 @@ | ||
| 133 | <version>3.3.0</version> | 133 | <version>3.3.0</version> |
| 134 | </dependency> | 134 | </dependency> |
| 135 | 135 | ||
| 136 | + <!--规则引擎-核心依赖--> | ||
| 137 | +<!-- <dependency>--> | ||
| 138 | +<!-- <artifactId>enhance-groovy-engine-core</artifactId>--> | ||
| 139 | +<!-- <groupId>org.basis.enhance</groupId>--> | ||
| 140 | +<!-- <version>1.0-SNAPSHOT</version>--> | ||
| 141 | +<!-- </dependency>--> | ||
| 142 | + <!--加载Redis下的groovy脚本loader依赖--> | ||
| 143 | + <dependency> | ||
| 144 | + <artifactId>enhance-groovy-redis-loader</artifactId> | ||
| 145 | + <groupId>org.basis.enhance</groupId> | ||
| 146 | + <version>1.0-SNAPSHOT</version> | ||
| 147 | + </dependency> | ||
| 148 | + <!--加载classpath下的groovy脚本loader依赖--> | ||
| 149 | +<!-- <dependency>--> | ||
| 150 | +<!-- <artifactId>enhance-groovy-classpath-loader</artifactId>--> | ||
| 151 | +<!-- <groupId>org.basis.enhance</groupId>--> | ||
| 152 | +<!-- <version>1.0-SNAPSHOT</version>--> | ||
| 153 | +<!-- </dependency>--> | ||
| 154 | + <!--Apache的 common-pool2(至少是2.2)提供连接池,供redis客户端使用--> | ||
| 155 | + <dependency> | ||
| 156 | + <groupId>org.apache.commons</groupId> | ||
| 157 | + <artifactId>commons-pool2</artifactId> | ||
| 158 | + </dependency> | ||
| 136 | <!--IMF need jar--> | 159 | <!--IMF need jar--> |
| 137 | <dependency> | 160 | <dependency> |
| 138 | <groupId>org.apache.xmlbeans</groupId> | 161 | <groupId>org.apache.xmlbeans</groupId> |
| @@ -18,7 +18,7 @@ public class IMF_Tesk { | @@ -18,7 +18,7 @@ public class IMF_Tesk { | ||
| 18 | public static IMFClient client = null; | 18 | public static IMFClient client = null; |
| 19 | 19 | ||
| 20 | //todo:测试关,生产开 | 20 | //todo:测试关,生产开 |
| 21 | - @Scheduled(fixedRate = 5000) | 21 | +// @Scheduled(fixedRate = 5000) |
| 22 | private static void start() { | 22 | private static void start() { |
| 23 | //尝试catch SDK异常 | 23 | //尝试catch SDK异常 |
| 24 | try{ | 24 | try{ |
| 1 | +package com.sy.controller; | ||
| 2 | + | ||
| 3 | +import com.sy.model.GatherInfo; | ||
| 4 | +import lombok.extern.slf4j.Slf4j; | ||
| 5 | +import org.basis.enhance.groovy.entity.EngineExecutorResult; | ||
| 6 | +import org.basis.enhance.groovy.entity.ExecuteParams; | ||
| 7 | +import org.basis.enhance.groovy.entity.ScriptQuery; | ||
| 8 | +import org.basis.enhance.groovy.executor.EngineExecutor; | ||
| 9 | +import org.basis.enhance.groovy.helper.RefreshScriptHelper; | ||
| 10 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 11 | +import org.springframework.web.bind.annotation.GetMapping; | ||
| 12 | +import org.springframework.web.bind.annotation.RequestMapping; | ||
| 13 | +import org.springframework.web.bind.annotation.RestController; | ||
| 14 | + | ||
| 15 | +import java.math.BigDecimal; | ||
| 16 | + | ||
| 17 | +@RestController | ||
| 18 | +@Slf4j | ||
| 19 | +@RequestMapping("/v1/load-from-redis") | ||
| 20 | +public class EnginTestController { | ||
| 21 | + | ||
| 22 | + | ||
| 23 | + @Autowired | ||
| 24 | + private EngineExecutor engineExecutor; | ||
| 25 | + | ||
| 26 | + @Autowired | ||
| 27 | + private RefreshScriptHelper refreshScriptHelper; | ||
| 28 | + | ||
| 29 | + @GetMapping("/x21-check") | ||
| 30 | + public String x21Check(String scriptName) { | ||
| 31 | + // 构建参数 | ||
| 32 | + ExecuteParams executeParams = buildGatherInfoParams(); | ||
| 33 | + // 执行脚本中指定的方法 changeProduct | ||
| 34 | + EngineExecutorResult executorResult = engineExecutor.execute( | ||
| 35 | + "baseCheck", new ScriptQuery(scriptName), executeParams); | ||
| 36 | + log.info("使用groovy脚本来动态修改闪屏信息=========>>>>>>>>>>>执行结果:{}", executorResult); | ||
| 37 | + | ||
| 38 | + return "success"; | ||
| 39 | + } | ||
| 40 | + | ||
| 41 | + @GetMapping("/form-check") | ||
| 42 | + public String formCheck(String scriptName) { | ||
| 43 | + // 构建参数 | ||
| 44 | + ExecuteParams executeParams = buildGatherInfoParams(); | ||
| 45 | + // 执行脚本中指定的方法 changeProduct | ||
| 46 | + EngineExecutorResult executorResult = engineExecutor.execute( | ||
| 47 | + "formCheck", new ScriptQuery(scriptName), executeParams); | ||
| 48 | + log.info("使用groovy脚本来动态修改闪屏信息=========>>>>>>>>>>>执行结果:{}", executorResult); | ||
| 49 | + | ||
| 50 | + return "success"; | ||
| 51 | + } | ||
| 52 | + | ||
| 53 | + /** | ||
| 54 | + * 过磅x21报文实体 | ||
| 55 | + */ | ||
| 56 | + public ExecuteParams buildGatherInfoParams(){ | ||
| 57 | + GatherInfo gatherInfo = new GatherInfo(); | ||
| 58 | + gatherInfo.setAreaid("4604600000"); | ||
| 59 | + gatherInfo.setChnlno("4604601010"); | ||
| 60 | + gatherInfo.setBarcode("fe3-4c1b-befe-afa4a68d80c1"); | ||
| 61 | + gatherInfo.setGrosswt(new BigDecimal("6478")); | ||
| 62 | + gatherInfo.setSeqno("20220630184441000028"); | ||
| 63 | + gatherInfo.setIetype("I"); | ||
| 64 | + gatherInfo.setVename("豫A61CR7"); | ||
| 65 | + | ||
| 66 | + ExecuteParams executeParams = new ExecuteParams(); | ||
| 67 | + executeParams.put("gatherInfo", gatherInfo); | ||
| 68 | + | ||
| 69 | + return executeParams; | ||
| 70 | + } | ||
| 71 | + | ||
| 72 | + @GetMapping("/refreshCache") | ||
| 73 | + public String refresh(String scriptName) { | ||
| 74 | + // 手动刷新脚本到内存 | ||
| 75 | + boolean flag = refreshScriptHelper.refresh(new ScriptQuery(scriptName), true); | ||
| 76 | + System.out.println("是否刷新成功:" + flag); | ||
| 77 | + return String.valueOf(flag); | ||
| 78 | + } | ||
| 79 | + | ||
| 80 | + /** | ||
| 81 | + * 手动刷新所有脚本到内存 | ||
| 82 | + * url: http://localhost:1234/v1/refresh/test02 | ||
| 83 | + */ | ||
| 84 | + @GetMapping("/refreshCacheAll") | ||
| 85 | + public String refreshAll() throws Exception { | ||
| 86 | + // 手动刷新所有脚本到内存 | ||
| 87 | + boolean flag = refreshScriptHelper.refreshAll(); | ||
| 88 | + System.out.println("是否刷新成功:" + flag); | ||
| 89 | + return String.valueOf(flag); | ||
| 90 | + } | ||
| 91 | +} |
| 1 | +package com.sy.groovy | ||
| 2 | + | ||
| 3 | +import com.sy.model.GatherInfo | ||
| 4 | +import com.sy.model.LandBusinessTypeList | ||
| 5 | +import com.sy.service.impl.GatherInfoHandle | ||
| 6 | +import org.basis.enhance.groovy.entity.ExecuteParams | ||
| 7 | +import org.slf4j.Logger | ||
| 8 | +import org.slf4j.LoggerFactory | ||
| 9 | +import org.springframework.context.ApplicationContext | ||
| 10 | + | ||
| 11 | +//通道申请信息验放 | ||
| 12 | +class BaseFormCacheCheck extends Script { | ||
| 13 | + | ||
| 14 | + private final Logger logger = LoggerFactory.getLogger(getClass()); | ||
| 15 | + private final String CHANEL_ERR= "无对应通道流转申请,走错通道"; | ||
| 16 | + private final String IEPORSE = "无相对应进出场申请"; | ||
| 17 | + | ||
| 18 | + /**x21指令判定 | ||
| 19 | + * 传入gatherInfo | ||
| 20 | + * | ||
| 21 | + * 传入从redis读取的申请表体实体,验证 | ||
| 22 | + * 进行通道比对 | ||
| 23 | + */ | ||
| 24 | + Boolean check(ExecuteParams executeParams) { | ||
| 25 | + try{ | ||
| 26 | + // 获取product对象 | ||
| 27 | + GatherInfo gatherInfo = (GatherInfo) executeParams.get("gatherInfo"); | ||
| 28 | + LandBusinessTypeList chanelFormInfo = (LandBusinessTypeList) executeParams.get("chanelFormInfo"); | ||
| 29 | + | ||
| 30 | + // 调用方法 | ||
| 31 | + ApplicationContext context = getContext(); | ||
| 32 | + // 获取容器中的bean | ||
| 33 | + GatherInfoHandle gatherInfoHandle = context.getBean(GatherInfoHandle.class); | ||
| 34 | + | ||
| 35 | + if (chanelFormInfo==null){ | ||
| 36 | + logger.error("[FORM-CHECK-ERR]:车辆-{}的流转申请校验失败,无对应通道流转申请信息",gatherInfo.getVename()); | ||
| 37 | + gatherInfoHandle.sendBw(gatherInfo,false, gatherInfo.getVename()+IEPORSE,null,null); | ||
| 38 | + return false; | ||
| 39 | + } | ||
| 40 | + logger.info("[FORM-CHECK]:车辆-{}的流转申请校验通过",gatherInfo.getVename()); | ||
| 41 | + return true; | ||
| 42 | + }catch (Exception e){ | ||
| 43 | + e.printStackTrace(); | ||
| 44 | + logger.error("[CACHE-PARSE-ERROR]:",e); | ||
| 45 | + return false; | ||
| 46 | + } | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | + @Override | ||
| 50 | + Object run() { | ||
| 51 | + return false; | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + // 获取spring容器 | ||
| 55 | + ApplicationContext getContext() { | ||
| 56 | + // 获取spring IOC容器 | ||
| 57 | + ApplicationContext context = applicationContext; | ||
| 58 | + return context; | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | +} |
| 1 | +package com.sy.groovy | ||
| 2 | + | ||
| 3 | +import com.sy.model.GatherInfo | ||
| 4 | +import com.sy.model.LandRoadVe | ||
| 5 | +import com.sy.service.LandRoadVeService | ||
| 6 | +import com.sy.service.impl.GatherInfoHandle | ||
| 7 | +import org.apache.commons.lang3.StringUtils | ||
| 8 | +import org.basis.enhance.groovy.entity.ExecuteParams | ||
| 9 | +import org.slf4j.Logger | ||
| 10 | +import org.slf4j.LoggerFactory | ||
| 11 | +import org.springframework.context.ApplicationContext | ||
| 12 | + | ||
| 13 | +//基本信息验放 | ||
| 14 | +class BaseVeCheck extends Script { | ||
| 15 | + | ||
| 16 | + private final Logger logger = LoggerFactory.getLogger(getClass()); | ||
| 17 | + private final String NORECORD = "车辆未备案或者识别错误,车牌号:"; | ||
| 18 | + private final String VE_RECORD_WEIGHT_ERR = "车辆备案信息异常"; | ||
| 19 | + | ||
| 20 | + private final String BLACKLIST= "车辆已被拉进黑名单,不允许出区"; | ||
| 21 | + | ||
| 22 | + /**x21指令判定 | ||
| 23 | + * 传入gatherInfo,三大属性验证,二维码/车牌/过卡重量 | ||
| 24 | + * 车辆备案实体 | ||
| 25 | + * 从redis读取的申请表体实体 | ||
| 26 | + */ | ||
| 27 | + Boolean check(ExecuteParams executeParams) { | ||
| 28 | + try{ | ||
| 29 | + GatherInfo gatherInfo = (GatherInfo) executeParams.get("gatherInfo"); | ||
| 30 | + LandRoadVe ve = (LandRoadVe) executeParams.get("LandRoadVe"); | ||
| 31 | + | ||
| 32 | + //3.车辆备案验证 | ||
| 33 | + // 调用方法 | ||
| 34 | + ApplicationContext context = getContext(); | ||
| 35 | + // 获取容器中的bean | ||
| 36 | + GatherInfoHandle gatherInfoHandle = context.getBean(GatherInfoHandle.class); | ||
| 37 | + //若无备案信息或者黑名单,返回车辆未备案或者识别错误, | ||
| 38 | + if (ve == null) { | ||
| 39 | + logger.error(NORECORD+gatherInfo.getVename()); | ||
| 40 | + gatherInfoHandle.sendBw(gatherInfo,false,NORECORD + gatherInfo.getVename(),null,null); | ||
| 41 | + return false; | ||
| 42 | + } | ||
| 43 | + logger.info("[VE-CHECK-SUCCESS]:{}:备案验证通过",gatherInfo.getVename()); | ||
| 44 | + //车辆备案重量 | ||
| 45 | + Double selfWt=Double.parseDouble(ve.getSelfWt()); | ||
| 46 | + if (!(selfWt>0)){ | ||
| 47 | + logger.error(VE_RECORD_WEIGHT_ERR+gatherInfo.getVename()); | ||
| 48 | + gatherInfoHandle.sendBw(gatherInfo,false,gatherInfo.getVename()+VE_RECORD_WEIGHT_ERR,null,null); | ||
| 49 | + return false; | ||
| 50 | + } | ||
| 51 | + logger.info("[VE-CHECK-SUCCESS]:{}备案重量[{}]验证通过",gatherInfo.getVename(),selfWt) | ||
| 52 | + | ||
| 53 | + //车辆黑名单校验 | ||
| 54 | + if (!veBlackListCheck(ve)){ | ||
| 55 | + logger.error(BLACKLIST+gatherInfo.getVename()); | ||
| 56 | + gatherInfoHandle.sendBw(gatherInfo,false,gatherInfo.getVename()+BLACKLIST,null,null); | ||
| 57 | + return false; | ||
| 58 | + } | ||
| 59 | + logger.info("[VE-CHECK-SUCCESS]:{}黑名单验证通过",gatherInfo.getVename()); | ||
| 60 | + | ||
| 61 | + //todo:车辆备案信息缓存,在哪里做申请提运单列表缓存? | ||
| 62 | + | ||
| 63 | + logger.info("[VE-CHECK-SUCCESS]:{}车辆信息验证通过",gatherInfo.getVename()); | ||
| 64 | + return true; | ||
| 65 | + }catch (Exception e){ | ||
| 66 | + e.printStackTrace(); | ||
| 67 | + logger.error("[VE-CHECK-ERROR]:",e); | ||
| 68 | + return false; | ||
| 69 | + } | ||
| 70 | + } | ||
| 71 | + | ||
| 72 | + @Override | ||
| 73 | + Object run() { | ||
| 74 | + return null | ||
| 75 | + } | ||
| 76 | + | ||
| 77 | + // 获取spring容器 | ||
| 78 | + ApplicationContext getContext() { | ||
| 79 | + // 获取spring IOC容器 | ||
| 80 | + ApplicationContext context = applicationContext; | ||
| 81 | + return context; | ||
| 82 | + } | ||
| 83 | + | ||
| 84 | + Boolean veBlackListCheck(LandRoadVe ve){ | ||
| 85 | + //Y 是拉黑了 | ||
| 86 | + if("Y".equals(ve.getVeState())){ | ||
| 87 | + return false; | ||
| 88 | + } | ||
| 89 | + return true; | ||
| 90 | + } | ||
| 91 | + | ||
| 92 | + | ||
| 93 | +} |
| 1 | +package com.sy.groovy | ||
| 2 | + | ||
| 3 | +import com.sy.model.GatherInfo | ||
| 4 | +import com.sy.service.impl.GatherInfoHandle | ||
| 5 | +import org.apache.commons.lang3.StringUtils | ||
| 6 | +import org.basis.enhance.groovy.entity.ExecuteParams | ||
| 7 | +import org.slf4j.Logger | ||
| 8 | +import org.slf4j.LoggerFactory | ||
| 9 | +import org.springframework.context.ApplicationContext | ||
| 10 | + | ||
| 11 | +//基本信息验放 | ||
| 12 | +class BaseX21GatherInfoCheck extends Script { | ||
| 13 | + | ||
| 14 | + private final Logger logger = LoggerFactory.getLogger(getClass()); | ||
| 15 | + private final String X21_WEIGHT_ERR = "车辆过卡重量异常"; | ||
| 16 | + | ||
| 17 | + /**x21指令判定 | ||
| 18 | + * 传入gatherInfo,三大属性验证,二维码/车牌/过卡重量 | ||
| 19 | + */ | ||
| 20 | + Boolean check(ExecuteParams executeParams) { | ||
| 21 | + try{ | ||
| 22 | + GatherInfo gatherInfo = (GatherInfo) executeParams.get("gatherInfo"); | ||
| 23 | + | ||
| 24 | + // 获取容器中的bean | ||
| 25 | + // 调用方法 | ||
| 26 | + ApplicationContext context = getContext(); | ||
| 27 | + GatherInfoHandle gatherInfoHandle = context.getBean(GatherInfoHandle.class); | ||
| 28 | + | ||
| 29 | + if (gatherInfo == null){ | ||
| 30 | + logger.error("[ENGIN-BASE-CHECK-ERR]-过卡信息未获取到"); | ||
| 31 | + return false; | ||
| 32 | + } | ||
| 33 | + //基本验放信息 | ||
| 34 | + //2.车牌号验证,从过卡信息读取 | ||
| 35 | + if(StringUtils.isEmpty(gatherInfo.getVename())){ | ||
| 36 | + logger.error("[ENGIN-BASE-CHECK-ERR]-车牌信息未获取到"); | ||
| 37 | + return false; | ||
| 38 | + } | ||
| 39 | + if(StringUtils.isEmpty(gatherInfo.getBarcode())){ | ||
| 40 | + logger.error("[ENGIN-BASE-CHECK-ERR]-二维码信息未获取到"); | ||
| 41 | + return false; | ||
| 42 | + } | ||
| 43 | + | ||
| 44 | + //4.车辆过卡重量验证,重量大于0 就正常 | ||
| 45 | + if (!(gatherInfo.grosswt>0)){ | ||
| 46 | + logger.error(X21_WEIGHT_ERR+gatherInfo.getVename()); | ||
| 47 | + gatherInfoHandle.sendBw(gatherInfo,false,X21_WEIGHT_ERR,null,null); | ||
| 48 | + return false; | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + logger.info("[BASE-CHECK-SUCCESS]:{}过卡基本信息验证通过",gatherInfo.getVename()); | ||
| 52 | + return true; | ||
| 53 | + }catch (Exception e){ | ||
| 54 | + e.printStackTrace(); | ||
| 55 | + logger.error("[BASE-CHECK-ERROR]:",e); | ||
| 56 | + return false; | ||
| 57 | + } | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + @Override | ||
| 61 | + Object run() { | ||
| 62 | + return null | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + // 获取spring容器 | ||
| 66 | + ApplicationContext getContext() { | ||
| 67 | + // 获取spring IOC容器 | ||
| 68 | + ApplicationContext context = applicationContext; | ||
| 69 | + return context; | ||
| 70 | + } | ||
| 71 | + | ||
| 72 | + | ||
| 73 | +} |
| 1 | +package com.sy.groovy; | ||
| 2 | + | ||
| 3 | +import org.basis.enhance.groovy.entity.ExecuteParams; | ||
| 4 | + | ||
| 5 | +/** | ||
| 6 | + * @author mrz | ||
| 7 | + * @date 2023-05-01 | ||
| 8 | + * 规则脚本对应通道验放规则接口类声明 | ||
| 9 | + * 通道规则验放必须包含check方法,且方法结果为布尔类型,验放通过为true.否则为false | ||
| 10 | + */ | ||
| 11 | +public abstract class ChannelCheckScript { | ||
| 12 | + public abstract Boolean check(ExecuteParams executeParams); | ||
| 13 | +} |
| 1 | +package com.sy.groovy | ||
| 2 | + | ||
| 3 | +import com.sy.model.GatherInfo | ||
| 4 | +import com.sy.model.LAND_BUSINEESTYPE_LIST_INFO | ||
| 5 | +import com.sy.model.LandBusinessTypeList | ||
| 6 | +import com.sy.service.ResMessageService | ||
| 7 | +import com.sy.service.WeightCheckHandleService | ||
| 8 | +import com.sy.service.impl.GatherInfoHandle | ||
| 9 | +import org.basis.enhance.groovy.entity.ExecuteParams | ||
| 10 | +import org.slf4j.Logger | ||
| 11 | +import org.slf4j.LoggerFactory | ||
| 12 | +import org.springframework.context.ApplicationContext | ||
| 13 | + | ||
| 14 | +//过卡单证验放-放行验放 | ||
| 15 | +class ReleaseCheck extends Script { | ||
| 16 | + | ||
| 17 | + private final Logger logger = LoggerFactory.getLogger(getClass()); | ||
| 18 | + private final String FANGXING= "有运单未放行"; | ||
| 19 | + | ||
| 20 | + /**x21指令判定 | ||
| 21 | + * 传入gatherInfo,三大属性验证,二维码/车牌/过卡重量 | ||
| 22 | + * 车辆备案实体 | ||
| 23 | + * 从redis读取的申请表体实体 | ||
| 24 | + * 适用于进口转关,进口提货业务类型 | ||
| 25 | + */ | ||
| 26 | + Boolean check(ExecuteParams executeParams) { | ||
| 27 | + try{ | ||
| 28 | + GatherInfo gatherInfo = (GatherInfo) executeParams.get("gatherInfo"); | ||
| 29 | + LandBusinessTypeList landBusinessTypeList = (LandBusinessTypeList) executeParams.get("ChanelFormInfo"); | ||
| 30 | + List<LAND_BUSINEESTYPE_LIST_INFO> listinfos = (List<LAND_BUSINEESTYPE_LIST_INFO>) executeParams.get("ChanelFormBillLists"); | ||
| 31 | + | ||
| 32 | + //3.车辆备案验证 | ||
| 33 | + // 调用方法 | ||
| 34 | + ApplicationContext context = getContext(); | ||
| 35 | + // 获取容器中的bean | ||
| 36 | + GatherInfoHandle gatherInfoHandle = context.getBean(GatherInfoHandle.class); | ||
| 37 | + //重量校验算法 | ||
| 38 | + ResMessageService resMessageService = context.getBean(ResMessageService.class); | ||
| 39 | + | ||
| 40 | + if (listinfos!=null && !listinfos.isEmpty() && resMessageService.checkManifestRelease(gatherInfo,listinfos)){ | ||
| 41 | + return true; | ||
| 42 | + }else { | ||
| 43 | + //有运单未放行 | ||
| 44 | + logger.error("[Release-check]-单证未通过校验:"+FANGXING+landBusinessTypeList.getMasterList()); | ||
| 45 | + gatherInfoHandle.sendBw(gatherInfo,false,FANGXING,landBusinessTypeList,listinfos); | ||
| 46 | + return false; | ||
| 47 | + } | ||
| 48 | + }catch (Exception e){ | ||
| 49 | + e.printStackTrace(); | ||
| 50 | + logger.error("[Release-check-ERROR]:",e); | ||
| 51 | + return false; | ||
| 52 | + } | ||
| 53 | + } | ||
| 54 | + | ||
| 55 | + @Override | ||
| 56 | + Object run() { | ||
| 57 | + return null | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + // 获取spring容器 | ||
| 61 | + ApplicationContext getContext() { | ||
| 62 | + // 获取spring IOC容器 | ||
| 63 | + ApplicationContext context = applicationContext; | ||
| 64 | + return context; | ||
| 65 | + } | ||
| 66 | +} |
| 1 | +package com.sy.groovy | ||
| 2 | + | ||
| 3 | +import com.sy.model.GatherInfo | ||
| 4 | +import com.sy.model.LAND_BUSINEESTYPE_LIST_INFO | ||
| 5 | +import com.sy.model.LandBusinessTypeList | ||
| 6 | +import com.sy.service.WeightCheckHandleService | ||
| 7 | +import com.sy.service.impl.GatherInfoHandle | ||
| 8 | +import org.basis.enhance.groovy.entity.ExecuteParams | ||
| 9 | +import org.slf4j.Logger | ||
| 10 | +import org.slf4j.LoggerFactory | ||
| 11 | +import org.springframework.context.ApplicationContext | ||
| 12 | + | ||
| 13 | +//过卡重量验放-分拨调拨验放 | ||
| 14 | +class WeightCheckAllocateOrDispatch extends Script { | ||
| 15 | + | ||
| 16 | + private final Logger logger = LoggerFactory.getLogger(getClass()); | ||
| 17 | + private final String GROWSSEXCETION = "禁止通行,重量不在可控范围"; | ||
| 18 | + | ||
| 19 | + /**过磅重量判定 | ||
| 20 | + * 传入gatherInfo,三大属性验证,二维码/车牌/过卡重量 | ||
| 21 | + * 适用于分拨业务或者调拨业务 | ||
| 22 | + */ | ||
| 23 | + Boolean check(ExecuteParams executeParams) { | ||
| 24 | + try{ | ||
| 25 | + GatherInfo gatherInfo = (GatherInfo) executeParams.get("gatherInfo"); | ||
| 26 | + LandBusinessTypeList landBusinessTypeList = (LandBusinessTypeList) executeParams.get("ChanelFormInfo"); | ||
| 27 | + Double selfWt = (Double) executeParams.get("selfWt"); | ||
| 28 | + Double goodsWt = (Double) executeParams.get("goodsWt"); | ||
| 29 | + Double inAisleWT = (Double) executeParams.get("inAisleWT"); | ||
| 30 | + List<LAND_BUSINEESTYPE_LIST_INFO> listinfos = (List<LAND_BUSINEESTYPE_LIST_INFO>) executeParams.get("ChanelFormBillLists"); | ||
| 31 | + | ||
| 32 | + //3.车辆备案验证 | ||
| 33 | + // 调用方法 | ||
| 34 | + ApplicationContext context = getContext(); | ||
| 35 | + // 获取容器中的bean | ||
| 36 | + GatherInfoHandle gatherInfoHandle = context.getBean(GatherInfoHandle.class); | ||
| 37 | + //重量校验算法 | ||
| 38 | + WeightCheckHandleService weightCheckHandleService = context.getBean(WeightCheckHandleService.class); | ||
| 39 | + | ||
| 40 | + logger.info("[进出场申请]-业务类型为:{}-{}",landBusinessTypeList.getCocode(),landBusinessTypeList.getBusinesstype()); | ||
| 41 | + if (weightCheckHandleService.checkAllocateOrDispatch(gatherInfo.getGrosswt(), selfWt, goodsWt,inAisleWT)){ | ||
| 42 | + return true; | ||
| 43 | + }else { | ||
| 44 | + gatherInfoHandle.sendBw(gatherInfo,false,GROWSSEXCETION,landBusinessTypeList,listinfos); | ||
| 45 | + return false; | ||
| 46 | + } | ||
| 47 | + }catch (Exception e){ | ||
| 48 | + e.printStackTrace(); | ||
| 49 | + logger.error("[ExportUnloadWeightCheck-ERROR]:",e); | ||
| 50 | + return false; | ||
| 51 | + } | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + @Override | ||
| 55 | + Object run() { | ||
| 56 | + return null | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + // 获取spring容器 | ||
| 60 | + ApplicationContext getContext() { | ||
| 61 | + // 获取spring IOC容器 | ||
| 62 | + ApplicationContext context = applicationContext; | ||
| 63 | + return context; | ||
| 64 | + } | ||
| 65 | +} |
| 1 | +package com.sy.groovy | ||
| 2 | + | ||
| 3 | +import com.sy.model.GatherInfo | ||
| 4 | +import com.sy.model.LAND_BUSINEESTYPE_LIST_INFO | ||
| 5 | +import com.sy.model.LandBusinessTypeList | ||
| 6 | +import com.sy.service.WeightCheckHandleService | ||
| 7 | +import com.sy.service.impl.GatherInfoHandle | ||
| 8 | +import org.basis.enhance.groovy.entity.ExecuteParams | ||
| 9 | +import org.slf4j.Logger | ||
| 10 | +import org.slf4j.LoggerFactory | ||
| 11 | +import org.springframework.context.ApplicationContext | ||
| 12 | + | ||
| 13 | +//过卡重量验放-提货验放 | ||
| 14 | +class WeightCheckEmpty extends Script { | ||
| 15 | + | ||
| 16 | + private final Logger logger = LoggerFactory.getLogger(getClass()); | ||
| 17 | + private final String GROWSSEXCETION = "禁止通行,重量不在可控范围"; | ||
| 18 | + | ||
| 19 | + /**x21指令判定 | ||
| 20 | + * 传入gatherInfo,三大属性验证,二维码/车牌/过卡重量 | ||
| 21 | + * 车辆备案实体 | ||
| 22 | + * 从redis读取的申请表体实体 | ||
| 23 | + * 适用于进口转关,进口提货业务类型 | ||
| 24 | + */ | ||
| 25 | + Boolean check(ExecuteParams executeParams) { | ||
| 26 | + try{ | ||
| 27 | + GatherInfo gatherInfo = (GatherInfo) executeParams.get("gatherInfo"); | ||
| 28 | + LandBusinessTypeList landBusinessTypeList = (LandBusinessTypeList) executeParams.get("ChanelFormInfo"); | ||
| 29 | + Double selfWt = (Double) executeParams.get("selfWt"); | ||
| 30 | + Double goodsWt = (Double) executeParams.get("goodsWt"); | ||
| 31 | + Double inAisleWT = (Double) executeParams.get("inAisleWT"); | ||
| 32 | + List<LAND_BUSINEESTYPE_LIST_INFO> listinfos = (List<LAND_BUSINEESTYPE_LIST_INFO>) executeParams.get("ChanelFormBillLists"); | ||
| 33 | + | ||
| 34 | + //3.车辆备案验证 | ||
| 35 | + // 调用方法 | ||
| 36 | + ApplicationContext context = getContext(); | ||
| 37 | + // 获取容器中的bean | ||
| 38 | + GatherInfoHandle gatherInfoHandle = context.getBean(GatherInfoHandle.class); | ||
| 39 | + //重量校验算法 | ||
| 40 | + WeightCheckHandleService weightCheckHandleService = context.getBean(WeightCheckHandleService.class); | ||
| 41 | + | ||
| 42 | + logger.info("[进出场申请]-业务类型为:{}-{}",landBusinessTypeList.getCocode(),landBusinessTypeList.getBusinesstype()); | ||
| 43 | + if (weightCheckHandleService.checkEmpty(gatherInfo.getGrosswt(), selfWt)){ | ||
| 44 | + return true; | ||
| 45 | + }else { | ||
| 46 | + logger.error("[空车业务]-出场重量未通过校验:"+GROWSSEXCETION); | ||
| 47 | + gatherInfoHandle.sendBw(gatherInfo,false,GROWSSEXCETION,landBusinessTypeList,listinfos); | ||
| 48 | + return false; | ||
| 49 | + } | ||
| 50 | + }catch (Exception e){ | ||
| 51 | + e.printStackTrace(); | ||
| 52 | + logger.error("[VE-CHECK-ERROR]:",e); | ||
| 53 | + return false; | ||
| 54 | + } | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + @Override | ||
| 58 | + Object run() { | ||
| 59 | + return null | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + // 获取spring容器 | ||
| 63 | + ApplicationContext getContext() { | ||
| 64 | + // 获取spring IOC容器 | ||
| 65 | + ApplicationContext context = applicationContext; | ||
| 66 | + return context; | ||
| 67 | + } | ||
| 68 | +} |
| 1 | +package com.sy.groovy | ||
| 2 | + | ||
| 3 | +import com.sy.model.GatherInfo | ||
| 4 | +import com.sy.model.LAND_BUSINEESTYPE_LIST_INFO | ||
| 5 | +import com.sy.model.LandBusinessTypeList | ||
| 6 | +import com.sy.service.WeightCheckHandleService | ||
| 7 | +import com.sy.service.impl.GatherInfoHandle | ||
| 8 | +import org.basis.enhance.groovy.entity.ExecuteParams | ||
| 9 | +import org.slf4j.Logger | ||
| 10 | +import org.slf4j.LoggerFactory | ||
| 11 | +import org.springframework.context.ApplicationContext | ||
| 12 | + | ||
| 13 | +//过卡重量验放-送货验放 | ||
| 14 | +class WeightCheckExportUnload extends Script { | ||
| 15 | + | ||
| 16 | + private final Logger logger = LoggerFactory.getLogger(getClass()); | ||
| 17 | + private final String GROWSSEXCETION = "禁止通行,重量不在可控范围"; | ||
| 18 | + | ||
| 19 | + /**x21指令判定 | ||
| 20 | + * 传入gatherInfo,三大属性验证,二维码/车牌/过卡重量 | ||
| 21 | + * 车辆备案实体 | ||
| 22 | + * 从redis读取的申请表体实体 | ||
| 23 | + * 适用于出口送货,出口转关 | ||
| 24 | + */ | ||
| 25 | + Boolean check(ExecuteParams executeParams) { | ||
| 26 | + try{ | ||
| 27 | + GatherInfo gatherInfo = (GatherInfo) executeParams.get("gatherInfo"); | ||
| 28 | + LandBusinessTypeList landBusinessTypeList = (LandBusinessTypeList) executeParams.get("ChanelFormInfo"); | ||
| 29 | + Double selfWt = (Double) executeParams.get("selfWt"); | ||
| 30 | + Double goodsWt = (Double) executeParams.get("goodsWt"); | ||
| 31 | + Double inAisleWT = (Double) executeParams.get("inAisleWT"); | ||
| 32 | + List<LAND_BUSINEESTYPE_LIST_INFO> listinfos = (List<LAND_BUSINEESTYPE_LIST_INFO>) executeParams.get("ChanelFormBillLists"); | ||
| 33 | + | ||
| 34 | + //3.车辆备案验证 | ||
| 35 | + // 调用方法 | ||
| 36 | + ApplicationContext context = getContext(); | ||
| 37 | + // 获取容器中的bean | ||
| 38 | + GatherInfoHandle gatherInfoHandle = context.getBean(GatherInfoHandle.class); | ||
| 39 | + //重量校验算法 | ||
| 40 | + WeightCheckHandleService weightCheckHandleService = context.getBean(WeightCheckHandleService.class); | ||
| 41 | + | ||
| 42 | + logger.info("[进出场申请]-业务类型为:{}-{}",landBusinessTypeList.getCocode(),landBusinessTypeList.getBusinesstype()); | ||
| 43 | + if (weightCheckHandleService.checkExportDownLoading(gatherInfo.getGrosswt(), selfWt, goodsWt,inAisleWT)){ | ||
| 44 | + return true; | ||
| 45 | + }else { | ||
| 46 | + logger.error("[ExportUnloadWeightCheck]-出场重量未通过校验:"+GROWSSEXCETION); | ||
| 47 | + gatherInfoHandle.sendBw(gatherInfo,false,GROWSSEXCETION,landBusinessTypeList,listinfos); | ||
| 48 | + return false; | ||
| 49 | + } | ||
| 50 | + }catch (Exception e){ | ||
| 51 | + e.printStackTrace(); | ||
| 52 | + logger.error("[ExportUnloadWeightCheck-ERROR]:",e); | ||
| 53 | + return false; | ||
| 54 | + } | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + @Override | ||
| 58 | + Object run() { | ||
| 59 | + return null | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + // 获取spring容器 | ||
| 63 | + ApplicationContext getContext() { | ||
| 64 | + // 获取spring IOC容器 | ||
| 65 | + ApplicationContext context = applicationContext; | ||
| 66 | + return context; | ||
| 67 | + } | ||
| 68 | +} |
| 1 | +package com.sy.groovy | ||
| 2 | + | ||
| 3 | +import com.sy.model.GatherInfo | ||
| 4 | +import com.sy.model.LAND_BUSINEESTYPE_LIST_INFO | ||
| 5 | +import com.sy.model.LandBusinessTypeList | ||
| 6 | +import com.sy.service.WeightCheckHandleService | ||
| 7 | +import com.sy.service.impl.GatherInfoHandle | ||
| 8 | +import org.basis.enhance.groovy.entity.ExecuteParams | ||
| 9 | +import org.slf4j.Logger | ||
| 10 | +import org.slf4j.LoggerFactory | ||
| 11 | +import org.springframework.context.ApplicationContext | ||
| 12 | + | ||
| 13 | +//过卡重量验放-提货验放 | ||
| 14 | +class WeightCheckImportDlv extends Script { | ||
| 15 | + | ||
| 16 | + private final Logger logger = LoggerFactory.getLogger(getClass()); | ||
| 17 | + private final String GROWSSEXCETION = "禁止通行,重量不在可控范围"; | ||
| 18 | + | ||
| 19 | + /**x21指令判定 | ||
| 20 | + * 传入gatherInfo,三大属性验证,二维码/车牌/过卡重量 | ||
| 21 | + * 车辆备案实体 | ||
| 22 | + * 从redis读取的申请表体实体 | ||
| 23 | + * 适用于进口转关,进口提货业务类型 | ||
| 24 | + */ | ||
| 25 | + Boolean check(ExecuteParams executeParams) { | ||
| 26 | + try{ | ||
| 27 | + GatherInfo gatherInfo = (GatherInfo) executeParams.get("gatherInfo"); | ||
| 28 | + LandBusinessTypeList landBusinessTypeList = (LandBusinessTypeList) executeParams.get("ChanelFormInfo"); | ||
| 29 | + Double selfWt = (Double) executeParams.get("selfWt"); | ||
| 30 | + Double goodsWt = (Double) executeParams.get("goodsWt"); | ||
| 31 | + Double inAisleWT = (Double) executeParams.get("inAisleWT"); | ||
| 32 | + List<LAND_BUSINEESTYPE_LIST_INFO> listinfos = (List<LAND_BUSINEESTYPE_LIST_INFO>) executeParams.get("ChanelFormBillLists"); | ||
| 33 | + | ||
| 34 | + //3.车辆备案验证 | ||
| 35 | + // 调用方法 | ||
| 36 | + ApplicationContext context = getContext(); | ||
| 37 | + // 获取容器中的bean | ||
| 38 | + GatherInfoHandle gatherInfoHandle = context.getBean(GatherInfoHandle.class); | ||
| 39 | + //重量校验算法 | ||
| 40 | + WeightCheckHandleService weightCheckHandleService = context.getBean(WeightCheckHandleService.class); | ||
| 41 | + | ||
| 42 | + logger.info("[进出场申请]-业务类型为:{}-{}",landBusinessTypeList.getCocode(),landBusinessTypeList.getBusinesstype()); | ||
| 43 | + if (weightCheckHandleService.checkImportDlv(gatherInfo.getGrosswt(), selfWt, goodsWt,inAisleWT)){ | ||
| 44 | + return true; | ||
| 45 | + }else { | ||
| 46 | + logger.error("[进口提货]-出场重量未通过校验:"+GROWSSEXCETION); | ||
| 47 | + gatherInfoHandle.sendBw(gatherInfo,false,GROWSSEXCETION,landBusinessTypeList,listinfos); | ||
| 48 | + return false; | ||
| 49 | + } | ||
| 50 | + }catch (Exception e){ | ||
| 51 | + e.printStackTrace(); | ||
| 52 | + logger.error("[VE-CHECK-ERROR]:",e); | ||
| 53 | + return false; | ||
| 54 | + } | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + @Override | ||
| 58 | + Object run() { | ||
| 59 | + return null | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + // 获取spring容器 | ||
| 63 | + ApplicationContext getContext() { | ||
| 64 | + // 获取spring IOC容器 | ||
| 65 | + ApplicationContext context = applicationContext; | ||
| 66 | + return context; | ||
| 67 | + } | ||
| 68 | +} |
| 1 | +package com.sy.groovy | ||
| 2 | + | ||
| 3 | +import com.sy.model.GatherInfo | ||
| 4 | +import com.sy.model.LandBusinessTypeList | ||
| 5 | +import com.sy.service.impl.GatherInfoHandle | ||
| 6 | +import org.basis.enhance.groovy.entity.ExecuteParams | ||
| 7 | +import org.slf4j.Logger | ||
| 8 | +import org.slf4j.LoggerFactory | ||
| 9 | +import org.springframework.context.ApplicationContext | ||
| 10 | +import java.util.stream.Collectors | ||
| 11 | + | ||
| 12 | +//申请单核销判定 | ||
| 13 | +class X21FormReleaseCheck extends Script { | ||
| 14 | + | ||
| 15 | + private final Logger logger = LoggerFactory.getLogger(getClass()); | ||
| 16 | + | ||
| 17 | + | ||
| 18 | + /**x21指令判定 | ||
| 19 | + * 传入gatherInfo | ||
| 20 | + * | ||
| 21 | + * 传入从redis读取的申请表体实体,验证 | ||
| 22 | + * 进行通道比对 | ||
| 23 | + */ | ||
| 24 | + void releaseCheck(ExecuteParams executeParams) { | ||
| 25 | + try{ | ||
| 26 | + // 获取product对象 | ||
| 27 | + GatherInfo gatherInfo = (GatherInfo) executeParams.get("gatherInfo"); | ||
| 28 | + List<LandBusinessTypeList> formList = (List<LandBusinessTypeList>) executeParams.get("formList"); | ||
| 29 | + | ||
| 30 | + // 调用方法 | ||
| 31 | + ApplicationContext context = getContext(); | ||
| 32 | + // 获取容器中的bean | ||
| 33 | + GatherInfoHandle gatherInfoHandle = context.getBean(GatherInfoHandle.class); | ||
| 34 | + | ||
| 35 | + List<LandBusinessTypeList> temp = new ArrayList<>(formList); | ||
| 36 | + //二维码已出区的记录 | ||
| 37 | + List<LandBusinessTypeList> havenCrossList = gatherInfoHandle.listService.selectByBarcodeWithE(gatherInfo.getBarcode()); | ||
| 38 | + | ||
| 39 | + if (formList == null && formList.isEmpty() ){ | ||
| 40 | + logger.error("[FORM-RELEASE-CHECK]-车辆进出场对应申请缓存数据为空:{}",gatherInfo.getBarcode()); | ||
| 41 | + return; | ||
| 42 | + } | ||
| 43 | + | ||
| 44 | + if (havenCrossList.isEmpty()){ | ||
| 45 | + logger.error("[FORM-RELEASE-CHECK]{}:车辆无离场数据,不核销",gatherInfo.getVename()); | ||
| 46 | + return; | ||
| 47 | + } | ||
| 48 | + logger.info("[FORM-RELEASE-CHECK]:已过卡数量:[{}]",havenCrossList.size()) | ||
| 49 | + //申请核销判定,已出区的记录与流转申请数据核碰.如果流转申请列表核碰完,还剩下的需要出区的场站则不核销. | ||
| 50 | + for (LandBusinessTypeList businessTypeList : havenCrossList) { | ||
| 51 | + List<LandBusinessTypeList> r = formList.stream().filter({item -> | ||
| 52 | + //判断还有没有没有出区的场站,还有没有出区的场站就不核销 | ||
| 53 | + logger.debug("[releaseFormCheck-Stream-loop]-缓存与已出核碰,缓存元素场站:[{}],已出记录场站:[{}]",item.getEndstation(),businessTypeList.getEndstation()); | ||
| 54 | + //解决缓存那里存储有不一样的把人错的的有问题的点,二维码不一致也把缓存删除 | ||
| 55 | + if (!item.getBarcode().equals(businessTypeList.getBarcode())){ | ||
| 56 | + return true; | ||
| 57 | + } | ||
| 58 | + if(item.getEndstation().equals(businessTypeList.getEndstation())) { | ||
| 59 | + logger.info("[releaseFormCheck-Stream-loop]-缓存元素场站:[{}],已出记录场站:[{}]-核销判定对碰成功",item.getEndstation(),businessTypeList.getEndstation()); | ||
| 60 | + return true; | ||
| 61 | + }else { | ||
| 62 | + return false; | ||
| 63 | + } | ||
| 64 | + }).collect(Collectors.toList()); | ||
| 65 | + temp.removeAll(r); | ||
| 66 | + } | ||
| 67 | + logger.info("[FORM-RELEASE-CHECK]-核销判定结果:{}",temp.size()); | ||
| 68 | + if (temp.isEmpty()){ | ||
| 69 | + //todo:流转申请状态核销 | ||
| 70 | + logger.info("[进出场申请]-流转申请开始核销:"+gatherInfo.getVename()); | ||
| 71 | + //二维码核销 | ||
| 72 | +// gatherInfoHandle.releaseBarCode(); | ||
| 73 | + logger.info("[进出场申请]-流转申请已核销:"+gatherInfo.getVename()); | ||
| 74 | + } | ||
| 75 | + }catch (Exception e){ | ||
| 76 | + e.printStackTrace(); | ||
| 77 | + logger.error("[FORM-RELEASE-ERROR]:",e); | ||
| 78 | + } | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + @Override | ||
| 82 | + Object run() { | ||
| 83 | + return false; | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + // 获取spring容器 | ||
| 87 | + ApplicationContext getContext() { | ||
| 88 | + // 获取spring IOC容器 | ||
| 89 | + ApplicationContext context = applicationContext; | ||
| 90 | + return context; | ||
| 91 | + } | ||
| 92 | + | ||
| 93 | +} |
| @@ -606,7 +606,7 @@ public class GatherInfoHandle implements GatherInfoService { | @@ -606,7 +606,7 @@ public class GatherInfoHandle implements GatherInfoService { | ||
| 606 | case "调拨业务": | 606 | case "调拨业务": |
| 607 | if (gatherInfoHandle.weightCheckHandleService.checkAllocateOrDispatch(growssWt, selfWt, goodsWt,inWt)){ | 607 | if (gatherInfoHandle.weightCheckHandleService.checkAllocateOrDispatch(growssWt, selfWt, goodsWt,inWt)){ |
| 608 | /** | 608 | /** |
| 609 | - * 调拨业务如果空车出,可出.(就是申请不带运单的) | 609 | + * 调拨业务如果空车出,可出.(就是申请不带运单的,比如综保区的车辆) |
| 610 | */ | 610 | */ |
| 611 | if (listinfos!=null && listinfos.isEmpty()){ | 611 | if (listinfos!=null && listinfos.isEmpty()){ |
| 612 | log.info("[调拨-空车]-{}空车离场",info.getVename()); | 612 | log.info("[调拨-空车]-{}空车离场",info.getVename()); |
| @@ -717,7 +717,7 @@ public class GatherInfoHandle implements GatherInfoService { | @@ -717,7 +717,7 @@ public class GatherInfoHandle implements GatherInfoService { | ||
| 717 | /** | 717 | /** |
| 718 | * 二维码失效核销->判定及失效通知. | 718 | * 二维码失效核销->判定及失效通知. |
| 719 | */ | 719 | */ |
| 720 | - private void releaseBarCode(){ | 720 | + public void releaseBarCode(){ |
| 721 | //是否有未驶离的流转记录二维码判定 | 721 | //是否有未驶离的流转记录二维码判定 |
| 722 | int count=gatherInfoHandle.listService.selectlaststation(info.getVename(),info.getBarcode()); | 722 | int count=gatherInfoHandle.listService.selectlaststation(info.getVename(),info.getBarcode()); |
| 723 | //二维码失效通知,已进入场站的与缓存比较. | 723 | //二维码失效通知,已进入场站的与缓存比较. |
| @@ -766,7 +766,7 @@ public class GatherInfoHandle implements GatherInfoService { | @@ -766,7 +766,7 @@ public class GatherInfoHandle implements GatherInfoService { | ||
| 766 | * @param list_infos 流转申请表体信息 | 766 | * @param list_infos 流转申请表体信息 |
| 767 | * @return 调试模式 直接返回true,生产模式按业务走 | 767 | * @return 调试模式 直接返回true,生产模式按业务走 |
| 768 | */ | 768 | */ |
| 769 | - private boolean sendBw(GatherInfo info, boolean check, String reason, LandBusinessTypeList land, List<LAND_BUSINEESTYPE_LIST_INFO> list_infos) { | 769 | + public boolean sendBw(GatherInfo info, boolean check, String reason, LandBusinessTypeList land, List<LAND_BUSINEESTYPE_LIST_INFO> list_infos) { |
| 770 | //调试模式 直接返回true | 770 | //调试模式 直接返回true |
| 771 | if (gatherInfoHandle.debug){ | 771 | if (gatherInfoHandle.debug){ |
| 772 | if (check) { | 772 | if (check) { |
| @@ -116,7 +116,7 @@ public class LandBusListServiceImpl implements LandBusListService { | @@ -116,7 +116,7 @@ public class LandBusListServiceImpl implements LandBusListService { | ||
| 116 | } | 116 | } |
| 117 | 117 | ||
| 118 | /** | 118 | /** |
| 119 | - * 根据gatherInfo获取对应的流转申请 | 119 | + * 根据gatherInfo获取对应的通道流转申请,没有对应通道的流转申请,则不抬杆放行. |
| 120 | * @return 流转申请信息 | 120 | * @return 流转申请信息 |
| 121 | */ | 121 | */ |
| 122 | @Override | 122 | @Override |
| @@ -17,6 +17,7 @@ import java.util.concurrent.TimeUnit; | @@ -17,6 +17,7 @@ import java.util.concurrent.TimeUnit; | ||
| 17 | @Slf4j | 17 | @Slf4j |
| 18 | public class BeihuoTests { | 18 | public class BeihuoTests { |
| 19 | 19 | ||
| 20 | + String ffm = ""; | ||
| 20 | 21 | ||
| 21 | private static ThreadPoolExecutor threadPoolEs = XMLThreadPoolFactory.instance("kakou"); | 22 | private static ThreadPoolExecutor threadPoolEs = XMLThreadPoolFactory.instance("kakou"); |
| 22 | private AnalysisRoute analysisRoute=new AnalysisRoute(); | 23 | private AnalysisRoute analysisRoute=new AnalysisRoute(); |
src/test/java/com/sy/engin/EnginTest.java
0 → 100644
| 1 | +package com.sy.engin; | ||
| 2 | + | ||
| 3 | +import com.alibaba.fastjson.JSONArray; | ||
| 4 | +import com.sy.model.GatherInfo; | ||
| 5 | +import com.sy.model.LAND_BUSINEESTYPE_LIST_INFO; | ||
| 6 | +import com.sy.model.LandBusinessTypeList; | ||
| 7 | +import com.sy.model.LandRoadVe; | ||
| 8 | +import com.sy.service.BusnesslistinfoService; | ||
| 9 | +import com.sy.service.LandBusListService; | ||
| 10 | +import com.sy.service.LandRoadVeService; | ||
| 11 | +import com.sy.service.RedisService; | ||
| 12 | +import lombok.extern.slf4j.Slf4j; | ||
| 13 | +import org.apache.commons.lang.StringUtils; | ||
| 14 | +import org.basis.enhance.groovy.entity.EngineExecutorResult; | ||
| 15 | +import org.basis.enhance.groovy.entity.ExecuteParams; | ||
| 16 | +import org.basis.enhance.groovy.entity.ScriptQuery; | ||
| 17 | +import org.basis.enhance.groovy.executor.EngineExecutor; | ||
| 18 | +import org.basis.enhance.groovy.helper.RefreshScriptHelper; | ||
| 19 | +import org.junit.Test; | ||
| 20 | +import org.junit.runner.RunWith; | ||
| 21 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 22 | +import org.springframework.boot.test.context.SpringBootTest; | ||
| 23 | +import org.springframework.test.context.junit4.SpringRunner; | ||
| 24 | + | ||
| 25 | +import java.math.BigDecimal; | ||
| 26 | +import java.util.ArrayList; | ||
| 27 | +import java.util.List; | ||
| 28 | + | ||
| 29 | +@RunWith(SpringRunner.class) | ||
| 30 | +@SpringBootTest | ||
| 31 | +@Slf4j | ||
| 32 | +public class EnginTest { | ||
| 33 | + | ||
| 34 | + private static String IEPORSE = "无相对应进出场申请"; | ||
| 35 | + private static String CHANEL_ERR= "无对应通道流转申请,走错通道"; | ||
| 36 | + | ||
| 37 | + | ||
| 38 | + @Autowired | ||
| 39 | + private EngineExecutor engineExecutor; | ||
| 40 | + | ||
| 41 | + @Autowired | ||
| 42 | + private BusnesslistinfoService busnesslistinfoService; | ||
| 43 | + | ||
| 44 | + @Autowired | ||
| 45 | + private LandBusListService landBusListService; | ||
| 46 | + | ||
| 47 | + @Autowired | ||
| 48 | + private RedisService redisService; | ||
| 49 | + | ||
| 50 | + @Autowired | ||
| 51 | + private LandBusListService listService; | ||
| 52 | + | ||
| 53 | + @Autowired | ||
| 54 | + LandRoadVeService veService; | ||
| 55 | + | ||
| 56 | + | ||
| 57 | + | ||
| 58 | + /** | ||
| 59 | + * 过磅x21报文实体 | ||
| 60 | + */ | ||
| 61 | + ExecuteParams buildGatherInfoParams(){ | ||
| 62 | + GatherInfo gatherInfo = new GatherInfo(); | ||
| 63 | + gatherInfo.setAreaid("4604600000"); | ||
| 64 | + gatherInfo.setChnlno("4604601010"); | ||
| 65 | + gatherInfo.setBarcode("edb-4ebc-919b-7d7b118da052"); | ||
| 66 | + gatherInfo.setGrosswt(new BigDecimal("6478")); | ||
| 67 | + gatherInfo.setSeqno("20220630184441000028"); | ||
| 68 | + gatherInfo.setIetype("I"); | ||
| 69 | + gatherInfo.setVename("豫A61CR8"); | ||
| 70 | + | ||
| 71 | + ExecuteParams executeParams = new ExecuteParams(); | ||
| 72 | + //初始化 | ||
| 73 | + executeParams.put("gatherInfo", gatherInfo); | ||
| 74 | + executeParams.put("formList", null); | ||
| 75 | + executeParams.put("ChanelFormInfo", null); | ||
| 76 | + executeParams.put("ChanelFormBillLists", null); | ||
| 77 | + executeParams.put("LandRoadVe", null); | ||
| 78 | + executeParams.put("inAisleWT", 0.0); | ||
| 79 | + executeParams.put("diffVal", 0.0); | ||
| 80 | + executeParams.put("selfWt", 0.0); | ||
| 81 | + executeParams.put("goodsWt", 0.0); | ||
| 82 | + | ||
| 83 | + //车辆备案信息 | ||
| 84 | + LandRoadVe ve = veService.selectByFrameNo(gatherInfo.getVename()); | ||
| 85 | + if (ve != null) { | ||
| 86 | + //车辆备案重量 | ||
| 87 | + Double selfWt=Double.parseDouble(ve.getSelfWt()); | ||
| 88 | + executeParams.put("LandRoadVe", ve); | ||
| 89 | + executeParams.put("selfWt", selfWt); | ||
| 90 | + } | ||
| 91 | + | ||
| 92 | + //获取申请单表体 | ||
| 93 | + log.info("[FORM-CACHE-GET]:车辆-{}核碰缓存",gatherInfo.getVename()); | ||
| 94 | + String landBusinessJson = redisService.get(gatherInfo.getVename()); | ||
| 95 | + if (StringUtils.isNotEmpty(landBusinessJson)) { | ||
| 96 | + //这个是申请单表体 | ||
| 97 | + List<LandBusinessTypeList> list = JSONArray.parseArray(landBusinessJson, LandBusinessTypeList.class); | ||
| 98 | + executeParams.put("formList", list); | ||
| 99 | + | ||
| 100 | + //通道对应申请信息 | ||
| 101 | + LandBusinessTypeList chanelFormInfo = landBusListService.getLandBusinessTypeListByGather(gatherInfo); | ||
| 102 | + executeParams.put("ChanelFormInfo", chanelFormInfo); | ||
| 103 | + if (chanelFormInfo!= null){ | ||
| 104 | + executeParams.put("goodsWt", chanelFormInfo.getRemark()); | ||
| 105 | + } | ||
| 106 | + | ||
| 107 | + //查询申请单运单列表 | ||
| 108 | + List<LAND_BUSINEESTYPE_LIST_INFO> chanelFormBillLists= busnesslistinfoService.selectmanilist(gatherInfo.getBarcode()); | ||
| 109 | + executeParams.put("ChanelFormBillLists", chanelFormBillLists); | ||
| 110 | + | ||
| 111 | + } | ||
| 112 | + | ||
| 113 | + //对应场站入场信息重量 | ||
| 114 | + if ("E".equals(gatherInfo.getIetype())){ | ||
| 115 | + List<LandBusinessTypeList> stationInChanleInfo= listService.selectwt(gatherInfo.getVename(),gatherInfo.getBarcode(),gatherInfo.getAreaid(),"I"); | ||
| 116 | + if (stationInChanleInfo.isEmpty()){ | ||
| 117 | + log.info("未查询到车辆:{}的入场信息",gatherInfo.getVename()); | ||
| 118 | + }else { | ||
| 119 | + for(LandBusinessTypeList typeList:stationInChanleInfo){ | ||
| 120 | + if(typeList.getAislewt()!=null){ | ||
| 121 | + //对应场站进场过磅重量 | ||
| 122 | + Double inAisleWT = typeList.getAislewt(); | ||
| 123 | + executeParams.put("inAisleWT", inAisleWT); | ||
| 124 | + //离场与入场重量差值 | ||
| 125 | + Double diffVal = inAisleWT- gatherInfo.getGrosswt().doubleValue(); | ||
| 126 | + executeParams.put("diffVal", diffVal); | ||
| 127 | + } | ||
| 128 | + } | ||
| 129 | + //TODO:进场校验 增加 车辆备案重量要 <= 进场过磅重量 ,要有误差判定 | ||
| 130 | + } | ||
| 131 | + } | ||
| 132 | + | ||
| 133 | + | ||
| 134 | + | ||
| 135 | + | ||
| 136 | + | ||
| 137 | + return executeParams; | ||
| 138 | + } | ||
| 139 | + | ||
| 140 | + @Test | ||
| 141 | + public void x21Check() { | ||
| 142 | + long time = System.currentTimeMillis(); //do something that takes some time... long completedIn = System.currentTimeMillis() - time; | ||
| 143 | + System.out.println("验证开始"+time); | ||
| 144 | + | ||
| 145 | + String scriptName = "x21-check"; | ||
| 146 | +// String scriptName = "form-check"; | ||
| 147 | + // 构建参数 | ||
| 148 | + ExecuteParams executeParams = buildGatherInfoParams(); | ||
| 149 | + // 执行脚本中指定的方法 changeProduct | ||
| 150 | + EngineExecutorResult executorResult = engineExecutor.execute( | ||
| 151 | + "baseCheck", new ScriptQuery("x21-check"), executeParams); | ||
| 152 | + log.info("使用groovy脚本来验证过卡判定放行结果=========>>>>>>>>>>>执行结果:{}", executorResult); | ||
| 153 | + | ||
| 154 | + EngineExecutorResult formCheckResult = engineExecutor.execute( | ||
| 155 | + "formCheck", new ScriptQuery("form-check"), executeParams); | ||
| 156 | + | ||
| 157 | + EngineExecutorResult veCheckResult = engineExecutor.execute( | ||
| 158 | + "veCheck", new ScriptQuery("ve-check"), executeParams); | ||
| 159 | + | ||
| 160 | + EngineExecutorResult releaseCheckResult = engineExecutor.execute( | ||
| 161 | + "releaseCheck", new ScriptQuery("form-release"), executeParams); | ||
| 162 | + | ||
| 163 | + log.info("success"); | ||
| 164 | + System.out.println("验证结束"+(System.currentTimeMillis()-time)); | ||
| 165 | + | ||
| 166 | + } | ||
| 167 | + | ||
| 168 | + @Test | ||
| 169 | + public void arrTest(){ | ||
| 170 | + String[] busType = new String[] {"区内分拨","区内调拨"}; | ||
| 171 | + String[] goodsType = new String[] {"普通货物","转关货物","退库货物","换单货物","查验货物"}; | ||
| 172 | + String[] rules = new String[] {"基本验放规则","核销判定"}; | ||
| 173 | + int i = 0; | ||
| 174 | + for (String bus : busType) { | ||
| 175 | + for (String good : goodsType) { | ||
| 176 | + for (String rule : rules) { | ||
| 177 | + log.info("插入一条数据:业务类型-[{}]-货物类型:[{}]-验放规则:[{}]",bus,good,rule); | ||
| 178 | + i++; | ||
| 179 | + | ||
| 180 | + } | ||
| 181 | + } | ||
| 182 | + } | ||
| 183 | + | ||
| 184 | + | ||
| 185 | + String[] busType1 = new String[] {"区内分拨"}; | ||
| 186 | + String[] goodsType1 = new String[] {"快件货物"}; | ||
| 187 | + String[] rules1 = new String[] {"关锁判定"}; | ||
| 188 | + for (String bus : busType1) { | ||
| 189 | + for (String good : goodsType1) { | ||
| 190 | + for (String rule : rules1) { | ||
| 191 | + log.info("插入一条数据:业务类型-[{}]-货物类型:[{}]-验放规则:[{}]",bus,good,rule); | ||
| 192 | + i++; | ||
| 193 | + | ||
| 194 | + } | ||
| 195 | + } | ||
| 196 | + } | ||
| 197 | + | ||
| 198 | + log.info("共插入{}条规则",i); | ||
| 199 | + } | ||
| 200 | + | ||
| 201 | +} |
-
请 注册 或 登录 后发表评论