Browse Source

对接德邦物流

master
前端-胡立永 1 week ago
parent
commit
e33105b693
9 changed files with 120 additions and 33 deletions
  1. +7
    -0
      module-common/src/main/java/org/jeecg/api/controller/AppletOrderController.java
  2. +2
    -0
      module-common/src/main/java/org/jeecg/api/service/AppletOrderService.java
  3. +57
    -7
      module-common/src/main/java/org/jeecg/api/service/impl/AppletOrderServiceImpl.java
  4. +16
    -2
      module-common/src/main/java/org/jeecg/api/service/impl/LogisticsUtil.java
  5. +1
    -8
      module-common/src/main/java/org/jeecg/common/dblogistics/config/DBLogisticsConfig.java
  6. +11
    -0
      module-common/src/main/java/org/jeecg/common/dblogistics/controller/LogisticsTestController.java
  7. +12
    -0
      module-common/src/main/java/org/jeecg/common/dblogistics/dto/OrderStatusPushRequest.java
  8. +4
    -4
      module-common/src/main/java/org/jeecg/modules/commonOrder/entity/CommonOrder.java
  9. +10
    -12
      module-system/src/main/resources/application-dev.yml

+ 7
- 0
module-common/src/main/java/org/jeecg/api/controller/AppletOrderController.java View File

@ -94,4 +94,11 @@ public class AppletOrderController {
return appletOrderService.track(request); return appletOrderService.track(request);
} }
//接收物流状态推送
@PostMapping(value = "/wuliu_status")
public Object wuliu_status(String params){
return appletOrderService.wuliuStatus(params);
}
} }

+ 2
- 0
module-common/src/main/java/org/jeecg/api/service/AppletOrderService.java View File

@ -29,4 +29,6 @@ public interface AppletOrderService {
Result<?> getCeckoutReasons(String token, String classId, String type); Result<?> getCeckoutReasons(String token, String classId, String type);
Object track(LogisticsTrackPushRequest request); Object track(LogisticsTrackPushRequest request);
Object wuliuStatus(String params);
} }

+ 57
- 7
module-common/src/main/java/org/jeecg/api/service/impl/AppletOrderServiceImpl.java View File

