Browse Source

华翰同步提单号接口

liyuan 8 months ago
parent
commit
bfc63ed68a

+ 11 - 1
blade-common/src/main/java/org/springblade/common/enums/CommonEnum.java

@@ -25,7 +25,17 @@ public enum CommonEnum {
 	/**
 	 * 是否零库存
 	 */
-	WHETHER_ZERO_INVENTORY("whether.zero.inventory");
+	WHETHER_ZERO_INVENTORY("whether.zero.inventory"),
+
+	/**
+	 * 首月比例
+	 */
+	FIRST_MONTH_PROPORTION("first.month.proportion"),
+
+	/**
+	 * 是否同步提单号
+	 */
+	OPEN_ZR_TRANSMIT("open.zr.transmit");
 
 	CommonEnum(String info){
 		this.info = info;

+ 237 - 225
blade-common/src/main/java/org/springblade/common/http/HttpUtils.java

@@ -1,7 +1,28 @@
 package org.springblade.common.http;
 
+import org.apache.http.HttpEntity;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.conn.ssl.NoopHostnameVerifier;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.mime.HttpMultipartMode;
+import org.apache.http.entity.mime.MultipartEntityBuilder;
+import org.apache.http.entity.mime.content.StringBody;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.ssl.SSLContextBuilder;
+import org.apache.http.ssl.TrustStrategy;
+import org.apache.http.util.EntityUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springblade.common.constant.Constants;
+import org.springframework.util.CollectionUtils;
 
 import javax.net.ssl.*;
 import java.io.*;
@@ -9,245 +30,236 @@ import java.net.ConnectException;
 import java.net.SocketTimeoutException;
 import java.net.URL;
 import java.net.URLConnection;
+import java.nio.charset.StandardCharsets;
+import java.security.cert.CertificateException;
 import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
 
 /**
  * 通用http发送方法
  *
  * @author ruoyi
  */
-public class HttpUtils
-{
-    private static final Logger log = LoggerFactory.getLogger(HttpUtils.class);
+public class HttpUtils {
+	private static final Logger log = LoggerFactory.getLogger(HttpUtils.class);
 
-    /**
-     * 向指定 URL 发送GET方法的请求
-     *
-     * @param url 发送请求的 URL
-     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
-     * @return 所代表远程资源的响应结果
-     */
-    public static String sendGet(String url, String param)
-    {
-        return sendGet(url, param, "UTF-8");
-    }
+	/**
+	 * 向指定 URL 发送GET方法的请求
+	 *
+	 * @param url   发送请求的 URL
+	 * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+	 * @return 所代表远程资源的响应结果
+	 */
+	public static String sendGet(String url, String param) {
+		return sendGet(url, param, "UTF-8");
+	}
 
-    /**
-     * 向指定 URL 发送GET方法的请求
-     *
-     * @param url 发送请求的 URL
-     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
-     * @param contentType 编码类型
-     * @return 所代表远程资源的响应结果
-     */
-    public static String sendGet(String url, String param, String contentType)
-    {
-        StringBuilder result = new StringBuilder();
-        BufferedReader in = null;
-        try
-        {
-            String urlNameString = url + "?" + param;
-            log.info("sendGet - {}", urlNameString);
-            URL realUrl = new URL(urlNameString);
-            URLConnection connection = realUrl.openConnection();
-            connection.setRequestProperty("accept", "*/*");
-            connection.setRequestProperty("connection", "Keep-Alive");
-            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
-            connection.connect();
-            in = new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType));
-            String line;
-            while ((line = in.readLine()) != null)
-            {
-                result.append(line);
-            }
-            log.info("recv - {}", result);
-        }
-        catch (ConnectException e)
-        {
-            log.error("调用HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e);
-        }
-        catch (SocketTimeoutException e)
-        {
-            log.error("调用HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e);
-        }
-        catch (IOException e)
-        {
-            log.error("调用HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e);
-        }
-        catch (Exception e)
-        {
-            log.error("调用HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e);
-        }
-        finally
-        {
-            try
-            {
-                if (in != null)
-                {
-                    in.close();
-                }
-            }
-            catch (Exception ex)
-            {
-                log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
-            }
-        }
-        return result.toString();
-    }
+	/**
+	 * 向指定 URL 发送GET方法的请求
+	 *
+	 * @param url         发送请求的 URL
+	 * @param param       请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+	 * @param contentType 编码类型
+	 * @return 所代表远程资源的响应结果
+	 */
+	public static String sendGet(String url, String param, String contentType) {
+		StringBuilder result = new StringBuilder();
+		BufferedReader in = null;
+		try {
+			String urlNameString = url + "?" + param;
+			log.info("sendGet - {}", urlNameString);
+			URL realUrl = new URL(urlNameString);
+			URLConnection connection = realUrl.openConnection();
+			connection.setRequestProperty("accept", "*/*");
+			connection.setRequestProperty("connection", "Keep-Alive");
+			connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+			connection.connect();
+			in = new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType));
+			String line;
+			while ((line = in.readLine()) != null) {
+				result.append(line);
+			}
+			log.info("recv - {}", result);
+		} catch (ConnectException e) {
+			log.error("调用HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e);
+		} catch (SocketTimeoutException e) {
+			log.error("调用HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e);
+		} catch (IOException e) {
+			log.error("调用HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e);
+		} catch (Exception e) {
+			log.error("调用HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e);
+		} finally {
+			try {
+				if (in != null) {
+					in.close();
+				}
+			} catch (Exception ex) {
+				log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
+			}
+		}
+		return result.toString();
+	}
 
-    /**
-     * 向指定 URL 发送POST方法的请求
-     *
-     * @param url 发送请求的 URL
-     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
-     * @return 所代表远程资源的响应结果
-     */
-    public static String sendPost(String url, String param)
-    {
-        PrintWriter out = null;
-        BufferedReader in = null;
-        StringBuilder result = new StringBuilder();
-        try
-        {
-            String urlNameString = url;
-            log.info("sendPost - {}", urlNameString);
-            URL realUrl = new URL(urlNameString);
-            URLConnection conn = realUrl.openConnection();
-            conn.setRequestProperty("accept", "*/*");
-            conn.setRequestProperty("connection", "Keep-Alive");
-            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
-            conn.setRequestProperty("Accept-Charset", "utf-8");
-            conn.setRequestProperty("contentType", "utf-8");
-            conn.setDoOutput(true);
-            conn.setDoInput(true);
-            out = new PrintWriter(conn.getOutputStream());
-            out.print(param);
-            out.flush();
-            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
-            String line;
-            while ((line = in.readLine()) != null)
-            {
-                result.append(line);
-            }
-            log.info("recv - {}", result);
-        }
-        catch (ConnectException e)
-        {
-            log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
-        }
-        catch (SocketTimeoutException e)
-        {
-            log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);
-        }
-        catch (IOException e)
-        {
-            log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);
-        }
-        catch (Exception e)
-        {
-            log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);
-        }
-        finally
-        {
-            try
-            {
-                if (out != null)
-                {
-                    out.close();
-                }
-                if (in != null)
-                {
-                    in.close();
-                }
-            }
-            catch (IOException ex)
-            {
-                log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
-            }
-        }
-        return result.toString();
-    }
+	/**
+	 * 向指定 URL 发送POST方法的请求
+	 *
+	 * @param url   发送请求的 URL
+	 * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+	 * @return 所代表远程资源的响应结果
+	 */
+	public static String sendPost(String url, String param) {
+		PrintWriter out = null;
+		BufferedReader in = null;
+		StringBuilder result = new StringBuilder();
+		try {
+			String urlNameString = url;
+			log.info("sendPost - {}", urlNameString);
+			URL realUrl = new URL(urlNameString);
+			URLConnection conn = realUrl.openConnection();
+			conn.setRequestProperty("accept", "*/*");
+			conn.setRequestProperty("connection", "Keep-Alive");
+			conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+			conn.setRequestProperty("Accept-Charset", "utf-8");
+			conn.setRequestProperty("contentType", "utf-8");
+			conn.setDoOutput(true);
+			conn.setDoInput(true);
+			out = new PrintWriter(conn.getOutputStream());
+			out.print(param);
+			out.flush();
+			in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
+			String line;
+			while ((line = in.readLine()) != null) {
+				result.append(line);
+			}
+			log.info("recv - {}", result);
+		} catch (ConnectException e) {
+			log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
+		} catch (SocketTimeoutException e) {
+			log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);
+		} catch (IOException e) {
+			log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);
+		} catch (Exception e) {
+			log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);
+		} finally {
+			try {
+				if (out != null) {
+					out.close();
+				}
+				if (in != null) {
+					in.close();
+				}
+			} catch (IOException ex) {
+				log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
+			}
+		}
+		return result.toString();
+	}
 
-    public static String sendSSLPost(String url, String param)
-    {
-        StringBuilder result = new StringBuilder();
-        String urlNameString = url + "?" + param;
-        try
-        {
-            log.info("sendSSLPost - {}", urlNameString);
-            SSLContext sc = SSLContext.getInstance("SSL");
-            sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
-            URL console = new URL(urlNameString);
-            HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
-            conn.setRequestProperty("accept", "*/*");
-            conn.setRequestProperty("connection", "Keep-Alive");
-            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
-            conn.setRequestProperty("Accept-Charset", "utf-8");
-            conn.setRequestProperty("contentType", "utf-8");
-            conn.setDoOutput(true);
-            conn.setDoInput(true);
+	public static String sendSSLPost(String url, String param) {
+		StringBuilder result = new StringBuilder();
+		String urlNameString = url + "?" + param;
+		try {
+			log.info("sendSSLPost - {}", urlNameString);
+			SSLContext sc = SSLContext.getInstance("SSL");
+			sc.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom());
+			URL console = new URL(urlNameString);
+			HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
+			conn.setRequestProperty("accept", "*/*");
+			conn.setRequestProperty("connection", "Keep-Alive");
+			conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+			conn.setRequestProperty("Accept-Charset", "utf-8");
+			conn.setRequestProperty("contentType", "utf-8");
+			conn.setDoOutput(true);
+			conn.setDoInput(true);
 
-            conn.setSSLSocketFactory(sc.getSocketFactory());
-            conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
-            conn.connect();
-            InputStream is = conn.getInputStream();
-            BufferedReader br = new BufferedReader(new InputStreamReader(is));
-            String ret = "";
-            while ((ret = br.readLine()) != null)
-            {
-                if (ret != null && !"".equals(ret.trim()))
-                {
-                    result.append(new String(ret.getBytes("ISO-8859-1"), "utf-8"));
-                }
-            }
-            log.info("recv - {}", result);
-            conn.disconnect();
-            br.close();
-        }
-        catch (ConnectException e)
-        {
-            log.error("调用HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e);
-        }
-        catch (SocketTimeoutException e)
-        {
-            log.error("调用HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e);
-        }
-        catch (IOException e)
-        {
-            log.error("调用HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e);
-        }
-        catch (Exception e)
-        {
-            log.error("调用HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e);
-        }
-        return result.toString();
-    }
+			conn.setSSLSocketFactory(sc.getSocketFactory());
+			conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
+			conn.connect();
+			InputStream is = conn.getInputStream();
+			BufferedReader br = new BufferedReader(new InputStreamReader(is));
+			String ret = "";
+			while ((ret = br.readLine()) != null) {
+				if (ret != null && !"".equals(ret.trim())) {
+					result.append(new String(ret.getBytes("ISO-8859-1"), "utf-8"));
+				}
+			}
+			log.info("recv - {}", result);
+			conn.disconnect();
+			br.close();
+		} catch (ConnectException e) {
+			log.error("调用HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e);
+		} catch (SocketTimeoutException e) {
+			log.error("调用HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e);
+		} catch (IOException e) {
+			log.error("调用HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e);
+		} catch (Exception e) {
+			log.error("调用HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e);
+		}
+		return result.toString();
+	}
 
-    private static class TrustAnyTrustManager implements X509TrustManager
-    {
-        @Override
-        public void checkClientTrusted(X509Certificate[] chain, String authType)
-        {
-        }
+	/**
+	 * 发送form表单类型的Post请求
+	 *
+	 * @param bodyMap 请求参数集合 key参数名 value为参数值
+	 */
+	public static String sendZrFormPost(Map<String, String> bodyMap) {
+		//创建post请求对象
+		String url = "https://api.vastlog.com/index.php?appid=1&appsecret=AD98NE6E49C9C6926C8&api_auth_code=d9768e5981b4da9a2f09f03ca9adef9d&api_auth_uid=2&s=member&app=orders&c=home&m=add";
+		HttpPost post = new HttpPost(url);
+		try {
+			String uuid = UUID.randomUUID().toString();
+			MultipartEntityBuilder builder = MultipartEntityBuilder.create().setCharset(StandardCharsets.UTF_8).setBoundary(uuid);
+			builder.setCharset(StandardCharsets.UTF_8);
+			builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
+			if (!CollectionUtils.isEmpty(bodyMap)) {
+				bodyMap.forEach((key, value) ->
+						builder.addPart(key, new StringBody(value, ContentType.create("text/plain", Constants.UTF8)))
+				);
+			}
+			post.setEntity(builder.build());
+			//把参数放入请求对象,,post发送的参数params,指定格式
+			post.addHeader("Content-type", "multipart/form-data; charset=UTF-8; boundary=" + uuid);
+			CloseableHttpClient client = HttpClients.createDefault();
+			//启动执行请求,并获得返回值
+			CloseableHttpResponse response = client.execute(post);
+			//得到返回的entity对象
+			HttpEntity entity = response.getEntity();
+			//把实体对象转换为string
+			String result = EntityUtils.toString(entity, Constants.UTF8);
+			//为防止频繁调用一个接口导致接口爆掉,每次调用完成后停留100毫秒
+			Thread.sleep(100);
+			//返回内容
+			return result;
+		} catch (Exception e1) {
+			e1.printStackTrace();
+			return e1.getMessage();
+		}
+	}
 
-        @Override
-        public void checkServerTrusted(X509Certificate[] chain, String authType)
-        {
-        }
 
-        @Override
-        public X509Certificate[] getAcceptedIssuers()
-        {
-            return new X509Certificate[] {};
-        }
-    }
+	private static class TrustAnyTrustManager implements X509TrustManager {
+		@Override
+		public void checkClientTrusted(X509Certificate[] chain, String authType) {
+		}
 
-    private static class TrustAnyHostnameVerifier implements HostnameVerifier
-    {
-        @Override
-        public boolean verify(String hostname, SSLSession session)
-        {
-            return true;
-        }
-    }
+		@Override
+		public void checkServerTrusted(X509Certificate[] chain, String authType) {
+		}
+
+		@Override
+		public X509Certificate[] getAcceptedIssuers() {
+			return new X509Certificate[]{};
+		}
+	}
+
+	private static class TrustAnyHostnameVerifier implements HostnameVerifier {
+		@Override
+		public boolean verify(String hostname, SSLSession session) {
+			return true;
+		}
+	}
 }

+ 17 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/basic/zr/dto/ZrLogDTO.java

@@ -0,0 +1,17 @@
+package org.springblade.los.basic.zr.dto;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.los.basic.zr.entity.ZrLog;
+
+/**
+ * 卓瑞远程接口调用日志数据传输对象实体类
+ *
+ * @author Rain
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ZrLogDTO extends ZrLog {
+	private static final long serialVersionUID = 1L;
+
+}

+ 70 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/basic/zr/entity/ZrLog.java

@@ -0,0 +1,70 @@
+package org.springblade.los.basic.zr.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import org.springblade.core.mp.base.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * 卓瑞远程接口调用日志实体类
+ *
+ * @author Rain
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "ZrLog对象", description = "卓瑞远程接口调用日志")
+public class ZrLog extends BaseEntity {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 业务id
+	 */
+	@ApiModelProperty(value = "业务id")
+	private Long businessId;
+
+	@ApiModelProperty(value = "租户id")
+	private String tenantId;
+
+	/**
+	 * 提单号
+	 */
+	@ApiModelProperty(value = "提单号")
+	private String orderNo;
+	/**
+	 * 箱号
+	 */
+	@ApiModelProperty(value = "箱号")
+	private String boxNo;
+	/**
+	 * 船司代码
+	 */
+	@ApiModelProperty(value = "船司代码")
+	private String code;
+	/**
+	 * 邮箱
+	 */
+	@ApiModelProperty(value = "邮箱")
+	private String email;
+	/**
+	 * 接口返回状态码
+	 */
+	@ApiModelProperty(value = "接口返回状态码")
+	private String resultCode;
+	/**
+	 * 接口返回日志
+	 */
+	@ApiModelProperty(value = "接口返回日志")
+	private String resultMsg;
+	/**
+	 * 接口返回数据
+	 */
+	@ApiModelProperty(value = "接口返回数据")
+	private String resultData;
+
+
+
+
+}

+ 19 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/basic/zr/vo/ZrLogVO.java

@@ -0,0 +1,19 @@
+package org.springblade.los.basic.zr.vo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
+import org.springblade.los.basic.zr.entity.ZrLog;
+
+/**
+ * 卓瑞远程接口调用日志视图实体类
+ *
+ * @author Rain
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "ZrLogVO对象", description = "卓瑞远程接口调用日志")
+public class ZrLogVO extends ZrLog {
+	private static final long serialVersionUID = 1L;
+
+}

+ 84 - 0
blade-service/blade-los/src/main/java/org/springblade/los/Util/ZrUtil.java

@@ -0,0 +1,84 @@
+package org.springblade.los.Util;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.AllArgsConstructor;
+import org.springblade.common.http.HttpUtils;
+import org.springblade.los.basic.corps.entity.BCorps;
+import org.springblade.los.basic.corps.service.IBCorpsService;
+import org.springblade.los.basic.zr.entity.ZrLog;
+import org.springblade.los.basic.zr.service.IZrLogService;
+import org.springblade.los.business.sea.entity.Containers;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.ObjectUtils;
+import org.springframework.util.StringUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 华翰远程调用工具类
+ *
+ * @author Rain
+ */
+@Component
+@AllArgsConstructor
+public class ZrUtil {
+
+	private final IBCorpsService corpsService;
+
+	private final IZrLogService zrLogService;
+
+
+	@Async
+	public void sendDataToZr(String mblNo, Long corpId, List<Containers> containersList, Long id, String tenantId) {
+		if (!StringUtils.hasText(mblNo)) {
+			return;
+		}
+		if (CollectionUtils.isEmpty(containersList)) {
+			return;
+		}
+		List<String> boxNoList = containersList.stream().map(Containers::getCntrNo).filter(StringUtils::hasText).collect(Collectors.toList());
+		if (CollectionUtils.isEmpty(boxNoList)) {
+			return;
+		}
+		BCorps corps = corpsService.getById(corpId);
+		String email = ObjectUtils.isEmpty(corps) ? "" : (StringUtils.hasText(corps.getEmail()) ? corps.getEmail() : "");
+		String customsCode = ObjectUtils.isEmpty(corps) ? "" : (StringUtils.hasText(corps.getCustomsCode()) ? corps.getCustomsCode() : "");
+		Map<String, String> bodyMap = new HashMap<>(6);
+		List<ZrLog> zrLogList = new ArrayList<>();
+		for (String boxNo : boxNoList) {
+			ZrLog zrLog = new ZrLog();
+			zrLogList.add(zrLog);
+			zrLog.setBusinessId(id);
+			zrLog.setOrderNo(mblNo);
+			zrLog.setBoxNo(boxNo);
+			zrLog.setTenantId(tenantId);
+			zrLog.setEmail(email);
+			zrLog.setCode(customsCode);
+			bodyMap.put("is_ajax", "1");
+			bodyMap.put("catid", "2");
+			bodyMap.put("data[orderno]", mblNo);
+			bodyMap.put("data[boxno]", boxNo);
+			bodyMap.put("data[code]", customsCode);
+			bodyMap.put("data[email]", email);
+			String result = HttpUtils.sendZrFormPost(bodyMap);
+			if (!StringUtils.hasText(result)) {
+				zrLog.setResultCode("500");
+				zrLog.setResultMsg("请求接口后没有返回数据");
+				continue;
+			}
+			JSONObject resultJson = JSONObject.parseObject(result);
+			zrLog.setResultCode(resultJson.getString("code"));
+			zrLog.setResultMsg(resultJson.getString("msg"));
+			zrLog.setResultData(resultJson.getString("data"));
+		}
+		zrLogService.saveBatch(zrLogList);
+	}
+
+
+}

+ 27 - 0
blade-service/blade-los/src/main/java/org/springblade/los/basic/zr/mapper/ZrLogMapper.java

@@ -0,0 +1,27 @@
+package org.springblade.los.basic.zr.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.los.basic.zr.entity.ZrLog;
+import org.springblade.los.basic.zr.vo.ZrLogVO;
+
+import java.util.List;
+
+/**
+ * 卓瑞远程接口调用日志 Mapper 接口
+ *
+ * @author Rain
+ */
+public interface ZrLogMapper extends BaseMapper<ZrLog> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page  分页
+	 * @param zrLog 参数
+	 * @return 结果
+	 */
+	List<ZrLogVO> selectZrLogPage(IPage page, ZrLogVO zrLog);
+
+}

+ 30 - 0
blade-service/blade-los/src/main/java/org/springblade/los/basic/zr/mapper/ZrLogMapper.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!--suppress ALL -->
+<mapper namespace="org.springblade.los.basic.zr.mapper.ZrLogMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="zrLogResultMap" type="org.springblade.los.basic.zr.entity.ZrLog">
+        <result column="id" property="id"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_dept" property="createDept"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="business_id" property="businessId"/>
+        <result column="order_no" property="orderNo"/>
+        <result column="box_no" property="boxNo"/>
+        <result column="code" property="code"/>
+        <result column="email" property="email"/>
+        <result column="result_code" property="resultCode"/>
+        <result column="result_msg" property="resultMsg"/>
+        <result column="result_data" property="resultData"/>
+    </resultMap>
+
+
+    <select id="selectZrLogPage" resultMap="zrLogResultMap">
+        select * from zr_log where is_deleted = 0
+    </select>
+
+</mapper>

+ 25 - 0
blade-service/blade-los/src/main/java/org/springblade/los/basic/zr/service/impl/ZrLogServiceImpl.java

@@ -0,0 +1,25 @@
+package org.springblade.los.basic.zr.service.impl;
+
+
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.los.basic.zr.entity.ZrLog;
+import org.springblade.los.basic.zr.mapper.ZrLogMapper;
+import org.springblade.los.basic.zr.service.IZrLogService;
+import org.springblade.los.basic.zr.vo.ZrLogVO;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 卓瑞远程接口调用日志 服务实现类
+ *
+ * @author Rain
+ */
+@Service
+public class ZrLogServiceImpl extends BaseServiceImpl<ZrLogMapper, ZrLog> implements IZrLogService {
+
+	@Override
+	public IPage<ZrLogVO> selectZrLogPage(IPage<ZrLogVO> page, ZrLogVO zrLog) {
+		return page.setRecords(baseMapper.selectZrLogPage(page, zrLog));
+	}
+
+}

+ 15 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java

@@ -23,12 +23,14 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.AllArgsConstructor;
+import org.springblade.common.enums.CommonEnum;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.los.Util.IDeptUtils;
 import org.springblade.los.Util.StringTools;
+import org.springblade.los.Util.ZrUtil;
 import org.springblade.los.basic.business.entity.BusinessType;
 import org.springblade.los.basic.business.service.IBusinessTypeService;
 import org.springblade.los.basic.corps.entity.BCorps;
@@ -39,6 +41,7 @@ import org.springblade.los.basic.cur.entity.BCurrency;
 import org.springblade.los.basic.cur.service.IBCurrencyService;
 import org.springblade.los.basic.vessels.entity.BVessels;
 import org.springblade.los.basic.vessels.mapper.VesselsMapper;
+import org.springblade.los.basic.zr.entity.ZrLog;
 import org.springblade.los.billno.entity.BusinessBillNo;
 import org.springblade.los.billno.service.IBusinessBillNoService;
 import org.springblade.los.business.amends.entity.Amends;
@@ -152,6 +155,13 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 
 	private final IHmmEdiService hmmEdiService;
 
+	private final ZrUtil zrUtil;
+
+
+
+
+
+
 	@Override
 	public IPage<BillsVO> selectBillsPage(IPage<BillsVO> page, BillsVO bills) {
 		return page.setRecords(baseMapper.selectBillsPage(page, bills));
@@ -902,6 +912,11 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		LocalDateTime now2 = LocalDateTime.now();
 		String formatted2 = now2.format(formatter);
 		System.out.println("止2 " + formatted2);
+		String openZr = sysClient.getParamService(CommonEnum.OPEN_ZR_TRANSMIT.info);
+		if (Objects.equals(CommonEnum.ONE.info, openZr)) {
+			// 参数为1 则同步提单号
+			zrUtil.sendDataToZr(bills.getMblno(), bills.getCorpId(), bills.getContainersList(), bills.getId(), AuthUtil.getTenantId());
+		}
 		return R.data(bills);
 	}