订单详情新增

物流进度新增
用户合并修改
This commit is contained in:
wuchunlei
2024-06-03 17:03:23 +08:00
parent 6ed799cd3e
commit 8bec166fa6
8 changed files with 366 additions and 149 deletions

View File

@@ -0,0 +1,139 @@
package com.peanut.common.utils;
import com.alibaba.fastjson.JSONObject;
import com.peanut.config.Constants;
import com.peanut.modules.common.entity.ExpressCommodity;
import com.peanut.modules.common.entity.ExpressOrder;
import com.peanut.modules.common.entity.ExpressQueryResponse;
import com.peanut.modules.common.vo.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
//快递工具类
@Component
public class ExpressOrderUtil {
@Value("${express.sender.senderName}")
private String senderName;
@Value("${express.sender.mobile}")
private String senderMobile;
@Value("${express.sender.provinceName}")
private String senderProvinceName;
@Value("${express.sender.cityName}")
private String senderCityName;
@Value("${express.sender.expAreaName}")
private String senderExpAreaName;
@Value("${express.sender.address}")
private String senderAddress;
public ExpressOrderResponseVo placeExpressOrder(ExpressOrder expressOrder) {
ExpressOrderRequestVo orderRequestVo = new ExpressOrderRequestVo();
// 订单号
orderRequestVo.setOrderCode(expressOrder.getOrderSn());
orderRequestVo.setIsReturnPrintTemplate(1);
orderRequestVo.setShipperCode(expressOrder.getExpressCompanyCode());
orderRequestVo.setPayType(3);
if (expressOrder.getExpressCompanyCode().equals(Constants.EXPRESS_COMPANY_CODE_SF)) {
orderRequestVo.setMonthCode(Constants.EXPRESS_SF_MONTH_CODE);
//如果是顺丰港澳台参数多两个必填CurrencyCode、Dutiable.DeclaredValue
if ("台湾省".equals(expressOrder.getProvince())||
"香港特别行政区".equals(expressOrder.getProvince())||
"澳门特别行政区".equals(expressOrder.getProvince())){
orderRequestVo.setCurrencyCode("CNY");
BigDecimal declaredValue = new BigDecimal(0);
if (expressOrder.getCommodity().size()>0){
for (ExpressCommodity commodity : expressOrder.getCommodity()) {
BigDecimal quantity = BigDecimal.valueOf(commodity.getGoodsquantity());
BigDecimal price = BigDecimal.valueOf(commodity.getGoodsPrice());
BigDecimal total = quantity.multiply(price);
declaredValue = declaredValue.add(total);
}
}
DutiableVo dutiable = new DutiableVo();
dutiable.setDeclaredValue(declaredValue.setScale(3));
orderRequestVo.setDutiable(dutiable);
}
}
if (expressOrder.getExpressCompanyCode().equals(Constants.EXPRESS_COMPANY_CODE_YD)) {
orderRequestVo.setCustomerName(Constants.EXPRESS_YD_CUSTOMER_NAME);
orderRequestVo.setCustomerPwd(Constants.EXPRESS_YD_CUSTOMER_PWD);
}
orderRequestVo.setExpType(231);//1特快2标快
orderRequestVo.setCost(expressOrder.getExpressFee().doubleValue());
// 发货人
ExpressUserInfoVo sender = new ExpressUserInfoVo();
sender.setName(senderName);
sender.setMobile(senderMobile);
sender.setProvinceName(senderProvinceName);
sender.setCityName(senderCityName);
sender.setExpAreaName(senderExpAreaName);
sender.setAddress(senderAddress);
// 收货人
ExpressUserInfoVo receiver = new ExpressUserInfoVo();
receiver.setName(expressOrder.getConsigneeName());
receiver.setMobile(expressOrder.getConsigneeMobile());
receiver.setProvinceName(expressOrder.getProvince());
receiver.setCityName(expressOrder.getCity());
receiver.setExpAreaName(expressOrder.getCounty());
receiver.setAddress(expressOrder.getAddress());
orderRequestVo.setSender(sender);
orderRequestVo.setReceiver(receiver);
orderRequestVo.setCommodity(expressOrder.getCommodity());
orderRequestVo.setWeight(expressOrder.getTotalWeight().doubleValue());
orderRequestVo.setRemark(expressOrder.getRemark());
orderRequestVo.setTemplateSize("150");
String requestData = JSONObject.toJSONString(orderRequestVo);
//如果是顺丰港澳台参数多两个必填CurrencyCode、Dutiable.DeclaredValue需要大写
String requestDataUpperCase = requestData;
if (requestData.contains("currencyCode")){
requestDataUpperCase = requestData.replace("currencyCode","CurrencyCode")
.replace("dutiable","Dutiable")
.replace("declaredValue","DeclaredValue");
}
Map<String, String> params = new HashMap<>();
params.put("RequestData", requestDataUpperCase);
params.put("EBusinessID", Constants.EXPRESS_BUSINESS_ID);
params.put("RequestType", Constants.EXPRESS_REQUEST_TYPE_PLACE_ORDER);
try {
String dataSign = KdUtils.encrypt(requestDataUpperCase, Constants.EXPRESS_API_KEY, "UTF-8");
params.put("DataSign", KdUtils.urlEncoder(dataSign, "UTF-8"));
} catch (Exception e) {
e.printStackTrace();
}
params.put("DataType", "2");
String response = HttpClientUtils.kdSendPost(Constants.EXPRESS_PLACE_ORDER_URL, params);
return JSONObject.parseObject(response, ExpressOrderResponseVo.class);
}
public ExpressQueryResponse queryExpressOrder(ExpressOrder eOrder) {
String logisticCode = eOrder.getExpressOrderSn();
String tel = eOrder.getConsigneeMobile().substring(eOrder.getConsigneeMobile().length()-4);
String shipperCode = eOrder.getExpressCompanyCode();
ExpressQueryRequestVo requestVo = new ExpressQueryRequestVo();
requestVo.setLogisticCode(logisticCode);
requestVo.setCustomerName(tel);
requestVo.setShipperCode(shipperCode);
String requestData = JSONObject.toJSONString(requestVo);
Map<String, String> params = new HashMap<>();
params.put("RequestData", requestData);
params.put("EBusinessID", Constants.EXPRESS_BUSINESS_ID);
params.put("RequestType", Constants.EXPRESS_REQUEST_TYPE_QUERY);
try {
String dataSign = KdUtils.encrypt(requestData, Constants.EXPRESS_API_KEY, "UTF-8");
params.put("DataSign", KdUtils.urlEncoder(dataSign, "UTF-8"));
} catch (Exception e) {
e.printStackTrace();
}
params.put("DateType", "2");
String response = HttpClientUtils.kdSendPost(Constants.EXPRESS_QUERY_URL, params);
return JSONObject.parseObject(response, ExpressQueryResponse.class);
}
}