@ -10,6 +10,7 @@ import org.jeecg.api.bean.PageBean;
import org.jeecg.api.service.AppletOrderService; import org.jeecg.api.service.AppletOrderService;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.common.dblogistics.dto.LogisticsTrackPushRequest; import org.jeecg.common.dblogistics.dto.LogisticsTrackPushRequest;
import org.jeecg.common.dblogistics.dto.OrderStatusPushRequest;
import org.jeecg.config.shiro.ShiroRealm; import org.jeecg.config.shiro.ShiroRealm;
import org.jeecg.modules.commonAddress.entity.CommonAddress; import org.jeecg.modules.commonAddress.entity.CommonAddress;
import org.jeecg.modules.commonAddress.service.ICommonAddressService; import org.jeecg.modules.commonAddress.service.ICommonAddressService;
@ -110,13 +111,9 @@ public class AppletOrderServiceImpl implements AppletOrderService {
//得到集合数据 //得到集合数据
for (CommonOrder commonOrder : pageList.getRecords()) { for (CommonOrder commonOrder : pageList.getRecords()) {
//查询下级
List<CommonOrder> children = commonOrderService
.lambdaQuery()
.eq(CommonOrder::getPid,commonOrder.getId())
.list();
commonOrder.setCommonOrderList(children);
commonOrder.setCommonOrderList(getCommonOrderList(commonOrder.getId(), 0));
// 设置物流轨迹状态 // 设置物流轨迹状态
setLogisticsTrajectoryStatus(commonOrder); setLogisticsTrajectoryStatus(commonOrder);
} }
@ -490,6 +487,38 @@ public class AppletOrderServiceImpl implements AppletOrderService {
return map; return map;
} }
@Override
public Object wuliuStatus(String params) {
HashMap<String, Object> map = new HashMap<>();
map.put("success", true);
map.put("result", "true");
map.put("error_msg", null);
map.put("error_code", null);
map.put("logisticCompanyID", "DEPPON");
OrderStatusPushRequest request = JSON.parseObject(params, OrderStatusPushRequest.class);
map.put("logisticID", request.getLogisticID());
CommonOrder one = commonOrderService.lambdaQuery()
.eq(CommonOrder::getLogisticId, request.getLogisticID())
.one();
if (one == null){
return map;
}
if ("RECEIPTING".equals(request.getStatusType())){//送货中
//拿到快递员手机号
String phoneNumber = extractPhoneNumber(request.getComments());
if (StringUtils.isNotBlank(phoneNumber)){
one.setDeliveryPhone(phoneNumber);
commonOrderService.updateById(one);
}
}
return map;
}
/** /**
* 计算地址是否包邮 * 计算地址是否包邮
* @param address 收货地址对象 * @param address 收货地址对象
@ -546,6 +575,27 @@ public class AppletOrderServiceImpl implements AppletOrderService {
} }
} }
/**
* 使用正则表达式提取手机号
* @param text 包含手机号的文本
* @return 提取到的手机号如果没有找到则返回空字符串
*/
private String extractPhoneNumber(String text) {
if (StringUtils.isBlank(text)) {
return "";
}
// 匹配11位手机号的正则表达式
java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("1[3-9]\\d{9}");
java.util.regex.Matcher matcher = pattern.matcher(text);
if (matcher.find()) {
return matcher.group();
}
return "";
}
/** /**
* 根据运单号更新订单状态 * 根据运单号更新订单状态
* @param trackingNumber 运单号 * @param trackingNumber 运单号


+ 16
- 2
module-common/src/main/java/org/jeecg/api/service/impl/LogisticsUtil.java View File

@ -12,13 +12,16 @@ import org.jeecg.common.logistics.service.WeChatLogisticsService;
import org.jeecg.common.logistics.util.WeChatLogisticsRequestBuilder; import org.jeecg.common.logistics.util.WeChatLogisticsRequestBuilder;
import org.jeecg.modules.commonConfig.service.ICommonConfigService; import org.jeecg.modules.commonConfig.service.ICommonConfigService;
import org.jeecg.modules.commonOrder.entity.CommonOrder; import org.jeecg.modules.commonOrder.entity.CommonOrder;
import org.jeecg.modules.commonOrder.service.ICommonOrderService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Collectors;
@Slf4j @Slf4j
@Component @Component
@ -36,6 +39,8 @@ public class LogisticsUtil {
private WeChatLogisticsService weChatLogisticsService; private WeChatLogisticsService weChatLogisticsService;
@Autowired @Autowired
private ICommonConfigService commonConfigService; private ICommonConfigService commonConfigService;
@Autowired
private ICommonOrderService orderService;
public LogisticsUtil() { public LogisticsUtil() {
// 默认构造函数 // 默认构造函数
@ -82,6 +87,15 @@ public class LogisticsUtil {
try { try {
ArrayList<String> address = getAddress(order.getAddress()); ArrayList<String> address = getAddress(order.getAddress());
List<String> titles = orderService
.lambdaQuery()
.eq(CommonOrder::getType, 0)
.eq(CommonOrder::getPid, order.getId())
.select(CommonOrder::getTitle)
.list().stream().map(n -> n.getTitle())
.collect(Collectors.toList());
DopOrder dto = new DopOrder(); DopOrder dto = new DopOrder();
dto.setCustOrderNo(order.getId()); // 客户订单号 dto.setCustOrderNo(order.getId()); // 客户订单号
@ -90,10 +104,10 @@ public class LogisticsUtil {
// 创建包裹信息 // 创建包裹信息
DopPackageInfo packageInfo = new DopPackageInfo(); DopPackageInfo packageInfo = new DopPackageInfo();
packageInfo.setCargoName("货物名");
packageInfo.setCargoName(String.join(",", titles));
packageInfo.setDeliveryType("4"); packageInfo.setDeliveryType("4");
packageInfo.setTotalNumber(1); packageInfo.setTotalNumber(1);
packageInfo.setTotalVolume(0.01);
packageInfo.setTotalVolume(1);
packageInfo.setTotalWeight(10); packageInfo.setTotalWeight(10);
packageInfo.setPackageService("纸"); packageInfo.setPackageService("纸");
dto.setPackageInfo(packageInfo); dto.setPackageInfo(packageInfo);


+ 1
- 8
module-common/src/main/java/org/jeecg/common/dblogistics/config/DBLogisticsConfig.java View File

@ -67,10 +67,6 @@ public class DBLogisticsConfig {
*/ */
@Data @Data
public static class Api { public static class Api {
/**
* 基础URL
*/
private String baseUrl;
/** /**
* 创建订单接口 * 创建订单接口
@ -116,9 +112,6 @@ public class DBLogisticsConfig {
* @return 完整的API URL * @return 完整的API URL
*/ */
public String getApiUrl(String apiPath) { public String getApiUrl(String apiPath) {
if (api != null && api.getBaseUrl() != null) {
return api.getBaseUrl() + apiPath;
}
return getCurrentApiUrl() + apiPath;
return apiPath;
} }
} }

