Browse Source

快递dome

master
前端-胡立永 3 weeks ago
parent
commit
b51560f7c8
7 changed files with 231 additions and 11 deletions
  1. +8
    -0
      module-common/src/main/java/org/jeecg/api/service/impl/AppletOrderServiceImpl.java
  2. +6
    -1
      module-common/src/main/java/org/jeecg/api/service/impl/AppletOrderTeamServiceImpl.java
  3. +2
    -2
      module-common/src/main/java/org/jeecg/api/service/impl/AppletPromotionServiceImpl.java
  4. +203
    -0
      module-common/src/main/java/org/jeecg/api/wxUtils/LogisticsUtil.java
  5. +3
    -3
      module-common/src/main/java/org/jeecg/common/logistics/controller/WeChatLogisticsTestController.java
  6. +0
    -4
      module-common/src/main/resources/wechat-logistics-config-example.yml
  7. +9
    -1
      module-system/src/main/resources/application-dev.yml

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

@ -62,6 +62,8 @@ public class AppletOrderServiceImpl implements AppletOrderService {
private IHanHaiMemberService hanHaiMemberService;
@Resource
private ICommonConfigService commonConfigService;
@Autowired
private org.jeecg.api.service.impl.LogisticsUtil logisticsUtil;
// 联系客服问题相关列表数据带分页
@Override
@ -174,6 +176,10 @@ public class AppletOrderServiceImpl implements AppletOrderService {
// TODO 如果下单物流了 取消物流
if(StringUtils.isNotBlank(commonOrder.getWliuNo())){
logisticsUtil.cancelOrder(hanHaiMember.getAppletOpenid(), commonOrder, null);
}
commonOrder.setState(3);//取消订单
commonOrderService.updateById(commonOrder);
return Result.OK("取消订单成功");
@ -305,6 +311,8 @@ public class AppletOrderServiceImpl implements AppletOrderService {
cityOrder.setStatus(1);
cityOrder.setState(0);
logisticsUtil.addOrder(hanHaiMember.getAppletOpenid(), cityOrder);
cityOrder.setIsBy("Y");
}else {//不包邮进行审批是否值得包邮
cityOrder.setIsBy("N");


+ 6
- 1
module-common/src/main/java/org/jeecg/api/service/impl/AppletOrderTeamServiceImpl.java View File

@ -57,6 +57,8 @@ public class AppletOrderTeamServiceImpl implements AppletOrderTeamService {
private ICommonReasonsService commonReasonsService;
@Autowired
private ICommonShopService commonShopService;
@Autowired
private org.jeecg.api.service.impl.LogisticsUtil logisticsUtil;
//管理员订单列表带分页搜索
@Override
@ -185,10 +187,13 @@ public class AppletOrderTeamServiceImpl implements AppletOrderTeamService {
HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token);
CommonOrder commonOrder = commonOrderService.getById(orderId);
commonOrder.setStatus(1);//快递上门
commonOrderService.updateById(commonOrder);
HanHaiMember member = hanHaiMemberService.getById(commonOrder.getUserId());
// TODO 接入物流下单 当物流取件完成时 修改 status=2 state=1
logisticsUtil.addOrder(member.getAppletOpenid(), commonOrder);
commonOrderService.updateById(commonOrder);
return Result.OK("订单审核通过");
}


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

@ -198,9 +198,9 @@ public class AppletPromotionServiceImpl implements AppletPromotionService {
// 如果启用了Redis缓存可以取消下面注释
//redisUtil.set(cacheKey, qrCodeImageUrl, 3600); // 缓存一小时
return qrCodeBytes;
// return qrCodeBytes;
// return this.generateAndCombineImagesFromUrl2(qrCodeBytes, backgroundImageUrl);
return this.generateAndCombineImagesFromUrl2(qrCodeBytes, backgroundImageUrl);
} catch (Exception e) {
e.printStackTrace();


+ 203
- 0
module-common/src/main/java/org/jeecg/api/wxUtils/LogisticsUtil.java View File

@ -0,0 +1,203 @@
package org.jeecg.api.service.impl;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.logistics.dto.WeChatLogisticsAddOrderRequest;
import org.jeecg.common.logistics.dto.WeChatLogisticsAddOrderResponse;
import org.jeecg.common.logistics.dto.WeChatLogisticsCancelOrderRequest;
import org.jeecg.common.logistics.dto.WeChatLogisticsCancelOrderResponse;
import org.jeecg.common.logistics.service.WeChatLogisticsService;
import org.jeecg.common.logistics.util.WeChatLogisticsRequestBuilder;
import org.jeecg.modules.commonOrder.entity.CommonOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
@Slf4j
@Component
public class LogisticsUtil {
@Value("${logistics.deliveryId}")
private String deliveryId;
@Value("${logistics.bizId}")
private String bizId;
@Autowired
private WeChatLogisticsService weChatLogisticsService;
public WeChatLogisticsAddOrderResponse addOrder(String openid, CommonOrder order){
ArrayList<String> address = getAddress(order.getAddress());
// 获取上门时间
String goTimeStr = order.getGoTime();
long goTimeStamp;
try {
// 将字符串时间转换为时间戳
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.util.Date goDate = sdf.parse(goTimeStr);
java.util.Calendar calendar = java.util.Calendar.getInstance();
// 获取当前时间
java.util.Date currentDate = new java.util.Date();
// 判断上门时间是否小于当前时间
if (goDate.before(currentDate)) {
// 如果小于当前时间设置为明天的同一时刻只改变日期时间保持不变
calendar.setTime(goDate);
calendar.add(java.util.Calendar.DAY_OF_MONTH, 1);
goDate = calendar.getTime();
// 更新order中的上门时间
String newGoTimeStr = sdf.format(goDate);
order.setGoTime(newGoTimeStr);
log.info("上门时间小于当前时间,已调整为明天同一时刻:{}", newGoTimeStr);
}
// 转换为时间戳
goTimeStamp = goDate.getTime() / 1000;
} catch (Exception e) {
// 转换异常时使用当前时间加24小时
java.util.Calendar calendar = java.util.Calendar.getInstance();
calendar.add(java.util.Calendar.DAY_OF_MONTH, 1);
java.util.Date tomorrow = calendar.getTime();
// 更新order中的上门时间
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String newGoTimeStr = sdf.format(tomorrow);
order.setGoTime(newGoTimeStr);
goTimeStamp = tomorrow.getTime() / 1000;
log.warn("上门时间格式错误,已设置为明天:{}", newGoTimeStr);
}
// 使用工具类构建测试请求
WeChatLogisticsAddOrderRequest request = WeChatLogisticsRequestBuilder.createOrderRequest()
.orderId(order.getId())
.openid(openid)
.deliveryId(deliveryId)
.bizId(bizId)
.customRemark("测试订单")
.addSource(0) // 小程序订单
// 发件人信息测试数据
.sender(order.getName(), order.getPhone(), address.get(0), address.get(1), address.get(2), order.getAddressDetail())
// 收件人信息测试数据
.receiver("李四", "13900139000", "上海市", "上海市", "浦东新区", "张江高科技园区科苑路399号")
// 包裹信息
.cargo(1, 1.5, 25.0, 20.0, 15.0)
.cargoDetail("测试商品", 1)
// 商品信息
.shop("pages/order/detail?id=test123", "https://example.com/test.jpg", "测试商品", 1)
// 保价信息保价100元
.insured(0,0)
// 服务类型测试环境固定配置
/*
1大件快递3.60
2特准快件
*/
.serviceWithExpectTime(1, "test_service_name", goTimeStamp) // 上门取件时间
.build();
log.info("测试下单请求:{}", request);
// 调用下单服务
WeChatLogisticsAddOrderResponse response = null;
try {
response = weChatLogisticsService.addOrder(request);
} catch (Exception e) {
throw new RuntimeException(e);
}
// 输出地址验证信息
if (response.getIsCorrectSender() != null) {
log.info("发件人信息验证:{}", response.getIsCorrectSender() == 1 ? "正确" : "错误");
}
if (response.getIsCorrectReceiver() != null) {
log.info("收件人信息验证:{}", response.getIsCorrectReceiver() == 1 ? "正确" : "错误");
}
order.setWliuNo(response.getWaybillId());//设置物流编号
return response;
}
public WeChatLogisticsCancelOrderResponse cancelOrder(String openid, CommonOrder order, String cancelMsg){
WeChatLogisticsCancelOrderRequest request = new WeChatLogisticsCancelOrderRequest();
request.setOrderId(order.getId());
request.setWaybillId(order.getWliuNo());
request.setDeliveryId(deliveryId);
request.setOpenid(openid);
request.setCancelMsg(cancelMsg);
log.info("取消运单请求:{}", request);
WeChatLogisticsCancelOrderResponse response = null;
try {
response = weChatLogisticsService.cancelOrder(request);
} catch (Exception e) {
throw new RuntimeException(e);
}
log.info("===== 取消运单结果 =====");
log.info("订单ID:{}", response.getOrderId());
log.info("运单ID:{}", response.getWaybillId());
log.info("取消时间:{}", response.getCancelTime());
log.info("====================");
return response;
}
public ArrayList<String> getAddress(String address){
ArrayList<String> list = new ArrayList<>();
// 从地址中提取省市区信息
String province = "";
String city = "";
String district = "";
// 使用正则表达式解析地址字符串提取省市区
if (address != null && !address.isEmpty()) {
// 匹配省份以省自治区直辖市结尾
java.util.regex.Pattern provincePattern = java.util.regex.Pattern.compile("^(.*?省|.*?自治区|北京市|天津市|上海市|重庆市)");
java.util.regex.Matcher provinceMatcher = provincePattern.matcher(address);
if (provinceMatcher.find()) {
province = provinceMatcher.group(1);
list.add(province);
}
// 匹配城市以市自治州地区盟结尾
java.util.regex.Pattern cityPattern = java.util.regex.Pattern.compile("(?<=" + province + ")(.*?市|.*?自治州|.*?地区|.*?盟)");
java.util.regex.Matcher cityMatcher = cityPattern.matcher(address);
if (cityMatcher.find()) {
city = cityMatcher.group(1);
list.add(city);
}
// 匹配区县以区旗结尾
java.util.regex.Pattern districtPattern = java.util.regex.Pattern.compile("(?<=" + city + ")(.*?区|.*?县|.*?旗|.*?市)");
java.util.regex.Matcher districtMatcher = districtPattern.matcher(address);
if (districtMatcher.find()) {
district = districtMatcher.group(1);
list.add(district);
}
}
return list;
}
}

+ 3
- 3
module-common/src/main/java/org/jeecg/common/logistics/controller/WeChatLogisticsTestController.java View File

@ -85,7 +85,7 @@ public class WeChatLogisticsTestController {
.shop("pages/order/detail?id=test123", "https://example.com/test.jpg", "测试商品", 1)
// 保价信息保价100元
.insured(1, 10000)
.insured(0,0)
// 服务类型测试环境固定配置
.serviceWithExpectTime(1, "test_service_name", System.currentTimeMillis() / 1000 + 3600) // 1小时后上门取件
@ -120,8 +120,8 @@ public class WeChatLogisticsTestController {
@ApiOperation(value = "测试查询运单轨迹", notes = "测试查询运单轨迹,获取快递员手机号 - 使用测试环境")
@PostMapping("/getPath")
public Result<WeChatLogisticsPathResponse> testGetPath(
@RequestParam(required = false, defaultValue = "test_order_id") String orderId,
@RequestParam(required = false, defaultValue = "test_waybill_id") String waybillId,
@RequestParam(required = false, defaultValue = "TEST_ORDER_1751767822468") String orderId,
@RequestParam(required = false, defaultValue = "TEST_ORDER_1751767822468_waybill_id") String waybillId,
@RequestParam(required = false, defaultValue = "TEST") String deliveryId,
@RequestParam(required = false, defaultValue = "otvnw62EqdpKnCvDQYUjCeNG99XY") String openid) {
try {


+ 0
- 4
module-common/src/main/resources/wechat-logistics-config-example.yml View File

@ -2,10 +2,6 @@
# 请将以下配置添加到你的 application.yml 文件中
wechat:
# 微信小程序AppID
mp-app-id: "wxe934cebcbc89d869"
# 微信小程序AppSecret
mp-app-secret: "78e4e80a2096b362114a7afeefd2ef23"
# 是否启用微信物流服务
enabled: true
# 连接超时时间(毫秒)


+ 9
- 1
module-system/src/main/resources/application-dev.yml View File

@ -352,4 +352,12 @@ dop:
companyCode: EWBXZDDMXX
appKey: eb4cd9c454e93a2b76a9d9c5c1f8542a
sign: ZRNR
# 客户编号 1102311359
# 客户编号 1102311359
logistics:
# 正式配置
# deliveryId: DP
# bizId: 1102311359
# 测试配置
deliveryId: TEST
bizId: test_biz_id

Loading…
Cancel
Save