审查视图

src/main/java/com/sy/logic/LiftBar.java 31.4 KB
xudada authored
1 2 3 4
package com.sy.logic;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
朱兆平 authored
5
import com.alibaba.fastjson.JSONObject;
xudada authored
6 7 8
import com.sy.crossDomain.buildBarCode;
import com.sy.model.*;
import com.sy.relation.VeManifestRelation;
xudada authored
9
import com.sy.service.*;
xudada authored
10 11
import com.sy.socket.CommandClient;
import com.sy.utils.FileTool;
朱兆平 authored
12
import org.apache.commons.lang.StringUtils;
xudada authored
13 14 15 16 17 18 19 20
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.PropertyConfigurator;
import org.springframework.beans.factory.annotation.Autowired;
21
import org.springframework.beans.factory.annotation.Value;
xudada authored
22
import org.springframework.scheduling.annotation.Async;
xudada authored
23 24 25 26
import org.springframework.stereotype.Component;
import org.apache.log4j.Logger;

import javax.annotation.PostConstruct;
朱兆平 authored
27
import javax.validation.constraints.NotNull;
xudada authored
28 29 30 31 32 33 34 35 36 37 38 39 40 41
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Date;
import java.util.List;
import java.util.Map;


@Component
public class LiftBar {
    private static final Logger logger = Logger.getLogger(LiftBar.class);
朱兆平 authored
42
    private static final org.slf4j.Logger log4 = org.slf4j.LoggerFactory.getLogger(LiftBar.class);
xudada authored
43 44 45 46 47 48 49 50
    @Autowired
    private LandBusListService listService;//进出场申请表
    @Autowired
    private LandRoadVeService veService;//车辆信息备案表
    @Autowired
    private ResMessageService resMessageService;//查询运单放行表
    @Autowired
    private EnterCancelServer enterCancelServer;//调拨业务单独记录表
xudada authored
51 52 53 54
    @Autowired
    private BusnesslistinfoService busnesslistinfoService;
    @Autowired
    BusnessViewService busnessViewService;
朱兆平 authored
55 56 57 58

    @Autowired
    WeightCheckHandleService weightCheckHandleService;
59 60 61 62 63 64
    @Value("${wharf.interface.host}")
    private String wharfHost;

    @Value("${nmms.interface.host}")
    private String nmmsHost;
65
    private static LiftBar logic;
朱兆平 authored
66
xudada authored
67 68 69 70
    //逻辑判断后的返回信息定义
    private static String PERMITTHOUGH = "直接放行";
    private static String GROWSSEXCETION = "禁止通行,重量不在可控范围";
    private static String NORECORD = "车辆未备案或者识别错误,车牌号:";
朱兆平 authored
71
    private static String NO_CHEPAI = "未识别到车牌号:";
xudada authored
72 73 74 75 76 77
    private static String INPUTSTATION = "此车辆未做进站申请";
    private static String ENTERSTATION = "此车辆未做出站申请";
    private static String ISVALID = "二维码数据异常,请使用正确的二维码数据";
    private static String ERRORWT = "出起始场站的重量和进目的场站的重量不一致";
    private static String IEPORSE = "无相对应进出场申请";
    private static String FANGXING="有运单未放行";
朱兆平 authored
78 79 80 81 82
    private static String FENBO = "装载运单的分拨申请舱单未通过校验";