+ 11
- 0
module-common/src/main/java/org/jeecg/common/dblogistics/controller/LogisticsTestController.java View File

@ -5,6 +5,7 @@ import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jeecg.api.service.impl.LogisticsUtil; import org.jeecg.api.service.impl.LogisticsUtil;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.common.dblogistics.dto.TraceSubscribeRequest;
import org.jeecg.common.dblogistics.service.DBLogisticsService; import org.jeecg.common.dblogistics.service.DBLogisticsService;
import org.jeecg.common.logistics.dto.*; import org.jeecg.common.logistics.dto.*;
import org.jeecg.common.logistics.service.WeChatLogisticsService; import org.jeecg.common.logistics.service.WeChatLogisticsService;
@ -55,4 +56,14 @@ public class LogisticsTestController {
return Result.ok(); return Result.ok();
} }
/**
* 测试所有方法
*/
@ApiOperation(value = "测试所有方法", notes = "使用测试环境数据测试生成微信物流运单 - 仅限测试用途,每天限制10次")
@PostMapping("/test")
public Result test() {
logisticsService.subscribeTrace(new TraceSubscribeRequest("DPK6581308106394"));
return Result.ok();
}
} }

+ 12
- 0
module-common/src/main/java/org/jeecg/common/dblogistics/dto/OrderStatusPushRequest.java View File

@ -0,0 +1,12 @@
package org.jeecg.common.dblogistics.dto;
import lombok.Data;
@Data
public class OrderStatusPushRequest {
private String comments;//描述
private String statusType;//状态 RECEIPTING是拿到快递员电话的时候
private String logisticID;//物流id
}

+ 4
- 4
module-common/src/main/java/org/jeecg/modules/commonOrder/entity/CommonOrder.java View File

