|
@@ -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")
|