    //分拨申请回执
    private static String ALLOCATE_01 = "39301 分拨申请审核通过。";
    private static String ALLOCATE_04 = "39103 分拨申请重复传输,海关审核不通过。";
xudada authored
83
xudada authored
84 85
    @Autowired
    private FeignService feignService;
朱兆平 authored
86
朱兆平 authored
87 88 89
    @Autowired
    private NmmsService nmmsService;
xudada authored
90 91 92 93 94 95 96
    @PostConstruct
    public void init() {
        logic = this;
        logic.listService = this.listService;
        logic.veService = this.veService;
        logic.resMessageService = this.resMessageService;
        logic.enterCancelServer = this.enterCancelServer;
xudada authored
97 98 99
        logic.feignService=this.feignService;
        logic.busnesslistinfoService=this.busnesslistinfoService;
        logic.busnessViewService=this.busnessViewService;
朱兆平 authored
100
        logic.weightCheckHandleService=this.weightCheckHandleService;
101 102
        logic.wharfHost=this.wharfHost;
        logic.nmmsHost=this.nmmsHost;
朱兆平 authored
103
        logic.feignService=this.feignService;
朱兆平 authored
104
        logic.nmmsService=this.nmmsService;
xudada authored
105 106 107 108 109 110
    }

    /**
     * @Param info 卡口采集数据
     * @Result 计算卡口采集数据并发送报文
     */
朱兆平 authored
111
    public  boolean liftBar(GatherInfo info) throws InterruptedException {
xudada authored
112 113 114 115 116
        PropertyConfigurator.configure("config/log4j.properties");
        //默认返回值
        boolean result = false;
        //获取过磅重量
        double growssWt = info.getGrosswt().doubleValue();
朱兆平 authored
117 118

        //初始化装载货物重量
xudada authored
119 120 121
        double goodsWt=0.0,inWt=0.0,diffVal=0.0;
        //取车牌号,判定卡口是否取到车牌号
        String vaName = info.getVename();
朱兆平 authored
122 123

        //1. 若无车牌号,返回未识别错误
xudada authored
124
        if (vaName.length() <= 0) {
朱兆平 authored
125
            logger.error(NO_CHEPAI+vaName);
朱兆平 authored
126 127
            CommandClient.Client(info, NO_CHEPAI + vaName);
xudada authored
128 129
            return result;
        }
朱兆平 authored
130 131

        //2. 校验车辆是否备案
xudada authored
132 133 134
        LandRoadVe ve = logic.veService.selectByFrameNo(vaName);
        //若无备案信息,返回车辆未备案或者识别错误
        if (ve == null) {
朱兆平 authored
135
            logger.error(NORECORD+vaName);
xudada authored
136 137 138
            CommandClient.Client(info, NORECORD + vaName);
            return result;
        }
朱兆平 authored
139
xudada authored
140
        /**
朱兆平 authored
141
         * 3. 车牌号,二维码,场站ID/号,通道ID/号,进出业务类型标识I/E
xudada authored
142 143 144 145
         * 查询是否已有此场站通道的申请
         */
        //通过车牌号,二维码,场站,通道号,进出类型查询进出场站申请列表
        LandBusinessTypeList list = logic.listService.selectForOne(info.getVename(), info.getBarcode(), info.getAreaid(), info.getChnlno(), info.getIetype());
朱兆平 authored
146
        //4. 若查询结果为null,返回无相对应进出场申请
xudada authored
147
        if (list == null) {
朱兆平 authored
148
            logger.error(vaName+IEPORSE);
xudada authored
149 150 151
            CommandClient.Client(info, IEPORSE);
            return result;
        }
朱兆平 authored
152 153

        //5. 判断进出场申请二维码是否已经失效,若失效,sendError ,0 未失效
xudada authored
154
        if ("0".equals(list.getIsvalid())) {
朱兆平 authored
155
            //6. 校验重量开始
xudada authored
156 157 158 159
            boolean checkResult = false;
            boolean check = false;
            boolean checkMainfest =false;
朱兆平 authored
160
            //7. 判断是进场申请还是出场申请
xudada authored
161 162 163
            if("I".equals(info.getIetype())){
                //进场申请宽进
                checkResult=true;
朱兆平 authored
164 165
            } else {
                //出场判定
xudada authored
166
朱兆平 authored
167 168
                //进出场重量差值计算
                //获取对应场站进场申请的货物重量,进场过磅重量,
xudada authored
169 170
                List<LandBusinessTypeList> listWt=logic.listService.selectwt(list.getTrailerFrameNo(),list.getBarcode(),list.getEndstation(),"I");
                for(LandBusinessTypeList typeList:listWt){
朱兆平 authored
171
                    if(StringUtils.isNotEmpty(typeList.getRemark())){
xudada authored
172 173 174 175 176 177 178 179 180
                        //货物重量
                        goodsWt=Double.parseDouble(typeList.getRemark());
                    }
                    if(typeList.getAislewt()!=null){
                        //对应场站进场过磅重量
                        inWt=typeList.getAislewt();
                    }
                    diffVal = inWt- growssWt;
                }
181 182 183 184
                if (Double.doubleToLongBits(goodsWt)==Double.doubleToLongBits(0.0)){
                    goodsWt = Double.parseDouble(list.getRemark());
                }
                //TODO:进场校验 增加 车辆备案重量要 <= 进场过磅重量 ,要有误差判定
朱兆平 authored
185
朱兆平 authored
186 187
                log4.info("[CHECK-INFO]-出场过磅重量:{}-申报装载货物重量:{}-入场过磅重量:{}-进出差值:{}-车重:{}",growssWt,goodsWt,inWt,diffVal,ve.getSelfWt());
朱兆平 authored
188
                //判断场站出场是否要重量校验,配置文件中配置的场站直接抬杆放行.
xudada authored
189
                if(FileTool.readProperties("station").equals(list.getEndstation())||FileTool.readProperties("stationsf").equals(list.getEndstation())){
xudada authored
190
                    checkResult=true;
朱兆平 authored
191 192
                //货物类型判断,直接放行的.todo:这个逻辑比较强大,后期要看怎么处理
                }else if(!"普通货物".equals(list.getCocode()) && !"转关货物".equals(list.getCocode())){
朱兆平 authored
193
                    //todo:比如货物类型为快件货物,只走重量校验,不走放行信息等校验.
194 195 196 197
                    //todo:退库货物可以关联货运系统,得到退库信息进行比对
                    //todo:查验货物走查验信息比对
                    //todo:快件暂不校验直接放行,不过得录单
                    //todo:换单货物校验逻辑待定
朱兆平 authored
198
                    logger.info("车辆装载货物为:"+list.getCocode());
xudada authored
199 200
                    checkResult=true;
                }else {
201 202 203 204 205
                    /**
                     * 因为货代老是进场后修改提货运单信息,造成申请单的进场货重与离场货重不匹配
                     * 进口提货,货物重量取进场提货的货物重量
                     */
                    goodsWt = Double.parseDouble(list.getRemark());
朱兆平 authored
206
                    // 出场校验根据业务类型
朱兆平 authored
207
                    logger.info("[进出场申请]-业务类型为:"+list.getCocode()+list.getBusinesstype());
朱兆平 authored
208
                    switch (list.getBusinesstype()){
209
                        case "出口转关":
朱兆平 authored
210 211 212 213
                        case "出口送货":
                            if (logic.weightCheckHandleService.checkExportDownLoading(growssWt, Double.parseDouble(ve.getSelfWt()), goodsWt,inWt)){
                                checkResult=true;
                            }else{
朱兆平 authored
214
                                logger.error("[出口送货]-出场重量未通过校验:"+GROWSSEXCETION);
朱兆平 authored
215 216 217 218 219 220 221 222 223
                                CommandClient.Client(info, GROWSSEXCETION);
                                return false;
                            }
                            break;
                        case "进口转关":
                        case "进口提货":
                            if (logic.weightCheckHandleService.checkImportDlv(growssWt, Double.parseDouble(ve.getSelfWt()), goodsWt,inWt)){
                                checkResult=true;
                                //检查运单放行
224
                                if (logic.resMessageService.checkManifestRelease(info,list.getMasterList())){
朱兆平 authored
225 226 227
                                    checkResult=true;
                                }else {
                                    //有运单未放行
朱兆平 authored
228
                                    logger.error("[进口提货]-出场未通过校验:"+FANGXING+list.getMasterList());
朱兆平 authored
229 230 231 232 233 234
                                    CommandClient.Client(info, FANGXING);
                                    return false;
                                }

                                //todo:装载运单历史数据累加超重判定
                            }else{
朱兆平 authored
235
                                logger.error("[进口提货]-出场重量未通过校验:"+GROWSSEXCETION);
朱兆平 authored
236 237 238 239 240
                                CommandClient.Client(info, GROWSSEXCETION);
                                return false;
                            }
                            break;
                        case "分拨业务":
朱兆平 authored
241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256
                            if (logic.weightCheckHandleService.checkAllocateOrDispatch(growssWt, Double.parseDouble(ve.getSelfWt()), goodsWt,inWt)){
                                //todo:检查分拨申请
                                boolean allocatCheck = checkNmmsAllocate(list.getMasterList());
                                if(!allocatCheck){
                                    logger.error("[分拨业务]-分拨申请舱单未通过校验:"+FENBO);
                                    CommandClient.Client(info, FENBO);
                                    return false;
                                }
                                checkResult=true;
                                //todo:分拨运抵通知,重车入场视为运抵
                            }else{
                                logger.error("[分拨业务]-出场重量未通过校验:"+GROWSSEXCETION);
                                CommandClient.Client(info, GROWSSEXCETION);
                                return false;
                            }
                            break;
朱兆平 authored
257 258 259
                        case "调拨业务":
                            if (logic.weightCheckHandleService.checkAllocateOrDispatch(growssWt, Double.parseDouble(ve.getSelfWt()), goodsWt,inWt)){
                                checkResult=true;
朱兆平 authored
260
                                //检查运单放行
261
                                if (logic.resMessageService.checkManifestRelease(info,list.getMasterList())){
朱兆平 authored
262 263 264 265 266 267 268 269
                                    checkResult=true;
                                }else {
                                    //有运单未放行
                                    logger.error("[调拨业务]-出场未通过校验:"+FANGXING+list.getMasterList());
                                    CommandClient.Client(info, FANGXING);
                                    return false;
                                }
                                //todo:检查ULD放行.
朱兆平 authored
270
                            }else{
朱兆平 authored
271
                                logger.error("[调拨业务]-出场未通过校验:"+GROWSSEXCETION);
朱兆平 authored
272 273 274 275 276 277 278 279 280 281
                                CommandClient.Client(info, GROWSSEXCETION);
                                return false;
                            }
                            break;
                        default:
                            checkResult=false;
                            break;
                    }

朱兆平 authored
282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300
                    //旧业务逻辑,不启用了
//                    check = logic.weightCheckHandleService.checkResult(growssWt, Double.parseDouble(ve.getSelfWt()), goodsWt,inWt);
//                    if("出口送货".equals(list.getBusinesstype())){
//                        if(check){
//                            checkResult=true;
//                        }else{
//                            CommandClient.Client(info, GROWSSEXCETION);
//                        }
//                    }else{
//                        //其他业务的装载运单放行判断
//                        checkMainfest = logic.checkManifest(list.getMasterList());
//                        if(checkMainfest){
//                            checkResult=check || checkMainfest;
//                        }else{
//                            CommandClient.Client(info, FANGXING);//有运单未放行
//                        }
//                    }

xudada authored
301 302 303
                }

            }
朱兆平 authored
304
305 306
            //发送抬杆指令,todo:生产环境去掉下面注释
            boolean commandResult = logic.sendBw(info, checkResult);
朱兆平 authored
307
            //fortest 正式环境删除
308
//            boolean commandResult = true;
朱兆平 authored
309
            if(commandResult){//发送抬杆儿报文
xudada authored
310
                if ("I".equals(info.getIetype())) {
朱兆平 authored
311
                    //过卡重量
xudada authored
312 313 314
                    list.setAislewt(info.getGrosswt().doubleValue());
                    list.setUpdateDate(new Date());
                    //list.setRemark(String.format("%.1f", goodsWt));
朱兆平 authored
315
                    //车辆备案重量
xudada authored
316 317
                    list.setRemark2(ve.getSelfWt());
                    list.setContrastflag("已进站");
朱兆平 authored
318
//                    logic.checkData(list);
xudada authored
319 320 321 322
                } else {
                    LandRoadVe veName = logic.veService.selectByFrameNo(vaName);
                    list.setAislewt(info.getGrosswt().doubleValue());
                    list.setUpdateDate(new Date());
朱兆平 authored
323
                    //装载货物总重量
xudada authored
324
                    list.setRemark(String.format("%.1f", goodsWt));
朱兆平 authored
325
                    //进出差值
xudada authored
326 327 328
                    list.setRemark1(String.format("%.1f", diffVal));
                    list.setRemark2(veName.getSelfWt());
                    list.setContrastflag("已出站");
朱兆平 authored
329
//                    logic.checkData(list);
xudada authored
330
                }
朱兆平 authored
331 332 333 334

                //更新进出场申请业务表
                logic.listService.updateById(list);
xudada authored
335 336
                //进出场申请业务表对应场站的卡口失效
                logic.listService.updateisvalid(list.getTrailerFrameNo(),list.getBarcode(),list.getEndstation(),list.getTurnoverflag());
朱兆平 authored
337
xudada authored
338 339 340 341
                //判断是否为最后一个场站,若是最后个场站申请为出,二维码失效
                int count=logic.listService.selectlaststation(list.getTrailerFrameNo(),list.getBarcode());
                //二维码失效
                if(count==0){
342 343 344
                    //todo:测试注释掉,二维码释放
                    logger.info("[进出场申请]-二维码释放:"+vaName);
                    buildBarCode.cancleBarCode(vaName);
xudada authored
345
                }
朱兆平 authored
346
xudada authored
347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378
                /**
                * 提前运抵判断
                * 如果有提前运抵标识,判断是否分批,不分批直接通知
                 * 分批是否最后一批,最后一批通知
                * */
                if("I".equals(info.getIetype())){
                    try{
                        List<LAND_BUSINEESTYPE_LIST_INFO> arrive_infos=logic.busnesslistinfoService.selectarrvie(info.getBarcode());//查询是否提前运抵
                        if(arrive_infos!=null && arrive_infos.size()>0){
                            for (LAND_BUSINEESTYPE_LIST_INFO businees:arrive_infos) {
                                //判断运单是否分批
                                if ("0".equals(businees.getPartialidentity())){
                                    logger.info("运单号{}不分批,不从通知数组删除");
                                }else { //分批后的处理
                                    List<businesstypelistinfo_view> info_view=logic.busnessViewService.selectawb(businees.getAwba());
                                    // 装载运单的分批车辆还有未入场的,从通知数组中删除他
                                    if (info_view.size()>0){
                                        arrive_infos.remove(businees);
                                    }
                                }
                            }
                            //最后发送通知数组
                            try{
                                new LiftBar().sendMessage(info.getVename(),arrive_infos);
                            }catch (Exception e){
                               logger.info("新舱单发送消息异常---"+e.toString());
                            }
                        }
                    }catch (Exception e){
                        logger.info("运单分批消息异常---"+e.toString());
                    }
                }
xudada authored
379 380 381 382 383
                //调拨货冻结
                if (list.getBusinesstype().indexOf("业务") > 0) {
                    logic.inOrUpEnterCancel(list);
                }
            }
朱兆平 authored
384 385

            //绑定车单关系,生成车单关系报文
xudada authored
386 387 388 389 390 391 392 393 394
            if(list.getMasterList().length()>0){
                boolean flag = VeManifestRelation.createFile(list);
                if(flag){
                    logger.info(">>>>>>>>>>-----车单关系报文生成成功-----<<<<<<<<<<<<");
                }
            }

        } else {
            logger.error("------->>>>>>>二维码数据异常,请使用正确的二维码数据<<<<<<<-----");
朱兆平 authored
395 396
            sendError(info);
            return false;
xudada authored
397 398 399
        }
        return true;
    }
朱兆平 authored
400 401

xudada authored
402
    /**
朱兆平 authored
403 404 405
     * 校验重量后并发送抬杆指令报文
     * @param info 车辆过卡信息
     * @param check 是否放行抬杆
xudada authored
406 407 408 409 410 411 412 413 414 415 416 417 418 419
     */
    public boolean sendBw(GatherInfo info, boolean check) {
        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, GROWSSEXCETION);
            logger.info("=============>>>>>>>>重量异常报文发送成功<<<<<<<<<==============");
        }
        return flag;
    }
