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/dao/vo/DriverOrderDetailVO.java | 39 +
server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java | 119 ++++
server/web/src/main/java/com/doumee/api/web/PaymentCallback.java | 114 +++
server/services/src/main/java/com/doumee/dao/dto/CommentOrderDTO.java | 5
server/services/src/main/java/com/doumee/service/business/ShopInfoService.java | 10
server/web/src/main/java/com/doumee/api/web/ConfigApi.java | 28 +
server/services/src/main/java/com/doumee/dao/dto/OperationConfigDTO.java | 6
server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java | 6
server/services/src/main/java/com/doumee/dao/vo/MyOrderDetailVO.java | 77 ++
server/services/src/main/java/com/doumee/core/constants/Constants.java | 58 +
server/services/src/main/java/com/doumee/service/business/OrdersService.java | 27
server/admin/src/main/java/com/doumee/job/SettleOrdersJob.java | 37 +
server/services/src/main/java/com/doumee/dao/vo/ShopCenterVO.java | 6
server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java | 101 +++
server/services/pom.xml | 8
server/services/src/main/resources/application-dev.yml | 12
server/services/src/main/java/com/doumee/dao/business/model/Multifile.java | 2
server/services/src/main/java/com/doumee/dao/business/model/OrdersRefund.java | 5
server/admin/src/main/java/com/doumee/job/AutoCompleteOrderJob.java | 37 +
server/web/src/main/java/com/doumee/api/web/ShopInfoApi.java | 12
server/services/src/main/java/com/doumee/biz/system/impl/OperationConfigBizImpl.java | 8
server/services/src/main/java/com/doumee/dao/vo/ShopSalesStatsVO.java | 23
server/admin/src/main/java/com/doumee/job/NoGrabNotifyJob.java | 37 +
server/pom.xml | 15
server/services/src/main/java/com/doumee/service/business/impl/RevenueServiceImpl.java | 7
server/admin/src/main/java/com/doumee/job/CancelTimeoutOrderJob.java | 37 +
server/services/db/db_change.sql | 40 +
server/services/src/main/java/com/doumee/dao/business/model/Orders.java | 11
server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java | 564 +++++++++++++++++++-
server/services/src/main/java/com/doumee/config/alipay/AlipayFundTransUniTransfer.java | 139 ----
30 files changed, 1,347 insertions(+), 243 deletions(-)
diff --git a/server/admin/src/main/java/com/doumee/job/AutoCompleteOrderJob.java b/server/admin/src/main/java/com/doumee/job/AutoCompleteOrderJob.java
new file mode 100644
index 0000000..fa873dd
--- /dev/null
+++ b/server/admin/src/main/java/com/doumee/job/AutoCompleteOrderJob.java
@@ -0,0 +1,37 @@
+package com.doumee.job;
+
+import com.doumee.core.job.BaseJob;
+import com.doumee.core.job.JobContext;
+import com.doumee.core.job.JobParam;
+import com.doumee.service.business.OrdersService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 鑷姩瀹屾垚瓒呮椂鏈‘璁ょ殑宸查�佽揪璁㈠崟
+ * 鏍规嵁杩愯惀閰嶇疆 AUTO_CONFIRM_RECEIPT锛堝ぉ锛夛紝灏嗗凡閫佽揪瓒呰繃璇ュぉ鏁扮殑璁㈠崟鑷姩鏍囪涓哄凡瀹屾垚
+ * @author rk
+ * @date 2026/04/22
+ */
+@Slf4j
+@Component("autoCompleteOrderJob")
+public class AutoCompleteOrderJob extends BaseJob {
+
+ @Autowired
+ private OrdersService ordersService;
+
+ @Override
+ public JobContext execute(JobParam param) {
+ JobContext jobContext = new JobContext();
+ try {
+ int count = ordersService.autoCompleteOrders();
+ jobContext.setHandleSuccessSize(count);
+ jobContext.setHandleTotalSize(count);
+ jobContext.setContext("鑷姩瀹屾垚瓒呮椂璁㈠崟瀹屾垚锛屽叡瀹屾垚" + count + "鍗�");
+ } catch (Exception e) {
+ log.error("鑷姩瀹屾垚璁㈠崟浠诲姟寮傚父", e);
+ }
+ return jobContext;
+ }
+}
diff --git a/server/admin/src/main/java/com/doumee/job/CancelTimeoutOrderJob.java b/server/admin/src/main/java/com/doumee/job/CancelTimeoutOrderJob.java
new file mode 100644
index 0000000..59a2347
--- /dev/null
+++ b/server/admin/src/main/java/com/doumee/job/CancelTimeoutOrderJob.java
@@ -0,0 +1,37 @@
+package com.doumee.job;
+
+import com.doumee.core.job.BaseJob;
+import com.doumee.core.job.JobContext;
+import com.doumee.core.job.JobParam;
+import com.doumee.service.business.OrdersService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 瓒呮椂鏈敮浠樿鍗曡嚜鍔ㄥ彇娑�
+ * 鏍规嵁杩愯惀閰嶇疆 AUTO_CANCEL_TIME锛堝垎閽燂級锛屽彇娑堣秴鏃舵湭鏀粯璁㈠崟
+ * @author rk
+ * @date 2026/04/22
+ */
+@Slf4j
+@Component("cancelTimeoutOrderJob")
+public class CancelTimeoutOrderJob extends BaseJob {
+
+ @Autowired
+ private OrdersService ordersService;
+
+ @Override
+ public JobContext execute(JobParam param) {
+ JobContext jobContext = new JobContext();
+ try {
+ int count = ordersService.cancelTimeoutUnpaidOrders();
+ jobContext.setHandleSuccessSize(count);
+ jobContext.setHandleTotalSize(count);
+ jobContext.setContext("瓒呮椂鏈敮浠樿鍗曡嚜鍔ㄥ彇娑堝畬鎴愶紝鍏卞彇娑�" + count + "鍗�");
+ } catch (Exception e) {
+ log.error("瓒呮椂鍙栨秷璁㈠崟浠诲姟寮傚父", e);
+ }
+ return jobContext;
+ }
+}
diff --git a/server/admin/src/main/java/com/doumee/job/NoGrabNotifyJob.java b/server/admin/src/main/java/com/doumee/job/NoGrabNotifyJob.java
new file mode 100644
index 0000000..42a2339
--- /dev/null
+++ b/server/admin/src/main/java/com/doumee/job/NoGrabNotifyJob.java
@@ -0,0 +1,37 @@
+package com.doumee.job;
+
+import com.doumee.core.job.BaseJob;
+import com.doumee.core.job.JobContext;
+import com.doumee.core.job.JobParam;
+import com.doumee.service.business.OrdersService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 鏃犱汉鎶㈠崟鐭俊閫氱煡骞冲彴浜哄憳
+ * 鏍规嵁杩愯惀閰嶇疆 NO_GRAB_NOTIFY_TIME锛堝垎閽燂級锛屽宸插瘎瀛樹笖鏃犱汉鎶㈠崟鐨勮鍗曞彂閫佺煭淇¢�氱煡
+ * @author rk
+ * @date 2026/04/22
+ */
+@Slf4j
+@Component("noGrabNotifyJob")
+public class NoGrabNotifyJob extends BaseJob {
+
+ @Autowired
+ private OrdersService ordersService;
+
+ @Override
+ public JobContext execute(JobParam param) {
+ JobContext jobContext = new JobContext();
+ try {
+ int count = ordersService.notifyUngrabbedOrders();
+ jobContext.setHandleSuccessSize(count);
+ jobContext.setHandleTotalSize(count);
+ jobContext.setContext("鏃犱汉鎶㈠崟鐭俊閫氱煡瀹屾垚锛屽叡閫氱煡" + count + "鍗�");
+ } catch (Exception e) {
+ log.error("鏃犱汉鎶㈠崟閫氱煡浠诲姟寮傚父", e);
+ }
+ return jobContext;
+ }
+}
diff --git a/server/admin/src/main/java/com/doumee/job/SettleOrdersJob.java b/server/admin/src/main/java/com/doumee/job/SettleOrdersJob.java
new file mode 100644
index 0000000..8d80356
--- /dev/null
+++ b/server/admin/src/main/java/com/doumee/job/SettleOrdersJob.java
@@ -0,0 +1,37 @@
+package com.doumee.job;
+
+import com.doumee.core.job.BaseJob;
+import com.doumee.core.job.JobContext;
+import com.doumee.core.job.JobParam;
+import com.doumee.service.business.OrdersService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 璁㈠崟鑷姩缁撶畻瀹氭椂浠诲姟
+ * 鏍规嵁杩愯惀閰嶇疆 SETTLEMENT_DATE锛屽皢宸插畬鎴愮殑寰呯粨绠楄鍗曡繘琛岀粨绠�
+ *
+ * @author rk
+ * @date 2026/04/22
+ */
+@Slf4j
+@Component("settleOrdersJob")
+public class SettleOrdersJob extends BaseJob {
+
+ @Autowired
+ private OrdersService ordersService;
+
+ @Override
+ public JobContext execute(JobParam param) {
+ JobContext jobContext = new JobContext();
+ try {
+ ordersService.settleOrders();
+ jobContext.setContext("璁㈠崟缁撶畻浠诲姟鎵ц瀹屾垚");
+ } catch (Exception e) {
+ log.error("璁㈠崟缁撶畻浠诲姟寮傚父", e);
+ jobContext.setContext("璁㈠崟缁撶畻浠诲姟寮傚父锛�" + e.getMessage());
+ }
+ return jobContext;
+ }
+}
diff --git a/server/pom.xml b/server/pom.xml
index 562c3aa..f8e767d 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -37,6 +37,9 @@
<weixin-java-pay.version>4.1.0</weixin-java-pay.version>
<!-- 闃块噷浜慜SS瀛樺偍 -->
<aliyun-oss.version>3.8.0</aliyun-oss.version>
+ <okhttp3.version>4.9.3</okhttp3.version>
+ <kotlin.version>1.5.31</kotlin.version>
+ <okio.version>2.10.0</okio.version>
</properties>
<dependencies>
<!-- Spring Boot -->
@@ -244,12 +247,12 @@
<groupId>com.github.wechatpay-apiv3</groupId>
<artifactId>wechatpay-java</artifactId>
<version>0.2.15</version>
- <exclusions>
- <exclusion>
- <artifactId>okhttp</artifactId>
- <groupId>com.squareup.okhttp3</groupId>
- </exclusion>
- </exclusions>
+ </dependency>
+ <!-- OkHttp 4.x 闇�瑕� okio 2.x锛圞otlin 鐗堟湰锛� -->
+ <dependency>
+ <groupId>com.squareup.okio</groupId>
+ <artifactId>okio</artifactId>
+ <version>2.10.0</version>
</dependency>
<!-- 闃块噷浜慜SS-->
diff --git a/server/services/db/db_change.sql b/server/services/db/db_change.sql
index 96b2a07..de96424 100644
--- a/server/services/db/db_change.sql
+++ b/server/services/db/db_change.sql
@@ -5,6 +5,46 @@
-- ============================================================
+-- 2026/04/22 璁㈠崟閫�娆捐〃鏂板閫�娆惧墠璁㈠崟鐘舵�佸瓧娈�
+-- ============================================================
+ALTER TABLE `orders_refund` ADD COLUMN `BEFORE_STATUS` INT NULL DEFAULT NULL COMMENT '閫�娆惧墠璁㈠崟鐘舵��' AFTER `STATUS`;
+
+
+-- ============================================================
+-- 2026/04/22 璁㈠崟閫�娆捐〃鏂板閫�娆鹃噾棰濆瓧娈�
+-- ============================================================
+ALTER TABLE `orders_refund` ADD COLUMN `REFUND_AMOUNT` BIGINT NULL DEFAULT NULL COMMENT '閫�娆鹃噾棰濓紙鍒嗭級' AFTER `REFUND_REMARK`;
+
+
+-- ============================================================
+-- 2026/04/22 鏂板璁㈠崟鑷姩缁撶畻瀹氭椂浠诲姟
+-- ============================================================
+INSERT INTO `SYSTEM_JOB` VALUES (4, '璁㈠崟鑷姩缁撶畻', '鏍规嵁杩愯惀閰嶇疆SETTLEMENT_DATE锛屽皢宸插畬鎴愮殑寰呯粨绠楄鍗曡繘琛岀粨绠�', 'settleOrdersJob', NULL, NULL, 1, 0, 1, 1, '0 0 2 * * ?', '', 0, NULL, 0, 1, NOW(), NULL, NULL, 0);
+
+
+-- ============================================================
+-- 2026/04/22 杩愯惀閰嶇疆鏂板鏃犱汉鎶㈠崟閫氱煡鏃堕棿鍜岄�氱煡浜哄憳
+-- ============================================================
+INSERT INTO `SYSTEM_DICT_DATA` (`DICT_ID`, `CODE`, `LABEL`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES (105, '30', 'NO_GRAB_NOTIFY_TIME', 0, 0, 1, NOW(), 0);
+INSERT INTO `SYSTEM_DICT_DATA` (`DICT_ID`, `CODE`, `LABEL`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES (105, '', 'NO_GRAB_NOTIFY_USERS', 0, 0, 1, NOW(), 0);
+
+
+-- ============================================================
+-- 2026/04/22 璁㈠崟琛ㄥ鍔犳棤浜烘帴鍗曟槸鍚﹀凡鐭俊閫氱煡骞冲彴瀛楁
+-- ============================================================
+ALTER TABLE `orders` ADD COLUMN `PLATFORM_SMS_NOTIFIED` INT DEFAULT 0 COMMENT '鏃犱汉鎺ュ崟鏄惁宸茬煭淇¢�氱煡骞冲彴锛�0=鍚︼紱1=鏄�' AFTER `OUT_TRADE_NO`;
+ALTER TABLE `orders` ADD COLUMN `PLATFORM_SMS_NOTIFIED_TIME` DATETIME DEFAULT NULL COMMENT '鏃犱汉鎺ュ崟宸茬煭淇¢�氱煡骞冲彴鏃堕棿' AFTER `PLATFORM_SMS_NOTIFIED`;
+
+
+-- ============================================================
+-- 2026/04/22 鏂板璁㈠崟鐩稿叧瀹氭椂浠诲姟锛堜笁涓嫭绔嬩换鍔★級
+-- ============================================================
+INSERT INTO `SYSTEM_JOB` VALUES (3, '瓒呮椂鍙栨秷璁㈠崟', '鏍规嵁杩愯惀閰嶇疆AUTO_CANCEL_TIME锛堝垎閽燂級锛屽彇娑堣秴鏃舵湭鏀粯璁㈠崟', 'cancelTimeoutOrderJob', NULL, NULL, 1, 0, 1, 1, '0 */1 * * * ?', '', 0, NULL, 0, 1, NOW(), NULL, NULL, 0);
+INSERT INTO `SYSTEM_JOB` VALUES (5, '鏃犱汉鎶㈠崟閫氱煡', '鏍规嵁杩愯惀閰嶇疆NO_GRAB_NOTIFY_TIME锛堝垎閽燂級锛屽宸插瘎瀛樹笖鏃犱汉鎶㈠崟鐨勮鍗曞彂閫佺煭淇¢�氱煡骞冲彴浜哄憳', 'noGrabNotifyJob', NULL, NULL, 1, 0, 1, 1, '0 */1 * * * ?', '', 0, NULL, 0, 1, NOW(), NULL, NULL, 0);
+INSERT INTO `SYSTEM_JOB` VALUES (6, '鑷姩瀹屾垚璁㈠崟', '鏍规嵁杩愯惀閰嶇疆AUTO_CONFIRM_RECEIPT锛堝ぉ锛夛紝鑷姩瀹屾垚瓒呮椂鏈‘璁ょ殑宸查�佽揪璁㈠崟', 'autoCompleteOrderJob', NULL, NULL, 1, 0, 1, 1, '0 0 */1 * * ?', '', 0, NULL, 0, 1, NOW(), NULL, NULL, 0);
+
+
+-- ============================================================
-- 2026/04/22 鎻愮幇璁板綍琛ㄥ鍔犳敮浠樺疂瀹炲悕濮撳悕瀛楁
-- ============================================================
ALTER TABLE `withdrawal_orders` ADD COLUMN `ALI_NAME` VARCHAR(50) DEFAULT NULL COMMENT '鏀粯瀹濆疄鍚嶅鍚�' AFTER `ALI_ACCOUNT`;
diff --git a/server/services/pom.xml b/server/services/pom.xml
index 47e7ddb..4790ba1 100644
--- a/server/services/pom.xml
+++ b/server/services/pom.xml
@@ -22,12 +22,6 @@
<artifactId>alipay-sdk-java-v3</artifactId>
<version>3.1.70.ALL</version>
</dependency>
- <dependency>
- <groupId>com.squareup.okhttp3</groupId>
- <artifactId>okhttp</artifactId>
- <version>4.9.3</version>
- <scope>compile</scope>
- </dependency>
</dependencies>
-</project>
\ No newline at end of file
+</project>
diff --git a/server/services/src/main/java/com/doumee/biz/system/impl/OperationConfigBizImpl.java b/server/services/src/main/java/com/doumee/biz/system/impl/OperationConfigBizImpl.java
index 5d569d9..640c7f3 100644
--- a/server/services/src/main/java/com/doumee/biz/system/impl/OperationConfigBizImpl.java
+++ b/server/services/src/main/java/com/doumee/biz/system/impl/OperationConfigBizImpl.java
@@ -34,6 +34,8 @@
dto.setInsuranceRate(getValue(Constants.OP_INSURANCE_RATE));
dto.setOrderAcceptLimit(getValue(Constants.OP_ORDER_ACCEPT_LIMIT));
dto.setAutoConfirmReceipt(getValue(Constants.OP_AUTO_CONFIRM_RECEIPT));
+ dto.setNoGrabNotifyTime(getValue(Constants.OP_NO_GRAB_NOTIFY_TIME));
+ dto.setNoGrabNotifyUsers(getValue(Constants.OP_NO_GRAB_NOTIFY_USERS));
return dto;
}
@@ -49,6 +51,8 @@
saveOrUpdate(Constants.OP_INSURANCE_RATE, "淇濊垂姣旂巼", dto.getInsuranceRate());
saveOrUpdate(Constants.OP_ORDER_ACCEPT_LIMIT, "鎺ュ崟鏁伴噺", dto.getOrderAcceptLimit());
saveOrUpdate(Constants.OP_AUTO_CONFIRM_RECEIPT, "鑷姩纭鏀惰揣", dto.getAutoConfirmReceipt());
+ saveOrUpdate(Constants.OP_NO_GRAB_NOTIFY_TIME, "鏃犱汉鎶㈠崟閫氱煡鏃堕棿", dto.getNoGrabNotifyTime());
+ saveOrUpdate(Constants.OP_NO_GRAB_NOTIFY_USERS, "鏃犱汉鎶㈠崟鐭俊閫氱煡浜哄憳", dto.getNoGrabNotifyUsers());
}
private String getValue(String label) {
@@ -82,7 +86,9 @@
|| StringUtils.isBlank(dto.getAutoCancelTime())
|| StringUtils.isBlank(dto.getInsuranceRate())
|| StringUtils.isBlank(dto.getOrderAcceptLimit())
- || StringUtils.isBlank(dto.getAutoConfirmReceipt())) {
+ || StringUtils.isBlank(dto.getAutoConfirmReceipt())
+ || StringUtils.isBlank(dto.getNoGrabNotifyTime())
+ || StringUtils.isBlank(dto.getNoGrabNotifyUsers())) {
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎵�鏈夐厤缃」鍧囦负蹇呭~");
}
}
diff --git a/server/services/src/main/java/com/doumee/config/alipay/AlipayFundTransUniTransfer.java b/server/services/src/main/java/com/doumee/config/alipay/AlipayFundTransUniTransfer.java
index 49b9be6..5202daa 100644
--- a/server/services/src/main/java/com/doumee/config/alipay/AlipayFundTransUniTransfer.java
+++ b/server/services/src/main/java/com/doumee/config/alipay/AlipayFundTransUniTransfer.java
@@ -41,16 +41,17 @@
this.loadAlipayConfig();
}
+
public void loadAlipayConfig() {
try {
AlipayConfig config = new AlipayConfig();
config.setServerUrl("https://openapi.alipay.com");
- config.setAppId("2021006147660139");
- String privateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDEeqqkZztBHfK+vpyBi6ejgDTHZuZ3yiuXds+lRBbMo/g24F5trH+oLHW0gMhSxihFfQBBIpVBXDsPQK4ZkhDWTaOBktnU1UMRoOEiaaZU6EiWy10ePFUmpdXpkCQEp7rc88OwI90p58S3+L+Ckak60WqNwJBdB5YGBaUunryBA78U4zW1KNY7JvoRnZDcFMQiczikwUzhO7EAi0yVrVpsVsc9s87mcS4uOJKx4qb2E83r9RJ1z30db+cIIZRiLP2oNZBLYzgKpOouE+uIgxhQzlh6cOASNZQulXuUjoT/+Y9w4njfl4TmKIXWcJFKIMc6kMiux9tTncpp0TqRwk1tAgMBAAECggEALkSYtJheusnbpRFr95G0i2sggqh3s1PXihZ/dXKgT9Z5GCsj8X3Cng7CNRxykBN73kk+axhCv56Bhej8Vqcv8ddcnqG/TEBgR+Fzws/QTIRau6/uILWic7RvuE2qPbJl7aw1s9/uL/UVPSGFr7CvgltYVUM4e7/Sk1529JCK4XJfoXP5tKJ3OaXssvaFnCKEU8IGQkjRG+lUZJhAHVtClGHtgrhevgRhy2zre5wp2qSa8d/MqrPruSYS02hn9b5Nl6i2PlUS6dGlJ4lrxYTG22ukYYoxAPNPS7gnvmveXonWP7b5tPhKRpZjnoySojz3WECUlhz/v8wM1cDrpq+GQQKBgQDsc7y2rlx4f77a7ORfb5/qWHCOJs1cIzggj0kJ7TgFGe71kbCQ5nywD/Fe5V9OwbW+DCxOME+SrrHeiK4axWiu5si/1JlurJoxNy+4k4ywk3ZA3Nv2aBhlPqfkwDhJ0z7Mgsq2c/YgnVddmSvKZoC39wA77ovks4GDxaBOt8N7PQKBgQDUuPGgzkwcgb60UdaxfMbacrPsW26vDxaE4ceuXo2m8KDiCIqkF2y9r6AdWMTgGGSJwOsk7+FP+21VdRivCg9HcOLWngveUc6xDIuqKHVpemMo3SdCF4Wqf96rRc3VOBr5cfIdWxeorZf5umMyKnIAjAFETOOrK7eLTTmjyLD98QKBgB82S+Plcklpu3zUpnS+nGJn2Du7fYI7F+6cW2zXBn0N5lA+Mgt+kVkAUcFQD9uqkF4M51BO6kIXk10nt6vLAT2NM1S3MKW+XQBAI6l+uKSaYpK/VL3bEdVThwAYK5X7L5/5Z97bwdKeUmkFjhVCoJ0oGrzOiWLgGymUzct2UHSVAoGBAMb+7Cs+Ub0pMrmFBY6r52pbey1Uq0pglvRgMmhQU7sjx50r2GaA81zPer15WVM5/nNPYaoALYqg7jrPe/PjOT/fvpR+7SNg7DZ8QftANfYiY7jKifst/gDt9ePLPS6FedZ4XcJQgOVu34jicAFx64vPbS/zrddm4iEScSVijRBBAoGAXCheERsx8+n16Us/DttXFUa1nc7+D8WR6buM1QMZgQCVF2qp3XtM+FusCKL4+q1+dtag8svLjJFp9QbaAXqX8Zk7rn8wUHbDloPTPy9XWgrPowyL9MPU+e/Rq8Hr6TWPDBd4TU64YzIEfBQYpJXfZbXhVYmK3o7xHXKB1x4vvEM=";
- config.setPrivateKey(privateKey);
- config.setAppCertPath("pay/pro/appCertPublicKey.crt");
- config.setAlipayPublicCertPath("pay/pro/alipayCertPublicKey_RSA2.crt");
- config.setRootCertPath("pay/pro/alipayRootCert.crt");
+ config.setAppId(alipayProperties.getAppId());
+// String privateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDEeqqkZztBHfK+vpyBi6ejgDTHZuZ3yiuXds+lRBbMo/g24F5trH+oLHW0gMhSxihFfQBBIpVBXDsPQK4ZkhDWTaOBktnU1UMRoOEiaaZU6EiWy10ePFUmpdXpkCQEp7rc88OwI90p58S3+L+Ckak60WqNwJBdB5YGBaUunryBA78U4zW1KNY7JvoRnZDcFMQiczikwUzhO7EAi0yVrVpsVsc9s87mcS4uOJKx4qb2E83r9RJ1z30db+cIIZRiLP2oNZBLYzgKpOouE+uIgxhQzlh6cOASNZQulXuUjoT/+Y9w4njfl4TmKIXWcJFKIMc6kMiux9tTncpp0TqRwk1tAgMBAAECggEALkSYtJheusnbpRFr95G0i2sggqh3s1PXihZ/dXKgT9Z5GCsj8X3Cng7CNRxykBN73kk+axhCv56Bhej8Vqcv8ddcnqG/TEBgR+Fzws/QTIRau6/uILWic7RvuE2qPbJl7aw1s9/uL/UVPSGFr7CvgltYVUM4e7/Sk1529JCK4XJfoXP5tKJ3OaXssvaFnCKEU8IGQkjRG+lUZJhAHVtClGHtgrhevgRhy2zre5wp2qSa8d/MqrPruSYS02hn9b5Nl6i2PlUS6dGlJ4lrxYTG22ukYYoxAPNPS7gnvmveXonWP7b5tPhKRpZjnoySojz3WECUlhz/v8wM1cDrpq+GQQKBgQDsc7y2rlx4f77a7ORfb5/qWHCOJs1cIzggj0kJ7TgFGe71kbCQ5nywD/Fe5V9OwbW+DCxOME+SrrHeiK4axWiu5si/1JlurJoxNy+4k4ywk3ZA3Nv2aBhlPqfkwDhJ0z7Mgsq2c/YgnVddmSvKZoC39wA77ovks4GDxaBOt8N7PQKBgQDUuPGgzkwcgb60UdaxfMbacrPsW26vDxaE4ceuXo2m8KDiCIqkF2y9r6AdWMTgGGSJwOsk7+FP+21VdRivCg9HcOLWngveUc6xDIuqKHVpemMo3SdCF4Wqf96rRc3VOBr5cfIdWxeorZf5umMyKnIAjAFETOOrK7eLTTmjyLD98QKBgB82S+Plcklpu3zUpnS+nGJn2Du7fYI7F+6cW2zXBn0N5lA+Mgt+kVkAUcFQD9uqkF4M51BO6kIXk10nt6vLAT2NM1S3MKW+XQBAI6l+uKSaYpK/VL3bEdVThwAYK5X7L5/5Z97bwdKeUmkFjhVCoJ0oGrzOiWLgGymUzct2UHSVAoGBAMb+7Cs+Ub0pMrmFBY6r52pbey1Uq0pglvRgMmhQU7sjx50r2GaA81zPer15WVM5/nNPYaoALYqg7jrPe/PjOT/fvpR+7SNg7DZ8QftANfYiY7jKifst/gDt9ePLPS6FedZ4XcJQgOVu34jicAFx64vPbS/zrddm4iEScSVijRBBAoGAXCheERsx8+n16Us/DttXFUa1nc7+D8WR6buM1QMZgQCVF2qp3XtM+FusCKL4+q1+dtag8svLjJFp9QbaAXqX8Zk7rn8wUHbDloPTPy9XWgrPowyL9MPU+e/Rq8Hr6TWPDBd4TU64YzIEfBQYpJXfZbXhVYmK3o7xHXKB1x4vvEM=";
+ config.setPrivateKey(alipayProperties.getPrivateKey());
+ config.setAppCertPath(alipayProperties.getAppCertPath());
+ config.setAlipayPublicCertPath(alipayProperties.getAlipayPublicCertPath());
+ config.setRootCertPath(alipayProperties.getRootCertPath());
alipayConfig = config;
log.info("鏀粯瀹濋厤缃垵濮嬪寲鎴愬姛, appId={}", config.getAppId());
} catch (Exception e) {
@@ -58,110 +59,6 @@
}
}
-
- public static void main(String[] args) throws ApiException {
- downLoadCertificates();
- }
- /**
- * API瀹夊叏鍔犲瘑閰嶇疆
- */
- private static RSAAutoCertificateConfig rsaAutoCertificateConfig() {
- return new RSAAutoCertificateConfig.Builder()
- // 鍟嗘埛鍙�
- .merchantId("1629568742")
- // 鍟嗘埛API璇佷功绉侀挜鐨勫瓨鏀捐矾寰�
- .privateKeyFromPath("D://ptzs/apiclient_key.pem")
- // 鍟嗘埛API璇佷功搴忓垪鍙�
- .merchantSerialNumber("25D19D18217F4588841E5CD1AA0D1533DE8AF84A")
- // APIv3瀵嗛挜
- .apiV3Key("NJTLJSTZYXZRGScaiwubuzichanbu666")
- .build();
- }
- /**
- * 涓嬭浇璇佷功
- */
- public static void downLoadCertificates() {
- OkHttpClient okHttpClient = new OkHttpClient();
- HttpClient httpClient = new DefaultHttpClientBuilder()
- .config(rsaAutoCertificateConfig())
- .okHttpClient(okHttpClient)
- .build();
- HttpHeaders headers = new HttpHeaders();
- headers.addHeader("Accept", MediaType.APPLICATION_JSON.getValue());
- HttpRequest executeSendGetHttpRequest = new HttpRequest.Builder()
- .httpMethod(HttpMethod.GET)
- .url("https://api.mch.weixin.qq.com/v3/certificates")
- .headers(headers)
- .build();
- try {
- HttpResponse<JSONObject> execute = httpClient.execute(executeSendGetHttpRequest, JSONObject.class);
- JSONObject responseBody = execute.getServiceResponse();
- log.info("涓嬭浇骞冲彴璇佷功杩斿洖:{}", responseBody.toString());
- } catch (Exception e) {
- log.error("涓嬭浇骞冲彴璇佷功寮傚父", e);
- }
- }
-
-// public static void testTransger( ) throws ApiException {
-//
-// // 鍒濆鍖朣DK
-// ApiClient defaultClient = Configuration.getDefaultApiClient();
-// // 鍒濆鍖朼lipay鍙傛暟锛堝叏灞�璁剧疆涓�娆★級
-// defaultClient.setAlipayConfig(getAlipayConfig());
-// // 鏋勯�犺姹傚弬鏁颁互璋冪敤鎺ュ彛
-// AlipayFundTransUniApi api = new AlipayFundTransUniApi();
-// AlipayFundTransUniTransferModel data = new AlipayFundTransUniTransferModel();
-// // 璁剧疆鍟嗗渚у敮涓�璁㈠崟鍙�
-// data.setOutBizNo("202606300001");
-// // 璁剧疆璁㈠崟鎬婚噾棰�
-// data.setTransAmount("1");
-// // 璁剧疆鎻忚堪鐗瑰畾鐨勪笟鍔″満鏅�
-// data.setBizScene("DIRECT_TRANSFER");
-// // 璁剧疆涓氬姟浜у搧鐮�
-// data.setProductCode("TRANS_ACCOUNT_NO_PWD");
-// // 璁剧疆杞处涓氬姟鐨勬爣棰�
-// data.setOrderTitle("201905浠e彂");
-// // 璁剧疆鍘熸敮浠樺疂涓氬姟鍗曞彿
-// data.setOriginalOrderId("20190620110075000006640000063056");
-// // 璁剧疆鏀舵鏂逛俊鎭�
-// Participant payeeInfo = new Participant();
-// payeeInfo.setIdentity("15345690849");
-// payeeInfo.setName("姹熻悕");
-// payeeInfo.setIdentityType("ALIPAY_LOGON_ID");
-// data.setPayeeInfo(payeeInfo);
-// // 璁剧疆涓氬姟澶囨敞
-// data.setRemark("201905浠e彂");
-// // 璁剧疆杞处鍦烘櫙鍚嶇О
-// data.setTransferSceneName("浣i噾鎶ラ叕");
-//
-// // 璁剧疆杞处鍦烘櫙涓婃姤淇℃伅
-// List<TransferSceneReportInfo> transferSceneReportInfos = new ArrayList<TransferSceneReportInfo>();
-// TransferSceneReportInfo transferSceneReportInfos0 = new TransferSceneReportInfo();
-// transferSceneReportInfos0.setInfoType("浣i噾鎶ラ叕璇存槑");
-// transferSceneReportInfos0.setInfoContent("3鏈堝鏀挎湇鍔℃姤閰�");
-// transferSceneReportInfos.add(transferSceneReportInfos0);
-// data.setTransferSceneReportInfos(transferSceneReportInfos);
-//
-// // 璁剧疆杞处涓氬姟璇锋眰鐨勬墿灞曞弬鏁�
-// data.setBusinessParams("{\"payer_show_name_use_alias\":\"true\"}");
-//
-// /* // 璁剧疆绛惧悕淇℃伅
-// SignData signData = new SignData();
-// signData.setOriSign("EqHFP0z4a9iaQ1ep==");
-// signData.setPartnerId("绛惧悕琚巿鏉冩柟鏀粯瀹濊处鍙稩D");
-// signData.setOriAppId("2021000185629012");
-// signData.setOriOutBizNo("鍟嗘埛璁㈠崟鍙�");
-// signData.setOriSignType("RSA2");
-// signData.setOriCharSet("UTF-8");
-// data.setSignData(signData);
-//*/
-// try {
-// AlipayFundTransUniTransferResponseModel response = api.transfer(data);
-// } catch (ApiException e) {
-// AlipayFundTransUniTransferDefaultResponse errorObject = (AlipayFundTransUniTransferDefaultResponse) e.getErrorObject();
-// System.out.println("璋冪敤澶辫触:" + errorObject);
-// }
-// }
/**
* 鍗曠瑪杞处鍒版敮浠樺疂璐︽埛
@@ -220,16 +117,6 @@
// 璁剧疆杞处涓氬姟璇锋眰鐨勬墿灞曞弬鏁�
data.setBusinessParams("{\"payer_show_name_use_alias\":\"true\"}");
- /* // 璁剧疆绛惧悕淇℃伅
- SignData signData = new SignData();
- signData.setOriSign("EqHFP0z4a9iaQ1ep==");
- signData.setPartnerId("绛惧悕琚巿鏉冩柟鏀粯瀹濊处鍙稩D");
- signData.setOriAppId("2021000185629012");
- signData.setOriOutBizNo("鍟嗘埛璁㈠崟鍙�");
- signData.setOriSignType("RSA2");
- signData.setOriCharSet("UTF-8");
- data.setSignData(signData);
-*/
try {
AlipayFundTransUniTransferResponseModel response = api.transfer(data);
log.info("鏀粯瀹濊浆璐︽垚鍔�, outBizNo={}, orderId={}", dto.getOutBizNo(), response.getOrderId());
@@ -244,16 +131,4 @@
}
-// private static AlipayConfig getAlipayConfig() {
-// AlipayConfig alipayConfig = new AlipayConfig();
-// alipayConfig.setServerUrl("https://openapi.alipay.com");
-// alipayConfig.setAppId("2021006147660139");
-// String privateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDEeqqkZztBHfK+vpyBi6ejgDTHZuZ3yiuXds+lRBbMo/g24F5trH+oLHW0gMhSxihFfQBBIpVBXDsPQK4ZkhDWTaOBktnU1UMRoOEiaaZU6EiWy10ePFUmpdXpkCQEp7rc88OwI90p58S3+L+Ckak60WqNwJBdB5YGBaUunryBA78U4zW1KNY7JvoRnZDcFMQiczikwUzhO7EAi0yVrVpsVsc9s87mcS4uOJKx4qb2E83r9RJ1z30db+cIIZRiLP2oNZBLYzgKpOouE+uIgxhQzlh6cOASNZQulXuUjoT/+Y9w4njfl4TmKIXWcJFKIMc6kMiux9tTncpp0TqRwk1tAgMBAAECggEALkSYtJheusnbpRFr95G0i2sggqh3s1PXihZ/dXKgT9Z5GCsj8X3Cng7CNRxykBN73kk+axhCv56Bhej8Vqcv8ddcnqG/TEBgR+Fzws/QTIRau6/uILWic7RvuE2qPbJl7aw1s9/uL/UVPSGFr7CvgltYVUM4e7/Sk1529JCK4XJfoXP5tKJ3OaXssvaFnCKEU8IGQkjRG+lUZJhAHVtClGHtgrhevgRhy2zre5wp2qSa8d/MqrPruSYS02hn9b5Nl6i2PlUS6dGlJ4lrxYTG22ukYYoxAPNPS7gnvmveXonWP7b5tPhKRpZjnoySojz3WECUlhz/v8wM1cDrpq+GQQKBgQDsc7y2rlx4f77a7ORfb5/qWHCOJs1cIzggj0kJ7TgFGe71kbCQ5nywD/Fe5V9OwbW+DCxOME+SrrHeiK4axWiu5si/1JlurJoxNy+4k4ywk3ZA3Nv2aBhlPqfkwDhJ0z7Mgsq2c/YgnVddmSvKZoC39wA77ovks4GDxaBOt8N7PQKBgQDUuPGgzkwcgb60UdaxfMbacrPsW26vDxaE4ceuXo2m8KDiCIqkF2y9r6AdWMTgGGSJwOsk7+FP+21VdRivCg9HcOLWngveUc6xDIuqKHVpemMo3SdCF4Wqf96rRc3VOBr5cfIdWxeorZf5umMyKnIAjAFETOOrK7eLTTmjyLD98QKBgB82S+Plcklpu3zUpnS+nGJn2Du7fYI7F+6cW2zXBn0N5lA+Mgt+kVkAUcFQD9uqkF4M51BO6kIXk10nt6vLAT2NM1S3MKW+XQBAI6l+uKSaYpK/VL3bEdVThwAYK5X7L5/5Z97bwdKeUmkFjhVCoJ0oGrzOiWLgGymUzct2UHSVAoGBAMb+7Cs+Ub0pMrmFBY6r52pbey1Uq0pglvRgMmhQU7sjx50r2GaA81zPer15WVM5/nNPYaoALYqg7jrPe/PjOT/fvpR+7SNg7DZ8QftANfYiY7jKifst/gDt9ePLPS6FedZ4XcJQgOVu34jicAFx64vPbS/zrddm4iEScSVijRBBAoGAXCheERsx8+n16Us/DttXFUa1nc7+D8WR6buM1QMZgQCVF2qp3XtM+FusCKL4+q1+dtag8svLjJFp9QbaAXqX8Zk7rn8wUHbDloPTPy9XWgrPowyL9MPU+e/Rq8Hr6TWPDBd4TU64YzIEfBQYpJXfZbXhVYmK3o7xHXKB1x4vvEM=";
-// alipayConfig.setPrivateKey(privateKey);
-// alipayConfig.setAppCertPath("pay/pro/appCertPublicKey.crt");
-// alipayConfig.setAlipayPublicCertPath("pay/pro/alipayCertPublicKey_RSA2.crt");
-// alipayConfig.setRootCertPath("pay/pro/alipayRootCert.crt");
-//
-// return alipayConfig;
-// }
}
\ No newline at end of file
diff --git a/server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java b/server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java
index 3c85107..5792dcd 100644
--- a/server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java
+++ b/server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java
@@ -160,7 +160,7 @@
}
String openid = shop.getOpenid();
Integer shopId = getTokenId(token);
- Integer isDeleted = dao.queryForObject(" select COALESCE(ISDELETED,0) from shop_info where id = ?", Integer.class, shopId);
+ Integer isDeleted = dao.queryForObject(" select COALESCE(DELETED,0) from shop_info where id = ?", Integer.class, shopId);
if(isDeleted== Constants.ONE){
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍟嗘埛宸插垹闄�,璇疯仈绯荤鐞嗗憳");
}
@@ -168,11 +168,11 @@
if(isForbidden == Constants.ONE){
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍟嗘埛宸茬鐢�,璇疯仈绯荤鐞嗗憳");
}
- String dbOpenid = dao.queryForObject(" select ifnull(openid,'') from shop where id = ?", String.class, shopId);
+ String dbOpenid = dao.queryForObject(" select ifnull(openid,'') from shop_info where id = ?", String.class, shopId);
if(StringUtils.isBlank(dbOpenid)||!openid.equals(dbOpenid)){
throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME);
}
- Integer count = dao.queryForObject("select count(1) from shop where id = ?", Integer.class, shopId);
+ Integer count = dao.queryForObject("select count(1) from shop_info where id = ?", Integer.class, shopId);
if (count != null && count > 0) {
request.setAttribute(JwtTokenUtil.SHOP_ID, shop.getId());
return true;
diff --git a/server/services/src/main/java/com/doumee/core/constants/Constants.java b/server/services/src/main/java/com/doumee/core/constants/Constants.java
index c0e59b4..f26687a 100644
--- a/server/services/src/main/java/com/doumee/core/constants/Constants.java
+++ b/server/services/src/main/java/com/doumee/core/constants/Constants.java
@@ -82,6 +82,8 @@
public static final String OP_INSURANCE_RATE = "INSURANCE_RATE";
public static final String OP_ORDER_ACCEPT_LIMIT = "ORDER_ACCEPT_LIMIT";
public static final String OP_AUTO_CONFIRM_RECEIPT = "AUTO_CONFIRM_RECEIPT";
+ public static final String OP_NO_GRAB_NOTIFY_TIME = "NO_GRAB_NOTIFY_TIME";
+ public static final String OP_NO_GRAB_NOTIFY_USERS = "NO_GRAB_NOTIFY_USERS";
public static boolean WORKORDER_SHE_EMAIL_SENDING = false;
public static boolean DEALING_COMPANY_SYNC = false ;
public static boolean DEALING_MEMBER_SYNC = false ;
@@ -298,8 +300,8 @@
LABOR_CONTRACT(11, "鏈夋晥鍔冲姩鍚堝悓"),
ORDER_FILE(12,"涓嬪崟鍥剧墖"),
STORE_OUT(13,"闂ㄥ簵鍑哄簱鍥剧墖"),
- REFUND_TAKE(14,"閫�娆惧彇浠跺浘鐗�")
-
+ REFUND_TAKE(14,"閫�娆惧彇浠跺浘鐗�"),
+ COMMENT_ATTACH(15,"璇勪环闄勪欢鍥剧墖")
;
private final int key;
@@ -350,9 +352,6 @@
arrived(5, "宸插埌搴�/宸查�佽揪/寰呭彇浠�"),
overdue(6, "瀛樺湪閫炬湡"), //寮冪敤
finished(7, "宸插畬鎴�"),
- closed(96, "璁㈠崟鍏抽棴锛堥��娆撅級"),
- cancelOverdue(97, "鍙栨秷閫炬湡"), //寮冪敤
- cancelling(98, "鍙栨秷涓�"),
cancelled(99, "宸插彇娑�")
;
private final int status;
@@ -398,7 +397,7 @@
waitDeliver(2, "寰呴厤閫�", new int[]{OrderStatus.accepted.status}),
waitReceive(3, "寰呮敹璐�", new int[]{ OrderStatus.delivering.status, OrderStatus.arrived.status}),
finished(4, "宸插畬鎴�", new int[]{OrderStatus.finished.status}),
- refund(5, "閫�娆�", new int[]{OrderStatus.closed.status, OrderStatus.cancelling.status}),
+ refund(5, "閫�娆�", new int[]{OrderStatus.cancelled.status}),
home(6, "棣栭〉鏌ヨ", new int[]{OrderStatus.waitPay.status, OrderStatus.waitDeposit.status, OrderStatus.deposited.status
, OrderStatus.accepted.status, OrderStatus.delivering.status, OrderStatus.arrived.status})
;
@@ -458,8 +457,8 @@
WAIT_PAY("waitPay", "璁㈠崟寰呮敮浠�", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}宸插垱寤猴紝璇峰湪{timeout}鍒嗛挓鍐呭畬鎴愭敮浠橈紝瓒呮椂灏嗚嚜鍔ㄥ彇娑�"),
WAIT_VERIFY("waitVerify", "璁㈠崟寰呮牳楠�", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}宸叉彁浜わ紝绛夊緟闂ㄥ簵鏍搁獙鐗╁搧淇℃伅锛屽瓨浠剁爜{storeCode}"),
WAIT_GRAB("waitGrab", "璁㈠崟寰呮姠鍗�", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}宸叉牳楠岋紝姝e湪涓烘偍瀹夋帓鍙栦欢鍙告満"),
- WAIT_PICKUP_REMIND("waitPickupRemind", "璁㈠崟寰呭彇浠�", "璁㈠崟{orderNo}琛屾潕宸插瘎瀛橈紝璇疯寰楀湪棰勭害鍙栦欢鏃堕棿鍑彇浠剁爜鍓嶅線鎸囧畾闂ㄥ簵鍙栧洖"),
- WAIT_PICKUP_GRABBED("waitPickupGrabbed", "璁㈠崟宸叉姠鍗�", "鎮ㄧ殑琛屾潕璁㈠崟锛氬凡鏈夊徃鏈簕driverName}鎶㈠崟锛屾鍓嶅線鍙栦欢鍦扮偣"),
+ WAIT_PICKUP_REMIND("waitPickupRemind", "璁㈠崟寰呭彇浠�", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}宸插瘎瀛橈紝璇疯寰楀湪棰勭害鍙栦欢鏃堕棿鍑彇浠剁爜鍓嶅線{shopName}闂ㄥ簵鍙栧洖"),
+ WAIT_PICKUP_GRABBED("waitPickupGrabbed", "璁㈠崟宸叉姠鍗�", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}宸叉湁鍙告満{driverName}鎶㈠崟锛屾鍓嶅線鍙栦欢鍦扮偣"),
DELIVERING("delivering", "璁㈠崟閰嶉�佷腑", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}宸茬敱鍙告満{driverName}鍙栦欢锛屾杩愬線鐩殑鍦�"),
ARRIVED_NO_SHOP("arrivedNoShop", "璁㈠崟宸查�佽揪", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}宸查�佽揪{destination},璇峰強鏃剁‘璁ゆ敹璐�"),
ARRIVED_HAS_SHOP("arrivedHasShop", "璁㈠崟宸查�佽揪", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}宸查�佽揪{destination},璇峰強鏃跺彇浠讹紝鍙栦欢鐮亄pickupCode}"),
@@ -500,7 +499,7 @@
WAIT_PICKUP("waitPickup", "璁㈠崟寰呭彇浠�", "琛屾潕璁㈠崟锛歿orderNo}宸叉姠鍗曪紝绛夊緟{name}鍙栦欢"),
REFUNDING("refunding", "璁㈠崟閫�娆句腑", "琛屾潕璁㈠崟锛歿orderNo}鐢ㄦ埛鎻愪氦閫�娆剧敵璇凤紝璇风煡鎮�"),
DELIVERING("delivering", "璁㈠崟閰嶉�佷腑", "琛屾潕璁㈠崟锛歿orderNo}宸茬敱鍙告満{driverName}鍙栦欢锛屾鍦ㄩ厤閫佷腑"),
- ARRIVED("arrived", "宸查�佽揪", "琛屾潕璁㈠崟锛歿orderNo}宸查�佽揪{destination},璇疯仈绯荤敤鎴风‘璁ょ鏀�"),
+ ARRIVED("arrived", "璁㈠崟宸查�佽揪", "琛屾潕璁㈠崟锛歿orderNo}宸查�佽揪{destination},璇疯仈绯荤敤鎴风‘璁ょ鏀�"),
FINISHED("finished", "璁㈠崟宸插畬鎴�", "琛屾潕璁㈠崟锛歿orderNo}宸插畬鎴愶紝鐩稿叧璁㈠崟缁撶畻浼氬湪{settleDays}涓伐浣滄棩鍐呭畬鎴�"),
EVALUATED("evaluated", "璁㈠崟宸茶瘎浠�", "琛屾潕璁㈠崟锛歿orderNo}鐢ㄦ埛宸插畬鎴愯瘎浠凤紝鍙煡鐪嬭瘎浠峰唴瀹�"),
SETTLED("settled", "璁㈠崟缁撶畻", "琛屾潕璁㈠崟锛歿orderNo}骞冲彴宸插畬鎴愮粨绠楋紝閲戦涓簕amount}鍏冿紝璇锋敞鎰忔煡鏀躲��")
@@ -531,12 +530,12 @@
@Getter
@AllArgsConstructor
public enum DriverOrderNotify {
- WAIT_DELIVER("waitDeliver", "璁㈠崟寰呴厤閫�", "鎮ㄥ凡鎶㈠崟鎴愬姛锛岃鍗曪細{orderNo}璇锋寜鏃跺埌{shopName}鍙栦欢"),
- DELIVERING("delivering", "閰嶉�佷腑", "琛屾潕璁㈠崟锛歿orderNo}宸插彇浠讹紝姝e湪閰嶉�佷腑锛岃鎸夋椂閫佽揪"),
- ARRIVED("arrived", "宸查�佽揪", "琛屾潕璁㈠崟锛歿orderNo}宸查�佽揪{destination},璇疯仈绯荤敤鎴风‘璁ょ鏀�"),
+ WAIT_DELIVER("waitDeliver", "璁㈠崟寰呴厤閫�", "鎮ㄥ凡鎶㈠崟鎴愬姛锛岃鏉庤鍗曪細{orderNo}璇锋寜鏃跺埌{shopName}鍙栦欢"),
+ DELIVERING("delivering", "璁㈠崟閰嶉�佷腑", "琛屾潕璁㈠崟锛歿orderNo}宸插彇浠讹紝姝e湪閰嶉�佷腑锛岃鎸夋椂閫佽揪"),
+ ARRIVED("arrived", "璁㈠崟宸查�佽揪", "琛屾潕璁㈠崟锛歿orderNo}宸查�佽揪{destination},璇疯仈绯荤敤鎴风‘璁ょ鏀�"),
FINISHED("finished", "璁㈠崟宸插畬鎴�", "琛屾潕璁㈠崟锛歿orderNo}宸插畬鎴愶紝鐩稿叧璁㈠崟缁撶畻浼氬湪{settleDays}涓伐浣滄棩鍐呯粨绠�"),
EVALUATED("evaluated", "璁㈠崟宸茶瘎浠�", "琛屾潕璁㈠崟锛歿orderNo}鐢ㄦ埛宸插畬鎴愯瘎浠凤紝鍙墠寰�璁㈠崟鏌ョ湅璇勪环鍐呭"),
- REFUNDING("refunding", "閫�娆句腑", "琛屾潕璁㈠崟锛歿orderNo}鐢ㄦ埛宸叉彁浜ら��娆剧敵璇凤紝璇ヨ鍗曚换鍔″凡鍙栨秷锛岃鍕垮墠寰�銆�"),
+ REFUNDING("refunding", "璁㈠崟閫�娆句腑", "琛屾潕璁㈠崟锛歿orderNo}鐢ㄦ埛宸叉彁浜ら��娆剧敵璇凤紝璇ヨ鍗曚换鍔″凡鍙栨秷锛岃鍕垮墠寰�銆�"),
SETTLED("settled", "璁㈠崟宸茬粨绠�", "琛屾潕璁㈠崟锛歿orderNo}骞冲彴宸插畬鎴愮粨绠楋紝閲戦涓簕amount}鍏冿紝璇锋敞鎰忔煡鏀躲��"),
CANCELLED("cancelled", "璁㈠崟鍙栨秷鎴愬姛", "琛屾潕璁㈠崟锛歿orderNo}宸插府鎮ㄥ彇娑堬紝鎮ㄤ粖鏃ヨ繕鍙富鍔ㄥ彇娑坽cancelLimit}娆¤鍗曪紝璇峰悎鐞嗗畨鎺掓帴鍗曘��")
;
@@ -559,6 +558,39 @@
}
/**
+ * 鐭俊閫氱煡妯℃澘鏋氫妇
+ * templateCode: 闃块噷浜戠煭淇℃ā鏉緾ode
+ * content: 鐭俊鏂囨妯℃澘锛屽崰浣嶇鐢� {xxx} 琛ㄧず
+ */
+ @Getter
+ @AllArgsConstructor
+ public enum SmsNotify {
+ PLATFORM_WAIT_GRAB("SMS_505790009", "骞冲彴绔�-寰呮姠鍗�", "鎮ㄥソ锛岃鍗曪細{orderNo}宸茶秴杩噞time}鍒嗛挓鏃犲徃鏈烘姠鍗曪紝璇峰敖蹇姞鎬ユ淳鍗曪紝閬垮厤瀹㈡埛杩囦箙绛夊緟銆�"),
+ SHOP_REFUNDING("SMS_505900008", "闂ㄥ簵绔�-閫�娆句腑", "琛屾潕璁㈠崟锛歿orderNo}瀹㈡埛宸叉彁浜ら��娆剧敵璇凤紝璇峰敖蹇鐞嗐��"),
+ SHOP_WAIT_VERIFY("SMS_505925004", "闂ㄥ簵绔�-寰呮牳楠�", "鏂拌鏉庤鍗曪細{orderNo}瀹㈡埛宸叉敮浠橈紝璇峰敖蹇牳楠岀敤鎴风墿鍝佷俊鎭��"),
+ DRIVER_REFUNDING("SMS_505795005", "鍙告満绔�-閫�娆句腑", "琛屾潕璁㈠崟锛歿orderNo}鐢ㄦ埛宸叉彁浜ら��娆剧敵璇凤紝璇ヨ鍗曚换鍔″凡鍙栨秷锛岃鍕垮墠寰�銆�"),
+ DRIVER_WAIT_PICKUP("SMS_505650038", "鍙告満绔�-寰呭彇浠�", "鎮ㄥ凡鎶㈠崟鎴愬姛锛岃鍗晎orderNo}锛岃鎸夋椂鍒皗address}鍙栦欢銆�"),
+ MEMBER_CANCELLED("SMS_505605028", "浼氬憳绔�-宸插彇娑�", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}宸插彇娑堬紝鎰熻阿鎮ㄧ殑鏀寔锛屾杩庝笅娆″啀浼氥��"),
+ MEMBER_REFUNDED("SMS_505920002", "浼氬憳绔�-宸查��娆�", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}閫�娆惧凡瀹屾垚锛岄噾棰漿money}鍏冨皢鍘熻矾閫�鍥烇紝璇锋敞鎰忔煡鏀躲��"),
+ MEMBER_ARRIVED("SMS_505875004", "浼氬憳绔�-宸查�佽揪", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}宸查�佸埌{address}锛岃鍙婃椂鍙栦欢锛屽彇浠剁爜锛歿code}銆�"),
+ MEMBER_DELIVERING("SMS_505935002", "浼氬憳绔�-閰嶉�佷腑", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}宸茬敱鍙告満{name}鍙栦欢锛屾杩愬線鐩殑鍦般��"),
+ VERIFY_CODE("SMS_333770877", "楠岃瘉鐮佺煭淇�", "鎮ㄧ殑楠岃瘉鐮佷负锛歿code}锛岃鍕挎硠闇蹭簬浠栦汉锛�"),
+ ;
+
+ private final String templateCode;
+ private final String title;
+ private final String content;
+
+ public String format(String... params) {
+ String result = this.content;
+ for (int i = 0; i < params.length - 1; i += 2) {
+ result = result.replace("{" + params[i] + "}", params[i + 1]);
+ }
+ return result;
+ }
+ }
+
+ /**
* 寰楀埌request瀵硅薄
*
* @return
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Multifile.java b/server/services/src/main/java/com/doumee/dao/business/model/Multifile.java
index 5312c3f..de2c987 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Multifile.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Multifile.java
@@ -55,7 +55,7 @@
@ApiModelProperty(value = "鍏宠仈瀵硅薄绫诲瀷锛�0=闂ㄥ簵鍏朵粬鏉愭枡锛�1=闂ㄥ簵鍐呴儴鐓х墖锛�2=璁㈠崟瀵勫瓨鍥剧墖锛�3=闂ㄥ簵鍏ュ簱鍥剧墖锛�4=鍙告満鍙栦欢鍥剧墖锛�5=鍙告満瀹屾垚鍥剧墖锛�6=鍙告満瀹炲悕璁よ瘉杞﹁締鐓х墖锛�" +
"7=鍙告満瀹炲悕璁よ瘉椹鹃┒璇佺収鐗囷紱8=鍙告満瀹炲悕璁よ瘉鍏朵粬鍥剧墖锛�" +
- "9=闂ㄥ簵闂ㄥご鐓э紱10=绀句繚缂寸撼璇佹槑锛�11=鏈夋晥鍔冲姩鍚堝悓锛�12=涓嬪崟鍥剧墖锛�13=闂ㄥ簵鍑哄簱鍥剧墖锛�", example = "1")
+ "9=闂ㄥ簵闂ㄥご鐓э紱10=绀句繚缂寸撼璇佹槑锛�11=鏈夋晥鍔冲姩鍚堝悓锛�12=涓嬪崟鍥剧墖锛�13=闂ㄥ簵鍑哄簱鍥剧墖锛�14=閫�娆惧浘鐗囷紱15=璇勪环鍥剧墖", example = "1")
private Integer objType;
@ApiModelProperty(value = "鏂囦欢鍦板潃")
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Orders.java b/server/services/src/main/java/com/doumee/dao/business/model/Orders.java
index ab1ac3d..802fd92 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Orders.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Orders.java
@@ -66,8 +66,8 @@
private Integer selfTake;
@ApiModelProperty(value = "璁㈠崟鐘舵��", example = "0")
- @ExcelColumn(name = "璁㈠崟鐘舵��", valueMapping = "灏卞湴瀵勫瓨鐘舵�侊細0=寰呮敮浠�;1=寰呭瘎瀛�;2=宸插瘎瀛�;5=寰呭彇浠�;6=瀛樺湪閫炬湡;7=宸插畬鎴�;96:璁㈠崟鍏抽棴锛堥��娆撅級;97:鍙栨秷閫炬湡;98=鍙栨秷涓�;99=宸插彇娑�;" +
- "寮傚湴瀵勫瓨鐘舵�侊細0=寰呮敮浠�;1=寰呭瘎瀛�;2=宸插瘎瀛�;3=宸叉帴鍗�;4=娲鹃�佷腑;5=宸插埌搴�/宸查�佽揪;6=瀛樺湪閫炬湡;7=宸插畬鎴�;96:璁㈠崟鍏抽棴锛堥��娆撅級;97:鍙栨秷閫炬湡;98=鍙栨秷涓�;99=宸插彇娑�;")
+ @ExcelColumn(name = "璁㈠崟鐘舵��", valueMapping = "灏卞湴瀵勫瓨鐘舵�侊細0=寰呮敮浠�;1=寰呭瘎瀛�;2=宸插瘎瀛�;5=寰呭彇浠�;6=瀛樺湪閫炬湡;7=宸插畬鎴�;99=宸插彇娑�;" +
+ "寮傚湴瀵勫瓨鐘舵�侊細0=寰呮敮浠�;1=寰呭瘎瀛�;2=宸插瘎瀛�;3=宸叉帴鍗�;4=娲鹃�佷腑;5=宸插埌搴�/宸查�佽揪;6=瀛樺湪閫炬湡;7=宸插畬鎴�;99=宸插彇娑�;")
private Integer status;
@ApiModelProperty(value = "鏄惁寮傚父璁㈠崟锛�0=鍚︼紱1=鏄�", example = "0")
@@ -362,6 +362,13 @@
@ApiModelProperty(value = "涓夋柟璁㈠崟鍙�")
private String outTradeNo;
+ @ApiModelProperty(value = "鏃犱汉鎺ュ崟鏄惁宸茬煭淇¢�氱煡骞冲彴锛�0=鍚︼紱1=鏄�", example = "0")
+ private Integer platformSmsNotified;
+
+ @ApiModelProperty(value = "鏃犱汉鎺ュ崟宸茬煭淇¢�氱煡骞冲彴鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date platformSmsNotifiedTime;
+
@TableField(exist = false)
@ApiModelProperty(value = "鍒涘缓寮�濮嬫椂闂�(鏌ヨ鐢�)", example = "2026-01-01")
@JsonFormat(pattern = "yyyy-MM-dd")
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/OrdersRefund.java b/server/services/src/main/java/com/doumee/dao/business/model/OrdersRefund.java
index bfe5459..faeb79f 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/OrdersRefund.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/OrdersRefund.java
@@ -66,8 +66,13 @@
@ApiModelProperty(value = "骞冲彴鎿嶄綔浜猴紙type=1浣跨敤锛�", example = "0")
private Integer userId;
+ @ApiModelProperty(value = "閫�娆鹃噾棰濓紙鍒嗭級", example = "10000")
+ private Long refundAmount;
+
@ApiModelProperty(value = "閫�娆剧姸鎬侊細0=閫�娆句腑锛�1=閫�娆炬垚鍔燂紱2=閫�娆惧け璐�", example = "0")
private Integer status;
+ @ApiModelProperty(value = "閫�娆惧墠璁㈠崟鐘舵��", example = "1")
+ private Integer beforeStatus;
}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/CommentOrderDTO.java b/server/services/src/main/java/com/doumee/dao/dto/CommentOrderDTO.java
index d9e0059..92e251f 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/CommentOrderDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/CommentOrderDTO.java
@@ -7,6 +7,8 @@
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.util.List;
/**
* 璁㈠崟璇勪环璇锋眰
@@ -41,4 +43,7 @@
@ApiModelProperty(value = "璇勪环鍐呭")
private String content;
+ @Size(max = 3, message = "鏈�澶氫笂浼�3寮犲浘鐗�")
+ @ApiModelProperty(value = "鍥剧墖鍦板潃鍒楄〃锛屾渶澶�3寮�")
+ private List<String> images;
}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/OperationConfigDTO.java b/server/services/src/main/java/com/doumee/dao/dto/OperationConfigDTO.java
index ac949d3..84b8ec0 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/OperationConfigDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/OperationConfigDTO.java
@@ -37,4 +37,10 @@
@ApiModelProperty(value = "鑷姩纭鏀惰揣(澶�)", required = true)
private String autoConfirmReceipt;
+ @ApiModelProperty(value = "鏃犱汉鎶㈠崟閫氱煡鏃堕棿(鍒嗛挓)", required = true)
+ private String noGrabNotifyTime;
+
+ @ApiModelProperty(value = "鏃犱汉鎶㈠崟鐭俊閫氱煡浜哄憳涓婚敭(澶氫釜浠�,鍒嗗壊)", required = true)
+ private String noGrabNotifyUsers;
+
}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/DriverOrderDetailVO.java b/server/services/src/main/java/com/doumee/dao/vo/DriverOrderDetailVO.java
index 9506d34..0d401f3 100644
--- a/server/services/src/main/java/com/doumee/dao/vo/DriverOrderDetailVO.java
+++ b/server/services/src/main/java/com/doumee/dao/vo/DriverOrderDetailVO.java
@@ -5,6 +5,7 @@
import lombok.Data;
import java.io.Serializable;
+import java.util.Date;
import java.util.List;
/**
@@ -76,6 +77,44 @@
@ApiModelProperty(value = "涓嬪崟闄勪欢鍥剧墖鍏ㄨ矾寰勫垪琛�")
private List<String> orderImages;
+ // ---- 瀹炴椂缁忕含搴︼紙寮傚湴瀵勫瓨鎸夌姸鎬佽繑鍥烇級 ----
+
+ @ApiModelProperty(value = "瀛樹欢闂ㄥ簵缁忓害")
+ private Double depositShopLng;
+
+ @ApiModelProperty(value = "瀛樹欢闂ㄥ簵绾害")
+ private Double depositShopLat;
+
+ @ApiModelProperty(value = "鍙栦欢鐐圭粡搴�")
+ private Double takeLng;
+
+ @ApiModelProperty(value = "鍙栦欢鐐圭含搴�")
+ private Double takeLat;
+
+ @ApiModelProperty(value = "鍙告満褰撳墠缁忓害")
+ private Double driverLng;
+
+ @ApiModelProperty(value = "鍙告満褰撳墠绾害")
+ private Double driverLat;
+
+ // ---- 璇勪环淇℃伅 ----
+
+ @ApiModelProperty(value = "鏄惁宸茶瘎浠凤細0=鍚� 1=鏄�")
+ private Integer commentStatus;
+
+ @ApiModelProperty(value = "璇勪环鏃堕棿")
+ @com.fasterxml.jackson.annotation.JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date commentTime;
+
+ @ApiModelProperty(value = "璇勪环鍐呭")
+ private String commentContent;
+
+ @ApiModelProperty(value = "璇勪环闄勪欢鍥剧墖")
+ private List<String> commentImages;
+
+ @ApiModelProperty(value = "鍙告満璇勫垎")
+ private Integer driverScore;
+
@Data
@ApiModel("鐗╁搧椤�")
public static class OrderItem implements Serializable {
diff --git a/server/services/src/main/java/com/doumee/dao/vo/MyOrderDetailVO.java b/server/services/src/main/java/com/doumee/dao/vo/MyOrderDetailVO.java
index 9ba8fb7..0ff7adb 100644
--- a/server/services/src/main/java/com/doumee/dao/vo/MyOrderDetailVO.java
+++ b/server/services/src/main/java/com/doumee/dao/vo/MyOrderDetailVO.java
@@ -26,6 +26,9 @@
@ApiModelProperty(value = "璁㈠崟鐘舵��")
private Integer status;
+ @ApiModelProperty(value = "璁㈠崟鐘舵�佹枃妗�")
+ private String statusName;
+
@ApiModelProperty(value = "璁㈠崟鐘舵�佹弿杩�")
private String statusDesc;
@@ -87,6 +90,9 @@
// ---- 鍙栦欢淇℃伅 ----
+ @ApiModelProperty(value = "鍙栦欢闂ㄥ簵涓婚敭", example = "1")
+ private Integer takeShopId;
+
@ApiModelProperty(value = "鍙栦欢闂ㄥ簵鍚嶇О锛堟湁鍙栦欢闂ㄥ簵鏃惰繑鍥烇級")
private String takeShopName;
@@ -133,6 +139,22 @@
@ApiModelProperty(value = "閫炬湡璐圭敤锛堝垎锛�")
private Long overdueFee;
+ // ---- 閫�娆撅紙status=96/99 鏃惰繑鍥烇級 ----
+
+ @ApiModelProperty(value = "閫�娆鹃噾棰濓紙鍒嗭級")
+ private Long refundAmount;
+
+ @ApiModelProperty(value = "閫�娆剧敵璇锋椂闂�")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date refundApplyTime;
+
+ @ApiModelProperty(value = "閫�娆炬椂闂�")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date refundTime;
+
+ @ApiModelProperty(value = "閫�娆惧娉�")
+ private String refundRemark;
+
// ---- 鏍囪 ----
@ApiModelProperty(value = "鏄惁寮傚父: 0=鍚� 1=鏄�")
@@ -151,4 +173,59 @@
@ApiModelProperty(value = "鐗╁搧鏄庣粏鍒楄〃")
private List<OrderItemVO> detailList;
+
+ // ---- 鍙告満淇℃伅 ----
+
+ @ApiModelProperty(value = "鍙告満涓婚敭")
+ private Integer driverId;
+
+ @ApiModelProperty(value = "鍙告満濮撳悕")
+ private String driverName;
+
+ @ApiModelProperty(value = "鍙告満鎵嬫満鍙�")
+ private String driverPhone;
+
+ // ---- 瀹炴椂缁忕含搴︼紙寮傚湴瀵勫瓨鎸夌姸鎬佽繑鍥烇級 ----
+
+ @ApiModelProperty(value = "瀛樹欢闂ㄥ簵缁忓害")
+ private Double depositShopLng;
+
+ @ApiModelProperty(value = "瀛樹欢闂ㄥ簵绾害")
+ private Double depositShopLat;
+
+ @ApiModelProperty(value = "鍙栦欢鐐圭粡搴�")
+ private Double takeLng;
+
+ @ApiModelProperty(value = "鍙栦欢鐐圭含搴�")
+ private Double takeLat;
+
+ @ApiModelProperty(value = "鍙告満褰撳墠缁忓害")
+ private Double driverLng;
+
+ @ApiModelProperty(value = "鍙告満褰撳墠绾害")
+ private Double driverLat;
+
+ // ---- 璇勪环淇℃伅 ----
+
+ @ApiModelProperty(value = "鏄惁宸茶瘎浠凤細0=鍚� 1=鏄�")
+ private Integer commentStatus;
+
+ @ApiModelProperty(value = "璇勪环鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date commentTime;
+
+ @ApiModelProperty(value = "璇勪环鍐呭")
+ private String commentContent;
+
+ @ApiModelProperty(value = "璇勪环闄勪欢鍥剧墖")
+ private List<String> commentImages;
+
+ @ApiModelProperty(value = "瀛樹欢闂ㄥ簵璇勫垎")
+ private Integer depositScore;
+
+ @ApiModelProperty(value = "鍙栦欢闂ㄥ簵璇勫垎")
+ private Integer takeScore;
+
+ @ApiModelProperty(value = "鍙告満璇勫垎")
+ private Integer driverScore;
}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/ShopCenterVO.java b/server/services/src/main/java/com/doumee/dao/vo/ShopCenterVO.java
index c129682..56b90b1 100644
--- a/server/services/src/main/java/com/doumee/dao/vo/ShopCenterVO.java
+++ b/server/services/src/main/java/com/doumee/dao/vo/ShopCenterVO.java
@@ -30,4 +30,10 @@
@ApiModelProperty(value = "寰呮敹璐ц鍗曟暟閲�")
private Integer waitReceiveCount;
+ @ApiModelProperty(value = "鏀粯瀹濇彁鐜拌处鎴�")
+ private String aliAccount;
+
+ @ApiModelProperty(value = "鏀粯瀹濆疄鍚嶅鍚�")
+ private String aliName;
+
}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/ShopSalesStatsVO.java b/server/services/src/main/java/com/doumee/dao/vo/ShopSalesStatsVO.java
new file mode 100644
index 0000000..c5a0ef3
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/ShopSalesStatsVO.java
@@ -0,0 +1,23 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("闂ㄥ簵閿�鍞粺璁�")
+public class ShopSalesStatsVO {
+
+ @ApiModelProperty(value = "閿�鍞锛堝垎锛�")
+ private Long salesAmount;
+
+ @ApiModelProperty(value = "缁撶畻鍒╂鼎锛堝垎锛�")
+ private Long settlementProfit;
+
+ @ApiModelProperty(value = "璁㈠崟鎬绘暟")
+ private Integer orderCount;
+
+ @ApiModelProperty(value = "鍦ㄥ簱璁㈠崟鏁�")
+ private Integer storageCount;
+
+}
diff --git a/server/services/src/main/java/com/doumee/service/business/OrdersService.java b/server/services/src/main/java/com/doumee/service/business/OrdersService.java
index 3a9df6a..935b2a5 100644
--- a/server/services/src/main/java/com/doumee/service/business/OrdersService.java
+++ b/server/services/src/main/java/com/doumee/service/business/OrdersService.java
@@ -122,7 +122,7 @@
MyOrderDetailVO findMyOrderDetail(Integer id, Integer memberId);
/**
- * 浼氬憳鍙栨秷璁㈠崟锛堜粎寮傚湴瀵勫瓨锛�
+ * 浼氬憳鍙栨秷璁㈠崟
*
* @param orderId 璁㈠崟涓婚敭
* @param memberId 浼氬憳涓婚敭
@@ -381,4 +381,29 @@
*/
ActiveOrderTipVO getActiveOrderTip(Integer memberId);
+ /**
+ * 鍙栨秷瓒呮椂鏈敮浠樿鍗�
+ * 鏍规嵁杩愯惀閰嶇疆 AUTO_CANCEL_TIME锛堝垎閽燂級锛屽皢鍒涘缓鏃堕棿瓒呰繃璇ュ�间笖浠嶄负寰呮敮浠樼殑璁㈠崟鎵归噺鍙栨秷
+ *
+ * @return 鍙栨秷鐨勮鍗曟暟閲�
+ */
+ int cancelTimeoutUnpaidOrders();
+
+ /**
+ * 閫氱煡骞冲彴浜哄憳锛氬凡瀵勫瓨璁㈠崟瓒呮椂鏃犱汉鎶㈠崟
+ * 鏍规嵁杩愯惀閰嶇疆 NO_GRAB_NOTIFY_TIME锛堝垎閽燂級锛屾壂鎻忓紓鍦板凡瀵勫瓨(status=2)涓旇秴鏃剁殑璁㈠崟锛�
+ * 缁欓厤缃殑閫氱煡浜哄憳鍙戦�佺煭淇★紙PLATFORM_WAIT_GRAB锛夛紝骞舵爣璁板凡閫氱煡闃叉閲嶅
+ *
+ * @return 閫氱煡鐨勮鍗曟暟閲�
+ */
+ int notifyUngrabbedOrders();
+
+ /**
+ * 鑷姩瀹屾垚瓒呮椂鏈‘璁ょ殑璁㈠崟
+ * 鏍规嵁杩愯惀閰嶇疆 AUTO_CONFIRM_RECEIPT锛堝ぉ锛夛紝灏嗗凡閫佽揪(status=5)瓒呰繃璇ュぉ鏁扮殑璁㈠崟鑷姩鏍囪涓哄凡瀹屾垚
+ *
+ * @return 鑷姩瀹屾垚鐨勮鍗曟暟閲�
+ */
+ int autoCompleteOrders();
+
}
\ No newline at end of file
diff --git a/server/services/src/main/java/com/doumee/service/business/ShopInfoService.java b/server/services/src/main/java/com/doumee/service/business/ShopInfoService.java
index 4fe95a7..7f1f255 100644
--- a/server/services/src/main/java/com/doumee/service/business/ShopInfoService.java
+++ b/server/services/src/main/java/com/doumee/service/business/ShopInfoService.java
@@ -9,6 +9,7 @@
import com.doumee.dao.vo.ShopCenterVO;
import com.doumee.dao.vo.ShopDetailVO;
import com.doumee.dao.vo.ShopNearbyVO;
+import com.doumee.dao.vo.ShopSalesStatsVO;
import com.doumee.dao.vo.ShopWebDetailVO;
import java.math.BigDecimal;
@@ -199,4 +200,13 @@
*/
ShopLoginVO shopSilentLogin(Integer memberId);
+ /**
+ * 闂ㄥ簵閿�鍞粺璁�
+ *
+ * @param shopId 闂ㄥ簵涓婚敭
+ * @param period 缁熻鍛ㄦ湡锛�0=浠婃棩, 1=鏈湀, 2=涓婃湀
+ * @return 閿�鍞粺璁�
+ */
+ ShopSalesStatsVO getShopSalesStats(Integer shopId, Integer period);
+
}
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java
index b0b876c..548fc41 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java
@@ -15,9 +15,11 @@
import com.doumee.dao.business.DriverInfoMapper;
import com.doumee.dao.business.MemberMapper;
import com.doumee.dao.business.MultifileMapper;
+import com.doumee.dao.business.OrderCommentMapper;
import com.doumee.dao.business.SmsrecordMapper;
import com.doumee.dao.business.CategoryMapper;
import com.doumee.dao.business.OrdersMapper;
+import com.doumee.dao.business.ShopInfoMapper;
import com.doumee.dao.business.OrdersDetailMapper;
import com.doumee.dao.business.RevenueMapper;
import com.doumee.biz.system.SystemDictDataBiz;
@@ -26,6 +28,8 @@
import com.doumee.dao.business.model.Category;
import com.doumee.dao.business.model.DriverInfo;
import com.doumee.dao.business.model.OrderLog;
+import com.doumee.dao.business.model.OrderComment;
+import com.doumee.dao.business.model.ShopInfo;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.Multifile;
import com.doumee.dao.business.model.Smsrecord;
@@ -43,6 +47,7 @@
import com.doumee.service.business.NoticeService;
import com.alibaba.fastjson.JSONObject;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -59,6 +64,7 @@
* @author rk
* @date 2026/04/08
*/
+@Slf4j
@Service
public class DriverInfoServiceImpl implements DriverInfoService {
@@ -88,6 +94,12 @@
@Autowired
private OrdersMapper ordersMapper;
+
+ @Autowired
+ private ShopInfoMapper shopInfoMapper;
+
+ @Autowired
+ private OrderCommentMapper orderCommentMapper;
@Autowired
private RevenueMapper revenueMapper;
@@ -1114,10 +1126,59 @@
}
}
+ // 寮傚湴瀵勫瓨瀹炴椂缁忕含搴︼紙鎸夌姸鎬佽繑鍥烇級
+ if (Constants.ONE.equals(order.getType())) {
+ // 鍙告満鑷韩缁忕含搴�
+ vo.setDriverLng(driverLng);
+ vo.setDriverLat(driverLat);
+
+ // status=3(宸叉帴鍗�)锛氳繑鍥炲瓨浠堕棬搴楃粡绾害
+ if (Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.accepted.getStatus())) {
+ if (order.getDepositShopId() != null) {
+ ShopInfo depositShop = shopInfoMapper.selectById(order.getDepositShopId());
+ if (depositShop != null) {
+ vo.setDepositShopLng(depositShop.getLongitude());
+ vo.setDepositShopLat(depositShop.getLatitude());
+ }
+ }
+ }
+ // status=4(閰嶉�佷腑)锛氳繑鍥炲彇浠剁偣缁忕含搴�
+ if (Constants.equalsInteger(order.getStatus(), 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());
+ }
+ }
+ }
+
// 涓嬪崟闄勪欢鍥剧墖
String imgPrefix = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+ systemDictDataBiz.queryByCode(Constants.OSS, Constants.MEMBER_FILES).getCode();
vo.setOrderImages(getFileUrls(orderId, Constants.FileType.ORDER_FILE.getKey(), imgPrefix));
+
+ // 璇勪环淇℃伅
+ vo.setCommentStatus(order.getCommentStatus());
+ if (Constants.equalsInteger(order.getCommentStatus(), Constants.ONE)) {
+ vo.setCommentTime(order.getCommentTime());
+ // 鏌ヨ鍙告満璇勪环璁板綍
+ OrderComment driverComment = orderCommentMapper.selectOne(new QueryWrapper<OrderComment>().lambda()
+ .eq(OrderComment::getOrderId, orderId)
+ .eq(OrderComment::getTargetType, Constants.THREE)
+ .eq(OrderComment::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ if (driverComment != null) {
+ vo.setDriverScore(driverComment.getScore());
+ vo.setCommentContent(driverComment.getContent());
+ }
+ // 璇勪环闄勪欢鍥剧墖
+ vo.setCommentImages(getFileUrls(orderId, Constants.FileType.COMMENT_ATTACH.getKey(), imgPrefix));
+ }
return vo;
}
@@ -1276,6 +1337,12 @@
sendDriverNotice(driverId, Constants.DriverOrderNotify.WAIT_DELIVER, orderId,
"orderNo", order.getCode(),
"shopName", shopName != null ? shopName : "");
+
+ // 鐭俊閫氱煡鍙告満锛氭姠鍗曟垚鍔燂紝寰呭彇浠�
+ String pickupAddress = order.getDepositShopAddress() != null ? order.getDepositShopAddress() : order.getDepositLocation();
+ sendSmsNotify(driver.getTelephone(), Constants.SmsNotify.DRIVER_WAIT_PICKUP,
+ "orderNo", order.getCode(),
+ "address", pickupAddress != null ? pickupAddress : "");
}
@Override
@@ -1355,6 +1422,14 @@
// 閫氱煡鍙告満锛氬凡鍙栦欢閰嶉�佷腑
sendDriverNotice(driverId, Constants.DriverOrderNotify.DELIVERING, orderId,
"orderNo", order.getCode());
+
+ // 鐭俊閫氱煡浼氬憳锛氬徃鏈哄凡鍙栦欢锛岄厤閫佷腑
+ Member deliveringMember = memberMapper.selectById(order.getMemberId());
+ if (deliveringMember != null) {
+ sendSmsNotify(deliveringMember.getTelephone(), Constants.SmsNotify.MEMBER_DELIVERING,
+ "orderNo", order.getCode(),
+ "name", driver.getName());
+ }
}
@Override
@@ -1567,4 +1642,48 @@
return vo;
}
+ /**
+ * 鍙戦�佺煭淇¢�氱煡锛堝け璐ヤ笉褰卞搷涓讳笟鍔★級
+ */
+ 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);
+ 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) {}
+ }
+ }
+
}
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 01df4f5..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;
@@ -680,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());
@@ -822,6 +828,10 @@
// 钖叕璁$畻涓庡崰姣斿瓨鍌�
calculateAndSetFeeAllocation(orders, depositShop, takeShop);
+ // 鏃犱汉鎺ュ崟閫氱煡鐩稿叧鍒濆鍖�
+ orders.setPlatformSmsNotified(Constants.ZERO);
+ orders.setPlatformSmsNotifiedTime(now);
+
ordersMapper.insert(orders);
Integer orderId = orders.getId();
@@ -892,6 +902,7 @@
// 5. 閲嶆柊鐢熸垚绗笁鏂硅鍗曠紪鍙凤紙閬垮厤閲嶅锛�
String orderTradeNo = generateOrderTradeNo();
orders.setOutTradeNo(orderTradeNo);
+ orders.setPlatformSmsNotifiedTime(new Date());
orders.setUpdateTime(new Date());
ordersMapper.updateById(orders);
// 6. 鍞よ捣寰俊鏀粯
@@ -1034,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()
@@ -1124,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());
// 寮傚湴瀵勫瓨涓旀湁鍙栦欢闂ㄥ簵鏃讹紝鐢熸垚鍙告満鏍搁攢鐮�
@@ -1597,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());
@@ -1630,6 +1641,7 @@
// 鍙栦欢淇℃伅
if (order.getTakeShopId() != null) {
+ vo.setTakeShopId(order.getTakeShopId());
ShopInfo takeShop = shopInfoMapper.selectById(order.getTakeShopId());
if (takeShop != null) {
vo.setTakeShopName(takeShop.getName());
@@ -1643,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) {
@@ -1663,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();
@@ -1687,6 +1765,68 @@
} else {
// 闂ㄥ簵绔細濮嬬粓杩斿洖浼氬憳鏍搁攢鐮�
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;
@@ -1716,11 +1856,42 @@
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);
@@ -1728,23 +1899,22 @@
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;
}
@@ -1753,22 +1923,27 @@
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(order.getStatus(), Constants.OrderStatus.accepted.getStatus())) {
+ // 閫氱煡鍙告満锛氳鍗曞凡鍙栨秷锛堝凡鎺ュ崟鎯呭喌涓嬪徃鏈洪渶鍋滄鏈嶅姟锛�
+ 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;
}
@@ -1930,6 +2105,15 @@
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());
+ }
+ }
}
@Override
@@ -2027,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()
@@ -2316,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) {
@@ -2559,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锛堟斁鍦ㄦ渶鍚庯紝纭繚鍓嶇疆鎿嶄綔鍏ㄩ儴鎴愬姛锛�
@@ -2674,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)
@@ -2819,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() : "");
}
}
@@ -2993,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 "";
}
@@ -3294,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) {}
+ }
+ }
+
}
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/RevenueServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/RevenueServiceImpl.java
index bf73fc6..1fb1f71 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/RevenueServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/RevenueServiceImpl.java
@@ -173,8 +173,7 @@
if (shop == null || Constants.equalsInteger(shop.getDeleted(), Constants.ONE)) {
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "闂ㄥ簵涓嶅瓨鍦�");
}
- Integer memberId = shop.getRegionMemberId();
- return buildRevenueStatistics(memberId, Constants.TWO, shop.getBalance());
+ return buildRevenueStatistics(shop.getId(), Constants.TWO, shop.getBalance());
}
@Override
@@ -257,7 +256,7 @@
throw new BusinessException(ResponseStatus.DATA_EMPTY);
}
IPage<Revenue> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
- QueryWrapper<Revenue> qw = buildRevenueQueryWrapper(pageWrap.getModel(), shop.getRegionMemberId());
+ QueryWrapper<Revenue> qw = buildRevenueQueryWrapper(pageWrap.getModel(), shop.getId());
PageData<Revenue> result = PageData.from(revenueMapper.selectPage(page, qw));
if (result != null && result.getRecords() != null) {
for (Revenue model : result.getRecords()) {
@@ -278,7 +277,7 @@
if (shop == null || Constants.equalsInteger(shop.getDeleted(), Constants.ONE)) {
throw new BusinessException(ResponseStatus.DATA_EMPTY);
}
- return buildRevenueSummary(queryDTO, shop.getRegionMemberId());
+ return buildRevenueSummary(queryDTO, shop.getId());
}
private QueryWrapper<Revenue> buildRevenueQueryWrapper(RevenueQueryDTO query, Integer memberId) {
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java
index cfc176a..efd4e45 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java
@@ -32,6 +32,7 @@
import com.doumee.dao.vo.ShopCenterVO;
import com.doumee.dao.vo.ShopLoginVO;
import com.doumee.dao.vo.ShopNearbyVO;
+import com.doumee.dao.vo.ShopSalesStatsVO;
import com.doumee.dao.vo.ShopWebDetailVO;
import com.doumee.service.business.AreasService;
import com.doumee.service.business.ShopInfoService;
@@ -996,6 +997,106 @@
.eq(Orders::getDeleted, Constants.ZERO)
.in(Orders::getStatus, Constants.OrderStatus.delivering.getStatus(), Constants.OrderStatus.arrived.getStatus()));
vo.setWaitReceiveCount(waitReceiveCount.intValue());
+ // 鏀粯瀹濇彁鐜拌处鍙�
+ vo.setAliAccount(shop.getAliAccount());
+ vo.setAliName(shop.getAliName());
+ return vo;
+ }
+
+ @Override
+ public ShopSalesStatsVO getShopSalesStats(Integer shopId, Integer period) {
+ // 璁$畻鏃堕棿鑼冨洿 0=浠婃棩 1=鏈湀 2=涓婃湀
+ Calendar cal = Calendar.getInstance();
+ Date startTime;
+ Date endTime;
+
+ if (Constants.equalsInteger(period, 2)) {
+ // 涓婃湀锛氫笂鏈�1鍙�00:00:00 ~ 鏈湀1鍙�00:00:00
+ cal.set(Calendar.DAY_OF_MONTH, 1);
+ cal.set(Calendar.HOUR_OF_DAY, 0);
+ cal.set(Calendar.MINUTE, 0);
+ cal.set(Calendar.SECOND, 0);
+ cal.set(Calendar.MILLISECOND, 0);
+ endTime = cal.getTime();
+ cal.add(Calendar.MONTH, -1);
+ startTime = cal.getTime();
+ } else if (Constants.equalsInteger(period, 1)) {
+ // 鏈湀锛氭湰鏈�1鍙�00:00:00 ~ 涓嬫湀1鍙�00:00:00
+ cal.set(Calendar.DAY_OF_MONTH, 1);
+ cal.set(Calendar.HOUR_OF_DAY, 0);
+ cal.set(Calendar.MINUTE, 0);
+ cal.set(Calendar.SECOND, 0);
+ cal.set(Calendar.MILLISECOND, 0);
+ startTime = cal.getTime();
+ cal.add(Calendar.MONTH, 1);
+ endTime = cal.getTime();
+ } else {
+ // 浠婃棩锛氫粖澶�00:00:00 ~ 鏄庡ぉ00:00:00
+ cal.set(Calendar.HOUR_OF_DAY, 0);
+ cal.set(Calendar.MINUTE, 0);
+ cal.set(Calendar.SECOND, 0);
+ cal.set(Calendar.MILLISECOND, 0);
+ startTime = cal.getTime();
+ cal.add(Calendar.DAY_OF_MONTH, 1);
+ endTime = cal.getTime();
+ }
+
+ ShopSalesStatsVO vo = new ShopSalesStatsVO();
+
+ // 1. 閿�鍞 + 璁㈠崟鏁帮細鎸夎鍗曞垱寤烘椂闂达紝瀛樹欢闂ㄥ簵鎴栧彇浠堕棬搴楁槸鏈棬搴�
+ // 瀛樹欢闂ㄥ簵
+ List<Orders> depositSalesOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getDeleted, Constants.ZERO)
+ .ge(Orders::getCreateTime, startTime)
+ .lt(Orders::getCreateTime, endTime)
+ .eq(Orders::getDepositShopId, shopId));
+ // 鍙栦欢闂ㄥ簵
+ List<Orders> takeSalesOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getDeleted, Constants.ZERO)
+ .ge(Orders::getCreateTime, startTime)
+ .lt(Orders::getCreateTime, endTime)
+ .eq(Orders::getTakeShopId, shopId));
+ long salesAmount = depositSalesOrders.stream().mapToLong(o -> o.getTotalAmount() != null ? o.getTotalAmount() : 0L).sum()
+ + takeSalesOrders.stream().mapToLong(o -> o.getTotalAmount() != null ? o.getTotalAmount() : 0L).sum();
+ vo.setSalesAmount(salesAmount);
+ vo.setOrderCount(depositSalesOrders.size() + takeSalesOrders.size());
+
+ // 2. 缁撶畻鍒╂鼎锛氭寜缁撶畻鏃堕棿锛屾牴鎹棬搴楄鑹插彇depositShopFee鎴杢akeShopFee
+ // 瀛樹欢闂ㄥ簵 = 鏈棬搴� 鐨勮鍗曪紝鍙� depositShopFee
+ List<Orders> depositSettleOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getDeleted, Constants.ZERO)
+ .eq(Orders::getSettlementStatus, Constants.ONE)
+ .ge(Orders::getSettlementTime, startTime)
+ .lt(Orders::getSettlementTime, endTime)
+ .eq(Orders::getDepositShopId, shopId));
+ // 鍙栦欢闂ㄥ簵 = 鏈棬搴� 鐨勮鍗曪紝鍙� takeShopFee
+ List<Orders> takeSettleOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getDeleted, Constants.ZERO)
+ .eq(Orders::getSettlementStatus, Constants.ONE)
+ .ge(Orders::getSettlementTime, startTime)
+ .lt(Orders::getSettlementTime, endTime)
+ .eq(Orders::getTakeShopId, shopId));
+ long depositFee = depositSettleOrders.stream()
+ .mapToLong(o -> o.getDepositShopFee() != null ? o.getDepositShopFee() : 0L).sum();
+ long takeFee = takeSettleOrders.stream()
+ .mapToLong(o -> o.getTakeShopFee() != null ? o.getTakeShopFee() : 0L).sum();
+ vo.setSettlementProfit(depositFee + takeFee);
+
+ // 3. 鍦ㄥ簱璁㈠崟鏁�
+ // 3.1 瀛樹欢闂ㄥ簵=鏈棬搴楋紝status in (2宸插瘎瀛�, 5寰呭彇浠�)
+ Long depositStorageCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getDeleted, Constants.ZERO)
+ .eq(Orders::getDepositShopId, shopId)
+ .in(Orders::getStatus,
+ Constants.OrderStatus.deposited.getStatus(),
+ Constants.OrderStatus.arrived.getStatus()));
+ // 3.2 鍙栦欢闂ㄥ簵=鏈棬搴楋紝status = 5寰呭彇浠�
+ Long takeStorageCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getDeleted, Constants.ZERO)
+ .eq(Orders::getTakeShopId, shopId)
+ .eq(Orders::getStatus, Constants.OrderStatus.arrived.getStatus()));
+ vo.setStorageCount(depositStorageCount.intValue() + takeStorageCount.intValue());
+
return vo;
}
diff --git a/server/services/src/main/resources/application-dev.yml b/server/services/src/main/resources/application-dev.yml
index 04d8331..2f1df3b 100644
--- a/server/services/src/main/resources/application-dev.yml
+++ b/server/services/src/main/resources/application-dev.yml
@@ -95,17 +95,17 @@
alipay:
pay:
- appId: 2021006146614417
- privateKey: MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC0zIy4Ej8yG34uQ8zECWu12INdTWYuvSudhrf1qtUrPx4FO9vDGc8NdPz63M3y+akWh9o8gsl7qQqOoB7o8gYebLTzF2ZP3ByxgkNRGUwZBIi0iL/28eq/2uDCWnqNBDEeFQpfWeRcErC28LCB6JSI7F6owH78LiU8pNO0pVvqwvcLovlVee4UDtLThBegUxkkHXq4EM9yutkfps1ruDiTGFYyTjS8g9BmNJ7rJoRSKTE85Gl8OYp1SuFbyurPEaFLBW9yGHbsqMqegys2PwV6PxZq3WBbFMiuWI5fane+VL2jyVoV36CYPS2GFjq0stuUHZvPL1uYk+bwAAei7a2JAgMBAAECggEBAJMnTX1gNJl28Qt82YPRWx6F292r6nguNfqftMi6Q4hQdgGyh5rTPcfpKSKRZvrVIz+YURMhLBZ/Ln2Ja78ThdFrjxewOvDS6XO830d5vIs8OnweNYgrvHJtFrR5afeuqr+eRnP3OTuLZtNvMWp6v7J2GFFnY7OjZ2Flkn4cfKSkqnLQnZ/oDKA/a40OclHRmaQZcS5YkGZqeR+NssanUDad89IVz7NU0kXTbaXjbGHyJscLr6hM3otdfrYsboJ5XHLOnnpSLptv3I0HSUeHBSdhAbP5Hlot+xOo6EbeougefmT2FZWaDA+kPHgajCOdZHW3v+13Xp+PioRW0IPcsLUCgYEA+11Fqm+tpP351tdkJyW+weTy0/OnvUuSVQP/0/kvzQ84kjfkxdoyTKe6kT8+K5b5dkCQhGRfWgb7/amKEe1loCQsujf7/6aebUgTevrOs96LErMT1fCqId1t/MWgXVFpzo8n2OTks2r0nleHY7C9VZiPIbGBQDbkJChIFRAiRXsCgYEAuCIg2p4RrlOG/i4/r1xKmOIwba9snTBnAB8/bri913xMy055OVF6P46hC6d/J25QNqYGODBBF4kmiBuco+vtuz6C94Uo3h/oYD3jetmwlAnRWjEl9Z3Pkf5cbE+o5KBZmUa+M7BTrBDutzdRDqX2SANvnoDWVF03teY9lcVNL8sCgYEAoFdeEhtNC/tKfKZG58XnCe4Oi+9YJ6LmRD7Z2RCSUl8MOhFXaHIINeekVfSeptWWab1DsoAIZvgflC6quUbS1bVdpqgBopFZa+JXMtJ8OjaSRipfU9BB5npGJ8C0y/Ib6TxeMbfIvz5RrhOtdIUQMWKwotCE3z5khz/+wxjYk7MCgYBrMesgeo9ehl/7T99hboA7GssIv+yiYhBEoOxjwAc9EK8AWNH3zXg20gjtaPh8cxsdhW/vfCAY3I5jBHgfcfU3YcAK6ymMjtTQWpc46MyEkmafdCdeIx45JvSVVZbEaplewzFtlARSEpV2ciytM276I43yn5ynBpGtQrmtnGxAGwKBgQCy8imu84IhC+BivLRYdsQ+hMsqs0nih4wfVPKWr6K64QO6CZ4riL76lppH8UBG5EXtRd6cjBbORgvQtr22OJxFcj8WuZjBvYvvCOsTE0jGMdiyBqx9k0PsLrtlVZPFP4kj9vDSFNIyAgIOiAmYY4kBtGfhQqRcDgZK+mgHY0zMbg==
- appCertPath: foo/dev/appCertPublicKey_2021006146614417.crt
- alipayPublicCertPath: foo/dev/alipayCertPublicKey_RSA2.crt
- rootCertPath: foo/dev/alipayRootCert.crt
+ appId: 2021006147660139
+ privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDEeqqkZztBHfK+vpyBi6ejgDTHZuZ3yiuXds+lRBbMo/g24F5trH+oLHW0gMhSxihFfQBBIpVBXDsPQK4ZkhDWTaOBktnU1UMRoOEiaaZU6EiWy10ePFUmpdXpkCQEp7rc88OwI90p58S3+L+Ckak60WqNwJBdB5YGBaUunryBA78U4zW1KNY7JvoRnZDcFMQiczikwUzhO7EAi0yVrVpsVsc9s87mcS4uOJKx4qb2E83r9RJ1z30db+cIIZRiLP2oNZBLYzgKpOouE+uIgxhQzlh6cOASNZQulXuUjoT/+Y9w4njfl4TmKIXWcJFKIMc6kMiux9tTncpp0TqRwk1tAgMBAAECggEALkSYtJheusnbpRFr95G0i2sggqh3s1PXihZ/dXKgT9Z5GCsj8X3Cng7CNRxykBN73kk+axhCv56Bhej8Vqcv8ddcnqG/TEBgR+Fzws/QTIRau6/uILWic7RvuE2qPbJl7aw1s9/uL/UVPSGFr7CvgltYVUM4e7/Sk1529JCK4XJfoXP5tKJ3OaXssvaFnCKEU8IGQkjRG+lUZJhAHVtClGHtgrhevgRhy2zre5wp2qSa8d/MqrPruSYS02hn9b5Nl6i2PlUS6dGlJ4lrxYTG22ukYYoxAPNPS7gnvmveXonWP7b5tPhKRpZjnoySojz3WECUlhz/v8wM1cDrpq+GQQKBgQDsc7y2rlx4f77a7ORfb5/qWHCOJs1cIzggj0kJ7TgFGe71kbCQ5nywD/Fe5V9OwbW+DCxOME+SrrHeiK4axWiu5si/1JlurJoxNy+4k4ywk3ZA3Nv2aBhlPqfkwDhJ0z7Mgsq2c/YgnVddmSvKZoC39wA77ovks4GDxaBOt8N7PQKBgQDUuPGgzkwcgb60UdaxfMbacrPsW26vDxaE4ceuXo2m8KDiCIqkF2y9r6AdWMTgGGSJwOsk7+FP+21VdRivCg9HcOLWngveUc6xDIuqKHVpemMo3SdCF4Wqf96rRc3VOBr5cfIdWxeorZf5umMyKnIAjAFETOOrK7eLTTmjyLD98QKBgB82S+Plcklpu3zUpnS+nGJn2Du7fYI7F+6cW2zXBn0N5lA+Mgt+kVkAUcFQD9uqkF4M51BO6kIXk10nt6vLAT2NM1S3MKW+XQBAI6l+uKSaYpK/VL3bEdVThwAYK5X7L5/5Z97bwdKeUmkFjhVCoJ0oGrzOiWLgGymUzct2UHSVAoGBAMb+7Cs+Ub0pMrmFBY6r52pbey1Uq0pglvRgMmhQU7sjx50r2GaA81zPer15WVM5/nNPYaoALYqg7jrPe/PjOT/fvpR+7SNg7DZ8QftANfYiY7jKifst/gDt9ePLPS6FedZ4XcJQgOVu34jicAFx64vPbS/zrddm4iEScSVijRBBAoGAXCheERsx8+n16Us/DttXFUa1nc7+D8WR6buM1QMZgQCVF2qp3XtM+FusCKL4+q1+dtag8svLjJFp9QbaAXqX8Zk7rn8wUHbDloPTPy9XWgrPowyL9MPU+e/Rq8Hr6TWPDBd4TU64YzIEfBQYpJXfZbXhVYmK3o7xHXKB1x4vvEM=
+ appCertPath: pay/pro/appCertPublicKey.crt
+ alipayPublicCertPath: pay/pro/alipayCertPublicKey_RSA2.crt
+ rootCertPath: pay/pro/alipayRootCert.crt
upload:
type: ftp
# 鑵捐鍦板浘apikey
-tencent_key: WE3BZ-HN6WS-ONDOH-62QCV-MNL6F-5NFNE
+tencent_key:
# 楂樺痉鍦板浘apikey
geocode_map_key: 9a6c1f0eff2e5aa91989ca9d4c21e262
diff --git a/server/web/src/main/java/com/doumee/api/web/ConfigApi.java b/server/web/src/main/java/com/doumee/api/web/ConfigApi.java
index 42e0df5..7113803 100644
--- a/server/web/src/main/java/com/doumee/api/web/ConfigApi.java
+++ b/server/web/src/main/java/com/doumee/api/web/ConfigApi.java
@@ -1,6 +1,7 @@
package com.doumee.api.web;
import com.doumee.core.annotation.LoginRequired;
+import com.doumee.core.annotation.LoginShopRequired;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.constants.Constants;
import com.doumee.core.model.ApiResponse;
@@ -168,6 +169,33 @@
}
+ @LoginShopRequired
+ @ApiOperation(value = "闂ㄥ簵閫氱煡娑堟伅鍒嗛〉", notes = "鏈浼樺厛锛屾椂闂村�掑簭")
+ @PostMapping("/shopNoticePage")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+ })
+ public ApiResponse<PageData<Notice>> shopNoticePage(@RequestBody PageWrap<Notice> pageWrap) {
+ if (pageWrap.getModel() == null) {
+ pageWrap.setModel(new Notice());
+ }
+ pageWrap.getModel().setUserId(this.getShopId());
+ pageWrap.getModel().setUserType(Constants.TWO);
+ return ApiResponse.success("鏌ヨ鎴愬姛", noticeService.findPage(pageWrap));
+ }
+
+ @LoginRequired
+ @ApiOperation(value = "闂ㄥ簵鏍囪鍏ㄩ儴宸茶", notes = "鏍囪褰撳墠鐢ㄦ埛鎵�鏈夋湭璇婚�氱煡涓哄凡璇�")
+ @PostMapping("/shopReadAllNotice")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+ })
+ public ApiResponse shopReadAllNotice() {
+ noticeService.readAllNotice(Constants.TWO, this.getShopId());
+ return ApiResponse.success("鎿嶄綔鎴愬姛");
+ }
+
+
@LoginRequired
@ApiOperation(value = "棣栭〉杩涜涓鍗曟彁绀�", notes = "杩斿洖鏈�鏂颁竴鏉¤繘琛屼腑璁㈠崟鐨勭姸鎬佸拰鎻愮ず鏂囨锛屾棤璁㈠崟杩斿洖null")
@GetMapping("/getActiveOrderTip")
diff --git a/server/web/src/main/java/com/doumee/api/web/PaymentCallback.java b/server/web/src/main/java/com/doumee/api/web/PaymentCallback.java
index 40e530d..43989ac 100644
--- a/server/web/src/main/java/com/doumee/api/web/PaymentCallback.java
+++ b/server/web/src/main/java/com/doumee/api/web/PaymentCallback.java
@@ -4,11 +4,17 @@
import com.doumee.config.wx.WxPayV3Service;
import com.doumee.core.constants.Constants;
import com.doumee.core.utils.ID;
+import com.doumee.core.utils.aliyun.AliSmsService;
+import com.doumee.dao.business.MemberMapper;
import com.doumee.dao.business.OrdersRefundMapper;
import com.doumee.dao.business.OrdersMapper;
+import com.doumee.dao.business.SmsrecordMapper;
+import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.Notice;
import com.doumee.dao.business.model.Orders;
import com.doumee.dao.business.model.OrdersRefund;
+import com.doumee.dao.business.model.Smsrecord;
+import com.alibaba.fastjson.JSONObject;
import com.doumee.service.business.NoticeService;
import com.doumee.service.business.OrdersService;
import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse;
@@ -49,6 +55,12 @@
@Autowired
private NoticeService noticeService;
+
+ @Autowired
+ private SmsrecordMapper smsrecordMapper;
+
+ @Autowired
+ private MemberMapper memberMapper;
// ==================== V2 鍥炶皟 ====================
@@ -171,32 +183,84 @@
.last("limit 1"));
if (refundRecord != null) {
Status refundStatus = refundNotification.getRefundStatus();
- if (Status.SUCCESS.equals(refundStatus)) {
- refundRecord.setStatus(Constants.ONE); // 閫�娆炬垚鍔�
- refundRecord.setRefundTime(new java.util.Date());
- } else if (Status.CLOSED.equals(refundStatus) || Status.ABNORMAL.equals(refundStatus)) {
- refundRecord.setStatus(Constants.TWO); // 閫�娆惧け璐�
- }
- ordersRefundMapper.updateById(refundRecord);
- log.info("閫�娆捐褰曠姸鎬佸凡鏇存柊, refundRecordId={}, status={}", refundRecord.getId(), refundRecord.getStatus());
- // 閫�娆炬垚鍔� 鈫� 閫氱煡浼氬憳
- if (Status.SUCCESS.equals(refundStatus) && refundRecord.getOrderId() != null) {
- Orders refundOrder = ordersMapper.selectById(refundRecord.getOrderId());
- if (refundOrder != null) {
- Notice notice = new Notice();
- notice.setUserType(0);
- notice.setUserId(refundOrder.getMemberId());
- notice.setTitle(Constants.MemberOrderNotify.REFUNDED.getTitle());
- notice.setContent(Constants.MemberOrderNotify.REFUNDED.format(
- "orderNo", refundOrder.getCode(),
- "amount", String.valueOf(Constants.getFormatMoney(refundOrder.getRefundAmount() != null ? refundOrder.getRefundAmount() : 0L))));
- notice.setObjId(refundOrder.getId());
- notice.setObjType(0);
- notice.setStatus(0);
- notice.setIsdeleted(Constants.ZERO);
- notice.setCreateDate(new java.util.Date());
- noticeService.create(notice);
+ // 骞傜瓑鍒ゆ柇锛氬凡鎴愬姛/宸插け璐ョ殑涓嶉噸澶嶅鐞�
+ if (!Constants.equalsInteger(refundRecord.getStatus(), Constants.ZERO)) {
+ log.info("閫�娆捐褰曞凡澶勭悊, refundRecordId={}, status={}, 璺宠繃", refundRecord.getId(), refundRecord.getStatus());
+ } else {
+ if (Status.SUCCESS.equals(refundStatus)) {
+ refundRecord.setStatus(Constants.ONE); // 閫�娆炬垚鍔�
+ refundRecord.setRefundTime(new java.util.Date());
+ } else if (Status.CLOSED.equals(refundStatus) || Status.ABNORMAL.equals(refundStatus)) {
+ refundRecord.setStatus(Constants.TWO); // 閫�娆惧け璐�
+ refundRecord.setRemark("寰俊閫�娆惧け璐�: " + refundStatus.name());
+ }
+ // PROCESSING 鐘舵�佹棤鍙樺寲锛屼笉鏇存柊
+ ordersRefundMapper.updateById(refundRecord);
+ log.info("閫�娆捐褰曠姸鎬佸凡鏇存柊, refundRecordId={}, status={}", refundRecord.getId(), refundRecord.getStatus());
+
+ // 閫�娆炬垚鍔� 鈫� 閫氱煡浼氬憳
+ if (Status.SUCCESS.equals(refundStatus) && refundRecord.getOrderId() != null) {
+ Orders refundOrder = ordersMapper.selectById(refundRecord.getOrderId());
+ if (refundOrder != null) {
+ Notice notice = new Notice();
+ notice.setUserType(0);
+ notice.setUserId(refundOrder.getMemberId());
+ notice.setTitle(Constants.MemberOrderNotify.REFUNDED.getTitle());
+ notice.setContent(Constants.MemberOrderNotify.REFUNDED.format(
+ "orderNo", refundOrder.getCode(),
+ "amount", String.valueOf(Constants.getFormatMoney(refundOrder.getRefundAmount() != null ? refundOrder.getRefundAmount() : 0L))));
+ notice.setObjId(refundOrder.getId());
+ notice.setObjType(0);
+ notice.setStatus(0);
+ notice.setIsdeleted(Constants.ZERO);
+ notice.setCreateDate(new java.util.Date());
+ noticeService.create(notice);
+
+ // 鐭俊閫氱煡浼氬憳锛氶��娆惧凡瀹屾垚
+ Member refundMember = memberMapper.selectById(refundOrder.getMemberId());
+ if (refundMember != null && StringUtils.isNotBlank(refundMember.getTelephone())) {
+ String smsContent = Constants.SmsNotify.MEMBER_REFUNDED.format(
+ "orderNo", refundOrder.getCode(),
+ "money", String.valueOf(Constants.getFormatMoney(
+ refundOrder.getRefundAmount() != null ? refundOrder.getRefundAmount() : 0L)));
+ try {
+ JSONObject templateParam = new JSONObject();
+ templateParam.put("orderNo", refundOrder.getCode());
+ templateParam.put("money", String.valueOf(Constants.getFormatMoney(
+ refundOrder.getRefundAmount() != null ? refundOrder.getRefundAmount() : 0L)));
+ boolean smsResult = AliSmsService.sendSms(refundMember.getTelephone(),
+ Constants.SmsNotify.MEMBER_REFUNDED.getTemplateCode(),
+ templateParam.toJSONString());
+ if (smsResult) {
+ log.info("閫�娆剧煭淇″彂閫佹垚鍔�: phone={}", refundMember.getTelephone());
+ } else {
+ log.warn("閫�娆剧煭淇″彂閫佸け璐�: phone={}", refundMember.getTelephone());
+ }
+ // 瀛樺偍鐭俊璁板綍
+ Smsrecord smsRecord = new Smsrecord();
+ smsRecord.setPhone(refundMember.getTelephone());
+ smsRecord.setContent(smsContent);
+ smsRecord.setType(Constants.ONE);
+ smsRecord.setStatus(smsResult ? Constants.ONE : Constants.ZERO);
+ smsRecord.setCreateTime(new java.util.Date());
+ smsRecord.setDeleted(Constants.ZERO);
+ smsrecordMapper.insert(smsRecord);
+ } catch (Exception smsEx) {
+ log.error("閫�娆剧煭淇″彂閫佸紓甯�: {}", smsEx.getMessage());
+ try {
+ Smsrecord smsRecord = new Smsrecord();
+ smsRecord.setPhone(refundMember.getTelephone());
+ smsRecord.setContent(smsContent);
+ smsRecord.setType(Constants.ONE);
+ smsRecord.setStatus(Constants.ZERO);
+ smsRecord.setCreateTime(new java.util.Date());
+ smsRecord.setDeleted(Constants.ZERO);
+ smsrecordMapper.insert(smsRecord);
+ } catch (Exception ignored) {}
+ }
+ }
+ }
}
}
}
diff --git a/server/web/src/main/java/com/doumee/api/web/ShopInfoApi.java b/server/web/src/main/java/com/doumee/api/web/ShopInfoApi.java
index 6595950..9897cb0 100644
--- a/server/web/src/main/java/com/doumee/api/web/ShopInfoApi.java
+++ b/server/web/src/main/java/com/doumee/api/web/ShopInfoApi.java
@@ -13,6 +13,7 @@
import com.doumee.dao.vo.ShopDetailVO;
import com.doumee.dao.vo.ShopCenterVO;
import com.doumee.dao.vo.ShopNearbyVO;
+import com.doumee.dao.vo.ShopSalesStatsVO;
import com.doumee.dao.vo.ShopWebDetailVO;
import com.doumee.dao.vo.PayResponse;
import com.doumee.service.business.OrdersService;
@@ -80,6 +81,17 @@
}
@LoginShopRequired
+ @ApiOperation("闂ㄥ簵閿�鍞粺璁�")
+ @GetMapping("/salesStats")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "闂ㄥ簵token鍊�", required = true),
+ @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "period", value = "缁熻鍛ㄦ湡锛�0=浠婃棩, 1=鏈湀, 2=涓婃湀", required = true)
+ })
+ public ApiResponse<ShopSalesStatsVO> salesStats(@RequestParam Integer period) {
+ return ApiResponse.success("鏌ヨ鎴愬姛", shopInfoService.getShopSalesStats(getShopId(), period));
+ }
+
+ @LoginShopRequired
@ApiOperation("缁存姢闂ㄥ簵淇℃伅锛堟敮浠樻娂閲戝悗锛�")
@PostMapping("/maintain")
public ApiResponse maintain(@RequestBody ShopInfoMaintainDTO dto) {
--
Gitblit v1.9.3