From 467fe3b3ec6aa9d449b094bdd9df4611323d88d1 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期五, 24 四月 2026 21:43:50 +0800
Subject: [PATCH] 代码生成
---
server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java | 461 ++++++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 340 insertions(+), 121 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 800731b..888e25a 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
@@ -229,6 +229,7 @@
queryWrapper.eq(pageWrap.getModel().getTakeShopId() != null, Orders::getTakeShopId, pageWrap.getModel().getTakeShopId());
queryWrapper.and(pageWrap.getModel().getDriverKeyword() != null, i->i.like(DriverInfo::getName, pageWrap.getModel().getDriverKeyword())
.or().like(DriverInfo::getTelephone, pageWrap.getModel().getDriverKeyword()));
+ queryWrapper.eq(pageWrap.getModel().getSettlementStatus() != null, Orders::getSettlementStatus, pageWrap.getModel().getSettlementStatus());
for (PageWrap.SortData sortData : pageWrap.getSorts()) {
if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
queryWrapper.orderByDesc(sortData.getProperty());
@@ -262,6 +263,7 @@
queryWrapper.eq(pageWrap.getModel().getTakeShopId() != null, Orders::getTakeShopId, pageWrap.getModel().getTakeShopId());
queryWrapper.and(pageWrap.getModel().getDriverKeyword() != null, i->i.like(DriverInfo::getName, pageWrap.getModel().getDriverKeyword())
.or().like(DriverInfo::getTelephone, pageWrap.getModel().getDriverKeyword()));
+ queryWrapper.eq(pageWrap.getModel().getSettlementStatus() != null, Orders::getSettlementStatus, pageWrap.getModel().getSettlementStatus());
queryWrapper.select(
"IFNULL(SUM(t.total_amount), 0) as total_amount_sum",
@@ -1109,13 +1111,12 @@
String optUserName = getCurrentUserName();
- // 鍔犳�ヨ垂鏃ュ織锛堟瘡娆″崟鐙褰曟湰娆″姞鎬ヨ垂锛�
- Constants.OrderLogType urgentLogType = Constants.OrderLogType.urgent;
+ // 鍔犳�ヨ垂鏃ュ織
OrderLog feeLog = new OrderLog();
feeLog.setOrderId(order.getId());
- feeLog.setTitle(urgentLogType.getTitle());
- feeLog.setLogInfo(urgentLogType.getStatusInfo().replace("{param}", dto.getUrgentFee().toPlainString()));
- feeLog.setObjType(urgentLogType.getStatus());
+ 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);
@@ -1154,18 +1155,37 @@
Member driver = memberMapper.selectById(dto.getDriverId());
String driverName = driver != null ? driver.getName() : String.valueOf(dto.getDriverId());
- Constants.OrderLogType dispatchLogType = Constants.OrderLogType.dispatch;
OrderLog driverLog = new OrderLog();
driverLog.setOrderId(order.getId());
- driverLog.setTitle(dispatchLogType.getTitle());
- driverLog.setLogInfo(dispatchLogType.getStatusInfo().replace("{param}", driverName));
- driverLog.setObjType(dispatchLogType.getStatus());
+ 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.setOptUserType(3);
driverLog.setOptUserName(optUserName);
driverLog.setCreateTime(new Date());
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));
+ }
}
ordersMapper.update(updateWrapper);
@@ -1371,8 +1391,12 @@
.select("s1.link_phone", Orders::getDepositShopLinkPhone)
.select("s2.name", Orders::getTakeShopName)
.select("s2.address", Orders::getTakeShopAddress)
+ .select("s2.link_phone", Orders::getTakeShopLinkPhone)
+ .select("d.name", Orders::getDriverName)
+ .select("d.telephone", Orders::getDriverPhone)
.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::getDeleted, Constants.ZERO)
.eq(Orders::getMemberId, memberId)
.eq(status != null, Orders::getStatus, status)
@@ -1407,10 +1431,15 @@
vo.setTakeShopId(o.getTakeShopId());
vo.setTakeShopName(o.getTakeShopName());
vo.setTakeShopAddress(o.getTakeShopAddress());
+ vo.setTakeShopPhone(o.getTakeShopLinkPhone());
} else {
vo.setTakeLocation(o.getTakeLocation());
vo.setTakeLocationRemark(o.getTakeLocationRemark());
}
+
+ // 鍙告満淇℃伅
+ vo.setDriverName(o.getDriverName());
+ vo.setDriverPhone(o.getDriverPhone());
// 鍙栦欢鑱旂郴浜�
vo.setTakeUser(o.getTakeUser());
@@ -1432,13 +1461,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);
}
}
@@ -1478,12 +1502,30 @@
.select("s1.link_phone", Orders::getDepositShopLinkPhone)
.select("s2.name", Orders::getTakeShopName)
.select("s2.address", Orders::getTakeShopAddress)
+ .select("s2.link_phone", Orders::getTakeShopLinkPhone)
+ .select("d.name", Orders::getDriverName)
+ .select("d.telephone", Orders::getDriverPhone)
.leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID")
.leftJoin("shop_info s2 on s2.id = t.TAKE_SHOP_ID")
- .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)
+ .leftJoin("driver_info d on d.id = t.ACCEPT_DRIVER")
+ .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::getCreateTime);
IPage<Orders> orderPage = ordersMapper.selectJoinPage(p, Orders.class, wrapper);
@@ -1499,6 +1541,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());
@@ -1515,10 +1558,15 @@
if (o.getTakeShopId() != null) {
vo.setTakeShopName(o.getTakeShopName());
vo.setTakeShopAddress(o.getTakeShopAddress());
+ vo.setTakeShopPhone(o.getTakeShopLinkPhone());
} else {
vo.setTakeLocation(o.getTakeLocation());
vo.setTakeLocationRemark(o.getTakeLocationRemark());
}
+
+ // 鍙告満淇℃伅
+ vo.setDriverName(o.getDriverName());
+ vo.setDriverPhone(o.getDriverPhone());
vo.setTakeUser(o.getTakeUser());
vo.setTakePhone(o.getTakePhone());
@@ -1532,12 +1580,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);
}
}
@@ -1583,7 +1635,7 @@
}
}
if (order == null) {
- throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "璁㈠崟涓嶅瓨鍦�");
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鏍搁攢鐮佹棤鏁�");
}
return buildOrderDetailVO(order, false);
}
@@ -1614,6 +1666,7 @@
vo.setDeclaredAmount(order.getDeclaredAmount());
vo.setDeclaredFee(order.getDeclaredFee());
vo.setUrgentAmount(order.getUrgentAmount());
+ vo.setIsUrgent(order.getIsUrgent());
vo.setActualPayAmount(Constants.equalsInteger(order.getPayStatus(), Constants.ONE)?order.getPayAmount():order.getEstimatedAmount());
// 鏍囪
@@ -1685,66 +1738,20 @@
.eq(OrdersDetail::getDeleted, Constants.ZERO));
vo.setDetailList(buildDetailList(details));
- 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);
- }
+ // 閫炬湡鐘舵�侊細0=鏈埌搴楁湭閫炬湡 1=鏈埌搴楀瓨鍦ㄩ�炬湡 2=宸插埌搴楁湭閫炬湡 3=宸插埌搴楀緟鏀粯閫炬湡 4=閫炬湡宸叉敮浠�
+ fillOverdueStatus(vo, order, details);
- // 閫�娆句俊鎭紙status=96鍏抽棴/99鍙栨秷鏃惰繑鍥烇級
- if (orderStatus != null &&
- (Constants.equalsInteger(orderStatus, Constants.OrderStatus.cancelled.getStatus()))) {
+ // 閫�娆句俊鎭紙status=99鍙栨秷鏃惰繑鍥烇級
+ if (order.getStatus() != null &&
+ Constants.equalsInteger(order.getStatus(), 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());
- }
+ vo.setRefundInfo(ordersRefund);
}
// 鏍搁攢鐮�
@@ -1855,7 +1862,7 @@
order.setStatus(Constants.OrderStatus.cancelled.getStatus());
order.setCancelTime(now);
ordersMapper.updateById(order);
- saveCancelLog(order, "浼氬憳鍙栨秷璁㈠崟锛堝緟鏀粯锛�", reason, memberId);
+ saveCancelLog(order, Constants.OrderLogType.memberCancel, "浼氬憳鍙栨秷璁㈠崟锛堝緟鏀粯锛�", memberId);
// 鐭俊閫氱煡浼氬憳锛氳鍗曞凡鍙栨秷
Member cancelMember1 = memberMapper.selectById(memberId);
sendSmsNotify(cancelMember1 != null ? cancelMember1.getTelephone() : null,
@@ -1871,7 +1878,7 @@
order.setRefundAmount(order.getPayAmount());
ordersMapper.updateById(order);
- saveCancelLog(order, "浼氬憳鍙栨秷璁㈠崟锛堝緟瀵勫瓨锛屽叏棰濋��娆撅級", reason, memberId);
+ saveCancelLog(order, Constants.OrderLogType.memberCancel, "浼氬憳鍙栨秷璁㈠崟锛堝緟瀵勫瓨锛屽叏棰濋��娆撅級", memberId);
// 閫氱煡浼氬憳锛氬凡鍙栨秷
sendOrderNotice(memberId, Constants.MemberOrderNotify.CANCELLED, orderId,
"orderNo", order.getCode());
@@ -1926,23 +1933,37 @@
// 宸插瘎瀛�/宸叉帴鍗曪細鐩存帴灏嗚鍗曠被鍨嬫敼涓哄氨鍦板瘎瀛�
if (Constants.equalsInteger(status, Constants.OrderStatus.deposited.getStatus())
|| Constants.equalsInteger(status, Constants.OrderStatus.accepted.getStatus())) {
- order.setType(Constants.ZERO); // 灏卞湴瀵勫瓨
- ordersMapper.updateById(order);
- 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());
+ // 鍏堜繚瀛樺師鍙告満淇℃伅锛岀敤浜庡悗缁�氱煡
+ Integer originalDriverId = order.getAcceptDriver();
+ DriverInfo originalDriver = originalDriverId != null ? driverInfoMapper.selectById(originalDriverId) : null;
+
+ ShopInfo depositShop = shopInfoMapper.selectById(order.getDepositShopId());
+ // 鍙栦欢鐐逛俊鎭洿鏂颁负瀛樹欢闂ㄥ簵锛屼娇鐢� UpdateWrapper 纭繚 null 瀛楁涔熻兘鐢熸晥
+ UpdateWrapper<Orders> updateWrapper = new UpdateWrapper<>();
+ updateWrapper.lambda()
+ .eq(Orders::getId, order.getId())
+ .set(Orders::getType, Constants.ZERO)
+ .set(Orders::getTakeShopId, order.getDepositShopId())
+ .set(Orders::getTakeShopName, order.getDepositShopName())
+ .set(Orders::getTakeShopAddress, order.getDepositShopAddress())
+ .set(Orders::getTakeShopLinkPhone, order.getDepositShopLinkPhone())
+ .set(Orders::getTakeLocation, order.getDepositLocation())
+ .set(Orders::getTakeLocationRemark, order.getDepositLocationRemark())
+ .set(Orders::getTakeLat, order.getDepositLat())
+ .set(Orders::getTakeLgt, order.getDepositLgt());
+ if (Constants.equalsInteger(status, Constants.OrderStatus.accepted.getStatus())) {
+ updateWrapper.lambda()
+ .set(Orders::getAcceptDriver, null)
+ .set(Orders::getAcceptType, null)
+ .set(Orders::getAcceptTime, null);
}
+ ordersMapper.update(null, updateWrapper);
+ saveCancelLog(order, Constants.OrderLogType.memberCancelToConvert, "浼氬憳鍙栨秷寮傚湴瀵勫瓨璁㈠崟锛岃浆涓哄氨鍦板瘎瀛�", memberId);
// 閫氱煡鍙告満锛氳鍗曞凡鍙栨秷锛堝凡鎺ュ崟鎯呭喌涓嬪徃鏈洪渶鍋滄鏈嶅姟锛�
- if (order.getAcceptDriver() != null && Constants.equalsInteger(status, Constants.OrderStatus.accepted.getStatus())) {
- sendDriverNotice(order.getAcceptDriver(), Constants.DriverOrderNotify.REFUNDING, orderId,
+ if (originalDriverId != null && Constants.equalsInteger(status, Constants.OrderStatus.accepted.getStatus())) {
+ sendDriverNotice(originalDriverId, Constants.DriverOrderNotify.REFUNDING, orderId,
"orderNo", order.getCode());
- DriverInfo driver = driverInfoMapper.selectById(order.getAcceptDriver());
- sendSmsNotify(driver != null ? driver.getTelephone() : null,
+ sendSmsNotify(originalDriver != null ? originalDriver.getTelephone() : null,
Constants.SmsNotify.DRIVER_REFUNDING, "orderNo", order.getCode());
}
return;
@@ -1954,12 +1975,12 @@
/**
* 淇濆瓨鍙栨秷璁㈠崟鎿嶄綔鏃ュ織
*/
- private void saveCancelLog(Orders order, String title, String reason, Integer memberId) {
+ private void saveCancelLog(Orders order, Constants.OrderLogType logType, String reason, Integer memberId) {
OrderLog log = new OrderLog();
log.setOrderId(order.getId());
- log.setTitle(title);
- log.setLogInfo(reason);
- log.setObjType(Constants.ORDER_LOG_CANCEL);
+ log.setTitle(logType.getTitle());
+ log.setLogInfo(logType.format(reason));
+ log.setObjType(logType.getStatus());
log.setOrderStatus(order.getStatus());
log.setOptUserId(memberId);
log.setOptUserType(0); // 0=鐢ㄦ埛
@@ -1971,12 +1992,13 @@
/**
* 淇濆瓨闂ㄥ簵鏍搁攢鏃ュ織
*/
- private void saveShopVerifyLog(Orders order, String title, String logInfo, String remark, Integer shopId) {
+ private void saveShopVerifyLog(Orders order, Constants.OrderLogType logType, String logInfo, String remark, Integer shopId) {
OrderLog log = new OrderLog();
log.setOrderId(order.getId());
- log.setTitle(title);
- log.setLogInfo(logInfo);
+ log.setTitle(logType.getTitle());
+ log.setLogInfo(logInfo != null ? logInfo : logType.getStatusInfo());
log.setRemark(remark);
+ log.setObjType(logType.getStatus());
log.setOrderStatus(order.getStatus());
log.setOptUserId(shopId);
log.setOptUserType(2); // 2=闂ㄥ簵
@@ -2307,6 +2329,15 @@
shopInfo.setUpdateTime(now);
shopInfoMapper.updateById(shopInfo);
+ // 鐭俊閫氱煡闂ㄥ簵锛氭垚鍔熷叆椹�
+ String rawPassword = shopInfo.getTelephone() != null && shopInfo.getTelephone().length() >= 6
+ ? shopInfo.getTelephone().substring(shopInfo.getTelephone().length() - 6) + "@123456" : "";
+ sendSmsNotify(shopInfo.getTelephone(),
+ Constants.SmsNotify.SHOP_AUTH_SUCCESS,
+ "storeName", shopInfo.getName(),
+ "phone", shopInfo.getTelephone() != null ? shopInfo.getTelephone() : "",
+ "password", rawPassword);
+
// 6. 鎶奸噾鏀粯瀹屾垚鍚庯紝鑻ュ煄甯傛湭寮�閫氬垯鑷姩寮�閫�
if (shopInfo.getAreaId() != null) {
Areas shopArea = areasBiz.resolveArea(shopInfo.getAreaId());
@@ -2588,6 +2619,129 @@
@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.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 {
+ 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(), "鏍搁攢鐮佷笉鑳戒负绌�");
@@ -2625,7 +2779,7 @@
// 淇濆瓨瀵勫瓨鍥剧墖锛坥bj_type=2 璁㈠崟瀵勫瓨鍥剧墖锛屾渶澶�3寮狅級
saveVerifyImages(order.getId(), images, Constants.FileType.ORDER_DEPOSIT.getKey(), shopId);
// 璁板綍璁㈠崟鏃ュ織
- saveShopVerifyLog(order, "闂ㄥ簵纭瀵勫瓨", "闂ㄥ簵銆�" + shopName + "銆戠‘璁ゅ瘎瀛�", remark, shopId);
+ saveShopVerifyLog(order, Constants.OrderLogType.shopDeposit, Constants.OrderLogType.shopDeposit.format(shopName), remark, shopId);
// 閫氱煡浼氬憳锛氶棬搴楁牳閿�鎴愬姛
if (Constants.equalsInteger(order.getType(), Constants.ONE)) {
// 寮傚湴瀵勫瓨 鈫� 寰呮姠鍗�
@@ -2634,7 +2788,7 @@
} else {
// 灏卞湴瀵勫瓨 鈫� 寰呭彇浠舵彁閱�
sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.WAIT_PICKUP_REMIND, order.getId(),
- "orderNo", order.getCode());
+ "orderNo", order.getCode(), "shopName", shopName);
}
} else if (Constants.equalsInteger(status, Constants.OrderStatus.arrived.getStatus())) {
// 寮傚湴瀵勫瓨 + 鏃犲彇浠堕棬搴� 鈫� 鏃犳硶鏍搁攢锛堝鎴疯嚜鍙栵紝鏃犻棬搴楁搷浣滐級
@@ -2644,6 +2798,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());
@@ -2657,7 +2819,7 @@
calculateAndSaveOrderFees(order.getId());
generateRevenueRecords(order.getId());
// 璁板綍璁㈠崟鏃ュ織
- saveShopVerifyLog(order, "闂ㄥ簵纭鍙栦欢", "闂ㄥ簵銆�" + shopName + "銆戠‘璁ゅ彇浠讹紝璁㈠崟瀹屾垚", remark, shopId);
+ saveShopVerifyLog(order, Constants.OrderLogType.shopTake, Constants.OrderLogType.shopTake.format(shopName), remark, shopId);
// 閫氱煡浼氬憳锛氳鍗曞凡瀹屾垚
sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.FINISHED, order.getId(),
"orderNo", order.getCode());
@@ -2770,7 +2932,7 @@
if (order.getRefundAmount() != null && order.getRefundAmount() > 0) {
logInfo += "锛岄��娆�" + Constants.getFormatMoney(order.getRefundAmount()) + "鍏�";
}
- saveShopVerifyLog(order, "闂ㄥ簵纭鍑哄簱", logInfo, remark, shopId);
+ saveShopVerifyLog(order, Constants.OrderLogType.shopOutStock, logInfo, remark, shopId);
// 閫氱煡浼氬憳锛氳鍗曞凡瀹屾垚
sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.FINISHED, order.getId(),
"orderNo", order.getCode());
@@ -3102,9 +3264,9 @@
ordersMapper.updateById(order);
// 璁板綍璁㈠崟鏃ュ織
- saveShopVerifyLog(order, "纭椤惧鍒板簵锛堥�炬湡锛�",
- "闂ㄥ簵銆�" + shopName + "銆戠‘璁ら【瀹㈠埌搴楋紝閫炬湡" + overdueInfo.getOverdueDays()
- + "澶╋紝閫炬湡璐圭敤" + Constants.getFormatMoney(overdueInfo.getOverdueFee()) + "鍏�",
+ String overdueLogInfo = "闂ㄥ簵銆�" + shopName + "銆戠‘璁ら【瀹㈠埌搴楋紝閫炬湡" + overdueInfo.getOverdueDays()
+ + "澶╋紝閫炬湡璐圭敤" + Constants.getFormatMoney(overdueInfo.getOverdueFee()) + "鍏�";
+ saveShopVerifyLog(order, Constants.OrderLogType.shopConfirmArriveOverdue, overdueLogInfo,
null, shopId);
} else {
// 鏈�炬湡锛氭爣璁伴�炬湡鐘舵�佷负0锛岃鍗曚繚鎸佸綋鍓嶇姸鎬�
@@ -3148,7 +3310,7 @@
if (order.getRefundAmount() != null && order.getRefundAmount() > 0) {
logInfo += "锛岄渶閫�娆�" + Constants.getFormatMoney(order.getRefundAmount()) + "鍏�";
}
- saveShopVerifyLog(order, "纭椤惧鍒板簵", logInfo, null, shopId);
+ saveShopVerifyLog(order, Constants.OrderLogType.shopConfirmArrive, logInfo, null, shopId);
}
}
@@ -3225,6 +3387,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};
+ }
+ }
+ }
+
+ /**
* 閫炬湡璐圭敤鍐呴儴璁$畻锛堜笉鏌ュ簱锛屾帴鍙楅鏌ヨ鐨勬暟鎹級
* 渚涘垎椤电瓑宸叉煡璇㈡槑缁嗙殑涓氬姟鍦烘櫙澶嶇敤锛岄伩鍏嶉噸澶嶆煡璇�
*/
@@ -3241,8 +3459,8 @@
// 鐗╁搧鍩虹鏃ヨ垂鐢� = 危(鍗曚环 脳 鏁伴噺)
long dailyBaseFee = 0L;
for (OrdersDetail d : details) {
- dailyBaseFee += (d.getUnitPrice() != null ? d.getUnitPrice() : 0L)
- * (d.getNum() != null ? d.getNum() : 0);
+ dailyBaseFee += (d.getLocallyPrice() != null ? d.getLocallyPrice() : 0L)
+ * (d.getNum() != null ? d.getNum() : 1);
}
Date now = new Date();
@@ -3326,19 +3544,20 @@
/**
* 灏卞湴瀵勫瓨閫炬湡澶╂暟璁$畻
- * 杩囦簡棰勮鍙栦欢鏃堕棿褰撳ぉ鐨�12鐐瑰悗鎵嶇畻涓�澶�
+ * 杩囦簡棰勮鍙栦欢鏃堕棿褰撳ぉ鐨�24:00锛堟鏃�00:00锛夊悗鎵嶇畻绗竴澶�
*/
private int calcLocalOverdueDays(Date now, Date expectedTakeTime) {
if (expectedTakeTime == null || !now.after(expectedTakeTime)) {
return 0;
}
- // 鍩哄噯鏃堕棿 = 棰勮鍙栦欢鏃ユ湡鐨�12:00
+ // 鍩哄噯鏃堕棿 = 棰勮鍙栦欢鏃ユ湡鐨勬鏃� 00:00锛堝嵆褰撳ぉ24:00锛�
Calendar baseCal = Calendar.getInstance();
baseCal.setTime(expectedTakeTime);
- baseCal.set(Calendar.HOUR_OF_DAY, 12);
+ 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)) {
@@ -3527,9 +3746,9 @@
// 鍐欏叆鎿嶄綔鏃ュ織
OrderLog orderLog = new OrderLog();
orderLog.setOrderId(order.getId());
- orderLog.setTitle("绯荤粺鑷姩鍙栨秷锛堣秴鏃舵湭鏀粯锛�");
- orderLog.setLogInfo("璁㈠崟瓒呮椂" + autoCancelMinutes + "鍒嗛挓鏈敮浠橈紝绯荤粺鑷姩鍙栨秷");
- orderLog.setObjType(Constants.ORDER_LOG_CANCEL);
+ orderLog.setTitle(Constants.OrderLogType.systemCancel.getTitle());
+ orderLog.setLogInfo(Constants.OrderLogType.systemCancel.format("璁㈠崟瓒呮椂" + autoCancelMinutes + "鍒嗛挓鏈敮浠橈紝绯荤粺鑷姩鍙栨秷"));
+ orderLog.setObjType(Constants.OrderLogType.systemCancel.getStatus());
orderLog.setOrderStatus(Constants.OrderStatus.cancelled.getStatus());
orderLog.setOptUserType(3); // 3=绯荤粺
orderLog.setCreateTime(now);
@@ -3693,9 +3912,9 @@
// 璁板綍鎿嶄綔鏃ュ織
OrderLog orderLog = new OrderLog();
orderLog.setOrderId(order.getId());
- orderLog.setTitle("绯荤粺鑷姩瀹屾垚");
- orderLog.setLogInfo("璁㈠崟宸查�佽揪瓒呰繃" + autoConfirmDays + "澶╂湭纭锛岀郴缁熻嚜鍔ㄥ畬鎴�");
- orderLog.setObjType(Constants.ORDER_LOG_CANCEL);
+ orderLog.setTitle(Constants.OrderLogType.systemComplete.getTitle());
+ orderLog.setLogInfo(Constants.OrderLogType.systemComplete.format("璁㈠崟宸查�佽揪瓒呰繃" + autoConfirmDays + "澶╂湭纭锛岀郴缁熻嚜鍔ㄥ畬鎴�"));
+ orderLog.setObjType(Constants.OrderLogType.systemComplete.getStatus());
orderLog.setOrderStatus(Constants.OrderStatus.finished.getStatus());
orderLog.setOptUserType(3); // 3=绯荤粺
orderLog.setCreateTime(now);
--
Gitblit v1.9.3