@ -88,7 +88,7 @@ public class CommonOrder implements Serializable {
/**订单标题*/ /**订单标题*/
@Excel(name = "订单标题", width = 15) @Excel(name = "订单标题", width = 15)
@ApiModelProperty(value = "订单标题") @ApiModelProperty(value = "订单标题")
private java.lang.String title;
private java.lang.String title;//商品名称
/**客户姓名*/ /**客户姓名*/
@Excel(name = "客户姓名", width = 15) @Excel(name = "客户姓名", width = 15)
@ApiModelProperty(value = "客户姓名") @ApiModelProperty(value = "客户姓名")
@ -198,9 +198,9 @@ public class CommonOrder implements Serializable {
@Dict(dictTable = "common_vip", dicCode = "id", dicText = "name") @Dict(dictTable = "common_vip", dicCode = "id", dicText = "name")
private java.lang.String pinId; private java.lang.String pinId;
// @Excel(name = "快递员电话", width = 15)
// @ApiModelProperty(value = "快递员电话")
// private String deliveryPhone;
@Excel(name = "快递员电话", width = 15)
@ApiModelProperty(value = "快递员电话")
private String deliveryPhone;
@Excel(name = "合格数量", width = 15) @Excel(name = "合格数量", width = 15)
@ApiModelProperty(value = "合格数量") @ApiModelProperty(value = "合格数量")


+ 10
- 12
module-system/src/main/resources/application-dev.yml View File

@ -335,10 +335,10 @@ wechat:
mpAppId: wx2bd656ae9704dbee # 微信小程序appid mpAppId: wx2bd656ae9704dbee # 微信小程序appid
mpAppSecret: b07f82b16e9598bc23de604f49c57e23 # 微信小程序密钥 mpAppSecret: b07f82b16e9598bc23de604f49c57e23 # 微信小程序密钥
merchantId: 1701841654 # 商户号 merchantId: 1701841654 # 商户号
privateKeyPath: module-system/src/main/resources/apiclient_key.pem #本地私钥路径
publicKeyPath: module-system/src/main/resources/pub_key.pem #本地公钥路径
# privateKeyPath: /data/app-test/hly/cerFile/apiclient_key.pem #线上私钥路径
# publicKeyPath: /data/app-test/hly/cerFile/pub_key.pem #线上公钥路径
# privateKeyPath: module-system/src/main/resources/apiclient_key.pem #本地私钥路径
# publicKeyPath: module-system/src/main/resources/pub_key.pem #本地公钥路径
privateKeyPath: /data/app-test/hly/cerFile/apiclient_key.pem #线上私钥路径
publicKeyPath: /data/app-test/hly/cerFile/pub_key.pem #线上公钥路径
publicKeyId: PUB_KEY_ID_0117018416542025022100395100001649 #公钥 publicKeyId: PUB_KEY_ID_0117018416542025022100395100001649 #公钥
merchantSerialNumber: 525971050851A99F315A970D3055192779652E03 # 商户API证书序列号 merchantSerialNumber: 525971050851A99F315A970D3055192779652E03 # 商户API证书序列号
apiV3Key: # 商户APIV3密钥 apiV3Key: # 商户APIV3密钥
@ -353,20 +353,18 @@ dblogistics:
sign: ZRNR sign: ZRNR
customerCode: 1102311359 customerCode: 1102311359
api: api:
# 德邦物流API接口地址配置
baseUrl: http://dpsanbox.deppon.com/sandbox-web
# 创建订单接口 # 创建订单接口
createOrder: /dop-standard-ewborder/createOrderNotify.action
createOrder: http://dpsanbox.deppon.com/sandbox-web/dop-standard-ewborder/createOrderNotify.action
# 轨迹查询接口 # 轨迹查询接口
queryTrace: /standard-order/newTraceQuery.action
queryTrace: http://dpsanbox.deppon.com/sandbox-web/standard-order/newTraceQuery.action
# 修改订单接口 # 修改订单接口
updateOrder: /standard-order/updateOrder.action
updateOrder: http://dpsanbox.deppon.com/sandbox-web/standard-order/updateOrder.action
# 撤销订单接口 # 撤销订单接口
cancelOrder: /standard-order/cancelOrder.action
cancelOrder: http://dpsanbox.deppon.com/sandbox-web/standard-order/cancelOrder.action
# 查询订单接口 # 查询订单接口
queryOrder: /standard-order/queryOrder.action
queryOrder: http://dpsanbox.deppon.com/sandbox-web/standard-order/queryOrder.action
# 轨迹订阅接口 # 轨迹订阅接口
subscribeTrace: /standard-order/standTraceSubscribe.action
subscribeTrace: http://dpsanbox.deppon.com/sandbox-web/standard-order/standTraceSubscribe.action
# 客户编号 1102311359 # 客户编号 1102311359


Loading…
Cancel
Save