朱兆平 authored
420
xudada authored
421 422 423
    /**
     * 给码头发送卡口数据
     *
朱兆平 authored
424 425 426
     * @param stationCode 场站编号
     * @param carNo       车牌
     * @param IEtype      进出
xudada authored
427 428
     */
    public static void sendData(String stationCode, String carNo, boolean IEtype) {
429
        String url = logic.wharfHost+"air-api/car/channelCar?stationCode=" + stationCode + "&carNo=" + carNo + "&isPickup=" + IEtype;
xudada authored
430 431 432 433 434 435 436 437 438 439 440 441
        try {
            HttpClient httpClient = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(url);
            HttpResponse httpResponse = httpClient.execute(httpGet);
            HttpEntity entity = httpResponse.getEntity();
            String entityStr = EntityUtils.toString(entity);
            logger.info("------------>>>>>>>>>>>>>>发送车辆信息:{stationCode:" + stationCode + ",carNo:" + carNo + ",isPickup:" + IEtype + "}");
            logger.info("------------>>>>>>>>>>>>>>响应返回内容:" + entityStr + "<<<<<<<<<<<<-----------");
        } catch (Exception e) {
            logger.info(e.toString());
        }
    }
朱兆平 authored
442
xudada authored
443 444 445
    /**
     * 给码头发送卡口数据
     *
朱兆平 authored
446
     * @param list 进出场申请数据
xudada authored
447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464
     */
    public void checkData(LandBusinessTypeList list) {
        String sationCode = null;
        boolean flag = false;
        if ("出口送货".equals(list.getBusinesstype()) || "出口流转".equals(list.getBusinesstype())) {
            flag = false;
        }
        if ("进口提货".equals(list.getBusinesstype()) || "进口流转".equals(list.getBusinesstype())) {
            flag = true;
        }
        if ("4604000000".equals(list.getEndstation())) {
            if ("I".equals(list.getTurnoverflag())) {
                sationCode = "HK05";
            } else {
                sationCode = "HK06";
            }
            //TODO:加场站判定
        }
xudada authored
465 466 467 468 469
        try{
            sendData(sationCode, list.getTrailerFrameNo(), flag);
        }catch (Exception e){
            logger.info("码头发送消息异常---"+e.toString());
        }
xudada authored
470
    }
