Browse Source

电子面单云打印

liurui 3 years ago
parent
commit
2912df3aaf

+ 195 - 2
watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AwaitSendController.java

@@ -3,6 +3,7 @@ package com.iamberry.rst.controllers.order;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.iamberry.redis.RedisUtils;
+import com.iamberry.rst.controllers.mq.TaobaoConfig;
 import com.iamberry.rst.controllers.mq.TaobaoTask;
 import com.iamberry.rst.core.cm.SalesOrder;
 import com.iamberry.rst.core.cm.SalesOrderItem;
@@ -31,8 +32,15 @@ import com.iamberry.rst.utils.StitchAttrUtil;
 import com.iamberry.wechat.tools.*;
 import com.iamberry.wechat.tools.payUtil.DatetimeUtil;
 import com.lowagie.text.html.HtmlParser;
+import com.taobao.api.ApiException;
+import com.taobao.api.DefaultTaobaoClient;
+import com.taobao.api.TaobaoClient;
 import com.taobao.api.domain.Order;
 import com.taobao.api.domain.Trade;
+import com.taobao.api.request.CainiaoCloudprintStdtemplatesGetRequest;
+import com.taobao.api.request.CainiaoWaybillIiGetRequest;
+import com.taobao.api.response.CainiaoCloudprintStdtemplatesGetResponse;
+import com.taobao.api.response.CainiaoWaybillIiGetResponse;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
@@ -57,6 +65,8 @@ import java.nio.charset.StandardCharsets;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.stream.Collectors;
+
 /**
  * @author 献
  * @company 深圳爱贝源科技有限公司
@@ -411,10 +421,11 @@ public class AwaitSendController {
             Goodsquantity += temp.getItemNum();
         }
         // 增加产品信息
-        Map<String, Object> product1 = new HashMap<String, Object>(3);
+        Map<String, Object> product1 = new HashMap<String, Object>(4);
         product1.put("GoodsName", uuid);
         product1.put("Goodsquantity", Goodsquantity);
         product1.put("GoodsWeight", colorIsWeight/1000);
+        product1.put("GoodsItems", items);
         commodity.add(product1);
         return colorIsWeight;
     }
@@ -482,7 +493,7 @@ public class AwaitSendController {
     @RequiresPermissions("order:listAwaitSendOrder")
     public ResponseJson printOrder(@RequestParam("orderId") String orderId,
                                    @RequestParam("salesId") Integer salesId,
-                                   HttpServletRequest request) {
+                                   HttpServletRequest request) throws ApiException {
         // 检查订单状态
         SalesOrder salesOrderInfo = salesOrderService.getSalesOrderById(salesId);
         assert salesOrderInfo != null;
@@ -582,6 +593,12 @@ public class AwaitSendController {
         }else{
             eOrderRequestData.Quantity = 1;
         }
+
+        if (true) {
+            ResponseJson responseJson = tbPrintOrder(salesOrderInfo, eOrderRequestData);
+            return responseJson;
+        }
+
         JSONObject jsonObject = null;
         try {
             // 向第三方系统【快递鸟】提交订单数据,第三方系统会检测订单是否重复
@@ -692,6 +709,182 @@ public class AwaitSendController {
         return ResponseJson.getSUCCESS().addResponseKeyValue("json", jsonObject.toJSONString());
     }
 
+
+
+    //淘宝电子名单云打印
+    private ResponseJson tbPrintOrder(SalesOrder salesOrderInfo, EOrderRequestData eOrderRequestData) throws ApiException {
+
+        //品牌code, 使用顺丰的时候用FOP, 其他快递直接使用default即可
+        String brandCode = true ? "FOP" : "default";
+
+
+        TaobaoClient client = new DefaultTaobaoClient(TaobaoConfig.TAOBAO_URL, TaobaoConfig.appkey, TaobaoConfig.secret);
+        CainiaoWaybillIiGetRequest req = new CainiaoWaybillIiGetRequest();
+        CainiaoWaybillIiGetRequest.WaybillCloudPrintApplyNewRequest obj = new CainiaoWaybillIiGetRequest.WaybillCloudPrintApplyNewRequest();
+        obj.setCpCode(salesOrderInfo.getSalesPostFirm());//快递公司编码
+//        obj.setProductCode("目前仅顺丰场景支持此字段,传入快递产品编码");
+
+        ///////////////////////////////////////////sender///////////////////////////////////////
+        //addressDto 发件地址信息
+        CainiaoWaybillIiGetRequest.AddressDto addressDto = new CainiaoWaybillIiGetRequest.AddressDto();
+        Map<String, Object> sender = eOrderRequestData.Sender;
+        addressDto.setCity(String.valueOf(sender.get("CityName")));
+        addressDto.setDetail(String.valueOf(sender.get("Address")));
+//        addressDto.setDistrict("朝阳区");
+        addressDto.setProvince(String.valueOf(sender.get("ProvinceName")));
+//        addressDto.setTown("望京街道");
+
+        //userInfoDto 发件人信息
+        CainiaoWaybillIiGetRequest.UserInfoDto userInfoDto = new CainiaoWaybillIiGetRequest.UserInfoDto();
+        userInfoDto.setAddress(addressDto);
+        userInfoDto.setMobile(String.valueOf(sender.get("Tel")));
+        userInfoDto.setName(String.valueOf(sender.get("Name")));
+//        userInfoDto.setPhone("057123222"); //固定电话
+        obj.setSender(userInfoDto);
+
+        ////////////////////////////////////trade_order_info_dtos///////////////////////////////////////////////
+        List<CainiaoWaybillIiGetRequest.TradeOrderInfoDto> tradeOrderInfoDtos = new ArrayList<CainiaoWaybillIiGetRequest.TradeOrderInfoDto>();
+        CainiaoWaybillIiGetRequest.TradeOrderInfoDto tradeOrderInfoDto = new CainiaoWaybillIiGetRequest.TradeOrderInfoDto();
+//        tradeOrderInfoDto.setLogisticsServices("如不需要特殊服务,该值为空");
+        tradeOrderInfoDto.setObjectId(String.valueOf(UUID.randomUUID()));//请求ID
+
+        //orderInfoDto 订单信息
+        CainiaoWaybillIiGetRequest.OrderInfoDto orderInfoDto = new CainiaoWaybillIiGetRequest.OrderInfoDto();
+        if (eOrderRequestData.ExpType.equals("2")){
+            orderInfoDto.setOrderChannelsType("TM");
+        } else {
+            return ResponseJson.getSUCCESS().addResponseKeyValue("NO_SUPPORT", "当前订单渠道不支持此打印方式");
+        }
+
+        ArrayList<String> tradeOrderList = new ArrayList<String>();
+        tradeOrderList.add(eOrderRequestData.OrderCode);//电商平台订单号,最多可存放100个
+        orderInfoDto.setTradeOrderList(tradeOrderList);
+//        orderInfoDto.setOutTradeOrderList("123456,456789");//非必填
+//        orderInfoDto.setOutTradeSubOrderList("12,34,56,78");//非必填
+        tradeOrderInfoDto.setOrderInfo(orderInfoDto);
+
+        //PackageInfoDto 包裹信息
+        CainiaoWaybillIiGetRequest.PackageInfoDto packageInfoDto = new CainiaoWaybillIiGetRequest.PackageInfoDto();
+//        packageInfoDto.setId("1");//包裹ID, 非必填
+        List<CainiaoWaybillIiGetRequest.Item> items = new ArrayList<CainiaoWaybillIiGetRequest.Item>();
+        List<Map<String, Object>> commodity = eOrderRequestData.Commodity;
+        Map<String, Object> stringObjectMap = commodity.get(0);
+        List<SalesOrderItem> goodsItems = (List<SalesOrderItem>)stringObjectMap.get("GoodsItems");
+        goodsItems.forEach(salesOrderItem -> {
+            CainiaoWaybillIiGetRequest.Item item = new CainiaoWaybillIiGetRequest.Item();
+            item.setCount(salesOrderItem.getItemNum().longValue());
+            item.setName(salesOrderItem.getItemProductName());
+            items.add(item);
+        });
+        packageInfoDto.setItems(items);
+
+//        packageInfoDto.setVolume(eOrderRequestData.Volume.longValue());//体积
+        packageInfoDto.setWeight(eOrderRequestData.Weight.longValue());
+        packageInfoDto.setTotalPackagesCount(eOrderRequestData.Quantity.longValue());
+        packageInfoDto.setPackagingDescription(eOrderRequestData.Remark);
+        packageInfoDto.setGoodsDescription(eOrderRequestData.Remark);
+        packageInfoDto.setLength(30L);
+        packageInfoDto.setWidth(30L);
+        packageInfoDto.setHeight(50L);
+        packageInfoDto.setGoodValue(salesOrderInfo.getSalesPayMoney() + "");
+
+        tradeOrderInfoDto.setPackageInfo(packageInfoDto);
+
+        //RecipientInfoDto 收件人信息
+        CainiaoWaybillIiGetRequest.RecipientInfoDto recipientInfoDto = new CainiaoWaybillIiGetRequest.RecipientInfoDto();
+        CainiaoWaybillIiGetRequest.AddressDto recivedAddressDto = new CainiaoWaybillIiGetRequest.AddressDto();//收件人信息
+        Map<String, Object> receiver = eOrderRequestData.Receiver;
+        recivedAddressDto.setCity(String.valueOf(receiver.get("CityName")));
+        recivedAddressDto.setDetail(String.valueOf(receiver.get("Address")));
+//        recivedAddressDto.setDistrict("朝阳区");
+        recivedAddressDto.setProvince(String.valueOf(receiver.get("ProvinceName")));
+//        recivedAddressDto.setTown("望京街道");
+        recipientInfoDto.setAddress(recivedAddressDto);
+        recipientInfoDto.setMobile(String.valueOf(receiver.get("Tel")));
+        recipientInfoDto.setName(String.valueOf(receiver.get("Name")));
+//        recipientInfoDto.setPhone("057123222");
+//        recipientInfoDto.setOaid("abcdefghijk");
+//        recipientInfoDto.setTid("1527014522198024829");
+//        recipientInfoDto.setCaid("As268woscee"); // todo 菜鸟打印地址加密
+        tradeOrderInfoDto.setRecipient(recipientInfoDto);
+//        tradeOrderInfoDto.setTemplateUrl("http://cloudprint.cainiao.com/template/standard/1501");
+
+        Map<String, String> tempResult = tempUrl(client, salesOrderInfo.getSalesPostFirm(), brandCode);
+        if (!tempResult.get("status").equals("SUCCESS")) {
+            return ResponseJson.getFAILURE().addResponseKeyValue(tempResult.getOrDefault("errorMsg", "快运模板查询错误!"));
+        }
+
+        tradeOrderInfoDto.setTemplateUrl(tempResult.get("url"));
+        tradeOrderInfoDto.setUserId(12L);
+        if (brandCode.equals("FOP")) {
+            tradeOrderInfoDto.setWaybillCode("SF982933222");
+        }
+
+        tradeOrderInfoDtos.add(tradeOrderInfoDto);
+        obj.setTradeOrderInfoDtos(tradeOrderInfoDtos);
+
+//        obj.setStoreCode("553323");
+//        obj.setResourceCode("DISTRIBUTOR_978324");
+//        obj.setDmsSorting(false);
+//        obj.setThreePlTiming(false);
+        obj.setNeedEncrypt(false);//返回的云打印信息是否加密
+//        obj.setMultiPackagesShipment(false);
+        obj.setBrandCode(brandCode);//品牌编码
+//        obj.setExtraInfo("{\"isvClientCode\": \"ab12344\"}");//扩展参数
+        obj.setCustomerCode("7690035114");//月结卡号
+        obj.setCallDoorPickUp(eOrderRequestData.IsNotice == null || eOrderRequestData.IsNotice == 1 ? false : true);//是否预约上门
+        obj.setDoorPickUpTime(eOrderRequestData.StartDate);
+        obj.setDoorPickUpEndTime(eOrderRequestData.EndDate);
+        obj.setShippingBranchCode(eOrderRequestData.ShipperCode);
+        req.setParamWaybillCloudPrintApplyNewRequest(obj);
+        CainiaoWaybillIiGetResponse rsp = null;
+        try {
+            rsp = client.execute(req, (String) AdminTaobaoAuthController.getToken().get("token"));
+        } catch (ApiException e) {
+            e.printStackTrace();
+        }
+        System.out.println(rsp.getBody());
+        return ResponseJson.getSUCCESS().addResponseKeyValue("OK", rsp.getBody());
+    }
+
+
+    private Map<String, String> tempUrl(TaobaoClient client, String cpCode, String brandCode) throws ApiException {
+        Map<String,String> resultMap = new HashMap<>();
+//        TaobaoClient client = new DefaultTaobaoClient(TaobaoConfig.TAOBAO_URL, TaobaoConfig.appkey, TaobaoConfig.secret);
+        CainiaoCloudprintStdtemplatesGetRequest req = new CainiaoCloudprintStdtemplatesGetRequest();
+        CainiaoCloudprintStdtemplatesGetResponse rsp = client.execute(req);
+        System.out.println(rsp.getBody());
+        CainiaoCloudprintStdtemplatesGetResponse.CloudPrintBaseResult result = rsp.getResult();
+        if (!result.getSuccess()) {
+            resultMap.put("status", "FAIL");
+            resultMap.put("errorMsg", result.getErrorMessage());
+        }
+        List<CainiaoCloudprintStdtemplatesGetResponse.StandardTemplateResult> datas = result.getDatas();
+        List<CainiaoCloudprintStdtemplatesGetResponse.StandardTemplateResult> collect = datas.stream().filter(cpCodeResult -> {
+            if (cpCodeResult.getCpCode().equals(cpCode.toUpperCase())) return true;
+            return false;
+        }).collect(Collectors.toList());
+        if (collect == null || collect.size() == 0) {
+            resultMap.put("status", "FAIL");
+            resultMap.put("errorMsg", "未找到快运模板!");
+        }
+        CainiaoCloudprintStdtemplatesGetResponse.StandardTemplateResult standardTemplateResult = collect.get(0);
+        List<CainiaoCloudprintStdtemplatesGetResponse.StandardTemplateDo> standardTemplates = standardTemplateResult.getStandardTemplates();
+        List<CainiaoCloudprintStdtemplatesGetResponse.StandardTemplateDo> collectTemps = standardTemplates.stream().filter(temp -> {
+            if (temp.getBrandCode().equals(brandCode)) return true;
+            return false;
+        }).collect(Collectors.toList());
+        if (collectTemps == null || collectTemps.size() == 0) {
+            resultMap.put("status", "FAIL");
+            resultMap.put("errorMsg", "未找到快运模板!");
+        }
+        CainiaoCloudprintStdtemplatesGetResponse.StandardTemplateDo standardTemplateDo = collectTemps.get(0);
+        resultMap.put("status", "SUCCESS");
+        resultMap.put("url", standardTemplateDo.getStandardTemplateUrl());
+        return resultMap;
+    }
+
+
     // 重新打印发货
     @ResponseBody
     @RequestMapping(value = "/rePrintOrder", produces= MediaType.APPLICATION_JSON_VALUE+";charset=utf-8")

+ 6 - 6
watero-rst-web/src/main/resources/dev-jdbc.properties

@@ -1,13 +1,13 @@
 jdbc.driver=com.mysql.jdbc.Driver
 ##### \uFFFD\uFFFD\u02BD\uFFFD\uFFFD\uFFFD\uFFFD ####
-jdbc.url=jdbc:mysql://iamberry.mysql.rds.aliyuncs.com/rst?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull
-jdbc.username=watero_rst
-jdbc.password=watero_RST
+#jdbc.url=jdbc:mysql://iamberry.mysql.rds.aliyuncs.com/rst?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull
+#jdbc.username=watero_rst
+#jdbc.password=watero_RST
 ##### \uFFFD\uFFFD\u02BD\uFFFD\uFFFD\uFFFD\uFFFD end #####
 
-#jdbc.url=jdbc:mysql://iamberry.mysql.rds.aliyuncs.com/rst_test_2?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull
-#jdbc.username=rst_test
-#jdbc.password=RST_test
+jdbc.url=jdbc:mysql://iamberry.mysql.rds.aliyuncs.com/rst_test_2?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull
+jdbc.username=rst_test
+jdbc.password=RST_test
 
 #pool settings
 jdbc.pool.init=1