BillDomTransportCheck.groovy 8.7 KB
package com.sy.groovy

import com.alibaba.fastjson.JSON
import com.alibaba.fastjson.JSONArray
import com.alibaba.fastjson.JSONObject
import com.sy.model.GatherInfo
import com.sy.model.LAND_BUSINEESTYPE_LIST_INFO
import com.sy.model.LandBusinessTypeList
import com.sy.response.ResultJson
import com.sy.service.EnginCheckService
import com.sy.service.impl.GatherInfoHandle;
import feign.Feign
import feign.Headers
import feign.Param;
import feign.Request
import feign.RequestLine;
import feign.hystrix.FallbackFactory;
import groovy.lang.Script;
import org.basis.enhance.groovy.entity.ExecuteParams;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory
import org.springframework.context.ApplicationContext

import java.util.stream.Collectors;

/**
 * 单证验放
 * 放行验放
 */
class BillDomTransportCheck extends Script implements ChannelCheckScript {

    private final Logger logger = LoggerFactory.getLogger(getClass());

    @Override
    Boolean check(ExecuteParams executeParams) {
        try {
            Boolean checkFlag = true;
            String cookieUserName = "admin"
            String cookieUserId  = "1903e605-a2e1-404d-a1a6-a749752fb030"
            String ServiceAdr = "http://10.50.3.61:10001"

            GatherInfo gatherInfo = (GatherInfo) executeParams.get("GatherInfo");
            LandBusinessTypeList landBusinessTypeList = (LandBusinessTypeList) executeParams.get("ChanelFormInfo");
            List<LAND_BUSINEESTYPE_LIST_INFO> listinfos = (List<LAND_BUSINEESTYPE_LIST_INFO>) executeParams.get("ChanelFormBillLists");

            // 调用方法
            ApplicationContext context = getContext();
            // 获取容器中的bean
            GatherInfoHandle gatherInfoHandle = context.getBean(GatherInfoHandle.class);

            if (listinfos!=null && !listinfos.isEmpty()){
                //数组过滤,只要单证,不要其他 板箱之类
                listinfos = listinfos.stream().filter({ listInfo ->
                    if ("B".equals(listInfo.getExt4())) {
                        return true;
                    } else {
                        return false;
                    }
                }).collect(Collectors.toList());

                listinfos.forEach({bill->
                    // 创建 Feign Client
                    //https://nmms.zzcargo.com:8443/api/wlpt-nmms-manage/trans/dom?originFlightno=&originFlightdate=&originFlightdateEnd=&originMasterwaybill=ML66158691&agentName=&transType=dom&pageNum=1&pageSize=10
                    MyFeignClient myFeignClient = createFeignClient(MyFeignClient, ServiceAdr,cookieUserName,cookieUserId);
                    logger.info("[TRANS-CHECK-BILL]-{}",bill.getAwba())
                    // 调用第三方接口
                    String response = myFeignClient.callThirdPartyApi(bill.getAwba(),cookieUserName,cookieUserId);
                    logger.info("[TRANS-API-RESPONSE]-{}",response)

                    // 处理响应结果...
                    //返回的ResultJson实体类
                    JSONObject jo = JSONObject.parseObject(response);
                    StringBuilder sb = new StringBuilder("");
                    if ("200".equals(jo.getString("code"))){
                        //获取返回列表 data->list
                        JSONObject rData = jo.getJSONObject("data")
                        if (rData!=null){
                            JSONArray rList = rData.getJSONArray("list")
                            if (rList!=null && !rList.isEmpty()){
                                rList.forEach({ item ->
                                    JSONObject jsonObject = (JSONObject) item;
                                    Integer status = jsonObject.getInteger("status")
                                    String oBill = jsonObject.getString("originMasterwaybill")
                                    logger.info("[TRANS-API-RESPONSE]-单证:{},状态:{}",oBill,status)

                                    if (status>0){
                                        sb.append("转运单证[").append(bill.getAwba()).append("]核验通过")
                                        logger.info("[TRANS-CHECK-SUCCESS]-单证:{},状态:{},转运业务验放通过",oBill,status)
                                    }else{
                                        logger.info("[TRANS-CHECK-FAILD]-转运单证{}核验失败,未审核通过",bill.getAwba())
                                        sb.append("转运单证[").append(bill.getAwba()).append("]核验失败,未审核通过")
                                        gatherInfoHandle.sendBw(gatherInfo,false,sb.toString(),landBusinessTypeList,listinfos);
                                        return checkFlag = false;
                                    }
                                })
                            }else{
                                logger.info("[TRANS-CHECK-FAILD]-转运单证{}核验失败,未找到申请数据",bill.getAwba())
                                sb.append("转运单证[").append(bill.getAwba()).append("]核验失败,未找到申请数据")
                                gatherInfoHandle.sendBw(gatherInfo,false,sb.toString(),landBusinessTypeList,listinfos);
                                return checkFlag = false;
                            }
                        }else {
                            logger.info("[TRANS-CHECK-FAILD]-转运单证{}核验失败,API未查询到转运申请数据",bill.getAwba())
                            sb.append("转运单证[").append(bill.getAwba()).append("]核验失败,API未查询到转运申请数据")
                            gatherInfoHandle.sendBw(gatherInfo,false,sb.toString(),landBusinessTypeList,listinfos);
                            return checkFlag = false;
                        }
                    }else{
                        logger.info("[TRANS-CHECK-FAILD]-转运单证{}核验失败,API-FAILD",bill.getAwba())
                        sb.append("转运单证[").append(bill.getAwba()).append("]核验失败,API-FAILD")
                        gatherInfoHandle.sendBw(gatherInfo,false,sb.toString(),landBusinessTypeList,listinfos);
                        return checkFlag = false;
                    }
                })
            }else{
                gatherInfoHandle.sendBw(gatherInfo,false,"缺少申请单证信息",landBusinessTypeList,listinfos);
                return checkFlag = false;
            };
            if (checkFlag){
                commandLog(gatherInfo,true,"转运业务单证核放成功",executeParams)
            };
            return checkFlag;

        } catch (Exception e) {
            e.printStackTrace();
            logger.error("[CACHE-PARSE-ERROR]:", e);
            return false;
        }
    }