朱兆平 authored
471 472

xudada authored
473 474 475
    /**
     * 查询运单是否全部放行
     *
朱兆平 authored
476
     * @param manifestList 运单号数组
xudada authored
477 478 479
     * @return
     */
    public boolean checkManifest(String manifestList) {
朱兆平 authored
480 481 482
        if (manifestList.length() < 1) {
            return false;
        }
xudada authored
483
        manifestList = manifestList.replace("-", "");
朱兆平 authored
484 485
        //中文逗号替换
        manifestList = manifestList.replace(",", ",");
xudada authored
486 487 488 489 490 491 492 493
        String[] maifest = manifestList.split(",");
        boolean flag = false;
        int count = 0;
        for (int i = 0; i < maifest.length; i++) {
            RESMESSAGE resmessage = logic.resMessageService.selectByManifest(maifest[i]);
            if (resmessage != null) {
                if ("11".equals(resmessage.getResponsecode())) {
                    count++;
朱兆平 authored
494 495
                }else {
                    logger.error("车辆装载运单未有放行信息---" + maifest[i]);
xudada authored
496
                }
朱兆平 authored
497 498 499

            }else {
                logger.error("车辆装载运单未有放行信息---" + maifest[i]);
xudada authored
500
            }
朱兆平 authored
501
xudada authored
502 503 504 505 506 507
        }
        if (count == maifest.length) {
            flag = true;
        }
        return flag;
    }
