| 
					
				 | 
			
			
				@@ -75,6 +75,7 @@ import org.slf4j.Logger; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.slf4j.LoggerFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.BeanUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.boot.context.properties.ConfigurationProperties; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.http.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.transaction.annotation.Transactional; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -88,6 +89,10 @@ import java.io.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.math.BigDecimal; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.math.BigInteger; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.math.RoundingMode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.net.URLEncoder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.security.KeyFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.security.PrivateKey; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.security.spec.PKCS8EncodedKeySpec; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.text.ParseException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.text.SimpleDateFormat; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.*; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -231,6 +236,10 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private static final Logger log = LoggerFactory.getLogger(AddressUtils.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 签名算法 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public static final String SIGN_ALGORITHMS = "SHA1WithRSA"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 查询详情主表 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -9220,5 +9229,195 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return AjaxResult.success("转航次成功"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 凯和设备交接单新增、修改(押箱)接口 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param tWarehouseBills 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public AjaxResult receipt(TWarehouseBills tWarehouseBills,LoginUser loginUser) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<JoabBoxVo> receipt = tWarehousebillsCntritemsMapper.receipt(tWarehouseBills.getOrderList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (CollectionUtils.isEmpty(receipt)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new SecurityException("未找到设备交接单信息"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            receipt.stream().forEach(item ->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                item.setContPerson(loginUser.getUsername());//押箱操作人姓名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                item.setPrintPerson(loginUser.getUsername());//打印操作员姓名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String json = JSONObject.toJSONString(receipt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 请求路径 (测试) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String postUrl = "https://api.qingdao-port.net/container/web/eir/eir/Shipping/insertEir.do"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 请求路径 (正式) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //String postUrl = "https://api.qingdao-port.net/container/web/wlds_eir/edo/shipagent/insertEir.do"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, String> map = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        map.put("customerCode", "A00001"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        map.put("data", json); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取数字签名所需的数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String formatUrlMap = TWarehouseBillsServiceImpl.formatUrlMap(map, false, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取数字签名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String privateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKkgGJtjBAHHXylZ7SjHiTRf4uU/R8uzEnx4YJgAdMMEcBMAgsdXpkMjuVPeMzksHpWTfpdhnf307l2lE4NgZ2txUJZivAQDP9MquH4jQDym0zPLjXGPYykxO0FqQdIYcjXM9doygz5GcXtTGQDz+6Btz4XWBQC18mOsygaxa6qpAgMBAAECgYA58z17QNpGocIBsUaKCpUA1ToxwxUevyU+cSDn9IANsp+UY0BsfaQCrWL7Uc/Lb0qrhfaCeHhiZGKow7+D7KyCm/DynU7WcW0Z0JLlG2nwQBT/Opwg2WDF7wHnlf0Y5QmArZ8ioabagKWBTyJr358xCC3NNZ8AYQB5ToDdYXOO4QJBAPKieA0v0pUii/3lnPDs83IxMEDy9rAW5OsPzt/De5Rk8k3TwN9kJcrv6toVcU3OsZWqkLy9CvBmn7X05otlp0sCQQCycQfT2Ad5kLN06OKs0Y6WEQNFtW+XgSu+ X7is6feklUUOmAS0UwhYfClFoB5Ddija5MgwZeWJtWr2zsnYrLlbAkBDsSglJa5uhRDhaOn8HV9eAHMh66b/QaPkIKjqrLMRl4gyRl2M9XfFwmGXLlxKBNxukQOIZIVkxHzSWtznDxk5AkARfE3+Dk89NFbBgAimUqqcPfKKJCtZN0koEI0yNIMV16K6uV7MpM5OjWwl7HjKt4ttV7neND337pUatkzFNLe9AkEA7EzVn6WL45D4gaDwp6sRGTOMuyC9GyE1U4Vi 4eRLBpTGdPJTJYz3Pgg4Pr0Sp+1x7bxOaQ/V1XyiL3AMxKfWnw=="; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String sign = TWarehouseBillsServiceImpl.sign(formatUrlMap, privateKey, "UTF-8"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 请求参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MultiValueMap<String, String> params = new LinkedMultiValueMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        params.add("customerCode", "A00001"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        params.add("data", json); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        params.add("sign", sign); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        TResponseVo responseVo = sendPostRequest(postUrl, params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!responseVo.isSuccess()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new WarehouseException(responseVo.getMessage().get("msg")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return AjaxResult.success(responseVo.getMessage().get("msg")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * RSA 签名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param content    待签名数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param privateKey 商户私钥 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param encode     字符集编码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 签名值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public static String sign(String content, String privateKey, String encode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            byte[] decode = Base64.getMimeDecoder().decode(privateKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(Base64.getMimeDecoder().decode(privateKey)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            KeyFactory keyf = KeyFactory.getInstance("RSA"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PrivateKey priKey = keyf.generatePrivate(priPKCS8); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            java.security.Signature signature = java.security.Signature.getInstance(SIGN_ALGORITHMS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            signature.initSign(priKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            signature.update(content.getBytes(encode)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            byte[] signed = signature.sign(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return Base64.getEncoder().encodeToString(signed); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 方法用途: 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序),并且生成 url 参数串 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param paraMap    要排序的 Map 对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param urlEncode  是否需要 URLENCODE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param keyToLower 是否需要将 Key 转换为全小写 true:key 转化成小写,false:不转化 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public static String formatUrlMap(Map<String, String> paraMap, boolean urlEncode, boolean keyToLower) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String buff = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, String> tmpMap = paraMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Map.Entry<String, String>> infoIds = new ArrayList<Map.Entry<String, String>>(tmpMap.entrySet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Collections.sort(infoIds, new Comparator<Map.Entry<String, String>>() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return (o1.getKey()).toString().compareTo(o2.getKey()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 构造 URL 键值对的格式 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            StringBuilder buf = new StringBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (Map.Entry<String, String> item : infoIds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (StringUtils.isNotBlank(item.getKey())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    String key = item.getKey(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    String val = item.getValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (urlEncode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        val = URLEncoder.encode(val, "utf-8"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (keyToLower) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        buf.append(key.toLowerCase() + "=" + val); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        buf.append(key + "=" + val); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    buf.append("&"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            buff = buf.toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (buff.isEmpty() == false) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                buff = buff.substring(0, buff.length() - 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return buff; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //测试设备单新增 接口 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public static void main(String[] args) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<JoabBoxVo> list = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        JoabBoxVo joabBoxVo = new JoabBoxVo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setContainerNo("TEMU2945451");//箱号 必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setBillOfLadingNo("AEL0725208K");//提单号 必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setEirId("123456");//设备交接单编号 不必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setTradeFlag("W"); // 内外贸,N-内贸,W-外贸 必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setVesselNameCn("长江号 6");//中文船名 必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setVesselNameEn("MAERSK ABERDEEN");//英文船名 必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setVesselNameCode("WTYHKL");// 船名代码,码头统一分配的3位代码(一般情况) 不必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //joabBoxVo.setImo("");//IMO号,外贸须填写,内贸可以不填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setVoyageNumber("802B");//进口航次 必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setContainerType("GP");//箱型(例如GP) 必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setContainerSize("20");//尺寸,加规则校验,限制2位数字 必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setContainerUser("TSL"); //箱属公司代码(船代上传的原始箱属公司码),请各船代以附件《箱属代码》为准进行转换 必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setArriveAim("进场"); //进场目的,简单描述,比如返空、退租 不必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setArriveState("E");//进场状态,E-空箱,F-重箱,默认为E 不必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setArriveTime("2018-03-06 14:08:08");//到港时间,精确到秒,用于计算免费箱使期的起始时间 必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setContState("0");// 押箱状态,0-未押箱,1-已押箱,默认已押箱 必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setEmf("0");// EMF,0-无,1-有 不必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setShippingNote("无"); // 船公司备注 不必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setRemark("无要求"); // 船公司特殊要求 不必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setContEnterprise("青岛押箱有限公司测");//押箱企业全称(船公司、船代、场站押箱点在云港通注册时填写的准确全称) 必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setContEnterpriseNo("56565"); //押箱企业社会统一编码(船公司、船代、场站押箱点在云港通注册时填写的社会统一编码) 必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setContTime("2018-03-09 06:08:08");//押箱时间,精确到秒 必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setContPerson("张三测");//押箱操作人姓名 必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setUseEnterprise("青岛用箱企业公司测");//用箱企业全称(货代企业在云港通注册时填写的准确全称)必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setUseEnterpriseNo("91370213MA3RE74912");//用箱企业社会统一编码(货代企业在云港通注册时填写的社会统一编码) 必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setUsePerson("武安国测");//经办人姓名(货代企业经办人) 不必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setFreeTimePeriod("26 天");//免费箱使期(天数),描述性文字,比如5天 不必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setFreeTime("2018-03-31 14:08:08");//免费箱使期到期日期,精确到日,比如2018-03-06 不必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setPlaceOfDelivery("青岛港码头");//提箱地点,提箱码头名称 不必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setPlaceOfDeliveryCode("2333");//提箱码头代码(QQCT、QQCTU、QQCTN) 必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setLoadingPort("连云港");// 装货港,港口名称 不必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setDischargePort("天津港");// 卸货港,港口名称 不必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setDischargeFactory("青岛港");// 卸货厂家 不必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setSealNo("QF9981");//铅封号  不必填 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setPlaceOfReturn("东港总站");//必填 返空场站名称(填写云港通平台统一发放的场站代码表中返空分站名称) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setPlaceOfReturnCode("DGGZZ"); // 必填 返空场站代码(填写云港通平台统一发放的场站代码表中五位返空分站代码,如果是退租业务,请务必选择退租场站代码,平台为每个场站都分配了一个退租场站代码) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setForeignReturnContFlag("0");//不必填 是否异地还箱场站,0-否,1-是,默认为否 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setForeignReturnStation("异地场站");//不必填 异地还箱场站名称 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setShippingValidateCode("WERr");// 不必填 验证码(4位数字),有需要的船公司、船代或者场站押箱点,可以在上传信息时同时生成验证码,货主货代去结算中心办理提单手续时,需要提供此验证码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setContExitState("E");// 不必填 出港状态出场的状态,E-空箱,F-满箱,默认为F,司机提箱出闸的状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setContExitRecord("12");// 不必填 出港检查记录出场检查记录,简单描述集装箱出港时的检查情况,比如正常、异常、是否有割伤、是否有破洞等等 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setPrintEnterprise("4");//)  必填  打印企业全称(船公司、船代、场站押箱点在云港通注册时填写的准确全称)注:生成电子设备交接单的企业 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setPrintEnterpriseNo("4");// 必填 打印企业社会统一编码(船公司、船代、场站押箱点在云港通注册时填写的社会统一编码) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setPrintPerson("小明测");// 必填 打印操作员姓名注:生成电子设备交接单企业的操作员姓名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setShippingEmergFlag("0");// 不必填 船代应急标记,0-否,1-是取消船代应急,该字段可传,也可不传,如果不传,会将该字段置为0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        joabBoxVo.setUploadTime("2018-03-12 13:08:08"); // 必填  上传时间,打印操作员点击上传调用接口的系统时间,精确到秒 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        list.add(joabBoxVo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String json = JSONObject.toJSONString(list); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 请求路径 (测试) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String postUrl = "https://api.qingdao-port.net/container/web/eir/eir/Shipping/insertEir.do"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 请求路径 (正式) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //String postUrl = "https://api.qingdao-port.net/container/web/wlds_eir/edo/shipagent/insertEir.do"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, String> map = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        map.put("customerCode", "A00001"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        map.put("data", json); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取数字签名所需的数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String formatUrlMap = TWarehouseBillsServiceImpl.formatUrlMap(map, false, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取数字签名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String privateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKkgGJtjBAHHXylZ7SjHiTRf4uU/R8uzEnx4YJgAdMMEcBMAgsdXpkMjuVPeMzksHpWTfpdhnf307l2lE4NgZ2txUJZivAQDP9MquH4jQDym0zPLjXGPYykxO0FqQdIYcjXM9doygz5GcXtTGQDz+6Btz4XWBQC18mOsygaxa6qpAgMBAAECgYA58z17QNpGocIBsUaKCpUA1ToxwxUevyU+cSDn9IANsp+UY0BsfaQCrWL7Uc/Lb0qrhfaCeHhiZGKow7+D7KyCm/DynU7WcW0Z0JLlG2nwQBT/Opwg2WDF7wHnlf0Y5QmArZ8ioabagKWBTyJr358xCC3NNZ8AYQB5ToDdYXOO4QJBAPKieA0v0pUii/3lnPDs83IxMEDy9rAW5OsPzt/De5Rk8k3TwN9kJcrv6toVcU3OsZWqkLy9CvBmn7X05otlp0sCQQCycQfT2Ad5kLN06OKs0Y6WEQNFtW+XgSu+ X7is6feklUUOmAS0UwhYfClFoB5Ddija5MgwZeWJtWr2zsnYrLlbAkBDsSglJa5uhRDhaOn8HV9eAHMh66b/QaPkIKjqrLMRl4gyRl2M9XfFwmGXLlxKBNxukQOIZIVkxHzSWtznDxk5AkARfE3+Dk89NFbBgAimUqqcPfKKJCtZN0koEI0yNIMV16K6uV7MpM5OjWwl7HjKt4ttV7neND337pUatkzFNLe9AkEA7EzVn6WL45D4gaDwp6sRGTOMuyC9GyE1U4Vi 4eRLBpTGdPJTJYz3Pgg4Pr0Sp+1x7bxOaQ/V1XyiL3AMxKfWnw=="; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String sign = TWarehouseBillsServiceImpl.sign(formatUrlMap, privateKey, "UTF-8"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 请求参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MultiValueMap<String, String> params = new LinkedMultiValueMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        params.add("customerCode", "A00001"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        params.add("data", json); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        params.add("sign", sign); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        TResponseVo responseVo = sendPostRequest(postUrl, params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        System.err.println(responseVo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!responseVo.isSuccess()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new WarehouseException(responseVo.getMessage().get("msg")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |