|  |  | package com.sy.service.impl; | 
|  |  |  | 
|  |  | import com.alibaba.fastjson.JSON; | 
|  |  | import com.alibaba.fastjson.JSONArray; | 
|  |  | import com.alibaba.fastjson.JSONObject; | 
|  |  | import com.sy.crossDomain.buildBarCode; | 
|  |  | import com.sy.logic.LiftBar; | 
|  |  | import com.sy.model.*; | 
|  |  | import com.sy.service.*; | 
|  |  | import com.sy.socket.CommandClient; | 
|  |  | import com.sy.utils.FileTool; | 
|  |  | import org.apache.commons.lang.StringUtils; | 
|  |  | import org.slf4j.Logger; | 
|  |  | import org.slf4j.LoggerFactory; | 
|  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|  |  | import org.springframework.stereotype.Service; | 
|  |  |  | 
|  |  | import javax.validation.constraints.NotNull; | 
|  |  | import java.math.BigDecimal; | 
|  |  | import java.util.*; | 
|  |  | import java.util.stream.Collectors; | 
|  |  |  | 
|  |  | import static com.sy.service.impl.ResMessageServiceImpl.toStrArry; | 
|  |  |  | 
|  |  | @Service("GatherInfoHandle") | 
|  |  | public class GatherInfoHandleImpl implements GatherInfoService { | 
|  |  |  | 
|  |  | private static final Logger logger = LoggerFactory.getLogger(LiftBar.class); | 
|  |  |  | 
|  |  | //逻辑判断后的返回信息定义 | 
|  |  | private static String PERMITTHOUGH =        "直接放行"; | 
|  |  | private static String GROWSSEXCETION =      "禁止通行,重量不在可控范围"; | 
|  |  | private static String NORECORD =            "车辆未备案或者识别错误,车牌号:"; | 
|  |  | private static String NO_CHEPAI =           "未识别到车牌号:"; | 
|  |  | private static String INPUTSTATION =        "此车辆未做进站申请"; | 
|  |  | private static String ENTERSTATION =        "此车辆未做出站申请"; | 
|  |  | private static String ISVALID =             "二维码数据异常,请使用正确的二维码数据"; | 
|  |  | private static String ERRORWT =             "出起始场站的重量和进目的场站的重量不一致"; | 
|  |  | private static String IEPORSE =             "无相对应进出场申请"; | 
|  |  | private static String FANGXING=             "有运单未放行"; | 
|  |  | private static String FENBO =               "装载运单的分拨申请舱单未通过校验"; | 
|  |  | private static String NOGrossWt =           "过磅重量异常"; | 
|  |  | private static String BLACKLIST=            "此车辆已被拉进黑名单,不允许出区"; | 
|  |  |  | 
|  |  | @Autowired | 
|  |  | FeignService feignService; | 
|  |  |  | 
|  |  | @Autowired | 
|  |  | NmmsService nmmsService; | 
|  |  |  | 
|  |  | /** | 
|  |  | *  车辆信息备案表 | 
|  |  | */ | 
|  |  | @Autowired | 
|  |  | LandRoadVeService veService; | 
|  |  |  | 
|  |  | @Autowired | 
|  |  | RedisService redisService; | 
|  |  |  | 
|  |  | @Autowired | 
|  |  | BusnesslistinfoService busnesslistinfoService; | 
|  |  |  | 
|  |  | /** | 
|  |  | * 进出场申请表 | 
|  |  | */ | 
|  |  | @Autowired | 
|  |  | LandBusListService listService; | 
|  |  |  | 
|  |  | /** | 
|  |  | * 重量校验算法 | 
|  |  | */ | 
|  |  | @Autowired | 
|  |  | WeightCheckHandleService weightCheckHandleService; | 
|  |  |  | 
|  |  | /** | 
|  |  | * 查询运单放行表 | 
|  |  | */ | 
|  |  | @Autowired | 
|  |  | ResMessageService resMessageService; | 
|  |  |  | 
|  |  | @Autowired | 
|  |  | CommandLogService commandLogService; | 
|  |  |  | 
|  |  | /** | 
|  |  | * 车辆过卡信息 | 
|  |  | */ | 
|  |  | private GatherInfo info; | 
|  |  |  | 
|  |  | /** | 
|  |  | * 车辆流转申请表头信息 | 
|  |  | */ | 
|  |  | private LandBusinessTypeList landBusinessTypeList; | 
|  |  |  | 
|  |  | private List<LandBusinessTypeList> landBusinessTypeListList; | 
|  |  |  | 
|  |  | /** | 
|  |  | * 车辆申请表体信息 | 
|  |  | */ | 
|  |  | private List<LAND_BUSINEESTYPE_LIST_INFO> listinfos; | 
|  |  |  | 
|  |  |  | 
|  |  |  | 
|  |  | /** | 
|  |  | *  过磅重量 | 
|  |  | */ | 
|  |  | private double growssWt=0.0; | 
|  |  | /** | 
|  |  | *  车牌号 | 
|  |  | */ | 
|  |  | private String vaName; | 
|  |  |  | 
|  |  | /** | 
|  |  | *  车辆备案重量 | 
|  |  | */ | 
|  |  | private double selfWt=0.0; | 
|  |  |  | 
|  |  | /** | 
|  |  | * 初始化装载货物重量 | 
|  |  | */ | 
|  |  | private double goodsWt=0.0; | 
|  |  | /** | 
|  |  | * 车辆入场时的重量 | 
|  |  | */ | 
|  |  | private double inWt=0.0; | 
|  |  |  | 
|  |  | /** | 
|  |  | * 计算后的车辆进出场差值 | 
|  |  | */ | 
|  |  | private double diffVal=0.0; | 
|  |  |  | 
|  |  |  | 
|  |  |  | 
|  |  | @Override | 
|  |  | public int save(GatherInfo info) { | 
|  |  | return 0; | 
|  |  | } | 
|  |  |  | 
|  |  | @Override | 
|  |  | public void handel(GatherInfo gatherInfo) { | 
|  |  | this.info = gatherInfo; | 
|  |  | //获取过磅重量 | 
|  |  | growssWt = info.getGrosswt().doubleValue(); | 
|  |  |  | 
|  |  | //取车牌号,判定卡口是否取到车牌号 | 
|  |  | vaName = info.getVename(); | 
|  |  | } | 
|  |  |  | 
|  |  |  | 
|  |  | /** | 
|  |  | * 一. | 
|  |  | * 场站白名单 | 
|  |  | * @return 白名单 true. 其他走校验 | 
|  |  | */ | 
|  |  | private boolean areaWhiteListCheck(){ | 
|  |  | if(FileTool.readProperties("stationsf").equals(info.getAreaid())) { | 
|  |  | return true; | 
|  |  | } | 
|  |  | return false; | 
|  |  | } | 
|  |  |  | 
|  |  |  | 
|  |  | /** | 
|  |  | * 1. 车牌信息校验 | 
|  |  | */ | 
|  |  | private boolean veNameCheck(String veName){ | 
|  |  | //1. 若无车牌号,返回未识别错误 | 
|  |  | if (StringUtils.isEmpty(vaName)) { | 
|  |  | logger.error(NO_CHEPAI+vaName); | 
|  |  | sendBw(info,false,NO_CHEPAI + vaName,new LandBusinessTypeList(),listinfos); | 
|  |  | //CommandClient.Client(info, NO_CHEPAI + vaName); | 
|  |  | return false; | 
|  |  | } | 
|  |  | return true; | 
|  |  | } | 
|  |  |  | 
|  |  | /** | 
|  |  | * 2. 车辆备案信息校验 | 
|  |  | */ | 
|  |  | private boolean veRecordCheck(){ | 
|  |  | //2. 校验车辆是否备案 | 
|  |  | LandRoadVe ve = veService.selectByFrameNo(vaName); | 
|  |  | //若无备案信息或者黑名单,返回车辆未备案或者识别错误, | 
|  |  | if (ve == null && !veBlackListCheck(ve)) { | 
|  |  | logger.error(NORECORD+vaName); | 
|  |  | sendBw(info,false,NORECORD + vaName,new LandBusinessTypeList(),listinfos); | 
|  |  | //CommandClient.Client(info, NORECORD + vaName); | 
|  |  | return false; | 
|  |  | } | 
|  |  |  | 
|  |  | //车辆备案重量 | 
|  |  | selfWt=Double.parseDouble(ve.getSelfWt()); | 
|  |  | return true; | 
|  |  |  | 
|  |  | } | 
|  |  |  | 
|  |  | /** | 
|  |  | * 3. 车辆黑名单校验 | 
|  |  | */ | 
|  |  | private boolean veBlackListCheck(LandRoadVe ve){ | 
|  |  | if("Y".equals(ve.getVeState())){ | 
|  |  | sendBw(info,false,BLACKLIST + vaName,new LandBusinessTypeList(),listinfos); | 
|  |  | return false; | 
|  |  | } | 
|  |  | return true; | 
|  |  | } | 
|  |  |  | 
|  |  | /** | 
|  |  | * 4. 车辆进出场流转申请单信息校验 | 
|  |  | * 二维码不用校验了,二维码失效会删除redis缓存 | 
|  |  | * @return | 
|  |  | */ | 
|  |  | private boolean LandBusinessFormCheck(){ | 
|  |  | try { | 
|  |  | //通过车牌号,二维码,场站,通道号,进出类型查询进出场站申请列表 | 
|  |  | String landBusinessJson = redisService.get(info.getVename()); | 
|  |  | List<LandBusinessTypeList> list = new ArrayList<>(); | 
|  |  | if (StringUtils.isNotEmpty(landBusinessJson)){ | 
|  |  |  | 
|  |  | list = (List<LandBusinessTypeList>) JSON.parseObject(landBusinessJson,List.class); | 
|  |  |  | 
|  |  | landBusinessTypeListList  = list; | 
|  |  | //4. 若查询结果为null,返回无相对应进出场申请 | 
|  |  | if (list == null || list.isEmpty()) { | 
|  |  | logger.error(vaName+IEPORSE); | 
|  |  | sendBw(info,false,vaName+IEPORSE,null,listinfos); | 
|  |  | return false; | 
|  |  | } | 
|  |  |  | 
|  |  | list.stream() | 
|  |  | .filter( item->{ | 
|  |  | if (item.getAisle().equals(info.getChnlno()) && item.getBarcode().equals(info.getBarcode())){ | 
|  |  | landBusinessTypeList = item; | 
|  |  |  | 
|  |  | //离场装载货物重量 | 
|  |  | goodsWt = Double.parseDouble(landBusinessTypeList.getRemark()); | 
|  |  |  | 
|  |  | return true; | 
|  |  | }else { | 
|  |  | return false; | 
|  |  | } | 
|  |  | }); | 
|  |  | }else { | 
|  |  | logger.error("未找到车辆-{}的申请缓存信息",info.getVename()); | 
|  |  | logger.info("未找到车辆-{}的申请缓存信息,或者流转已超期失效",info.getVename()); | 
|  |  | } | 
|  |  | }catch (Exception e){ | 
|  |  | return false; | 
|  |  | } | 
|  |  |  | 
|  |  | return true; | 
|  |  | } | 
|  |  |  | 
|  |  | /** | 
|  |  | * 流转申请-货物类型白名单,白名单的货物类型目前直接放行 | 
|  |  | * @return | 
|  |  | */ | 
|  |  | private boolean goodsWhiteListCheck(){ | 
|  |  | if(!"普通货物".equals(landBusinessTypeList.getCocode()) | 
|  |  | && !"转关货物".equals(landBusinessTypeList.getCocode()) | 
|  |  | && !"退库货物".equals(landBusinessTypeList.getCocode()) ) { | 
|  |  | //todo:比如货物类型为快件货物,只走重量校验,不走放行信息等校验. | 
|  |  | //todo:退库货物可以关联货运系统,得到退库信息进行比对 | 
|  |  | //todo:查验货物走查验信息比对 | 
|  |  | //todo:快件暂不校验直接放行,不过得录单 | 
|  |  | //todo:换单货物校验逻辑待定 | 
|  |  | //todo:未来取消货物类型判定. | 
|  |  | logger.info("车辆装载货物为:" + landBusinessTypeList.getCocode()); | 
|  |  | return true; | 
|  |  | } | 
|  |  | return false; | 
|  |  | } | 
|  |  |  | 
|  |  | /** | 
|  |  | * 5. 车辆过磅重量校验 | 
|  |  | * @return true 通过 false 不通过 | 
|  |  | */ | 
|  |  | private boolean weightCheck(GatherInfo info){ | 
|  |  | if(info.getGrosswt().compareTo(BigDecimal.ZERO) > 0){ | 
|  |  | logger.info("过磅重量校验通过,过磅重量大于0"); | 
|  |  | }else{ | 
|  |  | sendBw(info,false,NOGrossWt + growssWt,new LandBusinessTypeList(),listinfos); | 
|  |  | return false; | 
|  |  | } | 
|  |  | return true; | 
|  |  | } | 
|  |  |  | 
|  |  | /** | 
|  |  | * 离场时需要获取的车辆进场信息,入场重量,进出场差值 | 
|  |  | */ | 
|  |  | private void inStationInfo(){ | 
|  |  | List<LandBusinessTypeList> stationInChanleInfo= listService.selectwt(info.getVename(),info.getBarcode(),info.getAreaid(),"I"); | 
|  |  | if (stationInChanleInfo.isEmpty()){ | 
|  |  | logger.info("未查询到车辆:{}的入场信息",info.getVename()); | 
|  |  | }else { | 
|  |  | for(LandBusinessTypeList typeList:stationInChanleInfo){ | 
|  |  | if(typeList.getAislewt()!=null){ | 
|  |  | //对应场站进场过磅重量 | 
|  |  | inWt=typeList.getAislewt(); | 
|  |  | } | 
|  |  | diffVal = inWt- growssWt; | 
|  |  | } | 
|  |  |  | 
|  |  | //TODO:进场校验 增加 车辆备案重量要 <= 进场过磅重量 ,要有误差判定 | 
|  |  | } | 
|  |  | } | 
|  |  |  | 
|  |  |  | 
|  |  |  | 
|  |  | /** | 
|  |  | * 此通道对应的流转申请货物重量. | 
|  |  | */ | 
|  |  | private void setGoodsWt(LandBusinessTypeList list){ | 
|  |  |  | 
|  |  | } | 
|  |  |  | 
|  |  | /** | 
|  |  | * todo:通道及金二路由判定,是金二通道的话,等金二X22 | 
|  |  | * 目前宽进严出策略,本地判定 | 
|  |  | * | 
|  |  | */ | 
|  |  | private boolean chanelInCheck(){ | 
|  |  | if ("I".equals(info.getIetype())){ | 
|  |  | return true; | 
|  |  | }else { | 
|  |  | return false; | 
|  |  | } | 
|  |  | } | 
|  |  |  | 
|  |  | /** | 
|  |  | * 设置表体全局变量 | 
|  |  | */ | 
|  |  | private void setListinfos(){ | 
|  |  | //查询运单列表 | 
|  |  | listinfos=busnesslistinfoService.selectmanilist(info.getBarcode()); | 
|  |  | } | 
|  |  |  | 
|  |  | /** | 
|  |  | * 出区抬杆放行判定 | 
|  |  | * @return | 
|  |  | */ | 
|  |  | private boolean checkRelease(){ | 
|  |  | logger.info("[进出场申请]-业务类型为:"+landBusinessTypeList.getCocode()+landBusinessTypeList.getBusinesstype()); | 
|  |  | switch (landBusinessTypeList.getBusinesstype()){ | 
|  |  | case "空车业务": | 
|  |  | if(weightCheckHandleService.checkEmpty(growssWt,selfWt)){ | 
|  |  | return true; | 
|  |  | }else{ | 
|  |  | logger.error("[空车业务]-出场重量未通过校验:"+GROWSSEXCETION); | 
|  |  | sendBw(info,false,GROWSSEXCETION,landBusinessTypeList,listinfos); | 
|  |  | return false; | 
|  |  | } | 
|  |  | case "出口转关": | 
|  |  | case "出口送货": | 
|  |  | if (weightCheckHandleService.checkExportDownLoading(growssWt, selfWt, goodsWt,inWt)){ | 
|  |  | return true; | 
|  |  | }else{ | 
|  |  | logger.error("[出口送货]-出场重量未通过校验:"+GROWSSEXCETION); | 
|  |  | sendBw(info,false,GROWSSEXCETION,landBusinessTypeList,listinfos); | 
|  |  | return false; | 
|  |  | } | 
|  |  | case "进口转关": | 
|  |  | case "进口提货": | 
|  |  | if (weightCheckHandleService.checkImportDlv(growssWt, selfWt, goodsWt,inWt)){ | 
|  |  | if ("退库货物".equals(landBusinessTypeList.getCocode())){ | 
|  |  | /** | 
|  |  | * 退库货物不校验运单放行. | 
|  |  | */ | 
|  |  | logger.info("[退库业务]-重量核验通过."); | 
|  |  | }else{ | 
|  |  | //检查运单放行 | 
|  |  | if (resMessageService.checkManifestRelease(info,listinfos)){ | 
|  |  | return true; | 
|  |  | }else { | 
|  |  | //有运单未放行 | 
|  |  | logger.error("[进口提货]-出场未通过校验:"+FANGXING+landBusinessTypeList.getMasterList()); | 
|  |  | sendBw(info,false,FANGXING+landBusinessTypeList.getMasterList(),landBusinessTypeList,listinfos); | 
|  |  | return false; | 
|  |  | } | 
|  |  | } | 
|  |  | //todo:装载运单历史数据累加超重判定 | 
|  |  | }else{ | 
|  |  | logger.error("[进口提货]-出场重量未通过校验:"+GROWSSEXCETION); | 
|  |  | sendBw(info,false,GROWSSEXCETION,landBusinessTypeList,listinfos); | 
|  |  | return false; | 
|  |  | } | 
|  |  | break; | 
|  |  | case "分拨业务": | 
|  |  | if (weightCheckHandleService.checkAllocateOrDispatch(growssWt, selfWt, goodsWt,inWt)){ | 
|  |  | //todo:检查分拨申请 | 
|  |  | boolean allocatCheck = checkNmmsAllocate(landBusinessTypeList.getMasterList()); | 
|  |  | if(!allocatCheck){ | 
|  |  | logger.error("[分拨业务]-分拨申请舱单未通过校验:"+FENBO); | 
|  |  | sendBw(info,false,FENBO,landBusinessTypeList,listinfos); | 
|  |  | return false; | 
|  |  | } | 
|  |  | return true; | 
|  |  | //todo:分拨运抵通知,重车入场视为运抵 | 
|  |  | }else{ | 
|  |  | logger.error("[分拨业务]-出场重量未通过校验:"+GROWSSEXCETION); | 
|  |  | sendBw(info,false,GROWSSEXCETION,landBusinessTypeList,listinfos); | 
|  |  | return false; | 
|  |  | } | 
|  |  | case "调拨业务": | 
|  |  | if (weightCheckHandleService.checkAllocateOrDispatch(growssWt, selfWt, goodsWt,inWt)){ | 
|  |  | //检查运单放行 | 
|  |  | if (resMessageService.checkManifestRelease(info,listinfos)){ | 
|  |  | return true; | 
|  |  | }else { | 
|  |  | //有运单未放行 | 
|  |  | logger.error("[调拨业务]-出场未通过校验:"+FANGXING+landBusinessTypeList.getMasterList()); | 
|  |  | sendBw(info,false,FANGXING,landBusinessTypeList,listinfos); | 
|  |  | return false; | 
|  |  | } | 
|  |  | //todo:检查ULD放行. | 
|  |  | }else{ | 
|  |  | logger.error("[调拨业务]-出场未通过校验:"+GROWSSEXCETION); | 
|  |  | sendBw(info,false,GROWSSEXCETION,landBusinessTypeList,listinfos); | 
|  |  | return false; | 
|  |  | } | 
|  |  | default: | 
|  |  | logger.error("[未知业务类型]-出场未通过校验"); | 
|  |  | break; | 
|  |  | } | 
|  |  |  | 
|  |  | return false; | 
|  |  | } | 
|  |  |  | 
|  |  | /** | 
|  |  | * 记录进出区信息 | 
|  |  | */ | 
|  |  | private void record(){ | 
|  |  | if ("I".equals(info.getIetype())){ | 
|  |  | landBusinessTypeList.setAislewt(info.getGrosswt().doubleValue()); | 
|  |  | landBusinessTypeList.setUpdateDate(new Date()); | 
|  |  | landBusinessTypeList.setRemark(String.format("%.1f", goodsWt)); | 
|  |  | //车辆备案重量 | 
|  |  | landBusinessTypeList.setRemark2(String.valueOf(selfWt)); | 
|  |  | landBusinessTypeList.setContrastflag("已进站"); | 
|  |  | }else { | 
|  |  | landBusinessTypeList.setAislewt(info.getGrosswt().doubleValue()); | 
|  |  | landBusinessTypeList.setUpdateDate(new Date()); | 
|  |  | //装载货物总重量 | 
|  |  | landBusinessTypeList.setRemark(String.format("%.1f", goodsWt)); | 
|  |  | //进出差值 | 
|  |  | landBusinessTypeList.setRemark1(String.format("%.1f", diffVal)); | 
|  |  | landBusinessTypeList.setRemark2(String.valueOf(selfWt)); | 
|  |  | landBusinessTypeList.setContrastflag("已出站"); | 
|  |  | } | 
|  |  |  | 
|  |  | //todo:判定放行后,插入数据库,出入区记录 | 
|  |  | landBusinessTypeList.setId(UUID.randomUUID().toString()); | 
|  |  | landBusinessTypeList.setIsvalid("1"); | 
|  |  | //todo:这里SEQN也要入库 | 
|  |  | listService.saveList(landBusinessTypeList); | 
|  |  | } | 
|  |  |  | 
|  |  | /** | 
|  |  | * 流转申请是否核销判定 | 
|  |  | */ | 
|  |  | private void releaseFormCheck(){ | 
|  |  | //二维码已出区的记录 | 
|  |  | List<LandBusinessTypeList> havenCrossList = listService.selectByBarcodeWithE(info.getBarcode()); | 
|  |  | //申请核销判定 | 
|  |  | for (LandBusinessTypeList businessTypeList : havenCrossList) { | 
|  |  | List<LandBusinessTypeList> r =  landBusinessTypeListList.stream().filter(item ->{ | 
|  |  | if(item.getEndstation().equals(businessTypeList.getEndstation())) { | 
|  |  | landBusinessTypeListList.remove(item); | 
|  |  | return true; | 
|  |  | }else { | 
|  |  | return false; | 
|  |  | } | 
|  |  | }) | 
|  |  | .collect(Collectors.toList()); | 
|  |  | } | 
|  |  |  | 
|  |  | if (landBusinessTypeListList.isEmpty()){ | 
|  |  | //todo:流转申请状态核销 | 
|  |  | //二维码核销 | 
|  |  | releaseBarCode(); | 
|  |  | } | 
|  |  |  | 
|  |  | } | 
|  |  |  | 
|  |  | /** | 
|  |  | * 二维码失效核销->判定及失效通知. | 
|  |  | */ | 
|  |  | private void releaseBarCode(){ | 
|  |  | //二维码判定 | 
|  |  | int count=listService.selectlaststation(info.getVename(),info.getBarcode()); | 
|  |  | //二维码失效通知,已进入场站的与缓存比较. | 
|  |  | if(count==0){ | 
|  |  | //todo:测试注释掉,二维码释放 | 
|  |  | logger.info("[进出场申请]-二维码释放:"+vaName); | 
|  |  | buildBarCode.cancleBarCode(vaName); | 
|  |  | } | 
|  |  | } | 
|  |  |  | 
|  |  | /** | 
|  |  | * todo:车单关系绑定报文 | 
|  |  | */ | 
|  |  |  | 
|  |  | /** | 
|  |  | * 发送X22指令 | 
|  |  | * @param info | 
|  |  | * @param check | 
|  |  | * @param reason | 
|  |  | * @param land | 
|  |  | * @param list_infos | 
|  |  | * @return | 
|  |  | */ | 
|  |  | public boolean sendBw(GatherInfo info, boolean check, String reason, LandBusinessTypeList land, List<LAND_BUSINEESTYPE_LIST_INFO> list_infos) { | 
|  |  | logger.info(String.format("开始发送指令:车牌%s,场站%s,通道%s,重量%s",info.getVename(),info.getAreaid(),info.getChnlno(),info.getGrosswt())); | 
|  |  | boolean flag = false; | 
|  |  | if (check) { | 
|  |  | CommandClient.Client(info, PERMITTHOUGH); | 
|  |  | logger.info("=============>>>>>>>>放行报文发送成功<<<<<<<<<=============="); | 
|  |  | flag = true; | 
|  |  | } else { | 
|  |  | CommandClient.Client(info, reason); | 
|  |  | logger.info("=============>>>>>>>>重量异常报文发送成功<<<<<<<<<=============="); | 
|  |  | } | 
|  |  | commandlog(info,check,reason,land,list_infos); | 
|  |  | return flag; | 
|  |  | } | 
|  |  |  | 
|  |  | /** | 
|  |  | * 放行日志记录 | 
|  |  | * @param info | 
|  |  | * @param check | 
|  |  | * @param reason | 
|  |  | * @param land | 
|  |  | * @param list_infos | 
|  |  | */ | 
|  |  | public void commandlog(GatherInfo info,boolean check,String reason,LandBusinessTypeList land,List<LAND_BUSINEESTYPE_LIST_INFO> list_infos){ | 
|  |  | String flag="",type=""; | 
|  |  | commandLog command=new commandLog(); | 
|  |  | command.setId(UUID.randomUUID().toString()); | 
|  |  | command.setBarcode(info.getBarcode()); | 
|  |  |  | 
|  |  | if(land!=null){ | 
|  |  | command.setBarcode(land.getBarcode()); | 
|  |  | command.setBusnessType(land.getBusinesstype()); | 
|  |  | } | 
|  |  | command.setAreaId(info.getAreaid()); | 
|  |  | command.setChnlNo(info.getChnlno()); | 
|  |  | if (check){ | 
|  |  | flag = "00"; | 
|  |  | } else{ | 
|  |  | flag = "11"; | 
|  |  | } | 
|  |  | if("I".equals(info.getIetype())){ | 
|  |  | type="000000200000000000"; | 
|  |  | }else{ | 
|  |  | type="000000100000000000"; | 
|  |  | } | 
|  |  | command.setReasonCode(flag+type); | 
|  |  | command.setReasonText(reason); | 
|  |  | command.setVeName(info.getVename()); | 
|  |  | command.setVeWeight(selfWt); | 
|  |  | command.setIeType(info.getIetype()); | 
|  |  | command.setExitGrossWeight(info.getGrosswt().doubleValue()); | 
|  |  | command.setInGrossWeight(inWt); | 
|  |  | command.setGoodsWeight(goodsWt); | 
|  |  | command.setActualGoodsWeight(diffVal); | 
|  |  | if(list_infos.size()>0){ | 
|  |  | command.setMasterList(Arrays.toString(toStrArry(list_infos))); | 
|  |  | } | 
|  |  | commandLogService.insert(command); | 
|  |  | } | 
|  |  |  | 
|  |  | /** | 
|  |  | * 新舱单分拨申请数据查询 | 
|  |  | * @param waybill 查询的运单号 | 
|  |  | * @return | 
|  |  | */ | 
|  |  | private Map nmmsAllocate(@NotNull String waybill){ | 
|  |  | logger.info("新舱单查询分拨申请数据开始"); | 
|  |  | Feign_Allocate_Search feignAllocateSearch = new Feign_Allocate_Search(waybill,0,10); | 
|  |  | Map map = nmmsService.getAllocate(feignAllocateSearch); | 
|  |  | logger.info(""+map); | 
|  |  | return map; | 
|  |  | } | 
|  |  |  | 
|  |  |  | 
|  |  | /** | 
|  |  | * 分拨申请查询 | 
|  |  | * @param waybill | 
|  |  | * @return | 
|  |  | */ | 
|  |  | private boolean checkNmmsAllocate(String waybill){ | 
|  |  | if (waybill.length() < 1) { | 
|  |  | return false; | 
|  |  | } | 
|  |  | waybill = waybill.replace("-", ""); | 
|  |  | //中文逗号替换 | 
|  |  | waybill = waybill.replace(",", ","); | 
|  |  | String[] maifest = waybill.split(","); | 
|  |  | logger.info("运单列表:" + waybill); | 
|  |  | boolean flag = false; | 
|  |  |  | 
|  |  | for (String awb : maifest) { | 
|  |  | Map map= nmmsAllocate(awb); | 
|  |  | if (map.containsKey("reslut")){ | 
|  |  | String result = map.get("reslut").toString(); | 
|  |  | JSONObject jsonObject = JSON.parseObject(result); | 
|  |  | if (jsonObject.containsKey("ds")) { | 
|  |  | JSONArray ds = jsonObject.getJSONArray("ds"); | 
|  |  | JSONObject awbinfo = ds.getJSONObject(0); | 
|  |  | if (awbinfo.containsKey("RECEIPTINFORMATION")){ | 
|  |  | if (awbinfo.getString("RECEIPTINFORMATION").contains("39301") || awbinfo.getString("RECEIPTINFORMATION").contains("39103")){ | 
|  |  | logger.info("运单:{},分拨回执查询结果:{}",awb,awbinfo.getString("RECEIPTINFORMATION")); | 
|  |  | }else { | 
|  |  | logger.info("运单{}分拨申请回执不正常:{}",awb,awbinfo.getString("RECEIPTINFORMATION")); | 
|  |  | return false; | 
|  |  | } | 
|  |  | } | 
|  |  | }else { | 
|  |  | logger.info("运单:{}分拨申请回执未查询到,或未进行分拨申请",awb); | 
|  |  | return false; | 
|  |  | } | 
|  |  | }else{ | 
|  |  | logger.info("运单:{}分拨申请回执未查询到,或未进行分拨申请",awb); | 
|  |  | return false; | 
|  |  | } | 
|  |  |  | 
|  |  | } | 
|  |  | return true; | 
|  |  | } | 
|  |  | } | 
... | ... |  |