朱兆平 authored
508 509

xudada authored
510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546



    /**
     * 排除当前系统问题发送错误commandInfo
     */
    public static void sendError(GatherInfo info) {
        //二维码数据异常,请使用正确的二维码数据
        CommandClient.Client(info, ISVALID);
    }

    /**
     * @Param mainifast 主单列表
     * @Param ietype 进出标志
     * 获取货物总重
     */
    public double GoodsWt(String mainifast, String ietype) {
        Double sum = 0.0;
        if (mainifast.length() > 0) {
            String[] mainifastList = mainifast.split(",");
            for (String mainBill : mainifastList) {
                sum += getGrossWt(mainBill, ietype);
            }
        }
        return sum;
    }

    /**
     * @Param waybill 主单号
     * @Param imp 进出港标识
     * @Result 获取运单重量
     */
    public double getGrossWt(String waybill, String imp) {
        logger.info("进入获取重量action");
        if (!(waybill.indexOf("-") != -1)) {
            waybill = waybill.substring(0, 3) + "-" + waybill.substring(3);
        }
547 548 549
        //todo:生产环境用下面这个
        String url = logic.nmmsHost+"orig/orig?waybill=" + waybill + "&imp=" + imp;
//          String url = "http://tjfx.15miaoo.com:8003/tj/orig/orig?waybill=" + waybill + "&imp=" + imp;
xudada authored
550 551 552 553 554 555
        StringBuilder json = new StringBuilder();
        Map map = null;
        double bg = 0;
        try {
            URL Url = new URL(url);
            URLConnection yc = Url.openConnection();
朱兆平 authored
556 557 558
            //设置接口超时
            yc.setReadTimeout(5000);
            yc.setConnectTimeout(3000);
xudada authored
559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583
            BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream(), "utf-8"));
            String inputLine = null;
            while ((inputLine = in.readLine()) != null) {
                json.append(inputLine);
            }
            logger.info("返回数据:" + json);
            JSONArray array = JSONArray.parseArray(json.toString());
            for (int i = 0; i < array.size(); i++) {
                map = JSON.parseObject(array.getString(i));
                if (map.containsKey("receiptinformation")) {
                    if (map.get("receiptinformation").toString().startsWith("41301") || map.get("receiptinformation")
                            .toString().startsWith("41106") || map.get("receiptinformation")
                            .toString().startsWith("31301") || map.get("receiptinformation")
                            .toString().startsWith("31106") || map.get("receiptinformation")
                            .toString().indexOf("提运单放行") != -1) {
                        logger.info(map);
                        bg = Double.parseDouble((String) map.get("totalweight"));
                        logger.info("for循环取重量:" + bg);
                        return bg;
                    }
                }
            }
            logger.info("访问返回的数据重量:" + bg);
            in.close();
        } catch (MalformedURLException e) {
xudada authored
584
            logger.info("运单放行消息异常---"+e.toString());
xudada authored
585 586 587 588 589 590 591 592
            logger.error(e);
        } catch (IOException e) {
            e.printStackTrace();
            logger.error(e);
        }
        return bg;
    }
