From e39dda2f25df9680e66c9e0dd3a606149e21bcc5 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期三, 22 四月 2026 20:06:37 +0800
Subject: [PATCH] 代码生成
---
server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java | 660 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 607 insertions(+), 53 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 e4f0227..800731b 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
@@ -19,6 +19,7 @@
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.geocode.MapUtil;
import com.doumee.core.utils.Utils;
+import com.doumee.core.utils.aliyun.AliSmsService;
import com.doumee.dao.business.*;
import com.doumee.dao.business.model.*;
import com.doumee.dao.system.SystemUserMapper;
@@ -43,6 +44,7 @@
import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
@@ -59,6 +61,7 @@
* @author rk
* @date 2026/04/10
*/
+@Slf4j
@Service
public class OrdersServiceImpl implements OrdersService {
@@ -126,6 +129,9 @@
@Autowired
private NoticeService noticeService;
+
+ @Autowired
+ private SmsrecordMapper smsrecordMapper;
@Autowired
private WxPayV3Service wxPayV3Service;
@@ -294,7 +300,7 @@
return BigDecimal.ZERO;
}
String rateStr = systemDictDataBiz.queryByCode(Constants.OPERATION_CONFIG, Constants.OP_INSURANCE_RATE).getCode();
- BigDecimal rate = new BigDecimal(rateStr);
+ BigDecimal rate = new BigDecimal(rateStr).divide(new BigDecimal("100"), 4, BigDecimal.ROUND_HALF_UP);
return declaredValue.multiply(rate).setScale(2, BigDecimal.ROUND_HALF_UP);
}
@@ -342,9 +348,11 @@
List<Category> categories = categoryMapper.selectBatchIds(categoryIds);
Map<Integer, String> categoryNameMap = new HashMap<>();
Map<Integer, String> categoryDetailMap = new HashMap<>();
+ Map<Integer, String> categoryOtherFieldMap = new HashMap<>();
for (Category c : categories) {
categoryNameMap.put(c.getId(), c.getName());
categoryDetailMap.put(c.getId(), c.getDetail());
+ categoryOtherFieldMap.put(c.getId(),c.getOtherField());
}
// 璁$畻姣忛」鐗╁搧璐圭敤锛氬皬璁� = 鍗曚环 脳 鏁伴噺 脳 澶╂暟
@@ -364,7 +372,7 @@
ItemPriceVO vo = new ItemPriceVO();
vo.setCategoryId(item.getCategoryId());
vo.setCategoryName(categoryNameMap.getOrDefault(item.getCategoryId(), ""));
- vo.setDetail(categoryDetailMap.get(item.getCategoryId()));
+ vo.setDetail(categoryOtherFieldMap.get(item.getCategoryId()));
vo.setQuantity(item.getQuantity());
vo.setUnitPrice(unitPrice);
vo.setLocallyPrice(unitPrice);
@@ -462,9 +470,11 @@
List<Category> categories = categoryMapper.selectBatchIds(categoryIds);
Map<Integer, String> categoryNameMap = new HashMap<>();
Map<Integer, String> categoryDetailMap = new HashMap<>();
+ Map<Integer, String> categoryOtherFieldMap = new HashMap<>();
for (Category c : categories) {
categoryNameMap.put(c.getId(), c.getName());
categoryDetailMap.put(c.getId(), c.getDetail());
+ categoryOtherFieldMap.put(c.getId(),c.getOtherField());
}
// 3. 閫愰」璁$畻杩愯垂锛氳捣姝ヤ环 + 瓒呭嚭閮ㄥ垎闃舵浠�
@@ -503,7 +513,7 @@
ItemPriceVO vo = new ItemPriceVO();
vo.setCategoryId(item.getCategoryId());
vo.setCategoryName(categoryNameMap.getOrDefault(item.getCategoryId(), ""));
- vo.setDetail(categoryDetailMap.get(item.getCategoryId()));
+ vo.setDetail(categoryOtherFieldMap.get(item.getCategoryId()));
vo.setQuantity(item.getQuantity());
vo.setUnitPrice(unitPrice);
vo.setLocallyPrice(locallyPrice);
@@ -676,7 +686,7 @@
if (takeShop == null || Constants.equalsInteger(takeShop.getDeleted(), Constants.ONE)) {
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鍙栦欢搴楅摵涓嶅瓨鍦�");
}
- if (takeShop.getStatus() == null || !Constants.equalsInteger(takeShop.getStatus(), Constants.ONE)) {
+ if (takeShop.getStatus() == null || Constants.equalsInteger(takeShop.getStatus(), Constants.ONE)) {
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鍙栦欢搴楅摵宸插仠涓氾紝璇烽�夋嫨鍏朵粬闂ㄥ簵");
}
takeLat = BigDecimal.valueOf(takeShop.getLatitude());
@@ -818,6 +828,10 @@
// 钖叕璁$畻涓庡崰姣斿瓨鍌�
calculateAndSetFeeAllocation(orders, depositShop, takeShop);
+ // 鏃犱汉鎺ュ崟閫氱煡鐩稿叧鍒濆鍖�
+ orders.setPlatformSmsNotified(Constants.ZERO);
+ orders.setPlatformSmsNotifiedTime(now);
+
ordersMapper.insert(orders);
Integer orderId = orders.getId();
@@ -888,6 +902,7 @@
// 5. 閲嶆柊鐢熸垚绗笁鏂硅鍗曠紪鍙凤紙閬垮厤閲嶅锛�
String orderTradeNo = generateOrderTradeNo();
orders.setOutTradeNo(orderTradeNo);
+ orders.setPlatformSmsNotifiedTime(new Date());
orders.setUpdateTime(new Date());
ordersMapper.updateById(orders);
// 6. 鍞よ捣寰俊鏀粯
@@ -1030,9 +1045,6 @@
// 鍙栨秷/閫�娆剧姸鎬佹椂鏌ヨ閫�娆捐褰�
Integer status = order.getStatus();
if (status != null && (status == Constants.OrderStatus.overdue.getStatus()
- || status == Constants.OrderStatus.closed.getStatus()
- || status == Constants.OrderStatus.cancelOverdue.getStatus()
- || status == Constants.OrderStatus.cancelling.getStatus()
|| status == Constants.OrderStatus.cancelled.getStatus())) {
OrdersRefund ordersRefund = ordersRefundMapper.selectOne(
new QueryWrapper<OrdersRefund>().lambda()
@@ -1120,6 +1132,8 @@
.eq(Orders::getId, order.getId())
.set(Orders::getIsUrgent, Constants.ONE)
.set(Orders::getPlatformRewardAmount, urgentFeeFen)
+ .set(Orders::getPlatformSmsNotified, Constants.ZERO) // 閲嶇疆閫氱煡鐘舵�佷负鏈�氱煡
+ .set(Orders::getPlatformSmsNotifiedTime, new Date()) // 閲嶇疆閫氱煡鍩哄噯鏃堕棿涓哄綋鍓�
.set(Orders::getUpdateTime, new Date());
// 寮傚湴瀵勫瓨涓旀湁鍙栦欢闂ㄥ簵鏃讹紝鐢熸垚鍙告満鏍搁攢鐮�
@@ -1189,9 +1203,9 @@
item.setLuggageName(d.getLuggageName());
item.setLuggageDetail(d.getLuggageDetail());
item.setNum(d.getNum());
- double unitPriceYuan = d.getUnitPrice() != null ? Constants.getFormatMoney(d.getUnitPrice()) : 0;
- item.setUnitPriceYuan(unitPriceYuan);
- item.setSubtotal(unitPriceYuan * (d.getNum() != null ? d.getNum() : 0));
+ long unitPriceFen = d.getUnitPrice() != null ? d.getUnitPrice() : 0L;
+ item.setUnitPrice(unitPriceFen);
+ item.setSubtotal(unitPriceFen * (d.getNum() != null ? d.getNum() : 0));
items.add(item);
}
}
@@ -1375,16 +1389,22 @@
vo.setCode(o.getCode());
vo.setType(o.getType());
vo.setStatus(o.getStatus());
+ vo.setStatusName(Constants.OrderStatus.getDescByKey(o.getStatus(),
+ Constants.equalsInteger(o.getType(), Constants.ZERO)?o.getType():Objects.nonNull(o.getTakeShopId())?Constants.ONE:Constants.TWO)
+ );
vo.setCreateTime(o.getCreateTime());
vo.setExpectedTakeTime(o.getExpectedTakeTime());
+ vo.setMemberVerifyCode(o.getMemberVerifyCode());
// 瀛樹欢闂ㄥ簵锛堝叧鑱旀煡璇㈢洿鎺ュ彇鍊硷級
+ vo.setDepositShopId(o.getDepositShopId());
vo.setDepositShopName(o.getDepositShopName());
vo.setDepositShopLinkName(o.getDepositShopLinkName());
vo.setDepositShopPhone(o.getDepositShopLinkPhone());
// 鍙栦欢淇℃伅锛氭湁鍙栦欢闂ㄥ簵鍙栭棬搴楋紝鏃犲垯鍙栫敤鎴疯嚜閫夊彇浠剁偣
if (o.getTakeShopId() != null) {
+ vo.setTakeShopId(o.getTakeShopId());
vo.setTakeShopName(o.getTakeShopName());
vo.setTakeShopAddress(o.getTakeShopAddress());
} else {
@@ -1399,6 +1419,9 @@
// 璐圭敤锛堝垎锛�
vo.setDeclaredFee(o.getDeclaredFee());
vo.setEstimatedAmount(o.getEstimatedAmount());
+
+ // 璇勪环鐘舵��
+ vo.setCommentStatus(o.getCommentStatus());
// 鏌ヨ鐗╁搧鏄庣粏锛堜竴娆℃煡璇紝鍚屾椂鐢ㄤ簬鐗╁搧鍒楄〃鍜岄�炬湡璁$畻锛�
List<OrdersDetail> details = ordersDetailMapper.selectList(
@@ -1472,6 +1495,9 @@
vo.setCode(o.getCode());
vo.setType(o.getType());
vo.setStatus(o.getStatus());
+ vo.setStatusName(Constants.OrderStatus.getDescByKey(o.getStatus(),
+ Constants.equalsInteger(o.getType(), Constants.ZERO)?o.getType():Objects.nonNull(o.getTakeShopId())?Constants.ONE:Constants.TWO)
+ );
vo.setCreateTime(o.getCreateTime());
vo.setExpectedTakeTime(o.getExpectedTakeTime());
@@ -1581,13 +1607,14 @@
vo.setExpectedDepositTime(order.getExpectedDepositTime());
vo.setExpectedTakeTime(order.getExpectedTakeTime());
vo.setArriveTime(order.getArriveTime());
+ vo.setStatusName(Constants.OrderStatus.getDescByKey(order.getStatus(),order.getType()));
// 璐圭敤锛堝垎锛�
vo.setBasicAmount(order.getBasicAmount());
vo.setDeclaredAmount(order.getDeclaredAmount());
vo.setDeclaredFee(order.getDeclaredFee());
vo.setUrgentAmount(order.getUrgentAmount());
- vo.setActualPayAmount(order.getPayAmount());
+ vo.setActualPayAmount(Constants.equalsInteger(order.getPayStatus(), Constants.ONE)?order.getPayAmount():order.getEstimatedAmount());
// 鏍囪
vo.setExceptionStatus(order.getExceptionStatus());
@@ -1614,6 +1641,7 @@
// 鍙栦欢淇℃伅
if (order.getTakeShopId() != null) {
+ vo.setTakeShopId(order.getTakeShopId());
ShopInfo takeShop = shopInfoMapper.selectById(order.getTakeShopId());
if (takeShop != null) {
vo.setTakeShopName(takeShop.getName());
@@ -1627,6 +1655,16 @@
// 鍙栦欢鑱旂郴浜�
vo.setTakeUser(order.getTakeUser());
vo.setTakePhone(order.getTakePhone());
+
+ // 鍙告満淇℃伅
+ if (order.getAcceptDriver() != null) {
+ DriverInfo driver = driverInfoMapper.selectById(order.getAcceptDriver());
+ if (driver != null) {
+ vo.setDriverId(driver.getId());
+ vo.setDriverName(driver.getName());
+ vo.setDriverPhone(driver.getTelephone());
+ }
+ }
// 鐗╁搧绫诲瀷鍚嶇О
if (order.getGoodType() != null) {
@@ -1647,11 +1685,67 @@
.eq(OrdersDetail::getDeleted, Constants.ZERO));
vo.setDetailList(buildDetailList(details));
- // 閫炬湡淇℃伅
- OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(order, details);
- vo.setOverdue(overdueInfo.getOverdue());
- vo.setOverdueDays(overdueInfo.getOverdueDays());
- vo.setOverdueFee(overdueInfo.getOverdueFee());
+ Integer orderStatus = order.getStatus();
+ if(Constants.equalsInteger(orderStatus, Constants.FIVE)){
+ // 閫炬湡淇℃伅
+ OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(order, details);
+ if (Constants.ONE.equals(order.getType())
+ && order.getTakeShopId() != null) {
+ // 寮傚湴瀵勫瓨 + 鏈夊彇浠堕棬搴楋細
+ // 鏍规嵁琛屾潕杞Щ鍒板簵鏃堕棿(arriveTime)褰撳ぉ鏅氫笂12鐐瑰垽鏂槸鍚﹂�炬湡
+ if (order.getArriveTime() != null) {
+ Calendar arriveCal = Calendar.getInstance();
+ arriveCal.setTime(order.getArriveTime());
+ arriveCal.set(Calendar.HOUR_OF_DAY, 23);
+ arriveCal.set(Calendar.MINUTE, 59);
+ arriveCal.set(Calendar.SECOND, 59);
+ Date arriveEndOfDay = arriveCal.getTime();
+ boolean isOverdue = new Date().after(arriveEndOfDay);
+ vo.setOverdue(isOverdue);
+ if (isOverdue) {
+ vo.setOverdueDays(overdueInfo.getOverdueDays() > 0 ? overdueInfo.getOverdueDays() : 1);
+ vo.setOverdueFee(overdueInfo.getOverdueFee());
+ } else {
+ vo.setOverdueDays(0);
+ vo.setOverdueFee(0L);
+ }
+ } else {
+ vo.setOverdue(false);
+ vo.setOverdueDays(0);
+ vo.setOverdueFee(0L);
+ }
+ } else if (Constants.ZERO.equals(order.getType())) {
+ // 灏卞湴瀵勫瓨锛氫繚鎸佸師閫昏緫
+ vo.setOverdue(overdueInfo.getOverdue());
+ vo.setOverdueDays(overdueInfo.getOverdueDays());
+ vo.setOverdueFee(overdueInfo.getOverdueFee());
+ }
+ } else {
+ vo.setOverdue(false);
+ vo.setOverdueDays(0);
+ vo.setOverdueFee(0L);
+ }
+
+ // 閫�娆句俊鎭紙status=96鍏抽棴/99鍙栨秷鏃惰繑鍥烇級
+ if (orderStatus != null &&
+ (Constants.equalsInteger(orderStatus, Constants.OrderStatus.cancelled.getStatus()))) {
+ vo.setRefundApplyTime(order.getCancelTime());
+ // 鏌ヨ閫�娆捐褰曡幏鍙栭��娆鹃噾棰濆拰澶囨敞
+ OrdersRefund ordersRefund = ordersRefundMapper.selectOne(
+ new QueryWrapper<OrdersRefund>().lambda()
+ .eq(OrdersRefund::getOrderId, order.getId())
+ .eq(OrdersRefund::getDeleted, Constants.ZERO)
+ .orderByDesc(OrdersRefund::getCreateTime)
+ .last("limit 1"));
+ if (ordersRefund != null) {
+ vo.setRefundAmount(ordersRefund.getRefundAmount() != null
+ ? ordersRefund.getRefundAmount() : order.getRefundAmount());
+ vo.setRefundRemark(ordersRefund.getRemark());
+ vo.setRefundTime(ordersRefund.getRefundTime());
+ } else {
+ vo.setRefundAmount(order.getRefundAmount());
+ }
+ }
// 鏍搁攢鐮�
Integer status = order.getStatus();
@@ -1673,6 +1767,68 @@
vo.setMemberVerifyCode(order.getMemberVerifyCode());
}
+ // 寮傚湴瀵勫瓨缁忕含搴︼紙灏卞湴瀵勫瓨涓嶈繑鍥烇級
+ if (Constants.ONE.equals(order.getType())) {
+ // status=3(宸叉帴鍗�)锛氳繑鍥炲瓨浠堕棬搴楃粡绾害 + 鍙告満缁忕含搴�
+ if (Constants.equalsInteger(status, Constants.OrderStatus.accepted.getStatus())) {
+ ShopInfo depositShop = shopInfoMapper.selectById(order.getDepositShopId());
+ if (depositShop != null) {
+ vo.setDepositShopLng(depositShop.getLongitude());
+ vo.setDepositShopLat(depositShop.getLatitude());
+ }
+ if (order.getAcceptDriver() != null) {
+ DriverInfo driver = driverInfoMapper.selectById(order.getAcceptDriver());
+ if (driver != null) {
+ vo.setDriverLng(driver.getLongitude());
+ vo.setDriverLat(driver.getLatitude());
+ }
+ }
+ }
+ // status=4(閰嶉�佷腑)锛氳繑鍥炲彇浠剁偣缁忕含搴� + 鍙告満缁忕含搴�
+ if (Constants.equalsInteger(status, Constants.OrderStatus.delivering.getStatus())) {
+ // 鍙栦欢鐐圭粡绾害锛堜紭鍏堝彇浠堕棬搴楋紝鍚﹀垯璁㈠崟涓婄殑鍙栦欢鍧愭爣锛�
+ if (order.getTakeShopId() != null) {
+ ShopInfo takeShop = shopInfoMapper.selectById(order.getTakeShopId());
+ if (takeShop != null) {
+ vo.setTakeLng(takeShop.getLongitude());
+ vo.setTakeLat(takeShop.getLatitude());
+ }
+ } else if (order.getTakeLgt() != null && order.getTakeLat() != null) {
+ vo.setTakeLng(order.getTakeLgt().doubleValue());
+ vo.setTakeLat(order.getTakeLat().doubleValue());
+ }
+ if (order.getAcceptDriver() != null) {
+ DriverInfo driver = driverInfoMapper.selectById(order.getAcceptDriver());
+ if (driver != null) {
+ vo.setDriverLng(driver.getLongitude());
+ vo.setDriverLat(driver.getLatitude());
+ }
+ }
+ }
+ }
+
+ // 璇勪环淇℃伅
+ vo.setCommentStatus(order.getCommentStatus());
+ if (Constants.equalsInteger(order.getCommentStatus(), Constants.ONE)) {
+ vo.setCommentTime(order.getCommentTime());
+ // 鏌ヨ璇勪环璁板綍锛岃幏鍙栧悇瀵硅薄璇勫垎
+ List<OrderComment> comments = orderCommentMapper.selectList(new QueryWrapper<OrderComment>().lambda()
+ .eq(OrderComment::getOrderId, order.getId())
+ .eq(OrderComment::getDeleted, Constants.ZERO));
+ for (OrderComment c : comments) {
+ if (Constants.equalsInteger(c.getTargetType(), Constants.ONE)) {
+ vo.setDepositScore(c.getScore());
+ vo.setCommentContent(c.getContent());
+ } else if (Constants.equalsInteger(c.getTargetType(), Constants.TWO)) {
+ vo.setTakeScore(c.getScore());
+ } else if (Constants.equalsInteger(c.getTargetType(), Constants.THREE)) {
+ vo.setDriverScore(c.getScore());
+ }
+ }
+ // 璇勪环闄勪欢鍥剧墖
+ vo.setCommentImages(getFileUrls(order.getId(), Constants.FileType.COMMENT_ATTACH.getKey(), imgPrefix));
+ }
+
return vo;
}
@@ -1687,11 +1843,6 @@
throw new BusinessException(ResponseStatus.DATA_EMPTY);
}
- // 浠呭紓鍦板瘎瀛樺彲鍙栨秷
- if (!Constants.equalsInteger(order.getType(), Constants.ONE)) {
- throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "浠呭紓鍦板瘎瀛樿鍗曞彲鍙栨秷");
- }
-
Integer status = order.getStatus();
if (status == null) {
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璁㈠崟鐘舵�佸紓甯�");
@@ -1699,17 +1850,48 @@
Date now = new Date();
- // 寰呮敮浠橈細鐩存帴鍙栨秷
+ // 寰呮敮浠橈細鐩存帴鍙栨秷锛堜笉闄愯鍗曠被鍨嬶級
if (Constants.equalsInteger(status, Constants.OrderStatus.waitPay.getStatus())) {
order.setStatus(Constants.OrderStatus.cancelled.getStatus());
order.setCancelTime(now);
ordersMapper.updateById(order);
saveCancelLog(order, "浼氬憳鍙栨秷璁㈠崟锛堝緟鏀粯锛�", reason, memberId);
+ // 鐭俊閫氱煡浼氬憳锛氳鍗曞凡鍙栨秷
+ Member cancelMember1 = memberMapper.selectById(memberId);
+ sendSmsNotify(cancelMember1 != null ? cancelMember1.getTelephone() : null,
+ Constants.SmsNotify.MEMBER_CANCELLED, "orderNo", order.getCode());
return;
}
- // 寰呭瘎瀛橈細鐩存帴鍙栨秷锛屽叏棰濋��娆�
+ // 寰呭瘎瀛橈細鐩存帴鍙栨秷锛屽叏棰濋��娆撅紙涓嶉檺璁㈠崟绫诲瀷锛�
if (Constants.equalsInteger(status, Constants.OrderStatus.waitDeposit.getStatus())) {
+ // 鍏堟爣璁拌鍗曞凡鍙栨秷
+ order.setStatus(Constants.OrderStatus.cancelled.getStatus());
+ order.setCancelTime(now);
+ order.setRefundAmount(order.getPayAmount());
+ ordersMapper.updateById(order);
+
+ saveCancelLog(order, "浼氬憳鍙栨秷璁㈠崟锛堝緟瀵勫瓨锛屽叏棰濋��娆撅級", reason, memberId);
+ // 閫氱煡浼氬憳锛氬凡鍙栨秷
+ sendOrderNotice(memberId, Constants.MemberOrderNotify.CANCELLED, orderId,
+ "orderNo", order.getCode());
+ // 鐭俊閫氱煡浼氬憳锛氳鍗曞凡鍙栨秷
+ Member cancelMember2 = memberMapper.selectById(memberId);
+ sendSmsNotify(cancelMember2 != null ? cancelMember2.getTelephone() : null,
+ Constants.SmsNotify.MEMBER_CANCELLED, "orderNo", order.getCode());
+
+ // 璋冪敤寰俊閫�娆綱3锛屽叏棰濋��娆�
+ com.wechat.pay.java.service.refund.model.Refund refundResult;
+ try {
+ refundResult = wxPayV3Service.refund(order.getOutTradeNo(), order.getPayAmount(), order.getPayAmount(),
+ "璁㈠崟閫�娆�", wxPayProperties.getV3RefundNotifyUrl());
+ } catch (Exception e) {
+ log.error("寰呭瘎瀛樿鍗曢��娆捐皟鐢ㄥ紓甯�, orderId={}", orderId, e);
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "閫�娆惧け璐ワ紝璇风◢鍚庨噸璇�");
+ }
+
+ com.wechat.pay.java.service.refund.model.Status refundStatus = refundResult.getStatus();
+
// 璁板綍閫�娆句俊鎭�
OrdersRefund refund = new OrdersRefund();
refund.setOrderId(orderId);
@@ -1717,37 +1899,51 @@
refund.setCancelInfo(reason);
refund.setCreateTime(now);
refund.setDeleted(Constants.ZERO);
-
- // 璋冪敤寰俊閫�娆綱3锛屽叏棰濋��娆�
- Refund refundResult = wxPayV3Service.refund(order.getOutTradeNo(), order.getPayAmount(), order.getPayAmount(),
- "璁㈠崟閫�娆�", wxPayProperties.getV3RefundNotifyUrl());
+ refund.setBeforeStatus(Constants.OrderStatus.waitDeposit.getStatus());
+ refund.setRefundAmount(order.getPayAmount());
refund.setRefundCode(refundResult.getOutRefundNo());
- refund.setStatus(Constants.ZERO); // 閫�娆句腑
+
+ if (com.wechat.pay.java.service.refund.model.Status.SUCCESS.equals(refundStatus)) {
+ // 閫�娆炬垚鍔�
+ refund.setStatus(Constants.ONE);
+ } else if (com.wechat.pay.java.service.refund.model.Status.PROCESSING.equals(refundStatus)) {
+ // 閫�娆句腑锛岀瓑鍥炶皟澶勭悊
+ refund.setStatus(Constants.ZERO);
+ } else {
+ // 閫�娆惧け璐�/寮傚父锛圕LOSED / ABNORMAL / 鍏朵粬锛�
+ log.error("寰呭瘎瀛樿鍗曢��娆惧け璐�, orderId={}, refundStatus={}", orderId, refundStatus);
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "閫�娆惧け璐ワ紝璇疯仈绯诲鏈嶅鐞�");
+ }
ordersRefundMapper.insert(refund);
-
- order.setStatus(Constants.OrderStatus.cancelled.getStatus());
- order.setCancelTime(now);
- order.setRefundAmount(order.getPayAmount());
- ordersMapper.updateById(order);
-
- saveCancelLog(order, "浼氬憳鍙栨秷璁㈠崟锛堝緟瀵勫瓨锛屽叏棰濋��娆撅級", reason, memberId);
- // 閫氱煡浼氬憳锛氶��娆句腑
- sendOrderNotice(memberId, Constants.MemberOrderNotify.REFUNDING, orderId,
- "orderNo", order.getCode());
return;
}
- // 宸插瘎瀛�/宸叉帴鍗曪細杩涘叆鍙栨秷涓姸鎬�
+ // 宸插瘎瀛�/宸叉帴鍗曪細浠呭紓鍦板瘎瀛樺彲鍙栨秷
+ if (!Constants.equalsInteger(order.getType(), Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "浠呭紓鍦板瘎瀛樿鍗曞彲鍙栨秷");
+ }
+
+ // 宸插瘎瀛�/宸叉帴鍗曪細鐩存帴灏嗚鍗曠被鍨嬫敼涓哄氨鍦板瘎瀛�
if (Constants.equalsInteger(status, Constants.OrderStatus.deposited.getStatus())
|| Constants.equalsInteger(status, Constants.OrderStatus.accepted.getStatus())) {
- order.setStatus(Constants.OrderStatus.cancelling.getStatus());
- order.setCancelTime(now);
+ order.setType(Constants.ZERO); // 灏卞湴瀵勫瓨
ordersMapper.updateById(order);
- saveCancelLog(order, "浼氬憳鐢宠鍙栨秷璁㈠崟锛堝凡瀵勫瓨/宸叉帴鍗曪級", reason, memberId);
- // 閫氱煡瀛樹欢闂ㄥ簵锛氶��娆剧敵璇�
+ saveCancelLog(order, "浼氬憳鍙栨秷寮傚湴瀵勫瓨璁㈠崟锛岃浆涓哄氨鍦板瘎瀛�", reason, memberId);
+ // 閫氱煡瀛樹欢闂ㄥ簵
if (order.getDepositShopId() != null) {
sendShopNotice(order.getDepositShopId(), Constants.ShopOrderNotify.REFUNDING, orderId,
"orderNo", order.getCode());
+ ShopInfo depositShop = shopInfoMapper.selectById(order.getDepositShopId());
+ sendSmsNotify(depositShop != null ? depositShop.getLinkPhone() : null,
+ Constants.SmsNotify.SHOP_REFUNDING, "orderNo", order.getCode());
+ }
+ // 閫氱煡鍙告満锛氳鍗曞凡鍙栨秷锛堝凡鎺ュ崟鎯呭喌涓嬪徃鏈洪渶鍋滄鏈嶅姟锛�
+ if (order.getAcceptDriver() != null && Constants.equalsInteger(status, Constants.OrderStatus.accepted.getStatus())) {
+ sendDriverNotice(order.getAcceptDriver(), Constants.DriverOrderNotify.REFUNDING, orderId,
+ "orderNo", order.getCode());
+ DriverInfo driver = driverInfoMapper.selectById(order.getAcceptDriver());
+ sendSmsNotify(driver != null ? driver.getTelephone() : null,
+ Constants.SmsNotify.DRIVER_REFUNDING, "orderNo", order.getCode());
}
return;
}
@@ -1835,6 +2031,27 @@
}
}
+ /**
+ * 鍙戦�佸徃鏈虹珯鍐呬俊閫氱煡
+ */
+ private void sendDriverNotice(Integer driverId, Constants.DriverOrderNotify notify, Integer orderId, String... params) {
+ DriverInfo driver = driverInfoMapper.selectById(driverId);
+ if (driver == null || driver.getMemberId() == null) {
+ return;
+ }
+ Notice notice = new Notice();
+ notice.setUserType(1); // 1=鍙告満
+ notice.setUserId(driver.getMemberId());
+ notice.setTitle(notify.getTitle());
+ notice.setContent(notify.format(params));
+ notice.setObjId(orderId);
+ notice.setObjType(0); // 0=璁㈠崟
+ notice.setStatus(0); // 0=鏈
+ notice.setIsdeleted(Constants.ZERO);
+ notice.setCreateDate(new Date());
+ noticeService.create(notice);
+ }
+
@Override
@Transactional(rollbackFor = {Exception.class, BusinessException.class})
public void handleStorageOrderPayNotify(String outTradeNo, String wxTradeNo) {
@@ -1887,6 +2104,15 @@
if (Constants.ZERO.equals(order.getType()) && order.getDepositShopId() != null) {
sendShopNotice(order.getDepositShopId(), Constants.ShopOrderNotify.WAIT_VERIFY, order.getId(),
"orderNo", order.getCode());
+ }
+
+ // 鐭俊閫氱煡瀛樹欢闂ㄥ簵锛氭湁鏂拌鍗曞緟鏍搁獙
+ if (order.getDepositShopId() != null) {
+ ShopInfo depositShop = shopInfoMapper.selectById(order.getDepositShopId());
+ if (depositShop != null) {
+ sendSmsNotify(depositShop.getLinkPhone(), Constants.SmsNotify.SHOP_WAIT_VERIFY,
+ "orderNo", order.getCode());
+ }
}
}
@@ -1985,11 +2211,10 @@
if (!Constants.equalsInteger(order.getMemberId(), memberId)) {
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鏃犳潈鎿嶄綔姝よ鍗�");
}
- // 浠呭凡瀹屾垚(7)銆佸凡鍙栨秷(99)銆佸凡閫�娆�(96)鍙垹闄�
+ // 浠呭凡瀹屾垚(7)銆佸凡鍙栨秷(99)
int status = Constants.formatIntegerNum(order.getStatus());
if (status != Constants.OrderStatus.finished.getStatus()
- && status != Constants.OrderStatus.cancelled.getStatus()
- && status != Constants.OrderStatus.closed.getStatus()) {
+ && status != Constants.OrderStatus.cancelled.getStatus()) {
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "褰撳墠璁㈠崟鐘舵�佷笉鍙垹闄�");
}
ordersMapper.update(new UpdateWrapper<Orders>().lambda()
@@ -2178,6 +2403,14 @@
"orderNo", order.getCode(),
"amount", String.valueOf(Constants.getFormatMoney(
order.getTotalAmount() != null ? order.getTotalAmount() : 0L)));
+
+ // 閫氱煡鍙告満锛氳鍗曞凡缁撶畻
+ if (order.getAcceptDriver() != null) {
+ sendDriverNotice(order.getAcceptDriver(), Constants.DriverOrderNotify.SETTLED, order.getId(),
+ "orderNo", order.getCode(),
+ "amount", String.valueOf(Constants.getFormatMoney(
+ order.getDriverFee() != null ? order.getDriverFee() : 0L)));
+ }
}
}
@@ -2266,6 +2499,9 @@
orderCommentMapper.insert(driverComment);
}
+ // 4.4 淇濆瓨璇勪环闄勪欢鍥剧墖锛坥bj_type=15锛屾渶澶�3寮狅級
+ saveVerifyImages(order.getId(), dto.getImages(), Constants.FileType.COMMENT_ATTACH.getKey(), null);
+
// 5. 鏇存柊闂ㄥ簵/鍙告満骞冲潎璇勫垎
updateTargetScore(Constants.ONE, order.getDepositShopId());
if (isRemote && order.getTakeShopId() != null) {
@@ -2282,6 +2518,12 @@
// 閫氱煡瀛樹欢闂ㄥ簵鍜屽彇浠堕棬搴楋細璁㈠崟宸茶瘎浠�
notifyBothShops(order, Constants.ShopOrderNotify.EVALUATED,
"orderNo", order.getCode());
+
+ // 閫氱煡鍙告満锛氳鍗曞凡璇勪环
+ if (order.getAcceptDriver() != null) {
+ sendDriverNotice(order.getAcceptDriver(), Constants.DriverOrderNotify.EVALUATED, order.getId(),
+ "orderNo", order.getCode());
+ }
}
/**
@@ -2424,6 +2666,12 @@
notifyBothShops(order, Constants.ShopOrderNotify.FINISHED,
"orderNo", order.getCode(),
"settleDays", settleDays != null ? settleDays : "7");
+ // 閫氱煡鍙告満锛氳鍗曞凡瀹屾垚
+ if (order.getAcceptDriver() != null) {
+ sendDriverNotice(order.getAcceptDriver(), Constants.DriverOrderNotify.FINISHED, order.getId(),
+ "orderNo", order.getCode(),
+ "settleDays", settleDays != null ? settleDays : "7");
+ }
} else {
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠璁㈠崟鐘舵�佷笉鍏佽鏍搁攢");
}
@@ -2497,7 +2745,9 @@
refundRecord.setType(3); // 鍑哄簱閫�娆�
refundRecord.setCreateTime(now);
refundRecord.setRefundRemark(remark);
+ refundRecord.setRefundAmount(order.getRefundAmount());
refundRecord.setDeleted(Constants.ZERO);
+ refundRecord.setBeforeStatus(order.getStatus());
ordersRefundMapper.insert(refundRecord);
// 璋冪敤寰俊閫�娆綱3锛堟斁鍦ㄦ渶鍚庯紝纭繚鍓嶇疆鎿嶄綔鍏ㄩ儴鎴愬姛锛�
@@ -2529,6 +2779,12 @@
notifyBothShops(order, Constants.ShopOrderNotify.FINISHED,
"orderNo", order.getCode(),
"settleDays", settleDays != null ? settleDays : "7");
+ // 閫氱煡鍙告満锛氳鍗曞凡瀹屾垚
+ if (order.getAcceptDriver() != null) {
+ sendDriverNotice(order.getAcceptDriver(), Constants.DriverOrderNotify.FINISHED, order.getId(),
+ "orderNo", order.getCode(),
+ "settleDays", settleDays != null ? settleDays : "7");
+ }
}
@Override
@@ -2575,6 +2831,12 @@
notifyBothShops(order, Constants.ShopOrderNotify.FINISHED,
"orderNo", order.getCode(),
"settleDays", settleDays != null ? settleDays : "7");
+ // 閫氱煡鍙告満锛氳鍗曞凡瀹屾垚
+ if (order.getAcceptDriver() != null) {
+ sendDriverNotice(order.getAcceptDriver(), Constants.DriverOrderNotify.FINISHED, order.getId(),
+ "orderNo", order.getCode(),
+ "settleDays", settleDays != null ? settleDays : "7");
+ }
}
@Override
@@ -2600,7 +2862,7 @@
Long takeShopFee = 0L;
Long driverFee = 0L;
- if (Constants.equalsInteger(order.getType(), Constants.TWO)) {
+ if (Constants.equalsInteger(order.getType(), Constants.ONE)) {
// 寮傚湴瀵勫瓨锛氬瓨浠堕棬搴� + 鍙告満
driverFee = new BigDecimal(totalAmount)
.multiply(driverRate)
@@ -2745,6 +3007,15 @@
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() : "");
}
}
@@ -2919,12 +3190,6 @@
}
if (Constants.equalsInteger(status, Constants.OrderStatus.cancelled.getStatus())) {
return "璁㈠崟宸插彇娑堬紝鎰熻阿鎮ㄧ殑鏀寔锛屾杩庝笅娆″啀浼氾紒";
- }
- if (Constants.equalsInteger(status, Constants.OrderStatus.cancelling.getStatus())) {
- return "閫�娆剧敵璇峰凡鎻愪氦锛屽钩鍙颁細灏藉揩涓烘偍澶勭悊閫�娆�";
- }
- if (Constants.equalsInteger(status, Constants.OrderStatus.closed.getStatus())) {
- return "閫�娆惧凡鎴愬姛鍘熻矾杩斿洖锛岃娉ㄦ剰鏌ユ敹";
}
return "";
}
@@ -3220,4 +3485,293 @@
return vo;
}
+ @Override
+ public int cancelTimeoutUnpaidOrders() {
+ // 鑾峰彇瓒呮椂閰嶇疆锛堝垎閽燂級
+ String autoCancelTimeStr = operationConfigBiz.getConfig().getAutoCancelTime();
+ if (StringUtils.isBlank(autoCancelTimeStr)) {
+ log.info("鏈厤缃秴鏃跺彇娑堟椂闂达紝璺宠繃");
+ return 0;
+ }
+ int autoCancelMinutes;
+ try {
+ autoCancelMinutes = Integer.parseInt(autoCancelTimeStr);
+ } catch (NumberFormatException e) {
+ log.warn("瓒呮椂鍙栨秷鏃堕棿閰嶇疆寮傚父: {}", autoCancelTimeStr);
+ return 0;
+ }
+ if (autoCancelMinutes <= 0) {
+ return 0;
+ }
+
+ // 鏌ヨ鎵�鏈夎秴鏃舵湭鏀粯璁㈠崟锛歴tatus=0 涓� 鍒涘缓鏃堕棿 + 閰嶇疆鍒嗛挓鏁� < 褰撳墠鏃堕棿
+ Date deadline = new Date(System.currentTimeMillis() - (long) autoCancelMinutes * 60 * 1000);
+ List<Orders> timeoutOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getStatus, Constants.OrderStatus.waitPay.getStatus())
+ .eq(Orders::getDeleted, Constants.ZERO)
+ .lt(Orders::getCreateTime, deadline));
+
+ if (timeoutOrders == null || timeoutOrders.isEmpty()) {
+ return 0;
+ }
+
+ int count = 0;
+ Date now = new Date();
+ for (Orders order : timeoutOrders) {
+ try {
+ order.setStatus(Constants.OrderStatus.cancelled.getStatus());
+ order.setCancelTime(now);
+ order.setUpdateTime(now);
+ ordersMapper.updateById(order);
+
+ // 鍐欏叆鎿嶄綔鏃ュ織
+ OrderLog orderLog = new OrderLog();
+ orderLog.setOrderId(order.getId());
+ orderLog.setTitle("绯荤粺鑷姩鍙栨秷锛堣秴鏃舵湭鏀粯锛�");
+ orderLog.setLogInfo("璁㈠崟瓒呮椂" + autoCancelMinutes + "鍒嗛挓鏈敮浠橈紝绯荤粺鑷姩鍙栨秷");
+ orderLog.setObjType(Constants.ORDER_LOG_CANCEL);
+ orderLog.setOrderStatus(Constants.OrderStatus.cancelled.getStatus());
+ orderLog.setOptUserType(3); // 3=绯荤粺
+ orderLog.setCreateTime(now);
+ orderLog.setDeleted(Constants.ZERO);
+ orderLogService.create(orderLog);
+
+ // 鐭俊閫氱煡浼氬憳锛氳鍗曞凡鍙栨秷
+ if (order.getMemberId() != null) {
+ Member member = memberMapper.selectById(order.getMemberId());
+ sendSmsNotify(member != null ? member.getTelephone() : null,
+ Constants.SmsNotify.MEMBER_CANCELLED, "orderNo", order.getCode());
+ }
+
+ count++;
+ } catch (Exception e) {
+ log.error("鍙栨秷瓒呮椂璁㈠崟寮傚父, orderId={}, error={}", order.getId(), e.getMessage());
+ }
+ }
+ log.info("瓒呮椂鏈敮浠樿鍗曡嚜鍔ㄥ彇娑堝畬鎴愶紝鍏卞彇娑坽}鍗�", count);
+ return count;
+ }
+
+ @Override
+ public int notifyUngrabbedOrders() {
+ // 鑾峰彇鏃犱汉鎶㈠崟閫氱煡鏃堕棿閰嶇疆锛堝垎閽燂級
+ String noGrabTimeStr = operationConfigBiz.getConfig().getNoGrabNotifyTime();
+ if (StringUtils.isBlank(noGrabTimeStr)) {
+ return 0;
+ }
+ int noGrabMinutes;
+ try {
+ noGrabMinutes = Integer.parseInt(noGrabTimeStr);
+ } catch (NumberFormatException e) {
+ log.warn("鏃犱汉鎶㈠崟閫氱煡鏃堕棿閰嶇疆寮傚父: {}", noGrabTimeStr);
+ return 0;
+ }
+ if (noGrabMinutes <= 0) {
+ return 0;
+ }
+
+ // 鑾峰彇閫氱煡浜哄憳涓婚敭鍒楄〃
+ String noGrabUsers = operationConfigBiz.getConfig().getNoGrabNotifyUsers();
+ if (StringUtils.isBlank(noGrabUsers)) {
+ return 0;
+ }
+ List<String> userIdStrList = Arrays.asList(noGrabUsers.split(","));
+ List<Integer> userIds = new ArrayList<>();
+ for (String idStr : userIdStrList) {
+ if (StringUtils.isNotBlank(idStr.trim())) {
+ userIds.add(Integer.parseInt(idStr.trim()));
+ }
+ }
+ if (userIds.isEmpty()) {
+ return 0;
+ }
+
+ // 鏌ヨ閫氱煡浜哄憳鎵嬫満鍙�
+ List<String> notifyPhones = new ArrayList<>();
+ for (Integer userId : userIds) {
+ SystemUser user = systemUserMapper.selectById(userId);
+ if (user != null && StringUtils.isNotBlank(user.getMobile())) {
+ notifyPhones.add(user.getMobile());
+ }
+ }
+ if (notifyPhones.isEmpty()) {
+ log.warn("鏃犱汉鎶㈠崟閫氱煡浜哄憳鍧囨棤鏈夋晥鎵嬫満鍙�");
+ return 0;
+ }
+
+ // 鏌ヨ寮傚湴宸插瘎瀛�(status=2)銆佹湭閫氱煡(platformSmsNotified=0鎴杗ull)銆佽秴鏃剁殑璁㈠崟
+ Date deadline = new Date(System.currentTimeMillis() - (long) noGrabMinutes * 60 * 1000);
+ List<Orders> ungrabbedOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getType, Constants.ONE) // 寮傚湴瀵勫瓨
+ .eq(Orders::getStatus, Constants.OrderStatus.deposited.getStatus()) // 宸插瘎瀛�
+ .eq(Orders::getDeleted, Constants.ZERO)
+ .ne(Orders::getPlatformSmsNotified, Constants.ONE) // 鏈�氱煡
+ .lt(Orders::getPlatformSmsNotifiedTime, deadline)); // 閫氱煡鍩哄噯鏃堕棿瓒呰繃閰嶇疆鏃堕棿
+
+ if (ungrabbedOrders == null || ungrabbedOrders.isEmpty()) {
+ return 0;
+ }
+
+ int count = 0;
+ Date now = new Date();
+ for (Orders order : ungrabbedOrders) {
+ try {
+ // 缁欐墍鏈夐�氱煡浜哄憳鍙戠煭淇�
+ for (String phone : notifyPhones) {
+ sendSmsNotify(phone, Constants.SmsNotify.PLATFORM_WAIT_GRAB,
+ "orderNo", order.getCode(),
+ "time", String.valueOf(noGrabMinutes));
+ }
+ // 鏍囪宸查�氱煡 + 璁板綍閫氱煡鏃堕棿
+ order.setPlatformSmsNotified(Constants.ONE);
+ order.setPlatformSmsNotifiedTime(now);
+ order.setUpdateTime(now);
+ ordersMapper.updateById(order);
+ count++;
+ } catch (Exception e) {
+ log.error("鏃犱汉鎶㈠崟鐭俊閫氱煡寮傚父, orderId={}, error={}", order.getId(), e.getMessage());
+ }
+ }
+ log.info("鏃犱汉鎶㈠崟鐭俊閫氱煡瀹屾垚锛屽叡閫氱煡{}鍗�", count);
+ return count;
+ }
+
+ @Override
+ public int autoCompleteOrders() {
+ // 鑾峰彇鑷姩纭鏀惰揣澶╂暟閰嶇疆
+ String autoConfirmDaysStr = operationConfigBiz.getConfig().getAutoConfirmReceipt();
+ if (StringUtils.isBlank(autoConfirmDaysStr)) {
+ return 0;
+ }
+ int autoConfirmDays;
+ try {
+ autoConfirmDays = Integer.parseInt(autoConfirmDaysStr);
+ } catch (NumberFormatException e) {
+ log.warn("鑷姩纭鏀惰揣澶╂暟閰嶇疆寮傚父: {}", autoConfirmDaysStr);
+ return 0;
+ }
+ if (autoConfirmDays <= 0) {
+ return 0;
+ }
+
+ // 鏌ヨ宸查�佽揪(status=5)涓旈�佽揪鏃堕棿瓒呰繃閰嶇疆澶╂暟鐨勮鍗�
+ Date deadline = new Date(System.currentTimeMillis() - (long) autoConfirmDays * 24 * 60 * 60 * 1000);
+ List<Orders> orders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getStatus, Constants.OrderStatus.arrived.getStatus())
+ .eq(Orders::getDeleted, Constants.ZERO)
+ .isNotNull(Orders::getArriveTime)
+ .lt(Orders::getArriveTime, deadline));
+
+ if (orders == null || orders.isEmpty()) {
+ return 0;
+ }
+
+ int count = 0;
+ Date now = new Date();
+ for (Orders order : orders) {
+ try {
+ // 閫炬湡鏈敮浠樼殑涓嶈嚜鍔ㄥ畬鎴�
+ if (Constants.equalsInteger(order.getOverdueStatus(), Constants.ONE)) {
+ continue;
+ }
+
+ // 鏇存柊璁㈠崟鐘舵�佷负宸插畬鎴�
+ order.setStatus(Constants.OrderStatus.finished.getStatus());
+ order.setFinishTime(now);
+ order.setUpdateTime(now);
+ ordersMapper.updateById(order);
+
+ // 閲婃斁鏍搁攢鐮�
+ if (StringUtils.isNotBlank(order.getMemberVerifyCode())) {
+ releaseVerifyCode(order.getMemberVerifyCode());
+ }
+
+ // 鐢熸垚鏀剁泭璁板綍
+ calculateAndSaveOrderFees(order.getId());
+ generateRevenueRecords(order.getId());
+
+ // 璁板綍鎿嶄綔鏃ュ織
+ OrderLog orderLog = new OrderLog();
+ orderLog.setOrderId(order.getId());
+ orderLog.setTitle("绯荤粺鑷姩瀹屾垚");
+ orderLog.setLogInfo("璁㈠崟宸查�佽揪瓒呰繃" + autoConfirmDays + "澶╂湭纭锛岀郴缁熻嚜鍔ㄥ畬鎴�");
+ orderLog.setObjType(Constants.ORDER_LOG_CANCEL);
+ orderLog.setOrderStatus(Constants.OrderStatus.finished.getStatus());
+ orderLog.setOptUserType(3); // 3=绯荤粺
+ orderLog.setCreateTime(now);
+ orderLog.setDeleted(Constants.ZERO);
+ orderLogService.create(orderLog);
+
+ // 閫氱煡浼氬憳锛氳鍗曞凡瀹屾垚
+ sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.FINISHED, order.getId(),
+ "orderNo", order.getCode());
+ // 閫氱煡瀛樹欢闂ㄥ簵鍜屽彇浠堕棬搴�
+ String settleDays = operationConfigBiz.getConfig().getSettlementDate();
+ notifyBothShops(order, Constants.ShopOrderNotify.FINISHED,
+ "orderNo", order.getCode(),
+ "settleDays", settleDays != null ? settleDays : "7");
+ // 閫氱煡鍙告満
+ if (order.getAcceptDriver() != null) {
+ sendDriverNotice(order.getAcceptDriver(), Constants.DriverOrderNotify.FINISHED, order.getId(),
+ "orderNo", order.getCode(),
+ "settleDays", settleDays != null ? settleDays : "7");
+ }
+
+ count++;
+ } catch (Exception e) {
+ log.error("鑷姩瀹屾垚璁㈠崟寮傚父, orderId={}, error={}", order.getId(), e.getMessage());
+ }
+ }
+ log.info("鑷姩瀹屾垚瓒呮椂璁㈠崟瀹屾垚锛屽叡瀹屾垚{}鍗�", count);
+ return count;
+ }
+
+ /**
+ * 鍙戦�佺煭淇¢�氱煡锛堝け璐ヤ笉褰卞搷涓讳笟鍔★級
+ * @param phone 鎺ユ敹鎵嬫満鍙�
+ * @param smsNotify 鐭俊妯℃澘鏋氫妇
+ * @param paramPairs 妯℃澘鍙傛暟锛宬ey-value 浜ゆ浛浼犲叆锛屽 "orderNo", "XL202604220001"
+ */
+ private void sendSmsNotify(String phone, Constants.SmsNotify smsNotify, String... paramPairs) {
+ if (StringUtils.isBlank(phone)) {
+ return;
+ }
+ String content = smsNotify.format(paramPairs);
+ try {
+ JSONObject templateParam = new JSONObject();
+ for (int i = 0; i < paramPairs.length - 1; i += 2) {
+ templateParam.put(paramPairs[i], paramPairs[i + 1]);
+ }
+ boolean result = AliSmsService.sendSms(phone, smsNotify.getTemplateCode(),
+ templateParam.toJSONString());
+ if (result) {
+ log.info("鐭俊鍙戦�佹垚鍔�: phone={}, template={}", phone, smsNotify.name());
+ } else {
+ log.warn("鐭俊鍙戦�佸け璐�: phone={}, template={}", phone, smsNotify.name());
+ }
+ // 瀛樺偍鐭俊璁板綍
+ Smsrecord record = new Smsrecord();
+ record.setPhone(phone);
+ record.setContent(content);
+ record.setType(Constants.ONE); // 1=璁㈠崟閫氱煡
+ record.setStatus(result ? Constants.ONE : Constants.ZERO); // 1=宸插彂閫�, 0=鍙戦�佸け璐�
+ record.setCreateTime(new Date());
+ record.setDeleted(Constants.ZERO);
+ smsrecordMapper.insert(record);
+ } catch (Exception e) {
+ log.error("鐭俊鍙戦�佸紓甯�: phone={}, template={}, error={}", phone, smsNotify.name(), e.getMessage());
+ // 寮傚父涔熻褰�
+ try {
+ Smsrecord record = new Smsrecord();
+ record.setPhone(phone);
+ record.setContent(content);
+ record.setType(Constants.ONE);
+ record.setStatus(Constants.ZERO); // 鍙戦�佸け璐�
+ record.setCreateTime(new Date());
+ record.setDeleted(Constants.ZERO);
+ smsrecordMapper.insert(record);
+ } catch (Exception ignored) {}
+ }
+ }
+
}
--
Gitblit v1.9.3