    @Override
    Object run() {
        return false;
    }

    // 获取spring容器
    ApplicationContext getContext() {
        // 获取spring IOC容器
        ApplicationContext context = applicationContext;
        return context;
    }

    void commandLog(GatherInfo gatherInfo,boolean check,String reason,ExecuteParams executeParams){
        // 调用方法
        ApplicationContext context = getContext();
        // 获取容器中的bean
        EnginCheckService enginCheckService = context.getBean(EnginCheckService.class);
        enginCheckService.commandlog(gatherInfo,check,reason,executeParams)
    }

    private <T> T createFeignClient(Class<T> clientClass, String url,String username, String userid) {
        return Feign.builder()
                .options(new Request.Options(5000, 5000))
                .requestInterceptor({ requestTemplate ->
                    String cookieValue = "username=" + username + "; userid=" + userid;
                    requestTemplate.header("Cookie", cookieValue);
                })
                .target(clientClass, url);
    }


    interface MyFeignClient {
        @RequestLine("GET /trans/dom?originMasterwaybill={originMasterwaybill}")
        @Headers("Cookie: username={username}; userid={userid}")
        String callThirdPartyApi(@Param("originMasterwaybill") String originMasterwaybill,
                                 @Param("username") String username,
                                 @Param("userid") String userid);

    }

    class MyFallbackFactory implements FallbackFactory<MyFeignClient> {
        @Override
        public MyFeignClient create(Throwable throwable) {
            return new MyFeignClient() {
                @Override
                public String callThirdPartyApi(String originMasterwaybill,String username,String userid) {
                    // 处理 fallback 逻辑...
                    ResultJson resultJson = new ResultJson("400","访问接口出错");
                    return  JSON.toJSONString(resultJson);
                }
            };
        }
    }
}