朱兆平 authored
593 594

xudada authored
595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645
    /**
     * 生成或者更新货物冻结标识
     *
     * @param landBusinessTypeList
     */
    public void inOrUpEnterCancel(LandBusinessTypeList landBusinessTypeList) {
        if (landBusinessTypeList.getMasterList().length() < 1) return;
        String[] list = landBusinessTypeList.getMasterList().split(",");
        String flag = null;
        for (int i = 0; i < list.length; i++) {
            if("调拨业务".equals(landBusinessTypeList.getBusinesstype())){
                flag = "E";
            }else {
                flag = "I";
            }
            double wt = getGrossWt(list[i],flag);

            ENTERCANCCEL entercanccel = logic.enterCancelServer.selectByManifest(list[i]);
            if (entercanccel != null) {
                if(entercanccel.getVename().equals(landBusinessTypeList.getTrailerFrameNo())){
                    if ("0".equals(entercanccel.getIsfreeze())) {
                        entercanccel.setIsfreeze("1");
                        entercanccel.setEndport(landBusinessTypeList.getEndstation());
                        entercanccel.setUpdateBy(landBusinessTypeList.getCreateBy());
                        entercanccel.setUpdateTime(new Date());
                        logic.enterCancelServer.updateByPermaryKey(entercanccel);
                    }
                }
            }else {
                if("E".equals(landBusinessTypeList.getTurnoverflag())){
                    ENTERCANCCEL canccel = new ENTERCANCCEL();
                    canccel.setIsfreeze("0");
                    canccel.setVename(landBusinessTypeList.getTrailerFrameNo());
                    canccel.setId(String.valueOf(System.currentTimeMillis()));
                    canccel.setVeCompanyName(landBusinessTypeList.getAgentno());
                    canccel.setBusinesstype(landBusinessTypeList.getBusinesstype());
                    canccel.setManifest(list[i]);
                    canccel.setAgentname(landBusinessTypeList.getAgentname());
                    canccel.setStartport(landBusinessTypeList.getEndstation());
                    canccel.setGrosswt(landBusinessTypeList.getAislewt());
                    canccel.setCreateBy(landBusinessTypeList.getCreateBy());
                    canccel.setCreateTime(new Date());
                    canccel.setUpdateBy(landBusinessTypeList.getCreateBy());
                    canccel.setUpdateTime(new Date());
                    canccel.setWeight(wt);
                    logic.enterCancelServer.insertEntry(canccel);
                }

            }
        }
    }
