From 4ab710d8d70017f090dd9601099ded1a50a58a10 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期一, 27 四月 2026 22:34:52 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java | 198 +++++++++++++++++++++++++++++++++++++++----------
1 files changed, 157 insertions(+), 41 deletions(-)
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
index 6198ee9..aec4757 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
@@ -17,6 +17,7 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.DateUtil;
+import com.doumee.core.utils.ID;
import com.doumee.core.utils.geocode.MapUtil;
import com.doumee.core.utils.Utils;
import com.doumee.core.utils.aliyun.AliSmsService;
@@ -237,7 +238,14 @@
queryWrapper.orderByAsc(sortData.getProperty());
}
}
- return PageData.from(ordersMapper.selectJoinPage(page, Orders.class, queryWrapper));
+ PageData<Orders> pageData = PageData.from(ordersMapper.selectJoinPage(page, Orders.class, queryWrapper));
+ for (Orders o : pageData.getRecords()) {
+ if (o.getStatus() != null) {
+ Constants.OrderStatus os = Constants.OrderStatus.getByKey(o.getStatus());
+ o.setStatusDesc(os != null ? os.getValue() : "");
+ }
+ }
+ return pageData;
}
@Override
@@ -698,7 +706,7 @@
// 鏃犲彇浠堕棬搴楋紝鏍¢獙瀛樹欢鐐逛笌鑷�夊彇浠剁偣鏄惁鍦ㄥ悓涓�鍩庡競
if (!MapUtil.isSameCity(depositShop.getLatitude(), depositShop.getLongitude(),
dto.getTakeLat().doubleValue(), dto.getTakeLgt().doubleValue())) {
- throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "寮傚湴瀵勫瓨璁㈠崟瀛樺彇鐐逛笉鍦ㄥ悓涓�鍩庡競锛屽闇�璇烽�夋嫨鍚屽煄闂ㄥ簵");
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀛樺彇鐐逛笉鍦ㄥ悓涓�鍩庡競锛�");
}
takeLat = dto.getTakeLat();
takeLgt = dto.getTakeLgt();
@@ -785,6 +793,7 @@
// 寮傚湴锛氬彇浠剁偣淇℃伅
orders.setTakeShopId(dto.getTakeShopId());
orders.setTakeLocation(takeLocationValue);
+ orders.setTakeLocationRemark(takeLocationValue);
orders.setTakeLat(takeLat);
orders.setTakeLgt(takeLgt);
orders.setIsUrgent(dto.getIsUrgent());
@@ -793,6 +802,7 @@
// 灏卞湴锛氬彇浠剁偣鍚屽瘎浠跺簵閾�
orders.setTakeShopId(dto.getDepositShopId());
orders.setTakeLocation(depositShop.getAddress());
+ orders.setTakeLocationRemark(depositShop.getAddress());
orders.setTakeLat(BigDecimal.valueOf(depositShop.getLatitude()));
orders.setTakeLgt(BigDecimal.valueOf(depositShop.getLongitude()));
orders.setIsUrgent(Constants.ZERO);
@@ -836,6 +846,19 @@
ordersMapper.insert(orders);
Integer orderId = orders.getId();
+
+ // 鍒涘缓璁㈠崟鏃ュ織
+ OrderLog createLog = new OrderLog();
+ createLog.setOrderId(orderId);
+ createLog.setTitle(Constants.OrderLogType.createOrder.getTitle());
+ createLog.setLogInfo(Constants.OrderLogType.createOrder.format(orderCode));
+ createLog.setObjType(Constants.OrderLogType.createOrder.getStatus());
+ createLog.setOrderStatus(orders.getStatus());
+ createLog.setOptUserId(memberId);
+ createLog.setOptUserType(0);
+ createLog.setCreateTime(now);
+ createLog.setDeleted(Constants.ZERO);
+ orderLogService.create(createLog);
// ========== 7. 鍒涘缓璁㈠崟鏄庣粏 ==========
for (ItemPriceVO itemVO : priceResult.getItemList()) {
@@ -987,6 +1010,12 @@
OrderDetailVO vo = new OrderDetailVO();
vo.setOrder(order);
+ // 璁㈠崟鐘舵�佹弿杩�
+ if (order.getStatus() != null) {
+ Constants.OrderStatus os = Constants.OrderStatus.getByKey(order.getStatus());
+ vo.setStatusDesc(os != null ? os.getValue() : "");
+ }
+
// 鍥剧墖璺緞鍓嶇紑
String imgPrefix = getOrdersPrefix();
@@ -1111,19 +1140,6 @@
String optUserName = getCurrentUserName();
- // 鍔犳�ヨ垂鏃ュ織
- OrderLog feeLog = new OrderLog();
- feeLog.setOrderId(order.getId());
- feeLog.setTitle(Constants.OrderLogType.urgent.getTitle());
- feeLog.setLogInfo(Constants.OrderLogType.urgent.format(dto.getUrgentFee().toPlainString()));
- feeLog.setObjType(Constants.OrderLogType.urgent.getStatus());
- feeLog.setOrderStatus(order.getStatus());
- feeLog.setOptUserType(3);
- feeLog.setOptUserName(optUserName);
- feeLog.setCreateTime(new Date());
- feeLog.setDeleted(Constants.ZERO);
- orderLogService.create(feeLog);
-
// 鍔犳�ヨ垂鐢� 鍏冣啋鍒�
long urgentFeeFen = dto.getUrgentFee().multiply(new BigDecimal(100)).longValue();
@@ -1148,9 +1164,30 @@
updateWrapper.set(Orders::getRemark, dto.getRemark());
}
- // 鎸囨淳鍙告満锛堥潪蹇呭~锛�
+ // 鏃ュ織锛氬彧瀛樹竴鏉★紝鏈夊徃鏈虹敤 assignDriver锛屾棤鍙告満鐢� urgent
if (dto.getDriverId() != null) {
+ // 鏍¢獙鍙告満淇℃伅
+ DriverInfo driverInfo = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
+ .eq(DriverInfo::getMemberId, dto.getDriverId())
+ .eq(DriverInfo::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ if (driverInfo == null) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍙告満淇℃伅涓嶅瓨鍦�");
+ }
+ if (!Integer.valueOf(3).equals(driverInfo.getAuditStatus())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鍙告満鏈敮浠樻娂閲戯紝鏃犳硶娲惧崟");
+ }
+ if (!Constants.ZERO.equals(driverInfo.getStatus())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鍙告満宸茶绂佺敤锛屾棤娉曟淳鍗�");
+ }
+
+ // 鏇存柊鎺ュ崟鍙告満淇℃伅鍙婅鍗曠姸鎬�
+ Date now = new Date();
updateWrapper.set(Orders::getAssignDriverId, dto.getDriverId());
+ updateWrapper.set(Orders::getAcceptDriver, dto.getDriverId());
+ updateWrapper.set(Orders::getAcceptTime, now);
+ updateWrapper.set(Orders::getAcceptType, 1); // 1=绯荤粺娲惧崟
+ updateWrapper.set(Orders::getStatus, Constants.OrderStatus.accepted.getStatus());
Member driver = memberMapper.selectById(dto.getDriverId());
String driverName = driver != null ? driver.getName() : String.valueOf(dto.getDriverId());
@@ -1160,32 +1197,37 @@
driverLog.setTitle(Constants.OrderLogType.assignDriver.getTitle());
driverLog.setLogInfo(Constants.OrderLogType.assignDriver.format(driverName, dto.getUrgentFee().toPlainString()));
driverLog.setObjType(Constants.OrderLogType.assignDriver.getStatus());
- driverLog.setOrderStatus(order.getStatus());
+ driverLog.setOrderStatus(Constants.OrderStatus.accepted.getStatus());
driverLog.setOptUserType(3);
driverLog.setOptUserName(optUserName);
- driverLog.setCreateTime(new Date());
+ driverLog.setCreateTime(now);
driverLog.setDeleted(Constants.ZERO);
orderLogService.create(driverLog);
// 鐭俊閫氱煡鎸囨淳鍙告満锛堝姞鎬ユ淳鍗曪級
- DriverInfo driverInfo = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
- .eq(DriverInfo::getMemberId, dto.getDriverId())
- .eq(DriverInfo::getDeleted, Constants.ZERO)
- .last("limit 1"));
- if (driverInfo != null) {
- String address1 = order.getDepositShopAddress() != null ? order.getDepositShopAddress() : order.getDepositShopName();
- String address2 = order.getTakeShopAddress() != null ? order.getTakeShopAddress() :
- (order.getTakeLocation() != null ? order.getTakeLocation() : "");
- // 閰嶉�佽垂 = 鍙告満閰嶉�佽垂 + 鍔犳�ヨ垂
- long totalDriverFee = (order.getDriverFee() != null ? order.getDriverFee() : 0L) + urgentFeeFen;
- sendSmsNotify(driverInfo.getTelephone(),
- Constants.SmsNotify.DRIVER_URGENT_DISPATCH,
- "orderNo", order.getCode(),
- "address1", address1,
- "address2", address2,
- "money1", String.valueOf(totalDriverFee / 100.0),
- "money2", String.valueOf(urgentFeeFen / 100.0));
- }
+ String address1 = order.getDepositLocationRemark();
+ String address2 = order.getTakeLocationRemark();
+ long totalDriverFee = (order.getDriverFee() != null ? order.getDriverFee() : 0L) + urgentFeeFen;
+ sendSmsNotify(driverInfo.getTelephone(),
+ Constants.SmsNotify.DRIVER_URGENT_DISPATCH,
+ "orderNo", order.getCode(),
+ "address1", address1,
+ "address2", address2,
+ "money1", String.valueOf(totalDriverFee / 100.0),
+ "money2", String.valueOf(urgentFeeFen / 100.0));
+ } else {
+ // 鏈寚娲惧徃鏈猴紝鍙褰曞姞鎬ユ棩蹇�
+ OrderLog feeLog = new OrderLog();
+ feeLog.setOrderId(order.getId());
+ feeLog.setTitle(Constants.OrderLogType.urgent.getTitle());
+ feeLog.setLogInfo(Constants.OrderLogType.urgent.format(dto.getUrgentFee().toPlainString()));
+ feeLog.setObjType(Constants.OrderLogType.urgent.getStatus());
+ feeLog.setOrderStatus(order.getStatus());
+ feeLog.setOptUserType(3);
+ feeLog.setOptUserName(optUserName);
+ feeLog.setCreateTime(new Date());
+ feeLog.setDeleted(Constants.ZERO);
+ orderLogService.create(feeLog);
}
ordersMapper.update(updateWrapper);
@@ -1888,9 +1930,10 @@
Constants.SmsNotify.MEMBER_CANCELLED, "orderNo", order.getCode());
// 璋冪敤寰俊閫�娆綱3锛屽叏棰濋��娆�
+ String outRefundNo = ID.nextGUID();
com.wechat.pay.java.service.refund.model.Refund refundResult;
try {
- refundResult = wxPayV3Service.refund(order.getOutTradeNo(), order.getPayAmount(), order.getPayAmount(),
+ refundResult = wxPayV3Service.refund(outRefundNo, order.getOutTradeNo(), order.getPayAmount(), order.getPayAmount(),
"璁㈠崟閫�娆�", wxPayProperties.getV3RefundNotifyUrl());
} catch (Exception e) {
log.error("寰呭瘎瀛樿鍗曢��娆捐皟鐢ㄥ紓甯�, orderId={}", orderId, e);
@@ -1908,7 +1951,7 @@
refund.setDeleted(Constants.ZERO);
refund.setBeforeStatus(Constants.OrderStatus.waitDeposit.getStatus());
refund.setRefundAmount(order.getPayAmount());
- refund.setRefundCode(refundResult.getOutRefundNo());
+ refund.setRefundCode(outRefundNo);
if (com.wechat.pay.java.service.refund.model.Status.SUCCESS.equals(refundStatus)) {
// 閫�娆炬垚鍔�
@@ -2117,6 +2160,20 @@
}
}
ordersMapper.updateById(order);
+
+ // 鏀粯鎴愬姛鏃ュ織
+ OrderLog payLog = new OrderLog();
+ payLog.setOrderId(order.getId());
+ payLog.setTitle(Constants.OrderLogType.payOrder.getTitle());
+ payLog.setLogInfo(Constants.OrderLogType.payOrder.format(
+ String.valueOf(order.getTotalAmount() != null ? order.getTotalAmount() / 100.0 : 0)));
+ payLog.setObjType(Constants.OrderLogType.payOrder.getStatus());
+ payLog.setOrderStatus(order.getStatus());
+ payLog.setOptUserId(order.getMemberId());
+ payLog.setOptUserType(0);
+ payLog.setCreateTime(now);
+ payLog.setDeleted(Constants.ZERO);
+ orderLogService.create(payLog);
// 閫氱煡浼氬憳锛氳鍗曞緟鏍搁獙
sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.WAIT_VERIFY, order.getId(),
@@ -2736,7 +2793,64 @@
"orderNo", order.getCode(),
"settleDays", settleDays != null ? settleDays : "7");
}
- } else {
+ }else if(Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.delivering.getKey())){
+ // 浠呭紓鍦板瘎瀛� + 鏈夊彇浠堕棬搴� + 娲鹃�佷腑(4) 鍙牳閿�
+ if (!Constants.equalsInteger(order.getType(), Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "浠呭紓鍦板瘎瀛樿鍗曟敮鎸佸徃鏈烘牳閿�");
+ }
+ if (order.getTakeShopId() == null) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇ヨ鍗曟棤鍙栦欢闂ㄥ簵锛屾棤闇�鍙告満鏍搁攢");
+ }
+ if (!Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.delivering.getStatus())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠璁㈠崟鐘舵�佷笉鍏佽鏍搁攢");
+ }
+ // 鏍¢獙鍙栦欢闂ㄥ簵涓庡綋鍓嶇櫥褰曢棬搴椾竴鑷�
+ if (!shopId.equals(order.getTakeShopId())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇ヨ鍗曚笉灞炰簬褰撳墠闂ㄥ簵锛屾棤娉曟牳閿�");
+ }
+ // 娲鹃�佷腑(4) 鈫� 宸插埌搴�(5)
+ order.setStatus(Constants.OrderStatus.arrived.getStatus());
+ order.setArriveTime(new Date());
+ if (StringUtils.isNotBlank(remark)) {
+ order.setRemark(remark);
+ }
+ ordersMapper.updateById(order);
+
+ // 閲婃斁鍙告満鏍搁攢鐮�
+ releaseVerifyCode(order.getDriverVerifyCode());
+
+ // 淇濆瓨闄勪欢锛坥bj_type=3 闂ㄥ簵鍏ュ簱鍥剧墖锛屾渶澶�3寮狅級
+ saveVerifyImages(order.getId(), images, Constants.FileType.ORDER_TAKE.getKey(), order.getAcceptDriver());
+
+ // 閫氱煡浼氬憳锛氳鍗曞凡閫佽揪
+ String destination = order.getTakeShopAddress() != null ? order.getTakeShopAddress() : "";
+ if (order.getMemberVerifyCode() != null) {
+ sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.ARRIVED_HAS_SHOP, order.getId(),
+ "orderNo", order.getCode(),
+ "destination", destination,
+ "pickupCode", order.getMemberVerifyCode());
+ } else {
+ sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.ARRIVED_NO_SHOP, order.getId(),
+ "orderNo", order.getCode(),
+ "destination", destination);
+ }
+
+ // 閫氱煡鍙栦欢闂ㄥ簵锛氳鍗曞凡閫佽揪
+ if (order.getTakeShopId() != null) {
+ sendShopNotice(order.getTakeShopId(), Constants.ShopOrderNotify.ARRIVED, order.getId(),
+ "orderNo", order.getCode(),
+ "destination", destination);
+ }
+
+ // 鐭俊閫氱煡浼氬憳锛氳鏉庡凡閫佽揪
+ Member arrivedMember = memberMapper.selectById(order.getMemberId());
+ if (arrivedMember != null) {
+ sendSmsNotify(arrivedMember.getTelephone(), Constants.SmsNotify.MEMBER_ARRIVED,
+ "orderNo", order.getCode(),
+ "address", destination,
+ "code", order.getMemberVerifyCode() != null ? order.getMemberVerifyCode() : "");
+ }
+ }else {
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠璁㈠崟鐘舵�佷笉鍏佽鏍搁攢");
}
}
@@ -2914,12 +3028,13 @@
ordersRefundMapper.insert(refundRecord);
// 璋冪敤寰俊閫�娆綱3锛堟斁鍦ㄦ渶鍚庯紝纭繚鍓嶇疆鎿嶄綔鍏ㄩ儴鎴愬姛锛�
+ String outRefundNo2 = ID.nextGUID();
Refund refundResult = wxPayV3Service.refund(
- order.getOutTradeNo(), order.getPayAmount(), order.getRefundAmount(),
+ outRefundNo2, order.getOutTradeNo(), order.getPayAmount(), order.getRefundAmount(),
"璁㈠崟閫�娆�", wxPayProperties.getV3RefundNotifyUrl());
// 閫�娆炬垚鍔熷悗鍥炲~閫�娆惧崟鍙凤紝鏍囪閫�娆句腑
- refundRecord.setRefundCode(refundResult.getOutRefundNo());
+ refundRecord.setRefundCode(outRefundNo2);
refundRecord.setStatus(Constants.ZERO); // 閫�娆句腑
ordersRefundMapper.updateById(refundRecord);
}
@@ -3624,6 +3739,7 @@
ActiveOrderTipVO vo = new ActiveOrderTipVO();
vo.setOrderId(order.getId());
vo.setStatus(order.getStatus());
+ vo.setStatusDesc(Constants.OrderStatus.getDescByKey(order.getStatus(), order.getType()));
// 鏋勫缓鎻愮ず鏂囨
boolean isLocal = Constants.equalsInteger(order.getType(), Constants.ZERO);
--
Gitblit v1.9.3