作者 朱兆平

国内转运验放脚本

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);
}
};
}
}
}
... ...
import java.text.DecimalFormat;
public class WeightTest {
public static void main(String[] args) {
DecimalFormat df = new DecimalFormat("0.00");
double grossWt = 9060;
double inWt = 8330;
double goodsWt = 805;
grossWt = Double.parseDouble(String.format("%.1f", grossWt));
Double goodCheckResult = Double.parseDouble(df.format(Math.abs((grossWt-inWt-goodsWt)) / goodsWt));
Double goodCheckResult1 = Double.parseDouble(df.format(Math.abs((grossWt-inWt-goodsWt)) / goodsWt));
System.out.println("goodCheckResult = " + goodCheckResult);
System.out.println("goodCheckResult1 = " + goodCheckResult1);
}
}
... ...
... ... @@ -25,7 +25,7 @@ public class Base64Test {
@Test
public void base64Decode(){
String testcode = "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEdBVEhFUl9JTkZPIHhtbG5zPSJodHRwOi8vcnBiLmN1c3RvbXMuZ292LmNuL2NvbW1vbi9Gcm9udEVuZFNjaGVtYXMvIgogICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3JwYi5jdXN0b21zLmdvdi5jbi9jb21tb24vRnJvbnRFbmRTY2hlbWFzLyI+CiAgICA8SV9FX0ZMQUc+RTwvSV9FX0ZMQUc+CiAgICA8QVJFQV9JRD40NjA0NjAwMDAwPC9BUkVBX0lEPgogICAgPENITkxfTk8+NDYwNDYwMDAyMDwvQ0hOTF9OTz4KICAgIDxHRVRIRVJfTU9ERT5BPC9HRVRIRVJfTU9ERT4KICAgIDxTRVNTSU9OX0lEPjIwMjMwODIzMTIxMzE3Mjg3MDAzPC9TRVNTSU9OX0lEPgogICAgPElDX0lORk8+CiAgICAgICA8SUNfSUQ+PC9JQ19JRD4KICAgICAgICA8SUNfTk8+PC9JQ19OTz4KICAgICAgICA8SUNfVFlQRT48L0lDX1RZUEU+CiAgICAgICAgPElDX0VYVEVOREVEX0NPTlRFTlQ+PC9JQ19FWFRFTkRFRF9DT05URU5UPgogICAgPC9JQ19JTkZPPgogICAgPEZPUk1fSU5GTz4KICAgICAgICA8Rk9STV9UWVBFPjwvRk9STV9UWVBFPgogICAgICAgIDxGT1JNX0lEPjwvRk9STV9JRD4KICAgIDwvRk9STV9JTkZPPgogICAgPFZFX0xJQ0VOU0VfTk8+6LGrQTI5NThHPC9WRV9MSUNFTlNFX05PPgogICAgPEdST1NTX1dUPjg3MDA8L0dST1NTX1dUPgogICAgPFZFX1JGSUQ+CiAgICAgICAgPFJGSURfSUQ+RTAwNDAwMDBEQzVDMzIwODwvUkZJRF9JRD4KICAgICAgICA8VkVfTElDRU5TRV9OTz7osatBMjk1OEc8L1ZFX0xJQ0VOU0VfTk8+CiAgICAgICAgPFZFX0NVU1RPTVNfTk8+PC9WRV9DVVNUT01TX05PPgogICAgICAgIDxWRV9XVD43NzAwPC9WRV9XVD4KICAgICAgICA8VkVfQ09NUEFOWT48L1ZFX0NPTVBBTlk+CiAgICAgICAgPFZFX1BFUkZPUk1BTkNFPjE8L1ZFX1BFUkZPUk1BTkNFPgogICAgPC9WRV9SRklEPgogICAgPE9QRVJBVEVfVElNRT4yMDIzLTA4LTIzIDEyOjEzOjI1PC9PUEVSQVRFX1RJTUU+CjwvR0FUSEVSX0lORk8+Cg==";
String testcode = "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEdBVEhFUl9JTkZPIHhtbG5zPSJodHRwOi8vcnBiLmN1c3RvbXMuZ292LmNuL2NvbW1vbi9Gcm9udEVuZFNjaGVtYXMvIgogICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3JwYi5jdXN0b21zLmdvdi5jbi9jb21tb24vRnJvbnRFbmRTY2hlbWFzLyI+CiAgICA8SV9FX0ZMQUc+RTwvSV9FX0ZMQUc+CiAgICA8QVJFQV9JRD40NjA0NjAwMDAwPC9BUkVBX0lEPgogICAgPENITkxfTk8+NDYwNDYwMDAyMDwvQ0hOTF9OTz4KICAgIDxHRVRIRVJfTU9ERT5BPC9HRVRIRVJfTU9ERT4KICAgIDxTRVNTSU9OX0lEPjIwMjIwNjMwMTg0NDQxMDAwMDI4PC9TRVNTSU9OX0lEPgogICAgPElDX0lORk8+CiAgICAgICA8SUNfSUQ+PC9JQ19JRD4KICAgICAgICA8SUNfTk8+PC9JQ19OTz4KICAgICAgICA8SUNfVFlQRT48L0lDX1RZUEU+CiAgICAgICAgPElDX0VYVEVOREVEX0NPTlRFTlQ+PC9JQ19FWFRFTkRFRF9DT05URU5UPgogICAgPC9JQ19JTkZPPgogICAgPEZPUk1fSU5GTz4KICAgICAgICA8Rk9STV9UWVBFPjwvRk9STV9UWVBFPgogICAgICAgIDxGT1JNX0lEPjwvRk9STV9JRD4KICAgIDwvRk9STV9JTkZPPgogICAgPFZFX0xJQ0VOU0VfTk8+6LGrQTYxQ1I3PC9WRV9MSUNFTlNFX05PPgogICAgPEdST1NTX1dUPjIwNTU8L0dST1NTX1dUPgogICAgPFZFX1JGSUQ+CiAgICAgICAgPFJGSURfSUQ+QjEyMzMyMTEzPC9SRklEX0lEPgogICAgICAgIDxWRV9MSUNFTlNFX05PPuixq0E2MUNSNzwvVkVfTElDRU5TRV9OTz4KICAgICAgICA8VkVfQ1VTVE9NU19OTz48L1ZFX0NVU1RPTVNfTk8+CiAgICAgICAgPFZFX1dUPjIwMDA8L1ZFX1dUPgogICAgICAgIDxWRV9DT01QQU5ZPjwvVkVfQ09NUEFOWT4KICAgICAgICA8VkVfUEVSRk9STUFOQ0U+MTwvVkVfUEVSRk9STUFOQ0U+CiAgICA8L1ZFX1JGSUQ+CiAgICA8T1BFUkFURV9USU1FPjIwMjMtMDgtMjMgMTE6MjM6MTM8L09QRVJBVEVfVElNRT4KPC9HQVRIRVJfSU5GTz4K";
byte[] base64decodedBytes = Base64.getDecoder().decode(testcode);
try {
System.out.println("解密后的信息为:"+new String(base64decodedBytes, "utf-8"));
... ...
... ... @@ -220,4 +220,14 @@ public class EnginTest {
log.error("脚本验放测试失败");
}
}
@Test
public void enginTranseTest(){
// 构建参数
ExecuteParams executeParams = new ExecuteParams();
// 执行脚本中指定的方法 changeProduct
EngineExecutorResult executorResult = engineExecutor.execute(
"check", new ScriptQuery("bill-trans-check"), executeParams);
log.info("使用groovy脚本来验证过卡判定放行结果=========>>>>>>>>>>>执行结果:{}", executorResult);
}
}
... ...