From 761d13616d43b147142d7d33da3a646f6ac15397 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期一, 27 四月 2026 22:25:29 +0800
Subject: [PATCH] 代码生成
---
server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java | 534 ++++++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 401 insertions(+), 133 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 f8d29be..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);
@@ -1461,13 +1503,8 @@
// 鐗╁搧鏄庣粏
vo.setDetailList(buildDetailList(details));
- // 閫炬湡淇℃伅锛堜粎寰呭彇浠剁姸鎬佽绠楋級
- if (Integer.valueOf(Constants.OrderStatus.arrived.getStatus()).equals(o.getStatus())) {
- OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(o, details);
- vo.setOverdue(overdueInfo.getOverdue());
- vo.setOverdueDays(overdueInfo.getOverdueDays());
- vo.setOverdueFee(overdueInfo.getOverdueFee());
- }
+ // 閫炬湡鐘舵��
+ fillOverdueStatus(vo, o, details);
voList.add(vo);
}
}
@@ -1513,11 +1550,25 @@
.leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID")
.leftJoin("shop_info s2 on s2.id = t.TAKE_SHOP_ID")
.leftJoin("driver_info d on d.id = t.ACCEPT_DRIVER")
- .eq(Orders::getPayStatus, Constants.ONE)
- .and(w -> w.eq(Orders::getDepositShopId, shopId).or().eq(Orders::getTakeShopId, shopId))
- .eq(status != null, Orders::getStatus, status)
- .in(statusList != null, Orders::getStatus, statusList)
- .orderByDesc(Orders::getCreateTime);
+ .eq(Orders::getPayStatus, Constants.ONE);
+
+ // 闂ㄥ簵寰呭鐞嗚鍗曪細鎸変笟鍔$幆鑺傚尯鍒嗛棬搴楄鑹�
+ if (combinedStatus != null && Constants.equalsInteger(combinedStatus, Constants.SEVEN)) {
+ wrapper.and(w -> w
+ .and(w1 -> w1.eq(Orders::getDepositShopId, shopId)
+ .in(Orders::getStatus, Constants.OrderStatus.waitDeposit.getStatus(),
+ Constants.OrderStatus.deposited.getStatus()))
+ .or(w2 -> w2.eq(Orders::getTakeShopId, shopId)
+ .in(Orders::getStatus, Constants.OrderStatus.delivering.getStatus(),
+ Constants.OrderStatus.arrived.getStatus()))
+ );
+ } else {
+ wrapper.and(w -> w.eq(Orders::getDepositShopId, shopId).or().eq(Orders::getTakeShopId, shopId));
+ }
+
+ wrapper.eq(status != null, Orders::getStatus, status)
+ .in(statusList != null && !Constants.equalsInteger(combinedStatus, Constants.SEVEN), Orders::getStatus, statusList)
+ .orderByDesc(Orders::getId);
IPage<Orders> orderPage = ordersMapper.selectJoinPage(p, Orders.class, wrapper);
List<MyOrderVO> voList = new ArrayList<>();
@@ -1532,6 +1583,7 @@
Constants.equalsInteger(o.getType(), Constants.ZERO)?o.getType():Objects.nonNull(o.getTakeShopId())?Constants.ONE:Constants.TWO)
);
vo.setCreateTime(o.getCreateTime());
+ vo.setRemark(o.getRemark());
vo.setExpectedTakeTime(o.getExpectedTakeTime());
vo.setDepositShopName(o.getDepositShopName());
@@ -1570,12 +1622,16 @@
vo.setDetailList(buildDetailList(details));
- if (Integer.valueOf(Constants.OrderStatus.arrived.getStatus()).equals(o.getStatus())) {
- OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(o, details);
- vo.setOverdue(overdueInfo.getOverdue());
- vo.setOverdueDays(overdueInfo.getOverdueDays());
- vo.setOverdueFee(overdueInfo.getOverdueFee());
- }
+
+ // 閫炬湡鐘舵��
+ fillOverdueStatus(vo, o, details);
+
+// if (Integer.valueOf(Constants.OrderStatus.arrived.getStatus()).equals(o.getStatus())) {
+// OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(o, details);
+// vo.setOverdue(overdueInfo.getOverdue());
+// vo.setOverdueDays(overdueInfo.getOverdueDays());
+// vo.setOverdueFee(overdueInfo.getOverdueFee());
+// }
voList.add(vo);
}
}
@@ -1621,7 +1677,7 @@
}
}
if (order == null) {
- throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "璁㈠崟涓嶅瓨鍦�");
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鏍搁攢鐮佹棤鏁�");
}
return buildOrderDetailVO(order, false);
}
@@ -1724,41 +1780,8 @@
.eq(OrdersDetail::getDeleted, Constants.ZERO));
vo.setDetailList(buildDetailList(details));
- // 閫炬湡鐘舵�侊細0=鏃犻�炬湡 1=瀛樺湪閫炬湡 2=寰呮敮浠橀�炬湡 3=閫炬湡宸叉敮浠�
- if (Constants.equalsInteger(order.getOverdueStatus(), Constants.TWO)) {
- // 璁㈠崟鏍囪宸叉敮浠橀�炬湡
- vo.setOverdueStatus(Constants.THREE);
- vo.setOverdue(true);
- vo.setOverdueDays(order.getOverdueDays());
- vo.setOverdueFee(order.getOverdueAmount());
- } else if (Constants.equalsInteger(order.getOverdueStatus(), Constants.ONE)) {
- // 璁㈠崟鏍囪寰呮敮浠橀�炬湡
- vo.setOverdueStatus(Constants.TWO);
- vo.setOverdue(true);
- vo.setOverdueDays(order.getOverdueDays());
- vo.setOverdueFee(order.getOverdueAmount());
- } else if (order.getConfirmArriveTime() != null) {
- // 宸茬‘璁ゅ埌搴楋紝鏃犻�炬湡
- vo.setOverdueStatus(Constants.ZERO);
- vo.setOverdue(false);
- vo.setOverdueDays(0);
- vo.setOverdueFee(0L);
- } else {
- // 鏈‘璁ゅ埌搴楋紝璁$畻瀹為檯閫炬湡
- OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(order, details);
- if (overdueInfo.getOverdue() != null && overdueInfo.getOverdue()
- && overdueInfo.getOverdueFee() != null && overdueInfo.getOverdueFee() > 0) {
- vo.setOverdueStatus(Constants.ONE);
- vo.setOverdue(true);
- vo.setOverdueDays(overdueInfo.getOverdueDays());
- vo.setOverdueFee(overdueInfo.getOverdueFee());
- } else {
- vo.setOverdueStatus(Constants.ZERO);
- vo.setOverdue(false);
- vo.setOverdueDays(0);
- vo.setOverdueFee(0L);
- }
- }
+ // 閫炬湡鐘舵�侊細0=鏈埌搴楁湭閫炬湡 1=鏈埌搴楀瓨鍦ㄩ�炬湡 2=宸插埌搴楁湭閫炬湡 3=宸插埌搴楀緟鏀粯閫炬湡 4=閫炬湡宸叉敮浠�
+ fillOverdueStatus(vo, order, details);
// 閫�娆句俊鎭紙status=99鍙栨秷鏃惰繑鍥烇級
if (order.getStatus() != null &&
@@ -1907,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);
@@ -1927,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)) {
// 閫�娆炬垚鍔�
@@ -1969,7 +1993,8 @@
.set(Orders::getTakeLocation, order.getDepositLocation())
.set(Orders::getTakeLocationRemark, order.getDepositLocationRemark())
.set(Orders::getTakeLat, order.getDepositLat())
- .set(Orders::getTakeLgt, order.getDepositLgt());
+ .set(Orders::getTakeLgt, order.getDepositLgt())
+ .set(Orders::getExpectedTakeTime, new Date());
if (Constants.equalsInteger(status, Constants.OrderStatus.accepted.getStatus())) {
updateWrapper.lambda()
.set(Orders::getAcceptDriver, null)
@@ -2135,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(),
@@ -2638,6 +2677,186 @@
@Override
@Transactional(rollbackFor = {Exception.class, BusinessException.class})
+ public void verifyOrder(String verifyCode, Integer shopId, List<String> images, String remark) {
+ if (StringUtils.isBlank(verifyCode)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏍搁攢鐮佷笉鑳戒负绌�");
+ }
+ // 鍏堟煡浼氬憳鏍搁攢鐮�
+ Orders query = new Orders();
+ query.setMemberVerifyCode(verifyCode);
+ query.setDeleted(Constants.ZERO);
+ Orders byMemberCode = findOne(query);
+ if (byMemberCode != null) {
+ shopVerifyOrder(verifyCode, shopId, images, remark);
+ } else {
+ driverVerifyOrder(verifyCode, images, remark, shopId);
+ }
+ }
+
+ @Override
+ @Transactional(rollbackFor = {Exception.class, BusinessException.class})
+ public void verifyOrderByShopId(Integer orderId, Integer shopId, List<String> images, String remark) {
+ if (orderId == null) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璁㈠崟涓婚敭涓嶈兘涓虹┖");
+ }
+ // 鏍规嵁璁㈠崟涓婚敭鏌ユ壘璁㈠崟
+ Orders order = ordersMapper.selectOne(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getId, orderId)
+ .eq(Orders::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ if (order == null) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "璁㈠崟涓嶅瓨鍦�");
+ }
+
+ // 鏌ヨ闂ㄥ簵鍚嶇О鐢ㄤ簬鏃ュ織
+ String shopName = "";
+ ShopInfo shopInfo = shopInfoMapper.selectById(shopId);
+ if (shopInfo != null) {
+ shopName = shopInfo.getName() != null ? shopInfo.getName() : "";
+ }
+
+ Integer status = order.getStatus();
+ Date now = new Date();
+ if (Constants.equalsInteger(status, Constants.OrderStatus.waitDeposit.getStatus())) {
+ // 寰呭瘎瀛�(1) 鈫� 宸插瘎瀛�(2)锛屼袱绉嶇被鍨嬮�氱敤
+ // 鏍¢獙褰撳墠闂ㄥ簵鏄惁涓鸿鍗曠殑瀛樹欢闂ㄥ簵
+ if (!shopId.equals(order.getDepositShopId())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇ヨ鍗曚笉灞炰簬褰撳墠闂ㄥ簵锛屾棤娉曟牳閿�");
+ }
+ order.setStatus(Constants.equalsInteger(order.getType(),Constants.ZERO)?Constants.OrderStatus.arrived.getStatus():Constants.OrderStatus.deposited.getStatus());
+ order.setDepositTime(now);
+ // 閲婃斁褰撳墠鏍搁攢鐮侊紝鐢熸垚鏂扮殑鏍搁攢鐮佷緵鍙栦欢鏃朵娇鐢�
+ String verifyCode = order.getMemberVerifyCode();
+ if (StringUtils.isNotBlank(verifyCode)) {
+ releaseVerifyCode(verifyCode);
+ }
+ order.setMemberVerifyCode(generateVerifyCode());
+ ordersMapper.updateById(order);
+ // 淇濆瓨瀵勫瓨鍥剧墖锛坥bj_type=2 璁㈠崟瀵勫瓨鍥剧墖锛屾渶澶�3寮狅級
+ saveVerifyImages(order.getId(), images, Constants.FileType.ORDER_DEPOSIT.getKey(), shopId);
+ // 璁板綍璁㈠崟鏃ュ織
+ saveShopVerifyLog(order, Constants.OrderLogType.shopDeposit, Constants.OrderLogType.shopDeposit.format(shopName), remark, shopId);
+ // 閫氱煡浼氬憳锛氶棬搴楁牳閿�鎴愬姛
+ if (Constants.equalsInteger(order.getType(), Constants.ONE)) {
+ // 寮傚湴瀵勫瓨 鈫� 寰呮姠鍗�
+ sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.WAIT_GRAB, order.getId(),
+ "orderNo", order.getCode());
+ } else {
+ // 灏卞湴瀵勫瓨 鈫� 寰呭彇浠舵彁閱�
+ sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.WAIT_PICKUP_REMIND, order.getId(),
+ "orderNo", order.getCode(), "shopName", shopName);
+ }
+ } else if (Constants.equalsInteger(status, Constants.OrderStatus.arrived.getStatus())) {
+ // 寮傚湴瀵勫瓨 + 鏃犲彇浠堕棬搴� 鈫� 鏃犳硶鏍搁攢锛堝鎴疯嚜鍙栵紝鏃犻棬搴楁搷浣滐級
+ if (Constants.equalsInteger(order.getType(), Constants.ONE) && order.getTakeShopId() == null) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇ヨ鍗曟棤鍙栦欢闂ㄥ簵锛屾棤娉曟牳閿�");
+ }
+ // 鏍¢獙鍙栦欢闂ㄥ簵涓庡綋鍓嶇櫥褰曢棬搴椾竴鑷�
+ if (!shopId.equals(order.getTakeShopId())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇ヨ鍗曚笉灞炰簬褰撳墠闂ㄥ簵锛屾棤娉曟牳閿�");
+ }
+ // 鏍¢獙鏄惁宸茬‘璁ら【瀹㈠埌搴�
+ if (order.getConfirmArriveTime() == null) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇峰厛纭椤惧鍒板簵");
+ }
+ // 鏍¢獙鏄惁瀛樺湪寰呭鐞嗙殑閫炬湡璐圭敤
+ if (Constants.equalsInteger(order.getOverdueStatus(), Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀛樺湪閫炬湡璐圭敤寰呭鐞嗭紝璇峰厛瀹屾垚閫炬湡璐圭敤鏀粯");
+ }
+ // 寰呭彇浠�(5) 鈫� 宸插畬鎴�(7)
+ order.setStatus(Constants.OrderStatus.finished.getStatus());
+ order.setConfirmArriveTime(now);
+ ordersMapper.updateById(order);
+ // 璁㈠崟瀹屾垚锛岄噴鏀炬牳閿�鐮�
+ String verifyCode = order.getMemberVerifyCode();
+ if (StringUtils.isNotBlank(verifyCode)) {
+ releaseVerifyCode(verifyCode);
+ }
+ // 淇濆瓨鍑哄簱鍥剧墖锛坥bj_type=13 闂ㄥ簵鍑哄簱鍥剧墖锛屾渶澶�3寮狅級
+ saveVerifyImages(order.getId(), images, Constants.FileType.STORE_OUT.getKey(), shopId);
+ // 鐢熸垚鏀剁泭璁板綍
+ calculateAndSaveOrderFees(order.getId());
+ generateRevenueRecords(order.getId());
+ // 璁板綍璁㈠崟鏃ュ織
+ saveShopVerifyLog(order, Constants.OrderLogType.shopTake, Constants.OrderLogType.shopTake.format(shopName), remark, shopId);
+ // 閫氱煡浼氬憳锛氳鍗曞凡瀹屾垚
+ 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");
+ }
+ }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(), "褰撳墠璁㈠崟鐘舵�佷笉鍏佽鏍搁攢");
+ }
+ }
+
+ @Override
+ @Transactional(rollbackFor = {Exception.class, BusinessException.class})
public void shopVerifyOrder(String verifyCode, Integer shopId, List<String> images, String remark) {
if (StringUtils.isBlank(verifyCode)) {
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏍搁攢鐮佷笉鑳戒负绌�");
@@ -2694,6 +2913,14 @@
// 鏍¢獙鍙栦欢闂ㄥ簵涓庡綋鍓嶇櫥褰曢棬搴椾竴鑷�
if (!shopId.equals(order.getTakeShopId())) {
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇ヨ鍗曚笉灞炰簬褰撳墠闂ㄥ簵锛屾棤娉曟牳閿�");
+ }
+ // 鏍¢獙鏄惁宸茬‘璁ら【瀹㈠埌搴�
+ if (order.getConfirmArriveTime() == null) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇峰厛纭椤惧鍒板簵");
+ }
+ // 鏍¢獙鏄惁瀛樺湪寰呭鐞嗙殑閫炬湡璐圭敤
+ if (Constants.equalsInteger(order.getOverdueStatus(), Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀛樺湪閫炬湡璐圭敤寰呭鐞嗭紝璇峰厛瀹屾垚閫炬湡璐圭敤鏀粯");
}
// 寰呭彇浠�(5) 鈫� 宸插畬鎴�(7)
order.setStatus(Constants.OrderStatus.finished.getStatus());
@@ -2801,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);
}
@@ -3275,6 +3503,62 @@
}
/**
+ /**
+ * 濉厖閫炬湡鐘舵�佸埌 VO锛圡yOrderVO锛�
+ * overdueStatus: 0=鏈埌搴楁湭閫炬湡 1=鏈埌搴楀瓨鍦ㄩ�炬湡 2=宸插埌搴楁湭閫炬湡 3=宸插埌搴楀緟鏀粯閫炬湡 4=閫炬湡宸叉敮浠�
+ */
+ private void fillOverdueStatus(MyOrderVO vo, Orders order, List<OrdersDetail> details) {
+ Integer[] result = calcOverdueStatus(order, details);
+ vo.setOverdueStatus(result[0]);
+ vo.setOverdue(result[1] == 1);
+ vo.setOverdueDays(result[2]);
+ vo.setOverdueFee(result[3].longValue());
+ }
+
+ /**
+ * 濉厖閫炬湡鐘舵�佸埌 VO锛圡yOrderDetailVO锛�
+ */
+ private void fillOverdueStatus(MyOrderDetailVO vo, Orders order, List<OrdersDetail> details) {
+ Integer[] result = calcOverdueStatus(order, details);
+ vo.setOverdueStatus(result[0]);
+ vo.setOverdue(result[1] == 1);
+ vo.setOverdueDays(result[2]);
+ vo.setOverdueFee(result[3].longValue());
+ }
+
+ /**
+ * 璁$畻閫炬湡鐘舵��
+ * @return [overdueStatus, isOverdue(0/1), overdueDays, overdueFee]
+ */
+ private Integer[] calcOverdueStatus(Orders order, List<OrdersDetail> details) {
+ // 4=閫炬湡宸叉敮浠橈紙璁㈠崟 overdueStatus=2锛�
+ if (Constants.equalsInteger(order.getOverdueStatus(), Constants.TWO)) {
+ return new Integer[]{4, 1, order.getOverdueDays(), order.getOverdueAmount() != null ? order.getOverdueAmount().intValue() : 0};
+ }
+ // 3=宸插埌搴楀緟鏀粯閫炬湡锛堣鍗� overdueStatus=1锛�
+ if (Constants.equalsInteger(order.getOverdueStatus(), Constants.ONE)) {
+ return new Integer[]{3, 1, order.getOverdueDays(), order.getOverdueAmount() != null ? order.getOverdueAmount().intValue() : 0};
+ }
+ // 璁$畻瀹炴椂閫炬湡
+ OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(order, details);
+ boolean hasOverdue = overdueInfo.getOverdue() != null && overdueInfo.getOverdue()
+ && overdueInfo.getOverdueFee() != null && overdueInfo.getOverdueFee() > 0;
+ if (order.getConfirmArriveTime() != null) {
+ // 宸插埌搴�
+ int days = hasOverdue ? overdueInfo.getOverdueDays() : 0;
+ long fee = hasOverdue ? overdueInfo.getOverdueFee() : 0L;
+ return new Integer[]{2, hasOverdue ? 1 : 0, days, (int) fee};
+ } else {
+ // 鏈埌搴�
+ if (hasOverdue) {
+ return new Integer[]{1, 1, overdueInfo.getOverdueDays(), overdueInfo.getOverdueFee().intValue()};
+ } else {
+ return new Integer[]{0, 0, 0, 0};
+ }
+ }
+ }
+
+ /**
* 閫炬湡璐圭敤鍐呴儴璁$畻锛堜笉鏌ュ簱锛屾帴鍙楅鏌ヨ鐨勬暟鎹級
* 渚涘垎椤电瓑宸叉煡璇㈡槑缁嗙殑涓氬姟鍦烘櫙澶嶇敤锛岄伩鍏嶉噸澶嶆煡璇�
*/
@@ -3376,26 +3660,20 @@
/**
* 灏卞湴瀵勫瓨閫炬湡澶╂暟璁$畻
- * 杩囦簡棰勮鍙栦欢鏃堕棿褰撳ぉ鐨�24:00锛堟鏃�00:00锛夊悗鎵嶇畻绗竴澶�
+ * 杩囦簡棰勮鍙栦欢鏃ユ湡鐨勬鏃ワ紙鍙瘮杈冨勾鏈堟棩锛夊悗寮�濮嬭閫炬湡澶╂暟
*/
private int calcLocalOverdueDays(Date now, Date expectedTakeTime) {
- if (expectedTakeTime == null || !now.after(expectedTakeTime)) {
+ if (expectedTakeTime == null) {
return 0;
}
- // 鍩哄噯鏃堕棿 = 棰勮鍙栦欢鏃ユ湡鐨勬鏃� 00:00锛堝嵆褰撳ぉ24:00锛�
+ // 鍙彇骞存湀鏃�
Calendar baseCal = Calendar.getInstance();
baseCal.setTime(expectedTakeTime);
baseCal.set(Calendar.HOUR_OF_DAY, 0);
baseCal.set(Calendar.MINUTE, 0);
baseCal.set(Calendar.SECOND, 0);
baseCal.set(Calendar.MILLISECOND, 0);
- baseCal.add(Calendar.DAY_OF_MONTH, 1); // 娆℃棩00:00 = 褰撳ぉ24:00
- Date baseTime = baseCal.getTime();
- if (!now.after(baseTime)) {
- return 0;
- }
- // 閫炬湡澶╂暟 = 褰撳墠鏃ユ湡 - 鍩哄噯鏃ユ湡锛堟寜澶╁彇宸級
Calendar nowCal = Calendar.getInstance();
nowCal.setTime(now);
nowCal.set(Calendar.HOUR_OF_DAY, 0);
@@ -3403,40 +3681,31 @@
nowCal.set(Calendar.SECOND, 0);
nowCal.set(Calendar.MILLISECOND, 0);
- Calendar baseDateCal = Calendar.getInstance();
- baseDateCal.setTime(baseTime);
- baseDateCal.set(Calendar.HOUR_OF_DAY, 0);
- baseDateCal.set(Calendar.MINUTE, 0);
- baseDateCal.set(Calendar.SECOND, 0);
- baseDateCal.set(Calendar.MILLISECOND, 0);
-
- long diffMs = nowCal.getTimeInMillis() - baseDateCal.getTimeInMillis();
- int days = (int) (diffMs / (1000 * 60 * 60 * 24));
- return Math.max(days, 0);
+ // 鍩哄噯鏃ユ湡 = 棰勮鍙栦欢鏃ユ湡鐨勬鏃ワ紝褰撳ぉ鍙婁箣鍓嶄笉绠楅�炬湡
+ if (nowCal.before(baseCal)) {
+ return 0;
+ }
+ // 閫炬湡澶╂暟 = 褰撳墠鏃ユ湡 - 鍩哄噯鏃ユ湡
+ long diffMs = nowCal.getTimeInMillis() - baseCal.getTimeInMillis();
+ return (int) (diffMs / (1000 * 60 * 60 * 24));
}
/**
* 寮傚湴瀵勫瓨閫炬湡澶╂暟璁$畻
- * 杩囦簡杞Щ鍒板簵鏃堕棿褰撳ぉ鐨勬櫄涓�12鐐癸紙24:00锛夊悗鎵嶇畻绗竴澶�
+ * 杩囦簡杞Щ鍒板簵鏃ユ湡鐨勬鏃ワ紙鍙瘮杈冨勾鏈堟棩锛夊悗寮�濮嬭閫炬湡澶╂暟
*/
private int calcRemoteOverdueDays(Date now, Date arriveTime) {
- if (arriveTime == null || !now.after(arriveTime)) {
+ if (arriveTime == null) {
return 0;
}
- // 鍩哄噯鏃堕棿 = 杞Щ鍒板簵鏃ユ湡鐨勬鏃� 00:00锛堝嵆褰撳ぉ24:00锛�
+ // 鍙彇骞存湀鏃�
Calendar baseCal = Calendar.getInstance();
baseCal.setTime(arriveTime);
baseCal.set(Calendar.HOUR_OF_DAY, 0);
baseCal.set(Calendar.MINUTE, 0);
baseCal.set(Calendar.SECOND, 0);
baseCal.set(Calendar.MILLISECOND, 0);
- baseCal.add(Calendar.DAY_OF_MONTH, 1); // 娆℃棩00:00 = 褰撳ぉ24:00
- Date baseTime = baseCal.getTime();
- if (!now.after(baseTime)) {
- return 0;
- }
- // 閫炬湡澶╂暟 = 褰撳墠鏃ユ湡 - 鍩哄噯鏃ユ湡
Calendar nowCal = Calendar.getInstance();
nowCal.setTime(now);
nowCal.set(Calendar.HOUR_OF_DAY, 0);
@@ -3444,16 +3713,14 @@
nowCal.set(Calendar.SECOND, 0);
nowCal.set(Calendar.MILLISECOND, 0);
- Calendar baseDateCal = Calendar.getInstance();
- baseDateCal.setTime(baseTime);
- baseDateCal.set(Calendar.HOUR_OF_DAY, 0);
- baseDateCal.set(Calendar.MINUTE, 0);
- baseDateCal.set(Calendar.SECOND, 0);
- baseDateCal.set(Calendar.MILLISECOND, 0);
-
- long diffMs = nowCal.getTimeInMillis() - baseDateCal.getTimeInMillis();
- int days = (int) (diffMs / (1000 * 60 * 60 * 24));
- return Math.max(days, 0);
+ // 鍩哄噯鏃ユ湡 = 鍒板簵鏃ユ湡鐨勬鏃ワ紝褰撳ぉ鍙婁箣鍓嶄笉绠楅�炬湡
+ baseCal.add(Calendar.DAY_OF_MONTH, 1);
+ if (nowCal.before(baseCal)) {
+ return 0;
+ }
+ // 閫炬湡澶╂暟 = 褰撳墠鏃ユ湡 - 鍩哄噯鏃ユ湡
+ long diffMs = nowCal.getTimeInMillis() - baseCal.getTimeInMillis();
+ return (int) (diffMs / (1000 * 60 * 60 * 24));
}
@Override
@@ -3472,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