作者 朱兆平

国内转运验放脚本

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