朱兆平 authored
646
xudada authored
647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663
    /**
     * 为提前运抵服务发送数据
     *
     * @param
     * @param
     * @return
     */
    @Async("asyncPoolTaskExecutor")
    public void sendMessage(String vname, List<LAND_BUSINEESTYPE_LIST_INFO> list_infos)throws InterruptedException{
        logger.info("新舱单发送服务开始");
        AdvanceArrive arrive=new AdvanceArrive();
        arrive.setVname(vname);
        arrive.setMasterList(list_infos);
        logger.info("新舱单发送服务数据",arrive);
        Map<String,Object> map=logic.feignService.sendMessage(arrive);
        logger.info(""+map);
    }
朱兆平 authored
664 665 666 667 668 669 670 671

    /**
     * 新舱单分拨申请数据查询
     * @param waybill 查询的运单号
     * @return
     */
    public Map nmmsAllocate(@NotNull String waybill){
        logger.info("新舱单查询分拨申请数据开始");
672 673
        Feign_Allocate_Search feignAllocateSearch = new Feign_Allocate_Search(waybill,0,10);
        Map map = logic.nmmsService.getAllocate(feignAllocateSearch);
朱兆平 authored
674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716
        logger.info(""+map);
        return map;
    }

    public 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")){
                            log4.info("运单:{},分拨回执查询结果:{}",awb,awbinfo.getString("RECEIPTINFORMATION"));
                        }else {
                            log4.info("运单{}分拨申请回执不正常:{}",awb,awbinfo.getString("RECEIPTINFORMATION"));
                            return false;
                        }
                    }
                }else {
                    log4.info("运单:{}分拨申请回执未查询到,或未进行分拨申请",awb);
                    return false;
                }
            }else{
                log4.info("运单:{}分拨申请回执未查询到,或未进行分拨申请",awb);
                return false;
            }

        }
        return true;
    }
xudada authored
717 718
}