|
|
package com.sy.groovy
|
|
|
|
|
|
import com.alibaba.fastjson.JSON
|
|
|
import com.sy.mapper.LandRouterConfigDao
|
|
|
import com.sy.model.*
|
|
|
import com.sy.service.CommandLogService
|
|
|
import com.sy.service.RedisService
|
|
|
import com.sy.socket.CommandClient
|
|
|
import org.apache.commons.lang.StringUtils
|
|
|
import org.basis.enhance.groovy.entity.ExecuteParams
|
|
|
import org.slf4j.Logger
|
|
|
import org.slf4j.LoggerFactory
|
|
|
import org.springframework.context.ApplicationContext
|
|
|
|
|
|
/**
|
|
|
* 金二验放
|
|
|
* 金二通知验放规则
|
|
|
* todo:需要改造成验放型.返回true false,某些业务类型需要强制走金二验放,海关智能卡口配置端也是根据通道进行配置的
|
|
|
*/
|
|
|
class G2Notice extends Script implements ChannelCheckScript {
|
|
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
|
|
@Override
|
|
|
Object run() {
|
|
|
return null
|
|
|
}
|
|
|
|
|
|
|
|
|
Boolean check(ExecuteParams executeParams) {
|
|
|
try{
|
|
|
/**
|
|
|
* X21通道信息与流转信息比对
|
|
|
* 1. 从缓存获取车辆进出场申请信息,有流转信息再进行通道对碰.
|
|
|
* 无流转信息则说明缓存失效或者二维码不对.
|
|
|
*/
|
|
|
GatherInfo info = (GatherInfo) executeParams.get("gatherInfo");
|
|
|
LandBusinessTypeList landBusinessTypeList = (LandBusinessTypeList) executeParams.get("chanelFormInfo");
|
|
|
if (landBusinessTypeList!=null){
|
|
|
rightChnelCheck(landBusinessTypeList.getBusinesstype(),info);
|
|
|
}else {
|
|
|
/**
|
|
|
* 对应进出场申请数据
|
|
|
*/
|
|
|
log.error("[G2]-X21与流转信息核碰失败,未有流转缓存或者二维码对碰不成功");
|
|
|
CommandClient.Client(info,"未找到通道对应申报信息,或二维码信息不一致");
|
|
|
record(info,false,"[FormCheck]-未找到通道对应申报信息",null);
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
e.printStackTrace();
|
|
|
log.error("[LockNoticeCheck-ERR]:",e);
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 获取spring容器
|
|
|
ApplicationContext getContext() {
|
|
|
// 获取spring IOC容器
|
|
|
ApplicationContext context = applicationContext;
|
|
|
return context;
|
|
|
}
|
|
|
|
|
|
void rightChnelCheck(String businessType,GatherInfo info){
|
|
|
LandRouterConfig landRouterConfig = new LandRouterConfig();
|
|
|
landRouterConfig.setBusinessType(businessType);
|
|
|
landRouterConfig.setAreaId(info.getAreaid());
|
|
|
|
|
|
ApplicationContext context = getContext();
|
|
|
LandRouterConfigDao landRouterConfigDao = context.getBean(LandRouterConfigDao.class);
|
|
|
//查询此场站此业务类型有无金二业务配置
|
|
|
List<LandRouterConfig> routerConfigs = landRouterConfigDao.selectByBussType(landRouterConfig);
|
|
|
//有金二与业务类型绑定
|
|
|
if (!routerConfigs.isEmpty()){
|
|
|
/**
|
|
|
* 路由配置的卡口 是进出卡口都有 还是只有进或者出
|
|
|
* 根据X21过的通道类型(进卡口/出卡口)来判定,对应流转申报业务类型 的 进出卡口业务是否有金二通道配置
|
|
|
*/
|
|
|
boolean anyMatch = routerConfigs.stream().anyMatch({router-> router.getChanelType().equals(info.getIetype())});
|
|
|
|
|
|
/**
|
|
|
* 有对应卡口进出类型的配置
|
|
|
* 继续判定
|
|
|
* 1 通道是否走对. 走对 将X21报文给金二,由三宝转成X81
|
|
|
* 2 没走对 返回 走错通道.业务结束.
|
|
|
*/
|
|
|
if (anyMatch){
|
|
|
//是否走对通道的判定
|
|
|
for (LandRouterConfig routerConfig : routerConfigs) {
|
|
|
|
|
|
if (routerConfig.getChanelId().equals(info.getChnlno())){
|
|
|
/**
|
|
|
* 查找到金二与通道的验放配置
|
|
|
*/
|
|
|
log.info("[G2-ROUTER]-车辆[{}]流转为金二业务,转金二处理",info.getVename());
|
|
|
//缓存X21,用来接收海关的x82指令核对.收到X22指令后进行核销此缓存.走金二验放的才缓存
|
|
|
cacheWithSeqno(info);
|
|
|
log.debug("[G2-ROUTER-CACHE]-车辆[{}]流转已缓存[SEQNO]:{}",info.getVename(),info.getSeqno());
|
|
|
//将X21报文发给三宝,让三宝发给金二
|
|
|
sendToSample(info);
|
|
|
record(info,true,"已转金二验放-[SEQN]:"+info.getSeqno(),null);
|
|
|
log.info("[G2]>>为[金二业务],已将[{}]过卡信息发送与金二",info.getVename());
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 没适配上 为走错通道,走错通道直接给指令,不走本地验放.
|
|
|
* 为提高抬杆效率
|
|
|
*/
|
|
|
//todo:走错通道的回执指令处理
|
|
|
log.info("[rightChnelCheck]-走错通道");
|
|
|
CommandClient.Client(info,"G2-走错通道,未找到通道对应申报信息,或二维码信息不一致");
|
|
|
record(info,false,"走错通道-[SEQN]:"+info.getSeqno(),null);
|
|
|
}
|
|
|
/**
|
|
|
* 有对应卡口进出类型的配置.
|
|
|
* 说明没有金二配置
|
|
|
* 走本地
|
|
|
*/
|
|
|
else{
|
|
|
//没有金二配置,走本地
|
|
|
// X21Local(info);
|
|
|
log.info("[G2Notice-CHECK]-通道[{}]没有G2配置",info.getChnlno())
|
|
|
}
|
|
|
}else {
|
|
|
|
|
|
//没有金二配置,走本地
|
|
|
// X21Local(info);
|
|
|
log.info("[G2Notice-CHECK]-通道[{}]没有G2配置",info.getChnlno())
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
void record(GatherInfo info, boolean result, String reason, LandBusinessTypeList landBusinessTypeList){
|
|
|
ApplicationContext context = getContext();
|
|
|
CommandLogService commandLogService = context.getBean(CommandLogService.class);
|
|
|
commandLogService.commandlog(info,result,reason,landBusinessTypeList,null,0.0,0.0,0.0,0.0);
|
|
|
}
|
|
|
|
|
|
void sendToSample(GatherInfo info){
|
|
|
CommandClient.gatherInfoBuildAndSend(info);
|
|
|
}
|
|
|
|
|
|
void cacheWithSeqno(GatherInfo info){
|
|
|
ApplicationContext context = getContext();
|
|
|
RedisService redisService = context.getBean(RedisService.class);
|
|
|
if (info!=null && StringUtils.isNotEmpty(info.getSeqno())) {
|
|
|
redisService.set(info.getSeqno(), JSON.toJSONString(info),60*60*24*3);
|
|
|
}
|
|
|
}
|
|
|
} |
...
|
...
|
|