BillDomTransportCheck.groovy 6.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.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 {
            String cookieUserName = "admin"
            String cookieUserId  = "1903e605-a2e1-404d-a1a6-a749752fb030"
            String ServiceAdr = "http://192.168.1.63: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()){
                //数组过滤,只要单证,不要其他 板箱之类
                List<LAND_BUSINEESTYPE_LIST_INFO> list_infos = listinfos.stream().filter({ listInfo ->
                    if ("B".equals(listInfo.getExt4())) {
                        return true;
                    } else {
                        return false;
                    }
                }).collect(Collectors.toList());

                list_infos.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);

                    // 调用第三方接口
                    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){
//                                    return true
                                    }else{
                                        sb.append("转运单证[").append(bill.getAwba()).append("]核验失败,未审核通过")
                                        gatherInfoHandle.sendBw(gatherInfo,false,sb.toString(),landBusinessTypeList,listinfos);
                                        return false
                                    }
                                })
                            }
                        }
                    }else{
                        logger.info("[TRANS-CHECK-FAILD]-转运单证{}核验失败",bill.getAwba())
                        sb.append("转运单证[").append(bill.getAwba()).append("]核验失败,API-FAILD")
                        gatherInfoHandle.sendBw(gatherInfo,false,sb.toString(),landBusinessTypeList,listinfos);
                        return false;
                    }
                })
                //这里返回验放成功,验放失败从上面返回
                return true;
            }else{
                return false;
            }

        } 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;
    }

    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);
                }
            };
        }
    }
}