From e50954f0708ecbbc672352102ae3b24279d40cc1 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期四, 16 四月 2026 20:12:50 +0800
Subject: [PATCH] Merge branch 'master' of http://139.186.142.91:10010/r/productDev/gtzxinglijicun
---
server/services/src/main/java/com/doumee/dao/business/MemberMapper.java | 11
server/services/src/main/java/com/doumee/dao/business/model/ShopInfo.java | 6
server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java | 2
server/services/src/main/java/com/doumee/dao/business/OtherOrdersMapper.java | 7
server/web/src/main/java/com/doumee/api/web/PaymentCallback.java | 4
server/services/src/main/java/com/doumee/dao/dto/CommentOrderDTO.java | 44
server/services/src/main/java/com/doumee/service/business/ShopInfoService.java | 8
server/web/src/main/java/com/doumee/api/web/ConfigApi.java | 7
server/services/src/main/java/com/doumee/service/business/impl/OtherOrdersServiceImpl.java | 131 ++
server/services/src/main/java/com/doumee/dao/dto/StoreOutDTO.java | 31
server/services/src/main/java/com/doumee/dao/business/OrderCommentMapper.java | 12
server/web/src/main/java/com/doumee/api/web/WalletApi.java | 83 +
server/services/src/main/java/com/doumee/dao/vo/RevenueStatisticsVO.java | 27
server/services/src/main/java/com/doumee/dao/business/model/DriverInfo.java | 10
server/services/src/main/java/com/doumee/core/constants/Constants.java | 18
server/web/src/main/java/com/doumee/api/web/MemberApi.java | 2
server/services/src/main/java/com/doumee/service/business/WithdrawalOrdersService.java | 17
server/services/src/main/java/com/doumee/service/business/MemberService.java | 5
server/services/src/main/java/com/doumee/service/business/OrdersService.java | 107 +
server/admin/src/main/java/com/doumee/api/business/OrdersController.java | 8
server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java | 167 +++
server/services/src/main/java/com/doumee/dao/vo/ShopCenterVO.java | 33
server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java | 174 +++
server/services/src/main/java/com/doumee/api/common/PublicCloudController.java | 20
server/admin/src/main/java/com/doumee/api/business/OtherOrdersController.java | 82 +
server/services/src/main/java/com/doumee/dao/business/model/OrderComment.java | 68 +
server/services/src/main/java/com/doumee/dao/business/model/OrdersRefund.java | 2
server/web/src/main/java/com/doumee/api/web/AccountApi.java | 1
server/web/src/main/java/com/doumee/api/web/ShopInfoApi.java | 28
server/services/src/main/java/com/doumee/config/wx/SendWxMessage.java | 34
server/services/src/main/java/com/doumee/service/business/OtherOrdersService.java | 98 +
server/services/src/main/java/com/doumee/service/business/impl/BannerServiceImpl.java | 2
server/services/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java | 6
/dev/null | 470 ---------
server/services/src/main/java/com/doumee/dao/vo/PlatformAboutVO.java | 28
server/services/src/main/java/com/doumee/dao/vo/MyOrderVO.java | 5
server/web/src/main/java/com/doumee/api/web/OrdersApi.java | 69 +
server/services/src/main/java/com/doumee/service/business/impl/RevenueServiceImpl.java | 87 +
server/services/src/main/java/com/doumee/service/business/RevenueService.java | 17
server/services/src/main/java/com/doumee/dao/dto/WithdrawalDTO.java | 16
server/services/db/db_change.sql | 60 +
server/services/src/main/java/com/doumee/dao/business/model/OtherOrders.java | 90 +
server/services/src/main/java/com/doumee/dao/vo/UserCenterVO.java | 44
server/services/src/main/java/com/doumee/dao/business/model/Orders.java | 6
server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java | 113 -
server/services/src/main/java/com/doumee/dao/dto/ShopApplyDTO.java | 4
server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java | 827 +++++++++++++++
47 files changed, 2,412 insertions(+), 679 deletions(-)
diff --git a/server/admin/src/main/java/com/doumee/api/business/IdentityInfoController.java b/server/admin/src/main/java/com/doumee/api/business/IdentityInfoController.java
deleted file mode 100644
index 283fc47..0000000
--- a/server/admin/src/main/java/com/doumee/api/business/IdentityInfoController.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package com.doumee.api.business;
-
-import com.doumee.api.BaseController;
-import com.doumee.core.annotation.excel.ExcelExporter;
-import com.doumee.core.annotation.pr.PreventRepeat;
-import com.doumee.core.model.ApiResponse;
-import com.doumee.core.model.PageData;
-import com.doumee.core.model.PageWrap;
-import com.doumee.dao.business.model.IdentityInfo;
-import com.doumee.dao.dto.AuditDTO;
-import com.doumee.service.business.IdentityInfoService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.apache.shiro.authz.annotation.RequiresPermissions;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author 姹熻箘韫�
- * @date 2025/07/09 12:00
- */
-@Api(tags = "浼氬憳韬唤璁よ瘉淇℃伅琛�")
-@RestController
-@RequestMapping("/business/identityInfo")
-public class IdentityInfoController extends BaseController {
-
- @Autowired
- private IdentityInfoService identityInfoService;
-
- @PreventRepeat
- @ApiOperation("鏂板缓")
- @PostMapping("/create")
- @RequiresPermissions("business:identityinfo:create")
- public ApiResponse create(@RequestBody IdentityInfo identityInfo) {
- return ApiResponse.success(identityInfoService.create(identityInfo));
- }
-
- @ApiOperation("鏍规嵁ID鍒犻櫎")
- @GetMapping("/delete/{id}")
- @RequiresPermissions("business:identityinfo:delete")
- public ApiResponse deleteById(@PathVariable Integer id) {
- identityInfoService.deleteById(id);
- return ApiResponse.success(null);
- }
-
- @ApiOperation("鎵归噺鍒犻櫎")
- @GetMapping("/delete/batch")
- @RequiresPermissions("business:identityinfo:delete")
- public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
- String [] idArray = ids.split(",");
- List<Integer> idList = new ArrayList<>();
- for (String id : idArray) {
- idList.add(Integer.valueOf(id));
- }
- identityInfoService.deleteByIdInBatch(idList);
- return ApiResponse.success(null);
- }
-
- @ApiOperation("鏍规嵁ID淇敼")
- @PostMapping("/updateById")
- @RequiresPermissions("business:identityinfo:update")
- public ApiResponse updateById(@RequestBody IdentityInfo identityInfo) {
- identityInfoService.updateById(identityInfo);
- return ApiResponse.success(null);
- }
-
- @ApiOperation("鍒嗛〉鏌ヨ")
- @PostMapping("/page")
- @RequiresPermissions("business:identityinfo:query")
- public ApiResponse<PageData<IdentityInfo>> findPage (@RequestBody PageWrap<IdentityInfo> pageWrap) {
- return ApiResponse.success(identityInfoService.findPage(pageWrap));
- }
- @ApiOperation("鏌ヨ鐢ㄦ埛璁よ瘉闆嗗悎")
- @PostMapping("/memberList")
- @RequiresPermissions("business:identityinfo:query")
- public ApiResponse<List<IdentityInfo>> findMemberList (@RequestBody IdentityInfo pageWrap) {
- return ApiResponse.success(identityInfoService.findMemberList(pageWrap));
- }
-
- @ApiOperation("瀵煎嚭Excel")
- @PostMapping("/exportExcel")
- @RequiresPermissions("business:identityinfo:exportExcel")
- public void exportExcel (@RequestBody PageWrap<IdentityInfo> pageWrap, HttpServletResponse response) {
- ExcelExporter.build(IdentityInfo.class).export(identityInfoService.findPage(pageWrap).getRecords(), "浼氬憳韬唤璁よ瘉淇℃伅琛�", response);
- }
-
- @ApiOperation("鏍规嵁ID鏌ヨ")
- @GetMapping("/{id}")
- @RequiresPermissions("business:identityinfo:query")
- public ApiResponse findById(@PathVariable Integer id) {
- return ApiResponse.success(identityInfoService.findById(id));
- }
-
- @ApiOperation("瀹℃壒")
- @PostMapping("/audit")
- @RequiresPermissions("business:identityinfo:audit")
- public ApiResponse audit(@RequestBody AuditDTO auditDTO) {
- identityInfoService.audit(auditDTO);
- return ApiResponse.success("鎿嶄綔鎴愬姛");
- }
-
-
-}
diff --git a/server/admin/src/main/java/com/doumee/api/business/OrdersController.java b/server/admin/src/main/java/com/doumee/api/business/OrdersController.java
index 5a7f66b..fa16c18 100644
--- a/server/admin/src/main/java/com/doumee/api/business/OrdersController.java
+++ b/server/admin/src/main/java/com/doumee/api/business/OrdersController.java
@@ -122,4 +122,12 @@
return ApiResponse.success(null);
}
+ @ApiOperation("鎵嬪姩瑙﹀彂璁㈠崟缁撶畻")
+ @PostMapping("/settle")
+ @RequiresPermissions("business:orders:update")
+ public ApiResponse settleOrders() {
+ ordersService.settleOrders();
+ return ApiResponse.success("缁撶畻瀹屾垚");
+ }
+
}
diff --git a/server/admin/src/main/java/com/doumee/api/business/OtherOrdersController.java b/server/admin/src/main/java/com/doumee/api/business/OtherOrdersController.java
new file mode 100644
index 0000000..81b0bc1
--- /dev/null
+++ b/server/admin/src/main/java/com/doumee/api/business/OtherOrdersController.java
@@ -0,0 +1,82 @@
+package com.doumee.api.business;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.OtherOrders;
+import com.doumee.service.business.OtherOrdersService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 鍏朵粬璁㈠崟绠$悊
+ * @author rk
+ * @date 2026/04/16
+ */
+@Api(tags = "鍏朵粬璁㈠崟")
+@RestController
+@RequestMapping("/business/otherOrders")
+public class OtherOrdersController extends BaseController {
+
+ @Autowired
+ private OtherOrdersService otherOrdersService;
+
+ @ApiOperation("鏍规嵁ID鍒犻櫎")
+ @GetMapping("/delete/{id}")
+ @RequiresPermissions("business:otherOrders:delete")
+ public ApiResponse deleteById(@PathVariable Integer id) {
+ otherOrdersService.deleteById(id);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鎵归噺鍒犻櫎")
+ @GetMapping("/delete/batch")
+ @RequiresPermissions("business:otherOrders:delete")
+ public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+ String[] idArray = ids.split(",");
+ List<Integer> idList = new ArrayList<>();
+ for (String id : idArray) {
+ idList.add(Integer.valueOf(id));
+ }
+ otherOrdersService.deleteByIdInBatch(idList);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鏍规嵁ID淇敼")
+ @PostMapping("/updateById")
+ @RequiresPermissions("business:otherOrders:update")
+ public ApiResponse updateById(@RequestBody OtherOrders otherOrders) {
+ otherOrdersService.updateById(otherOrders);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鍒嗛〉鏌ヨ")
+ @PostMapping("/page")
+ @RequiresPermissions("business:otherOrders:query")
+ public ApiResponse<PageData<OtherOrders>> findPage(@RequestBody PageWrap<OtherOrders> pageWrap) {
+ return ApiResponse.success(otherOrdersService.findPage(pageWrap));
+ }
+
+ @ApiOperation("瀵煎嚭Excel")
+ @PostMapping("/exportExcel")
+ @RequiresPermissions("business:otherOrders:exportExcel")
+ public void exportExcel(@RequestBody PageWrap<OtherOrders> pageWrap, HttpServletResponse response) {
+ ExcelExporter.build(OtherOrders.class).export(otherOrdersService.findPage(pageWrap).getRecords(), "鍏朵粬璁㈠崟", response);
+ }
+
+ @ApiOperation("鏍规嵁ID鏌ヨ")
+ @GetMapping("/{id}")
+ @RequiresPermissions("business:otherOrders:query")
+ public ApiResponse findById(@PathVariable Integer id) {
+ return ApiResponse.success(otherOrdersService.findById(id));
+ }
+}
diff --git a/server/services/db/db_change.sql b/server/services/db/db_change.sql
index dacb433..eab5b91 100644
--- a/server/services/db/db_change.sql
+++ b/server/services/db/db_change.sql
@@ -5,6 +5,66 @@
-- ============================================================
+-- 2026/04/16 璁㈠崟缁撶畻鍔熻兘锛氱粨绠楁椂闂村瓧娈� + 闂ㄥ簵/鍙告満浣欓瀛楁
+-- ============================================================
+ALTER TABLE `orders` ADD COLUMN `SETTLEMENT_TIME` DATETIME DEFAULT NULL COMMENT '缁撶畻鏃堕棿' AFTER `SETTLEMENT_STATUS`;
+
+ALTER TABLE `shop_info` ADD COLUMN `BALANCE` BIGINT DEFAULT 0 COMMENT '褰撳墠浣欓(鍒�)' AFTER `DELIVERY_AREA`;
+ALTER TABLE `shop_info` ADD COLUMN `TOTAL_BALANCE` BIGINT DEFAULT 0 COMMENT '鍘嗗彶鎬婚噾棰�(鍒�)' AFTER `BALANCE`;
+
+ALTER TABLE `driver_info` ADD COLUMN `BALANCE` BIGINT DEFAULT 0 COMMENT '褰撳墠浣欓(鍒�)' AFTER `SCORE`;
+ALTER TABLE `driver_info` ADD COLUMN `TOTAL_BALANCE` BIGINT DEFAULT 0 COMMENT '鍘嗗彶鎬婚噾棰�(鍒�)' AFTER `BALANCE`;
+
+
+-- ============================================================
+-- 2026/04/16 鍙告満璇勫垎瀛楁 + 璁㈠崟璇勪环璁板綍琛�
+-- ============================================================
+ALTER TABLE `driver_info` ADD COLUMN `SCORE` DECIMAL(2,1) DEFAULT NULL COMMENT '鍙告満璇勫垎' AFTER `DRIVER_LEVEL`;
+
+CREATE TABLE `order_comment` (
+ `ID` INT NOT NULL AUTO_INCREMENT COMMENT '涓婚敭',
+ `DELETED` INT DEFAULT 0 COMMENT '鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�',
+ `CREATE_USER` INT DEFAULT NULL COMMENT '鍒涘缓浜虹紪鐮�',
+ `CREATE_TIME` DATETIME DEFAULT NULL COMMENT '鍒涘缓鏃堕棿',
+ `UPDATE_USER` INT DEFAULT NULL COMMENT '鏇存柊浜虹紪鐮�',
+ `UPDATE_TIME` DATETIME DEFAULT NULL COMMENT '鏇存柊鏃堕棿',
+ `REMARK` VARCHAR(500) DEFAULT NULL COMMENT '澶囨敞',
+ `ORDER_ID` INT NOT NULL COMMENT '鍏宠仈璁㈠崟涓婚敭',
+ `ORDER_CODE` VARCHAR(50) DEFAULT NULL COMMENT '璁㈠崟缂栧彿',
+ `MEMBER_ID` INT NOT NULL COMMENT '璇勪环浜�(浼氬憳)涓婚敭',
+ `TARGET_TYPE` INT NOT NULL COMMENT '璇勪环瀵硅薄绫诲瀷锛�1=瀛樹欢闂ㄥ簵锛�2=鍙栦欢闂ㄥ簵锛�3=鍙告満',
+ `TARGET_ID` INT NOT NULL COMMENT '璇勪环瀵硅薄涓婚敭(shop_info.id鎴杁river_info.id)',
+ `SCORE` INT NOT NULL COMMENT '璇勫垎1-5',
+ `CONTENT` VARCHAR(500) DEFAULT NULL COMMENT '璇勪环鍐呭',
+ PRIMARY KEY (`ID`)
+) COMMENT='璁㈠崟璇勪环璁板綍';
+
+
+-- ============================================================
+-- 2026/04/16 鏂板鍏朵粬璁㈠崟璁板綍琛�
+-- ============================================================
+CREATE TABLE `other_orders` (
+ `ID` int NOT NULL AUTO_INCREMENT COMMENT '涓婚敭',
+ `DELETED` tinyint DEFAULT NULL COMMENT '鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�',
+ `CREATE_USER` int DEFAULT NULL COMMENT '鍒涘缓浜虹紪鐮�',
+ `CREATE_TIME` datetime DEFAULT NULL COMMENT '鍒涘缓鏃堕棿',
+ `UPDATE_USER` int DEFAULT NULL COMMENT '鏇存柊浜虹紪鐮�',
+ `UPDATE_TIME` datetime DEFAULT NULL COMMENT '鏇存柊鏃堕棿',
+ `REMARK` varchar(2000) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '澶囨敞',
+ `TYPE` int DEFAULT NULL COMMENT '璁㈠崟绫诲瀷锛�0=搴楅摵鎶奸噾璁㈠崟;1=鍙告満鎶奸噾璁㈠崟;2=閫炬湡璐圭敤璁㈠崟;',
+ `OBJ_ID` int DEFAULT NULL COMMENT '鍏宠仈浼氬憳涓婚敭 搴楅摵銆佷細鍛�',
+ `PAY_ACCOUNT` bigint DEFAULT NULL COMMENT '瀹為檯鏀粯璐圭敤',
+ `PAY_STATUS` int DEFAULT NULL COMMENT '鏀粯鐘舵�侊細0=鏈敮浠�;1=宸叉敮浠�;',
+ `PAY_TIME` datetime DEFAULT NULL COMMENT '鏀粯鏃堕棿',
+ `CODE` varchar(20) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '璁㈠崟缂栧彿',
+ `WX_EXTERNAL_NO` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '寰俊骞冲彴浜ゆ槗璁㈠崟鍙�',
+ `ORDER_ID` int DEFAULT NULL COMMENT '鍏宠仈瀵勫瓨璁㈠崟涓婚敭',
+ `OUT_TRADE_NO` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '涓夋柟璁㈠崟鍙�',
+ PRIMARY KEY (`ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='鍏朵粬璁㈠崟璁板綍';
+
+
+-- ============================================================
-- 2026/04/15 璁㈠崟琛ㄦ坊鍔犳牳閿�鐮佸瓧娈�
-- ============================================================
diff --git a/server/services/src/main/java/com/doumee/api/common/PublicCloudController.java b/server/services/src/main/java/com/doumee/api/common/PublicCloudController.java
index f4addb1..c5608f0 100644
--- a/server/services/src/main/java/com/doumee/api/common/PublicCloudController.java
+++ b/server/services/src/main/java/com/doumee/api/common/PublicCloudController.java
@@ -4,8 +4,6 @@
import com.alibaba.fastjson.JSONObject;
import com.doumee.api.BaseController;
import com.doumee.biz.system.SystemDictDataBiz;
-import com.doumee.config.annotation.EncryptionReq;
-import com.doumee.config.annotation.EncryptionResp;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.constants.Constants;
import com.doumee.core.constants.ResponseStatus;
@@ -13,12 +11,7 @@
import com.doumee.core.model.ApiResponse;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.FtpUtil;
-import com.doumee.core.utils.azure.AzureBlobUtil;
-import com.doumee.core.utils.huaweiOBS.ObsUtil;
-import com.doumee.core.utils.qiyeweixin.QywxUtil;
-import com.doumee.core.utils.qiyeweixin.model.response.QywxUploadMediaResponse;
-import com.doumee.dao.system.model.SystemDictData;
-import com.doumee.service.common.EmailService;
+import com.doumee.core.utils.aliyun.ALiYunUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@@ -67,7 +60,7 @@
if(Objects.isNull(folder)){
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐩爣鏂囦欢澶归敊璇�");
}
- String prefixPath = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode();
+ String prefixPath = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode();
InputStream is = null;
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
@@ -90,10 +83,11 @@
String fName = date+"/"+ UUID.randomUUID()+endType;
String fileName = folder+"/"+fName;
boolean r =false;
- ObsUtil obsUtil = new ObsUtil( systemDictDataBiz.queryByCode(Constants.HWY_OBS,Constants.HWY_OBS_ACCESSID).getCode(),
- systemDictDataBiz.queryByCode(Constants.HWY_OBS,Constants.HWY_OBS_ACCESSKEY).getCode(),
- systemDictDataBiz.queryByCode(Constants.HWY_OBS,Constants.HWY_OBS_ENDPOINT).getCode());
- r = obsUtil.uploadFile( systemDictDataBiz.queryByCode(Constants.HWY_OBS,Constants.HWY_OBS_BUCKET).getCode(),is,fileName);//涓婁紶
+
+ ALiYunUtil obs = new ALiYunUtil(systemDictDataBiz.queryByCode(Constants.OSS,Constants.ENDPOINT).getCode(),systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_ID).getCode(),
+ systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_KEY).getCode());
+
+ r = obs.uploadOnlineObject(file.getInputStream(),systemDictDataBiz.queryByCode(Constants.OSS,Constants.BUCKETNAME).getCode(), fileName,null);
if(r){
context.put("success", true);
context.put("code", 200);
diff --git a/server/services/src/main/java/com/doumee/config/wx/SendWxMessage.java b/server/services/src/main/java/com/doumee/config/wx/SendWxMessage.java
index 7ade5c2..1200713 100644
--- a/server/services/src/main/java/com/doumee/config/wx/SendWxMessage.java
+++ b/server/services/src/main/java/com/doumee/config/wx/SendWxMessage.java
@@ -5,7 +5,6 @@
import com.doumee.core.constants.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.HttpsUtil;
-import com.doumee.dao.business.model.IdentityInfo;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import org.springframework.beans.factory.annotation.Autowired;
@@ -29,38 +28,5 @@
@Autowired
private SystemDictDataBiz systemDictDataBiz;
-
- /**
- * 淇℃伅璁よ瘉
- * @param openid
- * @param identityInfo
- * @throws WxErrorException
- */
- public void identityInfoMessage(String openid, IdentityInfo identityInfo){
- try{
-
- String accessToken = WxMiniConfig.wxMaService.getAccessToken();
- log.info("寰俊灏忕▼搴�->寰俊娑堟伅閫氱煡 - 璁よ瘉淇℃伅 -> accessToken锛歿}",accessToken);
- //杩欓噷绠�鍗曡捣瑙佹垜浠瘡娆¢兘鑾峰彇鏈�鏂扮殑access_token锛堟椂闂村紑鍙戜腑锛屽簲璇ュ湪access_token蹇繃鏈熸椂鍐嶉噸鏂拌幏鍙栵級
- String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken;
- //鎷兼帴鎺ㄩ�佺殑妯$増
- WxMsgVO wxMsgVO = new WxMsgVO();
- //鐢ㄦ埛鐨刼penid锛堣鍙戦�佺粰閭d釜鐢ㄦ埛锛�
- wxMsgVO.setTouser(openid);
- //璁㈤槄娑堟伅妯℃澘id
- wxMsgVO.setTemplate_id("VJho7-lf-4_WZFfOzenDnX6sOhYBJWwkLExVjBB563U");
- Map<String, TemplateData> m = new HashMap<>(4);
- m.put("thing2", new TemplateData(Constants.equalsInteger(identityInfo.getType(),Constants.ZERO)?"鐢ㄥ伐璁よ瘉":Constants.equalsInteger(identityInfo.getType(),Constants.ONE)?"杩愯揣璁よ瘉":"渚涢璁よ瘉"));
- m.put("phrase6", new TemplateData(Constants.equalsInteger(identityInfo.getAuditStatus(),Constants.TWO)?"閫氳繃":"鏈�氳繃"));
- m.put("time12", new TemplateData(DateUtil.formatDate(identityInfo.getAuditTime(),"yyyy-MM-dd HH:mm")));
- wxMsgVO.setPage(mineUrl);
- wxMsgVO.setData(m);
- log.error("寰俊灏忕▼搴�->寰俊娑堟伅閫氱煡 璁よ瘉淇℃伅锛歿}", JSONObject.toJSONString(wxMsgVO));
- String responseEntity = HttpsUtil.postJson(url,JSONObject.toJSONString(wxMsgVO));
- log.error("寰俊灏忕▼搴�->寰俊娑堟伅閫氱煡 璁よ瘉淇℃伅锛歿}", JSONObject.toJSONString(responseEntity));
- }catch (WxErrorException wxErrorException){
-
- }
- }
}
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 d49123b..0409d47 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
@@ -18,11 +18,8 @@
*/
public class Constants {
- public static final String HWY_OBS ="HWY_OBS" ;
- public static final String HWY_OBS_ACCESSID ="HWY_OBS_ACCESSID" ;
- public static final String HWY_OBS_ACCESSKEY ="HWY_OBS_ACCESSKEY" ;
- public static final String HWY_OBS_ENDPOINT ="HWY_OBS_ENDPOINT" ;
- public static final String HWY_OBS_BUCKET ="HWY_OBS_BUCKET" ;
+ public static final String OSS ="OSS" ;
+
public static final String RESOURCE_PATH ="RESOURCE_PATH" ;
public static final String QYWX_CORPID = "QYWX_CORPID";
public static final String QYWX_SECRET = "QYWX_SECRET";
@@ -53,6 +50,11 @@
public static final String USER_AGREEMENT ="USER_AGREEMENT" ;
public static final String PRIVACY_AGREEMENT ="PRIVACY_AGREEMENT" ;
+ public static final String ACCESS_ID="ACCESS_ID";
+ public static final String BUCKETNAME = "BUCKETNAME";
+
+ public static final String ACCESS_KEY = "ACCESS_KEY";
+ public static final String ENDPOINT = "ENDPOINT";
public static final String QYWX = "QYWX";
public static final Integer ONE = 1;
@@ -413,7 +415,7 @@
STORAGE_ORDER("storageOrder", "瀵勫瓨璁㈠崟"),
SHOP_DEPOSIT("shopDeposit", "搴楅摵鎶奸噾璁㈠崟"),
DRIVER_DEPOSIT("driverDeposit", "鍙告満鎶奸噾璁㈠崟"),
- OVERDUE_FEE("overdueFee", "閫炬湡璐圭敤璁㈠崟")
+ OVERDUE_FEE("overdueFee", "璁㈠崟閫炬湡璐圭敤")
;
private final String key;
@@ -475,8 +477,8 @@
public enum OrderCombinedStatus {
waitPay(0, "寰呮敮浠�", new int[]{OrderStatus.waitPay.status}),
waitDeposit(1, "寰呮牳楠�", new int[]{OrderStatus.waitDeposit.status}),
- waitDeliver(2, "寰呴厤閫�", new int[]{OrderStatus.deposited.status}),
- waitReceive(3, "寰呮敹璐�", new int[]{OrderStatus.accepted.status, OrderStatus.delivering.status, OrderStatus.arrived.status}),
+ 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})
;
diff --git a/server/services/src/main/java/com/doumee/core/utils/huaweiOBS/ObsUtil.java b/server/services/src/main/java/com/doumee/core/utils/huaweiOBS/ObsUtil.java
deleted file mode 100644
index e7911c4..0000000
--- a/server/services/src/main/java/com/doumee/core/utils/huaweiOBS/ObsUtil.java
+++ /dev/null
@@ -1,201 +0,0 @@
-package com.doumee.core.utils.huaweiOBS;
-
-import com.azure.storage.blob.BlobContainerClient;
-import com.azure.storage.blob.BlobServiceClient;
-import com.azure.storage.blob.BlobServiceClientBuilder;
-import com.doumee.core.utils.azure.AzureBlobUtil;
-import com.obs.services.BasicObsCredentialsProvider;
-import com.obs.services.ObsClient;
-import com.obs.services.exception.ObsException;
-import com.obs.services.model.*;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.List;
-
-/**
- * @date 2020/4/28
- */
-public class ObsUtil {
-
- public ObsClient obsClient;
- public String accessKey;
- public String accessId;
- public String endpoint;
-
- public BlobContainerClient blobContainerClient ;
-
- public ObsUtil(String accessId, String accessKey, String endpoint){
- try {
- this.accessId = accessId;
- this.accessKey = accessKey;
- this.endpoint = endpoint;
- this.obsClient = new ObsClient(new BasicObsCredentialsProvider(accessId, accessKey), this.endpoint);
- }catch (Exception e) {
- e.printStackTrace();
- }
-
- }
- private void initClient() {
- this.obsClient = new ObsClient(new BasicObsCredentialsProvider(this.accessId, this.accessKey), this.endpoint);
- }
- private void uploadLocalFile(File file,String bucket,String key) {
- try {
- if(this.obsClient == null){
- initClient();
- }
- // 鏂囦欢涓婁紶
- // localfile 涓哄緟涓婁紶鐨勬湰鍦版枃浠惰矾寰勶紝闇�瑕佹寚瀹氬埌鍏蜂綋鐨勬枃浠跺悕
- PutObjectRequest request = new PutObjectRequest();
- request.setBucketName(bucket);
- request.setObjectKey(key);
- request.setFile(file);
- obsClient.putObject(request);
- System.out.println("putObject successfully");
- } catch (ObsException e) {
- System.out.println("putObject failed");
- // 璇锋眰澶辫触,鎵撳嵃http鐘舵�佺爜
- System.out.println("HTTP Code:" + e.getResponseCode());
- // 璇锋眰澶辫触,鎵撳嵃鏈嶅姟绔敊璇爜
- System.out.println("Error Code:" + e.getErrorCode());
- // 璇锋眰澶辫触,鎵撳嵃璇︾粏閿欒淇℃伅
- System.out.println("Error Message:" + e.getErrorMessage());
- // 璇锋眰澶辫触,鎵撳嵃璇锋眰id
- System.out.println("Request ID:" + e.getErrorRequestId());
- System.out.println("Host ID:" + e.getErrorHostId());
- e.printStackTrace();
- } catch (Exception e) {
- System.out.println("putObject failed");
- // 鍏朵粬寮傚父淇℃伅鎵撳嵃
- e.printStackTrace();
- }
- }
-
-
- /**
- * 涓婁紶鏂囦欢
- * @param is
- * @param objectKey
- * @return
- * @throws IOException
- */
- public boolean uploadFile(String bucketName,InputStream is, String objectKey) throws Exception {
- if(this.obsClient == null){
- initClient();
- }
-
- try {
- // 涓婁紶瀛楃涓诧紙byte鏁扮粍锛�
- obsClient.putObject(bucketName, objectKey, is);
- System.out.println("putObject successfully");
- } catch (ObsException e) {
- System.out.println("putObject failed");
- // 璇锋眰澶辫触,鎵撳嵃http鐘舵�佺爜
- System.out.println("HTTP Code:" + e.getResponseCode());
- // 璇锋眰澶辫触,鎵撳嵃鏈嶅姟绔敊璇爜
- System.out.println("Error Code:" + e.getErrorCode());
- // 璇锋眰澶辫触,鎵撳嵃璇︾粏閿欒淇℃伅
- System.out.println("Error Message:" + e.getErrorMessage());
- // 璇锋眰澶辫触,鎵撳嵃璇锋眰id
- System.out.println("Request ID:" + e.getErrorRequestId());
- System.out.println("Host ID:" + e.getErrorHostId());
- return false;
- } catch (Exception e) {
- System.out.println("putObject failed");
- // 鍏朵粬寮傚父淇℃伅鎵撳嵃
- e.printStackTrace();
- return false;
- }finally {
- if(this.obsClient!=null){
- this.obsClient.close();
- }
- }
-
- return true;
- }
-
- public static void main(String[] args) {
- ObsUtil blobUtil = new ObsUtil("HPUAQVBRXX9A9TLZ3RTA","uHC2uoFh42Z2xgQmCBBtG8rNZ4Caf85qQ2DQqZZf","obs.cn-south-1.myhuaweicloud.com");
- blobUtil.uploadLocalFile(new File("D://static/1.png"),"jinkuai","orders/1.png");
- blobUtil.uploadLocalFile(new File("D://static/2.png"),"jinkuai","orders/2.png");
- blobUtil.uploadLocalFile(new File("D://static/3.png"),"jinkuai","orders/3.png");
- blobUtil.uploadLocalFile(new File("D://static/4.png"),"jinkuai","orders/4.png");
- }
- public static Integer uploadNetFile(ObsClient obsClient,String bucketName,String url, String objectKey) throws IOException {
- InputStream is = new URL(url).openStream();
- if(is != null){
- Boolean flag = obsClient.doesObjectExist(bucketName, objectKey);
- PutObjectResult result = null;
- result = obsClient.putObject(bucketName, objectKey, is);
- obsClient.close();
- return result.getStatusCode();
- }
- //鍚屽悕鏂囦欢鍙兘琚鐩�
- return null;
- }
-
- /**
- * 鑾峰緱鎵�鏈夋枃浠�
- * @return
- * @throws IOException
- */
- public List<ObsObject> getAllFileInfo( ObsClient obsClient,String bucketName) throws IOException {
- ObjectListing objectList = obsClient.listObjects(bucketName);
- List<ObsObject> list = objectList.getObjects();
- obsClient.close();
- return list;
- }
-
- /**
- * 鍒犻櫎鏂囦欢
- * @param objectKey
- * @return
- * @throws IOException
- */
- public Boolean removeFile(ObsClient obsClient,String bucketName,String objectKey) throws IOException {
- boolean exist = obsClient.doesObjectExist(bucketName, objectKey);
- DeleteObjectResult result = null;
- if (exist) {
- result = obsClient.deleteObject(bucketName, objectKey);
- }
- obsClient.close();
- //鏄惁鍙互琚爣璁颁负鍒犻櫎
- return result.isDeleteMarker();
- }
-
- /**
- * 鑾峰彇鏂囦欢瀵硅薄-涓嬭浇
- * @param objectKey
- * @return
- */
- public ObsObject getFile(ObsClient obsClient,String bucketName,String objectKey) {
- boolean exist = obsClient.doesObjectExist(bucketName, objectKey);
- if (exist) {
- ObsObject object = obsClient.getObject(bucketName, objectKey);
- return object;
- }
- return null;
- }
-
- /**
- * 棰勮鎺堟潈璁块棶-鏀寔娴佸紡鏂囦欢
- * 濡傛灉鏄祦寮忔枃浠讹紝杩斿洖鐨勯摼鎺ュ彲浠ュ湪娴忚鍣ㄩ瑙�
- * 濡傛灉鏄潪娴佸紡鏂囦欢锛岃繑鍥炵殑閾炬帴鍙互鍦ㄦ祻瑙堝櫒閲屼笅杞芥枃浠�
- * @param objectKey
- * @return
- * @throws IOException
- */
- public String preview(ObsClient obsClient,String bucketName,String objectKey) throws IOException {
- //300鏈夋晥鏃堕棿
- TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.GET, 300);
- request.setBucketName(bucketName);
- request.setObjectKey(objectKey);
- TemporarySignatureResponse response = obsClient.createTemporarySignature(request);
- obsClient.close();
- return response.getSignedUrl();
- }
-
-}
diff --git a/server/services/src/main/java/com/doumee/dao/business/IdentityInfoMapper.java b/server/services/src/main/java/com/doumee/dao/business/IdentityInfoMapper.java
deleted file mode 100644
index b8b3251..0000000
--- a/server/services/src/main/java/com/doumee/dao/business/IdentityInfoMapper.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.doumee.dao.business;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.doumee.dao.business.model.IdentityInfo;
-import com.github.yulichang.base.MPJBaseMapper;
-
-/**
- * @author 姹熻箘韫�
- * @date 2025/07/09 12:00
- */
-public interface IdentityInfoMapper extends MPJBaseMapper<IdentityInfo> {
-
-}
diff --git a/server/services/src/main/java/com/doumee/dao/business/MemberMapper.java b/server/services/src/main/java/com/doumee/dao/business/MemberMapper.java
index afb2f5b..b04ffaa 100644
--- a/server/services/src/main/java/com/doumee/dao/business/MemberMapper.java
+++ b/server/services/src/main/java/com/doumee/dao/business/MemberMapper.java
@@ -15,15 +15,4 @@
*/
public interface MemberMapper extends MPJBaseMapper<Member> {
- @Select(" select * , " +
- " ifnull((select r.level from receive_weight r where r.RECEIVE_MAX > RECEIVE_NUM and RECEIVE_NUM > r.RECEIVE_MIN limit 1 ),0) as level ," +
- " ifnull( (select CONVERT( ST_Distance_Sphere ( POINT ( ii.lgt, ii.lat ), POINT ( #{lgt}, #{lat} )) /1000,DECIMAL(15,2)) from identity_info ii where ii.AUDIT_STATUS = 2 and type = 0 and ii.member_id = ID limit 1 ),0) as distance " +
- " from member " +
- " where id in ( " +
- " select ii.member_id from identity_info ii where ii.AUDIT_STATUS = 2 and type = #{orderType} " +
- " and ( CONVERT( ST_Distance_Sphere ( POINT ( ii.lgt, ii.lat ), POINT ( #{lgt}, #{lat} )) /1000,DECIMAL(15,2))) < 100 " +
- " ) and RELEASE_MEMBER_ID != #{releaseMemberId} " +
- " order by level , score desc , distance asc ")
- List<Member> getList(@Param("lgt") BigDecimal lgt, @Param("lat") BigDecimal lat, @Param("orderType") Integer orderType, @Param("releaseMemberId") Integer releaseMemberId);
-
}
diff --git a/server/services/src/main/java/com/doumee/dao/business/OrderCommentMapper.java b/server/services/src/main/java/com/doumee/dao/business/OrderCommentMapper.java
new file mode 100644
index 0000000..42cad7d
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/OrderCommentMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.doumee.dao.business.model.OrderComment;
+import com.github.yulichang.base.MPJBaseMapper;
+
+/**
+ * 璁㈠崟璇勪环璁板綍Mapper
+ * @author rk
+ * @date 2026/04/16
+ */
+public interface OrderCommentMapper extends MPJBaseMapper<OrderComment> {
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/OtherOrdersMapper.java b/server/services/src/main/java/com/doumee/dao/business/OtherOrdersMapper.java
new file mode 100644
index 0000000..4f1247b
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/OtherOrdersMapper.java
@@ -0,0 +1,7 @@
+package com.doumee.dao.business;
+
+import com.doumee.dao.business.model.OtherOrders;
+import com.github.yulichang.base.MPJBaseMapper;
+
+public interface OtherOrdersMapper extends MPJBaseMapper<OtherOrders> {
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/DriverInfo.java b/server/services/src/main/java/com/doumee/dao/business/model/DriverInfo.java
index b7494ce..c38dd92 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/DriverInfo.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/DriverInfo.java
@@ -10,6 +10,7 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -131,6 +132,15 @@
@ApiModelProperty(value = "鍙告満瀹氱骇锛�( 5 - 1 S A B C D )", example = "1")
private Integer driverLevel;
+ @ApiModelProperty(value = "鍙告満璇勫垎")
+ private BigDecimal score;
+
+ @ApiModelProperty(value = "褰撳墠浣欓(鍒�)")
+ private Long balance;
+
+ @ApiModelProperty(value = "鍘嗗彶鎬婚噾棰�(鍒�)")
+ private Long totalBalance;
+
@ApiModelProperty(value = "杞﹁締鐓х墖鍒楄〃")
@TableField(exist = false)
private List<Multifile> carImgList = new ArrayList<>();
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/IdentityInfo.java b/server/services/src/main/java/com/doumee/dao/business/model/IdentityInfo.java
deleted file mode 100644
index 5725919..0000000
--- a/server/services/src/main/java/com/doumee/dao/business/model/IdentityInfo.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package com.doumee.dao.business.model;
-
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.doumee.core.annotation.excel.ExcelColumn;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import java.util.Date;
-import java.math.BigDecimal;
-import java.util.List;
-
-/**
- * 浼氬憳韬唤璁よ瘉淇℃伅琛�
- * @author 姹熻箘韫�
- * @date 2025/07/09 12:00
- */
-@Data
-@ApiModel("浼氬憳韬唤璁よ瘉淇℃伅琛�")
-@TableName("`identity_info`")
-public class IdentityInfo {
-
- @TableId(type = IdType.AUTO)
- @ApiModelProperty(value = "涓婚敭", example = "1")
- private Integer id;
-
- @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�", example = "1")
- private Integer deleted;
-
- @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
- private Integer createUser;
-
- @ApiModelProperty(value = "鍒涘缓鏃堕棿")
- @ExcelColumn(name="鐢宠鏃堕棿",index = 10,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 16)
- private Date createTime;
-
- @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
- private Integer updateUser;
-
- @ApiModelProperty(value = "鏇存柊鏃堕棿")
- private Date updateTime;
-
- @ApiModelProperty(value = "澶囨敞")
- private String remark;
-
- @ApiModelProperty(value = "绫诲瀷:0=鐢ㄥ伐韬唤锛�1=璐ц繍韬唤锛�2=渚涢韬唤锛�", example = "1")
- @ExcelColumn(name="绫诲瀷",valueMapping = "0=鐢ㄥ伐韬唤;1=璐ц繍韬唤;2=渚涢韬唤;",index = 4,width = 10)
- private Integer type;
-
- @ApiModelProperty(value = "浼氬憳涓婚敭", example = "1")
- private Integer memberId;
-
- @ApiModelProperty(value = "璁よ瘉绫诲瀷:0=涓汉锛�1=浼佷笟", example = "1")
- @ExcelColumn(name="璁よ瘉绫诲瀷",valueMapping = "0=涓汉;1=浼佷笟;",index = 5,width = 10)
- private Integer authType;
-
- @ApiModelProperty(value = "鑱旂郴浜�")
- @ExcelColumn(name="鑱旂郴浜�",index = 6,width = 10)
- private String linkName;
-
- @ApiModelProperty(value = "鑱旂郴鏂瑰紡")
- @ExcelColumn(name="鑱旂郴鏂瑰紡",index = 7,width = 10)
- private String telephone;
-
- @ApiModelProperty(value = "鎺ュ崟浣嶇疆")
- @ExcelColumn(name="鎺ュ崟浣嶇疆",index = 8,width = 20)
- private String location;
-
- @ApiModelProperty(value = "鍗曚綅鍚嶇О")
- @ExcelColumn(name="鍗曚綅鍚嶇О",index = 9,width = 10)
- private String companyName;
-
- @ApiModelProperty(value = "绾害", example = "1")
- private BigDecimal lat;
-
- @ApiModelProperty(value = "缁忓害", example = "1")
- private BigDecimal lgt;
-
- @ApiModelProperty(value = "韬唤璇佷汉鍍忛潰/钀ヤ笟鎵х収")
- private String img1;
-
- @ApiModelProperty(value = "韬唤璇佸浗寰介潰/閬撹矾浜ら�氳惀杩愯鍙瘉/椋熷搧缁忚惀璁稿彲璇�")
- private String img2;
-
- @ApiModelProperty(value = "浠庝笟浜哄憳鍋ュ悍璇�")
- private String img3;
-
- @ApiModelProperty(value = "鍏朵粬璁よ瘉璧勬枡")
- private String img4;
-
- @ApiModelProperty(value = "璁よ瘉瀹℃壒鐘舵��:1=鐢宠涓紱2=宸查�氳繃锛�3=鏈�氳繃锛�", example = "1")
- @ExcelColumn(name="瀹℃牳鐘舵��",valueMapping = "1=鐢宠涓�;2=宸查�氳繃;3=鏈�氳繃;",index = 1,width = 10)
- private Integer auditStatus;
-
- @ApiModelProperty(value = "璁よ瘉瀹℃壒鏃堕棿")
- @ExcelColumn(name="璁よ瘉瀹℃壒鏃堕棿",index = 12,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 16)
- private Date auditTime;
-
- @ApiModelProperty(value = "璁よ瘉瀹℃壒澶囨敞")
- @ExcelColumn(name="璁よ瘉瀹℃壒澶囨敞",index = 13,width = 16)
- private String auditRemark;
-
-
- @ApiModelProperty(value = "瀹℃牳浜哄鍚�")
- @TableField(exist = false)
- @ExcelColumn(name="瀹℃牳浜哄鍚�",index = 11,width = 10)
- private String editorName;
- @ApiModelProperty(value = "鐢ㄦ埛openid")
- @ExcelColumn(name="openid",index = 2,width = 20)
- @TableField(exist = false)
- private String openid;
- @ApiModelProperty(value = "鐢ㄦ埛鏄电О")
- @ExcelColumn(name="浼氬憳鏄电О",index = 3,width = 10)
- @TableField(exist = false)
- private String memberName;
- @ApiModelProperty(value = "鍥剧墖闆嗗悎")
- @TableField(exist = false)
- private List<String> imgList;
-}
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/OrderComment.java b/server/services/src/main/java/com/doumee/dao/business/model/OrderComment.java
new file mode 100644
index 0000000..70f3d51
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/model/OrderComment.java
@@ -0,0 +1,68 @@
+package com.doumee.dao.business.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 璁㈠崟璇勪环璁板綍
+ * @author rk
+ * @date 2026/04/16
+ */
+@Data
+@ApiModel("璁㈠崟璇勪环璁板綍")
+@TableName("`order_comment`")
+public class OrderComment {
+
+ @TableId(type = IdType.AUTO)
+ @ApiModelProperty(value = "涓婚敭", example = "1")
+ private Integer id;
+
+ @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�", example = "0")
+ private Integer deleted;
+
+ @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+ private Integer createUser;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+ private Integer updateUser;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date updateTime;
+
+ @ApiModelProperty(value = "澶囨敞")
+ private String remark;
+
+ @ApiModelProperty(value = "鍏宠仈璁㈠崟涓婚敭", example = "1")
+ private Integer orderId;
+
+ @ApiModelProperty(value = "璁㈠崟缂栧彿")
+ private String orderCode;
+
+ @ApiModelProperty(value = "璇勪环浜�(浼氬憳)涓婚敭", example = "1")
+ private Integer memberId;
+
+ @ApiModelProperty(value = "璇勪环瀵硅薄绫诲瀷锛�1=瀛樹欢闂ㄥ簵锛�2=鍙栦欢闂ㄥ簵锛�3=鍙告満", example = "1")
+ private Integer targetType;
+
+ @ApiModelProperty(value = "璇勪环瀵硅薄涓婚敭(shop_info.id鎴杁river_info.id)", example = "1")
+ private Integer targetId;
+
+ @ApiModelProperty(value = "璇勫垎1-5", example = "5")
+ private Integer score;
+
+ @ApiModelProperty(value = "璇勪环鍐呭")
+ private String content;
+
+}
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 773a95e..d8b5f77 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
@@ -337,7 +337,7 @@
@ExcelColumn(name = "寮傚父璐圭敤")
private Long exceptionAmount;
- @ApiModelProperty(value = "寮傚父琛ュ伩/琛ュ伩鍙告満锛堝垎锛�")
+ @ApiModelProperty(value = "寮傚父琛ュ伩鍙告満锛堝垎锛�")
@ExcelColumn(name = "寮傚父琛ュ伩")
private Long exceptionFee;
@@ -348,6 +348,10 @@
@ApiModelProperty(value = "缁撶畻鐘舵�侊細0=寰呯粨绠楋紱1=宸茬粨绠楋紱")
private Integer settlementStatus;
+ @ApiModelProperty(value = "缁撶畻鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date settlementTime;
+
@ApiModelProperty(value = "涓夋柟璁㈠崟鍙�")
private String outTradeNo;
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 8928774..9698da9 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
@@ -47,7 +47,7 @@
@ApiModelProperty(value = "璁㈠崟涓婚敭", example = "1")
private Integer orderId;
- @ApiModelProperty(value = "閫�娆炬柟寮忥細0=鏈瓨浠剁洿鎺ュ彇娑堬紱1=骞冲彴鐩存帴鍙栨秷锛�2=宸插瓨浠剁敵璇峰彇娑�", example = "0")
+ @ApiModelProperty(value = "閫�娆炬柟寮忥細0=鏈瓨浠剁洿鎺ュ彇娑堬紱1=骞冲彴鐩存帴鍙栨秷锛�2=宸插瓨浠剁敵璇峰彇娑堬紱3=璁㈠崟瀹屾垚閫�娆�", example = "0")
private Integer type;
@ApiModelProperty(value = "鍙栨秷鍘熷洜")
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/OtherOrders.java b/server/services/src/main/java/com/doumee/dao/business/model/OtherOrders.java
new file mode 100644
index 0000000..95119c2
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/model/OtherOrders.java
@@ -0,0 +1,90 @@
+package com.doumee.dao.business.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 鍏朵粬璁㈠崟璁板綍
+ * @author rk
+ * @date 2026/04/16
+ */
+@Data
+@ApiModel("鍏朵粬璁㈠崟璁板綍")
+@TableName("`other_orders`")
+public class OtherOrders {
+
+ @TableId(type = IdType.AUTO)
+ @ApiModelProperty(value = "涓婚敭", example = "1")
+ @ExcelColumn(name = "涓婚敭")
+ private Integer id;
+
+ @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�", example = "0")
+ @ExcelColumn(name = "鏄惁宸插垹闄�")
+ private Integer deleted;
+
+ @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+ @ExcelColumn(name = "鍒涘缓浜虹紪鐮�")
+ private Integer createUser;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @ExcelColumn(name = "鍒涘缓鏃堕棿", width = 16, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+ @ExcelColumn(name = "鏇存柊浜虹紪鐮�")
+ private Integer updateUser;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date updateTime;
+
+ @ApiModelProperty(value = "澶囨敞")
+ @ExcelColumn(name = "澶囨敞")
+ private String remark;
+
+ @ApiModelProperty(value = "璁㈠崟绫诲瀷锛�0=搴楅摵鎶奸噾璁㈠崟;1=鍙告満鎶奸噾璁㈠崟;2=閫炬湡璐圭敤璁㈠崟", example = "0")
+ @ExcelColumn(name = "璁㈠崟绫诲瀷", valueMapping = "0=搴楅摵鎶奸噾璁㈠崟;1=鍙告満鎶奸噾璁㈠崟;2=閫炬湡璐圭敤璁㈠崟;")
+ private Integer type;
+
+ @ApiModelProperty(value = "鍏宠仈浼氬憳涓婚敭", example = "1")
+ @ExcelColumn(name = "鍏宠仈浼氬憳涓婚敭")
+ private Integer memberId;
+
+ @ApiModelProperty(value = "瀹為檯鏀粯璐圭敤")
+ @ExcelColumn(name = "瀹為檯鏀粯璐圭敤")
+ private Long payAccount;
+
+ @ApiModelProperty(value = "鏀粯鐘舵�侊細0=鏈敮浠�;1=宸叉敮浠�", example = "0")
+ @ExcelColumn(name = "鏀粯鐘舵��", valueMapping = "0=鏈敮浠�;1=宸叉敮浠�;")
+ private Integer payStatus;
+
+ @ApiModelProperty(value = "鏀粯鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @ExcelColumn(name = "鏀粯鏃堕棿", width = 16, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ private Date payTime;
+
+ @ApiModelProperty(value = "璁㈠崟缂栧彿")
+ @ExcelColumn(name = "璁㈠崟缂栧彿")
+ private String code;
+
+ @ApiModelProperty(value = "寰俊骞冲彴浜ゆ槗璁㈠崟鍙�")
+ @ExcelColumn(name = "寰俊骞冲彴浜ゆ槗璁㈠崟鍙�")
+ private String wxExternalNo;
+
+ @ApiModelProperty(value = "鍏宠仈瀵勫瓨璁㈠崟涓婚敭", example = "1")
+ @ExcelColumn(name = "鍏宠仈瀵勫瓨璁㈠崟涓婚敭")
+ private Integer orderId;
+
+ @ApiModelProperty(value = "涓夋柟璁㈠崟鍙�")
+ @ExcelColumn(name = "涓夋柟璁㈠崟鍙�")
+ private String outTradeNo;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/ShopInfo.java b/server/services/src/main/java/com/doumee/dao/business/model/ShopInfo.java
index 4147f2a..7b14ba3 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/ShopInfo.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/ShopInfo.java
@@ -156,6 +156,12 @@
@ApiModelProperty(value = "閰嶉�佽寖鍥�(km)")
private BigDecimal deliveryArea;
+ @ApiModelProperty(value = "褰撳墠浣欓(鍒�)")
+ private Long balance;
+
+ @ApiModelProperty(value = "鍘嗗彶鎬婚噾棰�(鍒�)")
+ private Long totalBalance;
+
@ApiModelProperty(value = "鏀粯瀹濇彁鐜拌处鎴�")
private String aliAccount;
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
new file mode 100644
index 0000000..d9e0059
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/CommentOrderDTO.java
@@ -0,0 +1,44 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 璁㈠崟璇勪环璇锋眰
+ *
+ * @author rk
+ * @date 2026/04/16
+ */
+@Data
+@ApiModel("璁㈠崟璇勪环璇锋眰")
+public class CommentOrderDTO {
+
+ @NotNull(message = "璁㈠崟涓婚敭涓嶈兘涓虹┖")
+ @ApiModelProperty(value = "璁㈠崟涓婚敭", required = true)
+ private Integer orderId;
+
+ @NotNull(message = "瀛樹欢闂ㄥ簵璇勫垎涓嶈兘涓虹┖")
+ @Min(value = 1, message = "璇勫垎鏈�浣�1鏄�")
+ @Max(value = 5, message = "璇勫垎鏈�楂�5鏄�")
+ @ApiModelProperty(value = "瀛樹欢闂ㄥ簵璇勫垎1-5", required = true, example = "5")
+ private Integer depositScore;
+
+ @Min(value = 1, message = "璇勫垎鏈�浣�1鏄�")
+ @Max(value = 5, message = "璇勫垎鏈�楂�5鏄�")
+ @ApiModelProperty(value = "鍙栦欢闂ㄥ簵璇勫垎1-5锛堝紓鍦板瘎瀛樹笖鏈夊彇浠堕棬搴楁椂蹇呭~锛�", example = "5")
+ private Integer takeScore;
+
+ @Min(value = 1, message = "璇勫垎鏈�浣�1鏄�")
+ @Max(value = 5, message = "璇勫垎鏈�楂�5鏄�")
+ @ApiModelProperty(value = "鍙告満璇勫垎1-5锛堝紓鍦板瘎瀛樿鍗曞繀濉級", example = "5")
+ private Integer driverScore;
+
+ @ApiModelProperty(value = "璇勪环鍐呭")
+ private String content;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/ShopApplyDTO.java b/server/services/src/main/java/com/doumee/dao/dto/ShopApplyDTO.java
index 28722ff..634ff08 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/ShopApplyDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/ShopApplyDTO.java
@@ -100,4 +100,8 @@
@ApiModelProperty(value = "绀句繚缂寸撼璇佹槑锛堜釜浜虹被鍨嬪繀濉紝鏈�澶�3寮狅級")
@Size(max = 3, message = "绀句繚缂寸撼璇佹槑鏈�澶�3寮�")
private List<String> socialSecurityImgs;
+
+ @ApiModelProperty(value = "鏀粯瀹濇彁鐜拌处鎴�", required = true)
+ @NotBlank(message = "鏀粯瀹濇彁鐜拌处鎴蜂笉鑳戒负绌�")
+ private String aliAccount;
}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/StoreOutDTO.java b/server/services/src/main/java/com/doumee/dao/dto/StoreOutDTO.java
new file mode 100644
index 0000000..b5b3c0f
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/StoreOutDTO.java
@@ -0,0 +1,31 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.util.List;
+
+/**
+ * 闂ㄥ簵纭鍑哄簱璇锋眰
+ *
+ * @author rk
+ * @date 2026/04/16
+ */
+@Data
+@ApiModel("闂ㄥ簵纭鍑哄簱璇锋眰")
+public class StoreOutDTO {
+
+ @NotNull(message = "璁㈠崟涓婚敭涓嶈兘涓虹┖")
+ @ApiModelProperty(value = "璁㈠崟涓婚敭", required = true)
+ private Integer orderId;
+
+ @Size(max = 3, message = "鏈�澶氫笂浼�3寮犲浘鐗�")
+ @ApiModelProperty(value = "鍑哄簱鍥剧墖鍦板潃鍒楄〃锛屾渶澶�3寮�")
+ private List<String> images;
+
+ @ApiModelProperty(value = "鍑哄簱澶囨敞")
+ private String remark;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/WithdrawalDTO.java b/server/services/src/main/java/com/doumee/dao/dto/WithdrawalDTO.java
index b265c23..10b9d97 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/WithdrawalDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/WithdrawalDTO.java
@@ -1,10 +1,12 @@
package com.doumee.dao.dto;
-import com.doumee.dao.business.model.Member;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import javax.validation.constraints.DecimalMin;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
@@ -17,13 +19,13 @@
@ApiModel("鎻愮幇鐢宠")
public class WithdrawalDTO {
- @ApiModelProperty(value = "鎻愮幇閲戦 (鍗曚綅锛氬厓)")
+ @ApiModelProperty(value = "鎻愮幇閲戦 (鍗曚綅锛氬厓)", required = true)
+ @NotNull(message = "鎻愮幇閲戦涓嶈兘涓虹┖")
+ @DecimalMin(value = "0.01", message = "鎻愮幇閲戦涓嶈兘灏忎簬0.01鍏�")
private BigDecimal amount;
- @ApiModelProperty(value = "鐪熷疄濮撳悕")
- private String name;
+ @ApiModelProperty(value = "鏀粯瀹濇彁鐜拌处鎴�", required = true)
+ @NotBlank(message = "鏀粯瀹濇彁鐜拌处鎴蜂笉鑳戒负绌�")
+ private String aliAccount;
-
- @ApiModelProperty(value = "鐢ㄦ埛淇℃伅",hidden = true)
- private Member member;
}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/MyOrderVO.java b/server/services/src/main/java/com/doumee/dao/vo/MyOrderVO.java
index 90d05ca..57d180f 100644
--- a/server/services/src/main/java/com/doumee/dao/vo/MyOrderVO.java
+++ b/server/services/src/main/java/com/doumee/dao/vo/MyOrderVO.java
@@ -91,4 +91,9 @@
@ApiModelProperty(value = "鐗╁搧鏄庣粏鍒楄〃")
private List<OrderItemVO> detailList;
+
+ // ---- 闂ㄥ簵绔� ----
+
+ @ApiModelProperty(value = "褰撳墠闂ㄥ簵瑙掕壊锛�1=瀛樹欢闂ㄥ簵锛�2=鍙栦欢闂ㄥ簵锛堜粎闂ㄥ簵绔繑鍥烇級")
+ private Integer shopRole;
}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/PlatformAboutVO.java b/server/services/src/main/java/com/doumee/dao/vo/PlatformAboutVO.java
new file mode 100644
index 0000000..a4dd10c
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/PlatformAboutVO.java
@@ -0,0 +1,28 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 骞冲彴淇℃伅锛堝叧浜庢垜浠�佸崗璁瓑锛�
+ *
+ * @author rk
+ * @date 2026/04/16
+ */
+@Data
+@ApiModel("骞冲彴淇℃伅")
+public class PlatformAboutVO {
+
+ @ApiModelProperty(value = "鍏充簬鎴戜滑")
+ private String aboutUs;
+
+ @ApiModelProperty(value = "鐢ㄦ埛鍗忚")
+ private String userAgreement;
+
+ @ApiModelProperty(value = "闅愮鍗忚")
+ private String privacyAgreement;
+
+ @ApiModelProperty(value = "鏈嶅姟浠嬬粛")
+ private String serverIntroduce;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/RevenueStatisticsVO.java b/server/services/src/main/java/com/doumee/dao/vo/RevenueStatisticsVO.java
new file mode 100644
index 0000000..732e06e
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/RevenueStatisticsVO.java
@@ -0,0 +1,27 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鏀剁泭缁熻VO
+ * @author rk
+ * @date 2026/04/16
+ */
+@Data
+@ApiModel("鏀剁泭缁熻")
+public class RevenueStatisticsVO {
+
+ @ApiModelProperty(value = "褰撳墠璐︽埛浣欓锛堝垎锛�")
+ private Long balance;
+
+ @ApiModelProperty(value = "寰呯粨绠楅噾棰濓紙鍒嗭級")
+ private Long pendingAmount;
+
+ @ApiModelProperty(value = "绱鎻愮幇閲戦锛堝垎锛�")
+ private Long totalWithdrawn;
+
+ @ApiModelProperty(value = "鎻愮幇涓噾棰濓紙鍒嗭級")
+ private Long withdrawingAmount;
+}
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
new file mode 100644
index 0000000..c129682
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/ShopCenterVO.java
@@ -0,0 +1,33 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ShopCenterVO {
+
+ @ApiModelProperty(value = "闂ㄥ簵澶村儚鍏ㄨ矾寰�")
+ private String fullCoverImg;
+
+ @ApiModelProperty(value = "闂ㄥ簵澶村儚鍗婅矾寰�")
+ private String coverImg;
+
+ @ApiModelProperty(value = "闂ㄥ簵鍚嶇О")
+ private String shopName;
+
+ @ApiModelProperty(value = "鑱旂郴浜哄悕绉�")
+ private String linkName;
+
+ @ApiModelProperty(value = "闂ㄥ簵绫诲瀷锛�0=涓汉锛�1=浼佷笟")
+ private Integer companyType;
+
+ @ApiModelProperty(value = "鏄惁鏈夋秷鎭�")
+ private Boolean hasMessage;
+
+ @ApiModelProperty(value = "寰呮牳楠岃鍗曟暟閲�")
+ private Integer waitDepositCount;
+
+ @ApiModelProperty(value = "寰呮敹璐ц鍗曟暟閲�")
+ private Integer waitReceiveCount;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/UserCenterVO.java b/server/services/src/main/java/com/doumee/dao/vo/UserCenterVO.java
index 31296a0..8927049 100644
--- a/server/services/src/main/java/com/doumee/dao/vo/UserCenterVO.java
+++ b/server/services/src/main/java/com/doumee/dao/vo/UserCenterVO.java
@@ -1,6 +1,5 @@
package com.doumee.dao.vo;
-import com.doumee.core.annotation.excel.ExcelColumn;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -13,39 +12,28 @@
@Data
public class UserCenterVO {
- @ApiModelProperty(value = "鍙戝竷浠诲姟鎬绘暟 - 鍙戝崟鏂逛娇鐢�")
- private Integer releaseTaskTotal;
+ @ApiModelProperty(value = "浼氬憳澶村儚鍏ㄨ矾寰�")
+ private String fullCoverImage;
- @ApiModelProperty(value = "寰呮帴鍗曚换鍔℃�绘暟 - 鍙戝崟鏂逛娇鐢�")
- private Integer waitReceiveTotal;
+ @ApiModelProperty(value = "浼氬憳澶村儚鍗婅矾寰�")
+ private String coverImage;
- @ApiModelProperty(value = "杩涜涓换鍔℃�绘暟 - 鍙戝崟鏂逛娇鐢�")
- private Integer doingTotal;
+ @ApiModelProperty(value = "浼氬憳鏄电О")
+ private String nickName;
- @ApiModelProperty(value = "寰呰瘎浠蜂换鍔℃�绘暟 - 鍙戝崟鏂逛娇鐢�")
- private Integer waitCommentTotal;
+ @ApiModelProperty(value = "濮撳悕")
+ private String name;
- @ApiModelProperty(value = "杩涜涓换鍔℃暟閲� - 鎺ュ崟鏂逛娇鐢�")
- private Integer taskingTotal;
+ @ApiModelProperty(value = "鑱旂郴鐢佃瘽")
+ private String telephone;
- @ApiModelProperty(value = "瀹屾垚浠诲姟鏁伴噺 - 鎺ュ崟鏂逛娇鐢�")
- private Integer doneTotal;
+ @ApiModelProperty(value = "鏄惁鏈夋秷鎭�")
+ private Boolean hasMessage;
- @ApiModelProperty(value = "宸叉帴鍗曚换鍔℃暟閲� - 鎺ュ崟鏂逛娇鐢�")
- private Integer receiveTotal;
+ @ApiModelProperty(value = "寰呮敮浠樿鍗曟暟閲�")
+ private Integer waitPayCount;
- @ApiModelProperty(value = "鏈嶅姟浠嬬粛")
- private String serverIntroduce;
+ @ApiModelProperty(value = "寰呮敹璐ц鍗曟暟閲�")
+ private Integer waitReceiveCount;
- @ApiModelProperty(value = "鍏充簬鎴戜滑")
- private String aboutUs;
-
- @ApiModelProperty(value = "鐢ㄦ埛鍗忚")
- private String userAgreement;
-
- @ApiModelProperty(value = "闅愮鍗忚")
- private String privacyAgreement;
-
- @ApiModelProperty(value = "瀹㈡湇鐢佃瘽 澶氫釜浠�,鍒嗗壊")
- private String serverPhone;
}
diff --git a/server/services/src/main/java/com/doumee/service/business/IdentityInfoService.java b/server/services/src/main/java/com/doumee/service/business/IdentityInfoService.java
deleted file mode 100644
index 8734a61..0000000
--- a/server/services/src/main/java/com/doumee/service/business/IdentityInfoService.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package com.doumee.service.business;
-
-import com.doumee.core.model.PageData;
-import com.doumee.core.model.PageWrap;
-import com.doumee.dao.business.model.IdentityInfo;
-import com.doumee.dao.dto.AuditDTO;
-
-import java.util.List;
-
-/**
- * 浼氬憳韬唤璁よ瘉淇℃伅琛⊿ervice瀹氫箟
- * @author 姹熻箘韫�
- * @date 2025/07/09 12:00
- */
-public interface IdentityInfoService {
-
- /**
- * 鍒涘缓
- *
- * @param identityInfo 瀹炰綋瀵硅薄
- * @return Integer
- */
- Integer create(IdentityInfo identityInfo);
-
- /**
- * 涓婚敭鍒犻櫎
- *
- * @param id 涓婚敭
- */
- void deleteById(Integer id);
-
- /**
- * 鍒犻櫎
- *
- * @param identityInfo 瀹炰綋瀵硅薄
- */
- void delete(IdentityInfo identityInfo);
-
- /**
- * 鎵归噺涓婚敭鍒犻櫎
- *
- * @param ids 涓婚敭闆�
- */
- void deleteByIdInBatch(List<Integer> ids);
-
- /**
- * 涓婚敭鏇存柊
- *
- * @param identityInfo 瀹炰綋瀵硅薄
- */
- void updateById(IdentityInfo identityInfo);
-
- /**
- * 鎵归噺涓婚敭鏇存柊
- *
- * @param identityInfos 瀹炰綋闆�
- */
- void updateByIdInBatch(List<IdentityInfo> identityInfos);
-
- /**
- * 涓婚敭鏌ヨ
- *
- * @param id 涓婚敭
- * @return IdentityInfo
- */
- IdentityInfo findById(Integer id);
-
- /**
- * 鏉′欢鏌ヨ鍗曟潯璁板綍
- *
- * @param identityInfo 瀹炰綋瀵硅薄
- * @return IdentityInfo
- */
- IdentityInfo findOne(IdentityInfo identityInfo);
-
- /**
- * 鏉′欢鏌ヨ
- *
- * @param identityInfo 瀹炰綋瀵硅薄
- * @return List<IdentityInfo>
- */
- List<IdentityInfo> findList(IdentityInfo identityInfo);
-
- /**
- * 鍒嗛〉鏌ヨ
- *
- * @param pageWrap 鍒嗛〉瀵硅薄
- * @return PageData<IdentityInfo>
- */
- PageData<IdentityInfo> findPage(PageWrap<IdentityInfo> pageWrap);
-
- /**
- * 鏉′欢缁熻
- *
- * @param identityInfo 瀹炰綋瀵硅薄
- * @return long
- */
- long count(IdentityInfo identityInfo);
-
-
- IdentityInfo findByMemberType(Integer type,Integer memberId);
-
- void updateLocation(IdentityInfo identityInfo);
-
- List<IdentityInfo> findMemberList(IdentityInfo pageWrap);
-
- void audit(AuditDTO auditDTO);
-}
diff --git a/server/services/src/main/java/com/doumee/service/business/MemberService.java b/server/services/src/main/java/com/doumee/service/business/MemberService.java
index 897e4dc..3512e96 100644
--- a/server/services/src/main/java/com/doumee/service/business/MemberService.java
+++ b/server/services/src/main/java/com/doumee/service/business/MemberService.java
@@ -16,6 +16,7 @@
import com.doumee.dao.vo.AccountResponse;
import com.doumee.dao.vo.MemberDetailVO;
import com.doumee.dao.vo.MemberListVO;
+import com.doumee.dao.vo.PlatformAboutVO;
import com.doumee.dao.vo.UserCenterVO;
import me.chanjar.weixin.common.error.WxErrorException;
import org.apache.commons.lang3.StringUtils;
@@ -144,9 +145,9 @@
* @param memberId
* @return
*/
- Member getMemberInfo(Integer memberId);
+ UserCenterVO getMemberInfo(Integer memberId);
- UserCenterVO getPlatformAboutUs();
+ PlatformAboutVO getPlatformAboutUs();
void logOut(String token,Integer memberId);
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 cb9f676..58debcd 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
@@ -7,6 +7,7 @@
import com.doumee.dao.dto.CalculateRemotePriceDTO;
import com.doumee.dao.dto.CreateOrderDTO;
import com.doumee.dao.dto.DispatchDTO;
+import com.doumee.dao.dto.CommentOrderDTO;
import com.doumee.dao.dto.MyOrderDTO;
import com.doumee.dao.vo.MyOrderDetailVO;
import com.doumee.dao.vo.MyOrderVO;
@@ -130,9 +131,9 @@
/**
* 浼氬憳鍙栨秷璁㈠崟锛堜粎寮傚湴瀵勫瓨锛�
*
- * @param orderId 璁㈠崟涓婚敭
- * @param memberId 浼氬憳涓婚敭
- * @param reason 鍙栨秷鍘熷洜
+ * @param orderId 璁㈠崟涓婚敭
+ * @param memberId 浼氬憳涓婚敭
+ * @param reason 鍙栨秷鍘熷洜
*/
void cancelOrder(Integer orderId, Integer memberId, String reason);
@@ -189,6 +190,7 @@
/**
* 璁$畻淇濅环璐圭敤
+ *
* @param declaredValue 鎶ヤ环閲戦
* @return 淇濅环璐圭敤
*/
@@ -196,6 +198,7 @@
/**
* 璁$畻灏卞湴瀛樺彇棰勪及璐圭敤
+ *
* @param dto 灏卞湴瀛樺彇璁′环璇锋眰鍙傛暟
* @return 浠锋牸璁$畻缁撴灉
*/
@@ -203,6 +206,7 @@
/**
* 璁$畻寮傚湴瀛樺彇棰勪及璐圭敤
+ *
* @param dto 寮傚湴瀛樺彇璁′环璇锋眰鍙傛暟
* @return 浠锋牸璁$畻缁撴灉
*/
@@ -210,7 +214,8 @@
/**
* 鍒涘缓璁㈠崟骞跺敜璧峰井淇℃敮浠�
- * @param dto 鍒涘缓璁㈠崟璇锋眰鍙傛暟
+ *
+ * @param dto 鍒涘缓璁㈠崟璇锋眰鍙傛暟
* @param memberId 褰撳墠鐧诲綍浼氬憳ID
* @return 鏀粯鍝嶅簲
*/
@@ -218,7 +223,8 @@
/**
* 缁х画鏀粯锛堝緟鏀粯璁㈠崟閲嶆柊鍞よ捣寰俊鏀粯锛�
- * @param orderId 璁㈠崟涓婚敭
+ *
+ * @param orderId 璁㈠崟涓婚敭
* @param memberId 褰撳墠鐧诲綍浼氬憳ID
* @return 鏀粯鍝嶅簲
*/
@@ -226,6 +232,7 @@
/**
* 灏忕▼搴忕-鏌ヨ鎴戠殑璁㈠崟鍒嗛〉
+ *
* @param pageWrap 鍒嗛〉鏌ヨ鍙傛暟锛坢odel鍚玸tatus锛�
* @param memberId 浼氬憳涓婚敭
* @return 鍒嗛〉缁撴灉
@@ -234,6 +241,7 @@
/**
* 鏌ヨ璁㈠崟瓒呮椂璐圭敤
+ *
* @param orderId 璁㈠崟涓婚敭
* @return 瓒呮椂璐圭敤璁$畻缁撴灉
*/
@@ -260,4 +268,91 @@
*/
void confirmCustomerArrived(Integer orderId, Integer shopId);
-}
+ /**
+ * 閫炬湡璐圭敤鏀粯锛堝敜璧峰井淇℃敮浠橈級
+ *
+ * @param orderId 瀵勫瓨璁㈠崟涓婚敭
+ * @param memberId 褰撳墠鐧诲綍浼氬憳ID
+ * @return 鏀粯鍝嶅簲
+ */
+ PayResponse payOverdueFee(Integer orderId, Integer memberId);
+
+ /**
+ * 閫炬湡璐圭敤鏀粯鍥炶皟澶勭悊
+ *
+ * @param outTradeNo 鍟嗘埛璁㈠崟鍙�
+ * @param wxTradeNo 寰俊璁㈠崟鍙�
+ */
+ void handleOverdueFeePayNotify(String outTradeNo, String wxTradeNo);
+
+ /**
+ * 鍙栦欢闂ㄥ簵纭鍑哄簱
+ * 灏卞湴瀵勫瓨/寮傚湴瀵勫瓨锛屽瓨鍦ㄥ彇浠堕棬搴楋紝status=5锛宱verdueStatus=0/2锛宑onfirmArriveTime涓嶄负绌�
+ * 鍑哄簱鍚庤鍗曞畬鎴�
+ *
+ * @param orderId 璁㈠崟涓婚敭
+ * @param shopId 褰撳墠鎿嶄綔闂ㄥ簵涓婚敭
+ * @param images 鍑哄簱鍥剧墖锛堟渶澶�3寮狅級
+ * @param remark 鍑哄簱澶囨敞
+ */
+ void confirmStoreOut(Integer orderId, Integer shopId, List<String> images, String remark);
+
+ /**
+ * 璁$畻骞舵洿鏂拌鍗曚笁鏂规敹鐩婏紙瀛樹欢闂ㄥ簵/鍙栦欢闂ㄥ簵/鍙告満锛�
+ * 灏卞湴瀵勫瓨锛氫粎瀛樹欢闂ㄥ簵鏀剁泭
+ * 寮傚湴瀵勫瓨锛氬瓨浠堕棬搴� + 鍙告満鏀剁泭锛涙湁鍙栦欢闂ㄥ簵鏃跺姞涓婂彇浠堕棬搴楁敹鐩�
+ *
+ * @param orderId 璁㈠崟涓婚敭
+ */
+ void calculateAndSaveOrderFees(Integer orderId);
+
+ /**
+ * 浼氬憳鍒犻櫎璁㈠崟锛堥�昏緫鍒犻櫎锛屼粎宸插畬鎴�/宸插彇娑�/宸查��娆捐鍗曞彲鍒犻櫎锛�
+ *
+ * @param orderId 璁㈠崟涓婚敭
+ * @param memberId 浼氬憳涓婚敭
+ */
+ void deleteMyOrder(Integer orderId, Integer memberId);
+
+ /**
+ * 闂ㄥ簵鏀粯鎶奸噾锛堝敜璧峰井淇℃敮浠橈級
+ *
+ * @param shopId 闂ㄥ簵涓婚敭
+ * @return 鏀粯鍝嶅簲
+ */
+ PayResponse payShopDeposit(Integer shopId);
+
+ /**
+ * 闂ㄥ簵鎶奸噾鏀粯鍥炶皟澶勭悊
+ *
+ * @param outTradeNo 鍟嗘埛璁㈠崟鍙�
+ * @param wxTradeNo 寰俊璁㈠崟鍙�
+ */
+ void handleShopDepositPayNotify(String outTradeNo, String wxTradeNo);
+
+ /**
+ * 璁㈠崟缁撶畻锛氭牴鎹� SETTLEMENT_DATE 閰嶇疆锛屽皢宸插畬鎴愮殑寰呯粨绠楄鍗曡繘琛岀粨绠�
+ * 鏇存柊璁㈠崟缁撶畻鐘舵�併�丷evenue 鍏ヨ处鐘舵�併�侀棬搴�/鍙告満浣欓
+ */
+ void settleOrders();
+
+ /**
+ * 璁㈠崟璇勪环
+ * status=7涓攃ommentStatus=0鏃跺彲璇勪环锛屾寜瀵硅薄锛堝瓨浠堕棬搴�/鍙栦欢闂ㄥ簵/鍙告満锛夊垎鍒褰曡瘎鍒�
+ *
+ * @param dto 璇勪环璇锋眰
+ * @param memberId 褰撳墠鐧诲綍浼氬憳ID
+ */
+ void commentOrder(CommentOrderDTO dto, Integer memberId);
+
+ /**
+ * 闂ㄥ簵绔鍗曞垎椤靛垪琛�
+ * 鏌ヨ瀛樹欢闂ㄥ簵鎴栧彇浠堕棬搴楃瓑浜庡綋鍓嶇櫥褰曢棬搴楃殑璁㈠崟
+ *
+ * @param pageWrap 鍒嗛〉鏌ヨ鍙傛暟锛坢odel鍚玸tatus/combinedStatus锛�
+ * @param shopId 褰撳墠鐧诲綍闂ㄥ簵涓婚敭
+ * @return 鍒嗛〉缁撴灉
+ */
+ PageData<MyOrderVO> findShopOrderPage(PageWrap<MyOrderDTO> pageWrap, Integer shopId);
+
+}
\ No newline at end of file
diff --git a/server/services/src/main/java/com/doumee/service/business/OtherOrdersService.java b/server/services/src/main/java/com/doumee/service/business/OtherOrdersService.java
new file mode 100644
index 0000000..3a22baf
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/OtherOrdersService.java
@@ -0,0 +1,98 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.OtherOrders;
+
+import java.util.List;
+
+/**
+ * 鍏朵粬璁㈠崟璁板綍Service瀹氫箟
+ * @author rk
+ * @date 2026/04/16
+ */
+public interface OtherOrdersService {
+
+ /**
+ * 鍒涘缓
+ *
+ * @param otherOrders 瀹炰綋瀵硅薄
+ * @return Integer
+ */
+ Integer create(OtherOrders otherOrders);
+
+ /**
+ * 涓婚敭鍒犻櫎
+ *
+ * @param id 涓婚敭
+ */
+ void deleteById(Integer id);
+
+ /**
+ * 鍒犻櫎
+ *
+ * @param otherOrders 瀹炰綋瀵硅薄
+ */
+ void delete(OtherOrders otherOrders);
+
+ /**
+ * 鎵归噺涓婚敭鍒犻櫎
+ *
+ * @param ids 涓婚敭闆�
+ */
+ void deleteByIdInBatch(List<Integer> ids);
+
+ /**
+ * 涓婚敭鏇存柊
+ *
+ * @param otherOrders 瀹炰綋瀵硅薄
+ */
+ void updateById(OtherOrders otherOrders);
+
+ /**
+ * 鎵归噺涓婚敭鏇存柊
+ *
+ * @param otherOrdersList 瀹炰綋闆�
+ */
+ void updateByIdInBatch(List<OtherOrders> otherOrdersList);
+
+ /**
+ * 涓婚敭鏌ヨ
+ *
+ * @param id 涓婚敭
+ * @return OtherOrders
+ */
+ OtherOrders findById(Integer id);
+
+ /**
+ * 鏉′欢鏌ヨ鍗曟潯璁板綍
+ *
+ * @param otherOrders 瀹炰綋瀵硅薄
+ * @return OtherOrders
+ */
+ OtherOrders findOne(OtherOrders otherOrders);
+
+ /**
+ * 鏉′欢鏌ヨ
+ *
+ * @param otherOrders 瀹炰綋瀵硅薄
+ * @return List<OtherOrders>
+ */
+ List<OtherOrders> findList(OtherOrders otherOrders);
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ *
+ * @param pageWrap 鍒嗛〉瀵硅薄
+ * @return PageData<OtherOrders>
+ */
+ PageData<OtherOrders> findPage(PageWrap<OtherOrders> pageWrap);
+
+ /**
+ * 鏉′欢缁熻
+ *
+ * @param otherOrders 瀹炰綋瀵硅薄
+ * @return long
+ */
+ long count(OtherOrders otherOrders);
+}
diff --git a/server/services/src/main/java/com/doumee/service/business/RevenueService.java b/server/services/src/main/java/com/doumee/service/business/RevenueService.java
index 48653ec..de5f4ce 100644
--- a/server/services/src/main/java/com/doumee/service/business/RevenueService.java
+++ b/server/services/src/main/java/com/doumee/service/business/RevenueService.java
@@ -3,6 +3,7 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.Revenue;
+import com.doumee.dao.vo.RevenueStatisticsVO;
import java.util.List;
@@ -96,4 +97,20 @@
*/
long count(Revenue revenue);
+ /**
+ * 闂ㄥ簵鏀剁泭缁熻
+ *
+ * @param shopId 闂ㄥ簵涓婚敭
+ * @return 鏀剁泭缁熻
+ */
+ RevenueStatisticsVO getShopRevenueStatistics(Integer shopId);
+
+ /**
+ * 鍙告満鏀剁泭缁熻
+ *
+ * @param memberId 浼氬憳涓婚敭
+ * @return 鏀剁泭缁熻
+ */
+ RevenueStatisticsVO getDriverRevenueStatistics(Integer memberId);
+
}
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 4bcdd40..2908a9e 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
@@ -6,6 +6,7 @@
import com.doumee.dao.business.model.Member;
import com.doumee.dao.dto.*;
import com.doumee.dao.vo.ShopLoginVO;
+import com.doumee.dao.vo.ShopCenterVO;
import com.doumee.dao.vo.ShopDetailVO;
import com.doumee.dao.vo.ShopNearbyVO;
import com.doumee.dao.vo.ShopWebDetailVO;
@@ -178,6 +179,13 @@
/**
+ * 鑾峰彇闂ㄥ簵鐧诲綍鍚庝俊鎭紙闂ㄥ簵涓績锛�
+ * @param shopId 闂ㄥ簵涓婚敭
+ * @return 闂ㄥ簵涓績淇℃伅
+ */
+ ShopCenterVO getShopCenterInfo(Integer shopId);
+
+ /**
* 闂ㄥ簵瀵嗙爜鐧诲綍
* @param dto 鐧诲綍璇锋眰
* @return 鐧诲綍缁撴灉
diff --git a/server/services/src/main/java/com/doumee/service/business/WithdrawalOrdersService.java b/server/services/src/main/java/com/doumee/service/business/WithdrawalOrdersService.java
index e8a5c6f..679f4b8 100644
--- a/server/services/src/main/java/com/doumee/service/business/WithdrawalOrdersService.java
+++ b/server/services/src/main/java/com/doumee/service/business/WithdrawalOrdersService.java
@@ -4,6 +4,7 @@
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.WithdrawalOrders;
import com.doumee.dao.dto.WithdrawalApproveDTO;
+import com.doumee.dao.dto.WithdrawalDTO;
import java.util.List;
@@ -112,4 +113,20 @@
*/
void approve(WithdrawalApproveDTO dto);
+ /**
+ * 鍙告満鎻愮幇鐢宠
+ *
+ * @param dto 鎻愮幇鍙傛暟
+ * @param memberId 浼氬憳涓婚敭
+ */
+ void applyDriverWithdrawal(WithdrawalDTO dto, Integer memberId);
+
+ /**
+ * 闂ㄥ簵鎻愮幇鐢宠
+ *
+ * @param dto 鎻愮幇鍙傛暟
+ * @param shopId 闂ㄥ簵涓婚敭
+ */
+ void applyShopWithdrawal(WithdrawalDTO dto, Integer shopId);
+
}
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/BannerServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/BannerServiceImpl.java
index fa3a3e6..0cb5720 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/BannerServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/BannerServiceImpl.java
@@ -228,7 +228,7 @@
}
private String getBannerPath() {
- return systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.RESOURCE_PATH).getCode()
+ return systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+ systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.BANNER_FILES).getCode();
}
}
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
index 7208a38..46ee50f 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
@@ -139,7 +139,7 @@
throw new BusinessException(ResponseStatus.DATA_EMPTY);
}
if(StringUtils.isNotBlank(category.getIcon())){
- String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode()
+ String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
+systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.CATEGORY_FILES).getCode();
category.setIconFull(path + category.getIcon());
}
@@ -208,7 +208,7 @@
queryWrapper.orderByAsc(Category::getSortnum);
PageData<Category> result =PageData.from(categoryMapper.selectJoinPage(page, Category.class,queryWrapper));
if(result!=null && result.getRecords()!=null){
- String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode()
+ String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
+systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.CATEGORY_FILES).getCode();
for(Category cate : result.getRecords()){
try {
@@ -236,7 +236,7 @@
.orderByAsc(Category::getSortnum)
);
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(categoryList)){
- String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode()
+ String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
+systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.CATEGORY_FILES).getCode();
for (Category category:categoryList) {
if(StringUtils.isNotBlank(category.getIcon())){
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 796cf5e..11ec88f 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
@@ -555,7 +555,7 @@
// 鎷兼帴鍥剧墖鍓嶇紑
String imgPrefix = "";
try {
- imgPrefix = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.RESOURCE_PATH).getCode()
+ imgPrefix = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+ systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.DRIVER_FILES).getCode();
} catch (Exception e) {
// 鏈厤缃椂蹇界暐
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/IdentityInfoServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/IdentityInfoServiceImpl.java
deleted file mode 100644
index 4aea0ff..0000000
--- a/server/services/src/main/java/com/doumee/service/business/impl/IdentityInfoServiceImpl.java
+++ /dev/null
@@ -1,470 +0,0 @@
-package com.doumee.service.business.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.doumee.biz.system.SystemDictDataBiz;
-import com.doumee.config.wx.SendWxMessage;
-import com.doumee.core.annotation.excel.ExcelColumn;
-import com.doumee.core.constants.Constants;
-import com.doumee.core.constants.ResponseStatus;
-import com.doumee.core.exception.BusinessException;
-import com.doumee.core.model.LoginUserInfo;
-import com.doumee.core.model.PageData;
-import com.doumee.core.model.PageWrap;
-import com.doumee.core.utils.Utils;
-import com.doumee.dao.business.CategoryMapper;
-import com.doumee.dao.business.IdentityInfoMapper;
-import com.doumee.dao.business.MemberMapper;
-import com.doumee.dao.business.model.IdentityInfo;
-import com.doumee.dao.business.model.Member;
-import com.doumee.dao.dto.AuditDTO;
-import com.doumee.dao.system.model.SystemUser;
-import com.doumee.service.business.AliSmsService;
-import com.doumee.service.business.IdentityInfoService;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.github.yulichang.wrapper.MPJLambdaWrapper;
-import io.swagger.annotations.ApiModelProperty;
-import me.chanjar.weixin.common.error.WxErrorException;
-import nonapi.io.github.classgraph.json.Id;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.shiro.SecurityUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-
-/**
- * 浼氬憳韬唤璁よ瘉淇℃伅琛⊿ervice瀹炵幇
- * @author 姹熻箘韫�
- * @date 2025/07/09 12:00
- */
-@Service
-public class IdentityInfoServiceImpl implements IdentityInfoService {
-
- @Autowired
- private IdentityInfoMapper identityInfoMapper;
- @Autowired
- private MemberMapper memberMapper;
- @Autowired
- private AliSmsService aliSmsService;
- @Autowired
- private SystemDictDataBiz systemDictDataBiz;
- @Autowired
- private CategoryMapper categoryMapper;
-
- @Override
- @Transactional(rollbackFor = {BusinessException.class,Exception.class})
- public Integer create(IdentityInfo identityInfo) {
- if(Objects.isNull(identityInfo)
- || Objects.isNull(identityInfo.getType())
- || Objects.isNull(identityInfo.getMemberId())
- || Objects.isNull(identityInfo.getAuthType())
- || StringUtils.isEmpty(identityInfo.getLinkName())
- || StringUtils.isEmpty(identityInfo.getTelephone())
- || StringUtils.isEmpty(identityInfo.getLocation())
- || StringUtils.isEmpty(identityInfo.getImg1())
- || Objects.isNull(identityInfo.getLat())
- || Objects.isNull(identityInfo.getLgt())
- || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ONE) && StringUtils.isEmpty(identityInfo.getCompanyName()))
- || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ZERO) && StringUtils.isEmpty(identityInfo.getImg2()))
- || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ONE) && Constants.equalsInteger(identityInfo.getType(),Constants.ONE) && StringUtils.isEmpty(identityInfo.getImg2()))
- || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ONE) && Constants.equalsInteger(identityInfo.getType(),Constants.TWO) && (StringUtils.isEmpty(identityInfo.getImg2())||StringUtils.isEmpty(identityInfo.getImg3())))
- ){
- throw new BusinessException(ResponseStatus.BAD_REQUEST);
- }
- IdentityInfo model = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda()
- .eq(IdentityInfo::getMemberId,identityInfo.getMemberId())
- .eq(IdentityInfo::getType,identityInfo.getType())
- .last("limit 1")
- );
- if(Objects.nonNull(model)){
- identityInfo.setId(model.getId());
- this.updateById(identityInfo);
- return identityInfo.getId();
- }
-
-
- //鏌ヨ鐢ㄦ埛鏄惁宸插瓨鍦ㄥ綋鍓嶈韩浠�
- if(identityInfoMapper.selectCount(new QueryWrapper<IdentityInfo>().lambda()
- .eq(IdentityInfo::getDeleted,Constants.ZERO)
- .eq(IdentityInfo::getMemberId,identityInfo.getMemberId())
- .eq(IdentityInfo::getType,identityInfo.getType()))>Constants.ZERO){
- throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"宸插瓨鍦ㄨ韬唤璇峰埛鏂版煡鐪嬶紒");
- };
- identityInfo.setDeleted(Constants.ZERO);
- identityInfo.setCreateTime(new Date());
- identityInfo.setUpdateTime(identityInfo.getCreateTime());
- identityInfo.setAuditStatus(Constants.ONE);
- identityInfoMapper.insert(identityInfo);
-
- return identityInfo.getId();
- }
-
- @Override
- public void deleteById(Integer id) {
- identityInfoMapper.deleteById(id);
- }
-
- @Override
- public void delete(IdentityInfo identityInfo) {
- UpdateWrapper<IdentityInfo> deleteWrapper = new UpdateWrapper<>(identityInfo);
- identityInfoMapper.delete(deleteWrapper);
- }
-
- @Override
- public void deleteByIdInBatch(List<Integer> ids) {
- if (CollectionUtils.isEmpty(ids)) {
- return;
- }
- identityInfoMapper.deleteBatchIds(ids);
- }
-
- @Override
- @Transactional(rollbackFor = {BusinessException.class,Exception.class})
- public void updateById(IdentityInfo identityInfo) {
- if(Objects.isNull(identityInfo)
- || Objects.isNull(identityInfo.getId())
- || Objects.isNull(identityInfo.getType())
- || Objects.isNull(identityInfo.getMemberId())
- || Objects.isNull(identityInfo.getAuthType())
- || StringUtils.isEmpty(identityInfo.getLinkName())
- || StringUtils.isEmpty(identityInfo.getTelephone())
- || StringUtils.isEmpty(identityInfo.getLocation())
- || StringUtils.isEmpty(identityInfo.getImg1())
- || Objects.isNull(identityInfo.getLat())
- || Objects.isNull(identityInfo.getLgt())
- || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ONE) && StringUtils.isEmpty(identityInfo.getCompanyName()))
- || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ZERO) && StringUtils.isEmpty(identityInfo.getImg2()))
- || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ONE) && Constants.equalsInteger(identityInfo.getType(),Constants.ONE) && StringUtils.isEmpty(identityInfo.getImg2()))
- || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ONE) && Constants.equalsInteger(identityInfo.getType(),Constants.TWO) && (StringUtils.isEmpty(identityInfo.getImg2())||StringUtils.isEmpty(identityInfo.getImg3())))
- ){
- throw new BusinessException(ResponseStatus.BAD_REQUEST);
- }
- IdentityInfo model = identityInfoMapper.selectById(identityInfo.getId());
- if (Objects.isNull(model)){
- throw new BusinessException(ResponseStatus.DATA_EMPTY);
- }
- if(!Constants.equalsInteger(model.getMemberId(),identityInfo.getMemberId())){
- throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勬暟鎹棤娉曡繘琛岃鎿嶄綔");
- }
- if(!Constants.equalsInteger(model.getAuditStatus(),Constants.THREE)){
- throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠鐘舵�佹棤娉曡繘琛岃鎿嶄綔");
- }
- identityInfo.setAuditRemark("");
- identityInfo.setUpdateTime(new Date());
- identityInfo.setAuditStatus(Constants.ONE);
- identityInfoMapper.updateById(identityInfo);
- }
-
-
- @Override
- @Transactional(rollbackFor = {BusinessException.class,Exception.class})
- public void updateLocation(IdentityInfo identityInfo) {
- if(Objects.isNull(identityInfo)
- || Objects.isNull(identityInfo.getId())
- || Objects.isNull(identityInfo.getMemberId())
- || StringUtils.isEmpty(identityInfo.getLocation())
- || Objects.isNull(identityInfo.getLat())
- || Objects.isNull(identityInfo.getLgt())
- ){
- throw new BusinessException(ResponseStatus.BAD_REQUEST);
- }
- IdentityInfo model = identityInfoMapper.selectById(identityInfo.getId());
- if (Objects.isNull(model)){
- throw new BusinessException(ResponseStatus.DATA_EMPTY);
- }
- if(!Constants.equalsInteger(model.getMemberId(),identityInfo.getMemberId())){
- throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勬暟鎹棤娉曡繘琛岃鎿嶄綔");
- }
- if(!Constants.equalsInteger(model.getAuditStatus(),Constants.TWO)){
- throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠鐘舵�佹棤娉曡繘琛岃鎿嶄綔");
- }
- model.setLocation(identityInfo.getLocation());
- model.setLat(identityInfo.getLat());
- model.setLgt(identityInfo.getLgt());
- model.setUpdateTime(new Date());
- identityInfoMapper.updateById(model);
- }
-
- @Override
- public void updateByIdInBatch(List<IdentityInfo> identityInfos) {
- if (CollectionUtils.isEmpty(identityInfos)) {
- return;
- }
- for (IdentityInfo identityInfo: identityInfos) {
- this.updateById(identityInfo);
- }
- }
-
- @Override
- public IdentityInfo findById(Integer id) {
- IdentityInfo model = identityInfoMapper.selectById(id);
- String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode()
- +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.INENTITY_FILES).getCode();
- model.setImgList(new ArrayList<>());
- if(StringUtils.isNotBlank(model.getImg1())){
- model.getImgList().add(path + model.getImg1());
- }
- if(StringUtils.isNotBlank(model.getImg2())){
- model.getImgList().add(path + model.getImg2());
- }
- if(StringUtils.isNotBlank(model.getImg3())) {
- model.getImgList().add(path + model.getImg3());
- }
- if(StringUtils.isNotBlank(model.getImg4())){
- model.getImgList().add(path + model.getImg4());
- }
- return model;
- }
-
-
- @Override
- public IdentityInfo findByMemberType(Integer type,Integer memberId){
- IdentityInfo model = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda()
- .eq(IdentityInfo::getMemberId,memberId).eq(IdentityInfo::getType,type));
- if(Objects.nonNull(model)){
- String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode()
- +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.INENTITY_FILES).getCode();
- model.setImgList(new ArrayList<>());
- if(StringUtils.isNotBlank(model.getImg1())){
- model.getImgList().add(path + model.getImg1());
- }
- if(StringUtils.isNotBlank(model.getImg2())){
- model.getImgList().add(path + model.getImg2());
- }
- if(StringUtils.isNotBlank(model.getImg3())) {
- model.getImgList().add(path + model.getImg3());
- }
- if(StringUtils.isNotBlank(model.getImg4())){
- model.getImgList().add(path + model.getImg4());
- }
- }else{
- model = new IdentityInfo();
- }
- return model;
- }
-
-
-
- @Override
- public IdentityInfo findOne(IdentityInfo identityInfo) {
- QueryWrapper<IdentityInfo> wrapper = new QueryWrapper<>(identityInfo);
- return identityInfoMapper.selectOne(wrapper);
- }
-
- @Override
- public List<IdentityInfo> findList(IdentityInfo identityInfo) {
- QueryWrapper<IdentityInfo> wrapper = new QueryWrapper<>(identityInfo);
- return identityInfoMapper.selectList(wrapper);
- }
-
- @Override
- public List<IdentityInfo> findMemberList(IdentityInfo identityInfo) {
- if(identityInfo.getMemberId() == null){
- return new ArrayList<>();
- }
- Member member = memberMapper.selectById(identityInfo.getMemberId());
- if(identityInfo == null || Constants.equalsInteger(member.getDeleted(),Constants.ONE)){
- return new ArrayList<>();
- }
- List<IdentityInfo> list = new ArrayList<>();
-
- String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode()
- +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.INENTITY_FILES).getCode();
- //绫诲瀷:0=鐢ㄥ伐韬唤锛�1=璐ц繍韬唤锛�2=渚涢韬唤锛�
- addMemberModelByType(member.getId(),Constants.ZERO,list,path);
- addMemberModelByType(member.getId(),Constants.ONE,list,path);
- addMemberModelByType(member.getId(),Constants.TWO,list,path);
-
- return list;
- }
-
- private void addMemberModelByType(Integer id,Integer type, List<IdentityInfo> list,String path) {
- MPJLambdaWrapper<IdentityInfo> wrapper = new MPJLambdaWrapper<IdentityInfo>()
- .selectAll(IdentityInfo.class)
- .selectAs(SystemUser::getUsername,IdentityInfo::getEditorName)
- .leftJoin(SystemUser.class,SystemUser::getId,IdentityInfo::getUpdateUser)
- .orderByDesc(IdentityInfo::getCreateTime )//鍙栨渶鏂颁竴鏉�
- .eq(IdentityInfo::getMemberId,id)
- .eq(IdentityInfo::getType,type)
- .eq(IdentityInfo::getDeleted,Constants.ZERO)
- .last("limit 1");
- IdentityInfo model = identityInfoMapper.selectJoinOne(IdentityInfo.class,wrapper);
- if(model !=null){
- initModelImage(model,path);
- list.add(model);
- }
- }
-
- @Override
- public PageData<IdentityInfo> findPage(PageWrap<IdentityInfo> pageWrap) {
- IPage<IdentityInfo> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
- MPJLambdaWrapper<IdentityInfo> queryWrapper = new MPJLambdaWrapper<>();
- Utils.MP.blankToNull(pageWrap.getModel());
- pageWrap.getModel().setDeleted(Constants.ZERO);
- queryWrapper.selectAll(IdentityInfo.class)
- .selectAs(Member::getNickName,IdentityInfo::getMemberName)
- .selectAs(Member::getOpenid,IdentityInfo::getOpenid)
- .selectAs(SystemUser::getUsername,IdentityInfo::getEditorName)
- .leftJoin(Member.class,Member::getId,IdentityInfo::getMemberId)
- .leftJoin(SystemUser.class,SystemUser::getId,IdentityInfo::getUpdateUser);
- if (pageWrap.getModel().getId() != null) {
- queryWrapper.eq(IdentityInfo::getId, pageWrap.getModel().getId());
- }
- if (pageWrap.getModel().getDeleted() != null) {
- queryWrapper.eq(IdentityInfo::getDeleted, pageWrap.getModel().getDeleted());
- }
- if (pageWrap.getModel().getCreateUser() != null) {
- queryWrapper.eq(IdentityInfo::getCreateUser, pageWrap.getModel().getCreateUser());
- }
- if (pageWrap.getModel().getCreateTime() != null) {
- queryWrapper.ge(IdentityInfo::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime()));
- queryWrapper.le(IdentityInfo::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime()));
- }
- if (pageWrap.getModel().getUpdateUser() != null) {
- queryWrapper.eq(IdentityInfo::getUpdateUser, pageWrap.getModel().getUpdateUser());
- }
- if (pageWrap.getModel().getUpdateTime() != null) {
- queryWrapper.ge(IdentityInfo::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime()));
- queryWrapper.le(IdentityInfo::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime()));
- }
- if (pageWrap.getModel().getRemark() != null) {
- queryWrapper.like(IdentityInfo::getRemark, pageWrap.getModel().getRemark());
- }
- if (pageWrap.getModel().getType() != null) {
- queryWrapper.eq(IdentityInfo::getType, pageWrap.getModel().getType());
- }
- if (pageWrap.getModel().getMemberId() != null) {
- queryWrapper.eq(IdentityInfo::getMemberId, pageWrap.getModel().getMemberId());
- }
- if (pageWrap.getModel().getAuthType() != null) {
- queryWrapper.eq(IdentityInfo::getAuthType, pageWrap.getModel().getAuthType());
- }
- if (pageWrap.getModel().getLinkName() != null) {
- queryWrapper.like(IdentityInfo::getLinkName, pageWrap.getModel().getLinkName());
- }
- if (pageWrap.getModel().getTelephone() != null) {
- queryWrapper.like(IdentityInfo::getTelephone, pageWrap.getModel().getTelephone());
- }
- if (pageWrap.getModel().getLocation() != null) {
- queryWrapper.like(IdentityInfo::getLocation, pageWrap.getModel().getLocation());
- }
- if (pageWrap.getModel().getCompanyName() != null) {
- queryWrapper.like(IdentityInfo::getCompanyName, pageWrap.getModel().getCompanyName());
- }
- if (pageWrap.getModel().getLat() != null) {
- queryWrapper.eq(IdentityInfo::getLat, pageWrap.getModel().getLat());
- }
- if (pageWrap.getModel().getLgt() != null) {
- queryWrapper.eq(IdentityInfo::getLgt, pageWrap.getModel().getLgt());
- }
- if (pageWrap.getModel().getAuditStatus() != null) {
- queryWrapper.eq(IdentityInfo::getAuditStatus, pageWrap.getModel().getAuditStatus());
- }
- if (pageWrap.getModel().getAuditTime() != null) {
- queryWrapper.ge(IdentityInfo::getAuditTime, Utils.Date.getStart(pageWrap.getModel().getAuditTime()));
- queryWrapper.le(IdentityInfo::getAuditTime, Utils.Date.getEnd(pageWrap.getModel().getAuditTime()));
- }
- if (pageWrap.getModel().getAuditRemark() != null) {
- queryWrapper.like(IdentityInfo::getAuditRemark, pageWrap.getModel().getAuditRemark());
- }
- queryWrapper.orderByAsc(IdentityInfo::getAuditStatus );
- queryWrapper.orderByDesc(IdentityInfo::getCreateTime );
- PageData<IdentityInfo> result = PageData.from(identityInfoMapper.selectJoinPage(page,IdentityInfo.class, queryWrapper));
- if(result!=null && result.getRecords()!=null){
- String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode()
- +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.INENTITY_FILES).getCode();
- for (IdentityInfo model :result.getRecords()){
- initModelImage(model,path);
- }
- }
-
- return result;
-
- }
-
- private void initModelImage(IdentityInfo model, String path) {
- model.setImgList(new ArrayList<>());
- if(StringUtils.isNotBlank(model.getImg1())){
- model.setImg1(path+model.getImg1());
- model.getImgList().add(model.getImg1());
- }
- if(StringUtils.isNotBlank(model.getImg2())){
- model.setImg2(path+model.getImg2());
- model.getImgList().add(model.getImg2());
- }
- if(StringUtils.isNotBlank(model.getImg3())) {
- model.setImg3(path + model.getImg3());
- model.getImgList().add(model.getImg3());
- }
- if(StringUtils.isNotBlank(model.getImg4())){
- model.setImg4(path+model.getImg4());
- model.getImgList().add(model.getImg4());
- }
- }
-
- @Override
- public long count(IdentityInfo identityInfo) {
- QueryWrapper<IdentityInfo> wrapper = new QueryWrapper<>(identityInfo);
- return identityInfoMapper.selectCount(wrapper);
- }
-
-
- @Autowired
- private SendWxMessage sendWxMessage;
-
- @Override
- @Transactional(rollbackFor = {BusinessException.class,Exception.class})
- public void audit(AuditDTO auditDTO){
- if(Objects.isNull(auditDTO)
- || Objects.isNull(auditDTO.getId())
- || Objects.isNull(auditDTO.getAuditStatus())
- || auditDTO.getAuditStatus()<2
- || auditDTO.getAuditStatus()>3){
- throw new BusinessException(ResponseStatus.BAD_REQUEST);
- }
- LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
- IdentityInfo identityInfo = identityInfoMapper.selectById(auditDTO.getId());
- if(Objects.isNull(identityInfo)){
- throw new BusinessException(ResponseStatus.DATA_EMPTY);
- }
- if(!Constants.equalsInteger(identityInfo.getAuditStatus(),Constants.ONE)){
- throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"宸插鎵癸紝璇峰嬁閲嶅鎿嶄綔");
- }
- Member member = memberMapper.selectById(identityInfo.getMemberId());
- if(Objects.isNull(member)){
- throw new BusinessException(ResponseStatus.DATA_EMPTY);
- }
- identityInfo.setAuditStatus(auditDTO.getAuditStatus());
- identityInfo.setAuditRemark(auditDTO.getAuditRemark());
- identityInfo.setAuditTime(new Date());
- Date date = new Date();
- identityInfoMapper.update(new UpdateWrapper<IdentityInfo>().lambda()
- .set(IdentityInfo::getAuditStatus, auditDTO.getAuditStatus() )
- .set(StringUtils.isNotBlank(auditDTO.getAuditRemark()),IdentityInfo::getAuditRemark,auditDTO.getAuditRemark())
- .set(IdentityInfo::getAuditTime,date)
- .set(IdentityInfo::getUpdateUser,user.getId())
- .set(IdentityInfo::getUpdateTime,date)
- .eq(IdentityInfo::getId,identityInfo.getId())
- );
-
- memberMapper.update(new UpdateWrapper<Member>().lambda()
- .set(Member::getUpdateUser,user.getId())
- .set(Member::getUpdateTime,date)
- .eq(Member::getId,identityInfo.getMemberId())
- );
-
- //鍙戦�佸井淇¢�氱煡
- if(StringUtils.isNotBlank(member.getOpenid())){
- sendWxMessage.identityInfoMessage(member.getOpenid(),identityInfo);
- }
-
- }
-}
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index 29ef2ca..5c4f12d 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -12,12 +12,12 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Utils;
-import com.doumee.dao.business.IdentityInfoMapper;
import com.doumee.dao.business.MemberMapper;
+import com.doumee.dao.business.OrdersMapper;
import com.doumee.dao.business.ShopInfoMapper;
import com.doumee.dao.business.SmsrecordMapper;
-import com.doumee.dao.business.model.IdentityInfo;
import com.doumee.dao.business.model.Member;
+import com.doumee.dao.business.model.Orders;
import com.doumee.dao.business.model.ShopInfo;
import com.doumee.dao.business.model.MemberRevenue;
import com.doumee.dao.business.model.Smsrecord;
@@ -27,6 +27,7 @@
import com.doumee.dao.vo.AccountResponse;
import com.doumee.dao.vo.MemberDetailVO;
import com.doumee.dao.vo.MemberListVO;
+import com.doumee.dao.vo.PlatformAboutVO;
import com.doumee.dao.vo.UserCenterVO;
import com.doumee.service.business.MemberService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -45,6 +46,7 @@
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
+import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@@ -64,9 +66,6 @@
private MemberMapper memberMapper;
@Autowired
- private IdentityInfoMapper identityInfoMapper;
-
- @Autowired
private SmsrecordMapper smsrecordMapper;
@Autowired
@@ -80,6 +79,9 @@
@Autowired
private ShopInfoMapper shopInfoMapper;
+
+ @Autowired
+ private OrdersMapper ordersMapper;
@Override
@@ -129,8 +131,8 @@
throw new BusinessException(ResponseStatus.DATA_EMPTY);
}
if(StringUtils.isNotBlank(member.getCoverImage())){
- String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode()
- +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MEMBER_FILES).getCode();
+ String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
+ +systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILES).getCode();
member.setFullCoverImage(path + member.getCoverImage());
}
return member;
@@ -323,8 +325,7 @@
member.setDeleted(Constants.ZERO);
member.setOpenid(wxPhoneRequest.getOpenid());
member.setTelephone(mobile);
- member.setNickName(mobile);
-// member.setCoverImage("1.png");
+ member.setNickName(mobile.substring(0, 3) + "****" + mobile.substring(7));
member.setAmount(Constants.ZERO.longValue());
member.setTotalAmount(Constants.ZERO.longValue());
member.setStatus(Constants.ZERO);
@@ -385,75 +386,51 @@
}
-// @Override
-// public void editUseIdentity(Member member){
-// if(Objects.isNull(member)
-// || Objects.isNull(member.getUseIdentity())){
-// throw new BusinessException(ResponseStatus.BAD_REQUEST);
-// }
-// if(Constants.equalsInteger(member.getUseIdentity(),Constants.ZERO)){
-// member.setUseIdentity(Constants.ZERO);
-// memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getUseIdentity,Constants.ZERO).eq(Member::getId,member.getId()));
-// }else{
-// if(identityInfoMapper.selectCount(new QueryWrapper<IdentityInfo>().lambda().eq(IdentityInfo::getDeleted,Constants.ZERO)
-// .eq(IdentityInfo::getMemberId,member.getId())
-// .eq(IdentityInfo::getAuditStatus,Constants.TWO))>Constants.ZERO){
-// memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getUseIdentity,Constants.ONE).eq(Member::getId,member.getId()));
-// }else{
-// throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠鏃犲彲鐢ㄦ帴鍗曡韩浠�!");
-// }
-// }
-// }
-
-
@Override
- public Member getMemberInfo(Integer memberId){
- Member member = this.findById(memberId);
+ public UserCenterVO getMemberInfo(Integer memberId){
+ Member member = memberMapper.selectById(memberId);
if(Objects.isNull(member)){
throw new BusinessException(ResponseStatus.DATA_EMPTY);
}
+ // 鐢ㄦ埛涓績鏁版嵁
+ UserCenterVO userCenterVO = new UserCenterVO();
+ userCenterVO.setNickName(member.getNickName());
+ userCenterVO.setName(member.getName());
+ userCenterVO.setTelephone(member.getTelephone());
+ userCenterVO.setCoverImage(member.getCoverImage());
if(StringUtils.isNotBlank(member.getCoverImage())){
- String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode()
- +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MEMBER_FILES).getCode();
- member.setFullCoverImage(path + member.getCoverImage());
+ String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
+ +systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILES).getCode();
+ userCenterVO.setFullCoverImage(path + member.getCoverImage());
}
-// UserCenterVO userCenterVO = new UserCenterVO();
-// userCenterVO.setReleaseTaskTotal(Constants.ZERO);
-// userCenterVO.setWaitReceiveTotal(Constants.ZERO);
-// userCenterVO.setDoingTotal(Constants.ZERO);
-// userCenterVO.setWaitCommentTotal(Constants.ZERO);
-// userCenterVO.setTaskingTotal(Constants.ZERO);
-// userCenterVO.setDoneTotal(Constants.ZERO);
-// userCenterVO.setReceiveTotal(Constants.ZERO);
-// List<Orders> releaseOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda().eq(Orders::getDeleted,Constants.ZERO)
-// .eq(Orders::getReleaseMemberId,member.getId()));
-// if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(releaseOrders)){
-// userCenterVO.setReleaseTaskTotal(releaseOrders.size());
-// userCenterVO.setWaitCommentTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.done.getKey())&&Constants.equalsInteger(i.getCommentStatus(),Constants.ZERO)).collect(Collectors.toList()).size());
-// userCenterVO.setDoingTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.doing.getKey())).collect(Collectors.toList()).size());
-// userCenterVO.setWaitReceiveTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.wait.getKey())).collect(Collectors.toList()).size());
-// }
-// List<Orders> acceptOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda().eq(Orders::getDeleted,Constants.ZERO).eq(Orders::getAcceptMemberId,member.getId()));
-// if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(acceptOrders)){
-// userCenterVO.setReceiveTotal(acceptOrders.size());
-// userCenterVO.setTaskingTotal(acceptOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.doing.getKey())).collect(Collectors.toList()).size());
-// userCenterVO.setDoneTotal(acceptOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.done.getKey())).collect(Collectors.toList()).size());
-// }
-// member.setUserCenterVO(userCenterVO);
- return member;
+ userCenterVO.setHasMessage(false);
+ // 寰呮敮浠樿鍗曟暟閲�
+ Long waitPayCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getMemberId, memberId)
+ .eq(Orders::getDeleted, Constants.ZERO)
+ .eq(Orders::getStatus, Constants.OrderStatus.waitPay.getStatus()));
+ userCenterVO.setWaitPayCount(waitPayCount.intValue());
+ // 寰呮敹璐ц鍗曟暟閲�
+ int[] waitReceiveStatuses = Constants.OrderCombinedStatus.waitReceive.getStatuses();
+ Long waitReceiveCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getMemberId, memberId)
+ .eq(Orders::getDeleted, Constants.ZERO)
+ .in(Orders::getStatus, Arrays.stream(waitReceiveStatuses).boxed().collect(Collectors.toList())));
+ userCenterVO.setWaitReceiveCount(waitReceiveCount.intValue());
+ return userCenterVO;
}
@Override
- public UserCenterVO getPlatformAboutUs(){
- UserCenterVO userCenterVO = new UserCenterVO();
- userCenterVO.setAboutUs(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ABOUT_US).getCode()));
- userCenterVO.setUserAgreement(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.USER_AGREEMENT).getCode()));
- userCenterVO.setPrivacyAgreement(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PRIVACY_AGREEMENT).getCode()));
- userCenterVO.setServerIntroduce(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SERVER_INTRODUCE).getCode()));
- return userCenterVO;
+ public PlatformAboutVO getPlatformAboutUs(){
+ PlatformAboutVO vo = new PlatformAboutVO();
+ vo.setAboutUs(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ABOUT_US).getCode()));
+ vo.setUserAgreement(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.USER_AGREEMENT).getCode()));
+ vo.setPrivacyAgreement(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PRIVACY_AGREEMENT).getCode()));
+ vo.setServerIntroduce(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SERVER_INTRODUCE).getCode()));
+ return vo;
}
@Override
@@ -543,8 +520,8 @@
detail.setArea(member.getArea());
detail.setAutoReceiveStatus(member.getAutoReceiveStatus());
if (StringUtils.isNotBlank(member.getCoverImage())) {
- String path = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.RESOURCE_PATH).getCode()
- + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.MEMBER_FILES).getCode();
+ String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+ + systemDictDataBiz.queryByCode(Constants.OSS, Constants.MEMBER_FILES).getCode();
detail.setFullCoverImage(path + member.getCoverImage());
}
return detail;
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 566ad1d..5224b0f 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
@@ -20,9 +20,11 @@
import com.doumee.dao.business.*;
import com.doumee.dao.business.model.*;
import com.doumee.dao.system.SystemUserMapper;
+import com.doumee.dao.system.model.SystemDictData;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.dao.dto.CalculateLocalPriceDTO;
import com.doumee.dao.dto.CalculateRemotePriceDTO;
+import com.doumee.dao.dto.CommentOrderDTO;
import com.doumee.dao.dto.CreateOrderDTO;
import com.doumee.dao.dto.DispatchDTO;
import com.doumee.dao.dto.MyOrderDTO;
@@ -30,6 +32,7 @@
import com.doumee.dao.vo.*;
import com.doumee.service.business.OrderLogService;
import com.doumee.service.business.OrdersService;
+import com.doumee.service.business.AreasService;
import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
import com.github.binarywang.wxpay.exception.WxPayException;
@@ -92,6 +95,15 @@
private OrdersRefundMapper ordersRefundMapper;
@Autowired
+ private OtherOrdersMapper otherOrdersMapper;
+
+ @Autowired
+ private OrderCommentMapper orderCommentMapper;
+
+ @Autowired
+ private RevenueMapper revenueMapper;
+
+ @Autowired
private WxMiniUtilService wxMiniUtilService;
@Autowired
@@ -107,6 +119,9 @@
@Autowired
private OperationConfigBiz operationConfigBiz;
+
+ @Autowired
+ private AreasService areasService;
@Override
public Integer create(Orders orders) {
@@ -1135,8 +1150,8 @@
private String getOrdersPrefix() {
try {
- return systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.RESOURCE_PATH).getCode()
- + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.ORDERS_FILES).getCode();
+ return systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+ + systemDictDataBiz.queryByCode(Constants.OSS, Constants.ORDERS_FILES).getCode();
} catch (Exception e) {
return "";
}
@@ -1307,6 +1322,102 @@
vo.setDetailList(buildDetailList(details));
// 閫炬湡淇℃伅锛堜粎寰呭彇浠剁姸鎬佽绠楋級
+ if (Integer.valueOf(Constants.OrderStatus.arrived.getStatus()).equals(o.getStatus())) {
+ OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(o, details);
+ vo.setOverdue(overdueInfo.getOverdue());
+ vo.setOverdueDays(overdueInfo.getOverdueDays());
+ vo.setOverdueFee(overdueInfo.getOverdueFee());
+ }
+ voList.add(vo);
+ }
+ }
+
+ IPage<MyOrderVO> vPage = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ PageData<MyOrderVO> pageData = PageData.from(vPage);
+ pageData.setRecords(voList);
+ pageData.setTotal(orderPage.getTotal());
+ pageData.setPage(orderPage.getCurrent());
+ pageData.setCapacity(orderPage.getSize());
+ return pageData;
+ }
+
+ @Override
+ public PageData<MyOrderVO> findShopOrderPage(PageWrap<MyOrderDTO> pageWrap, Integer shopId) {
+ MyOrderDTO model = pageWrap.getModel();
+ Integer status = model != null ? model.getStatus() : null;
+ Integer combinedStatus = model != null ? model.getCombinedStatus() : null;
+
+ // 瑙f瀽鍚堝苟鐘舵�佷负鍏蜂綋鐘舵�佸垪琛�
+ List<Integer> statusList = null;
+ if (combinedStatus != null) {
+ Constants.OrderCombinedStatus combined = Constants.OrderCombinedStatus.getByKey(combinedStatus);
+ if (combined != null) {
+ statusList = new ArrayList<>();
+ for (int s : combined.getStatuses()) {
+ statusList.add(s);
+ }
+ }
+ }
+
+ IPage<Orders> p = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ MPJLambdaWrapper<Orders> wrapper = new MPJLambdaWrapper<Orders>()
+ .selectAll(Orders.class)
+ .select("s1.name", Orders::getDepositShopName)
+ .select("s1.link_name", Orders::getDepositShopLinkName)
+ .select("s1.link_phone", Orders::getDepositShopLinkPhone)
+ .select("s2.name", Orders::getTakeShopName)
+ .select("s2.address", Orders::getTakeShopAddress)
+ .leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID")
+ .leftJoin("shop_info s2 on s2.id = t.TAKE_SHOP_ID")
+ .eq(Orders::getPayStatus, Constants.ONE)
+ .and(w -> w.eq(Orders::getDepositShopId, shopId).or().eq(Orders::getTakeShopId, shopId))
+ .eq(status != null, Orders::getStatus, status)
+ .in(statusList != null, Orders::getStatus, statusList)
+ .orderByDesc(Orders::getCreateTime);
+
+ IPage<Orders> orderPage = ordersMapper.selectJoinPage(p, Orders.class, wrapper);
+ List<MyOrderVO> voList = new ArrayList<>();
+ if (orderPage != null && orderPage.getRecords() != null) {
+ for (Orders o : orderPage.getRecords()) {
+ MyOrderVO vo = new MyOrderVO();
+ vo.setId(o.getId());
+ vo.setCode(o.getCode());
+ vo.setType(o.getType());
+ vo.setStatus(o.getStatus());
+ vo.setCreateTime(o.getCreateTime());
+ vo.setExpectedTakeTime(o.getExpectedTakeTime());
+
+ vo.setDepositShopName(o.getDepositShopName());
+ vo.setDepositShopLinkName(o.getDepositShopLinkName());
+ vo.setDepositShopPhone(o.getDepositShopLinkPhone());
+
+ // 闂ㄥ簵瑙掕壊锛氬瓨浠堕棬搴�=1锛屽彇浠堕棬搴�=2
+ if (Constants.equalsInteger(o.getDepositShopId(), shopId)) {
+ vo.setShopRole(Constants.ONE);
+ } else if (Constants.equalsInteger(o.getTakeShopId(), shopId)) {
+ vo.setShopRole(Constants.TWO);
+ }
+
+ if (o.getTakeShopId() != null) {
+ vo.setTakeShopName(o.getTakeShopName());
+ vo.setTakeShopAddress(o.getTakeShopAddress());
+ } else {
+ vo.setTakeLocation(o.getTakeLocation());
+ vo.setTakeLocationRemark(o.getTakeLocationRemark());
+ }
+
+ vo.setTakeUser(o.getTakeUser());
+ vo.setTakePhone(o.getTakePhone());
+ vo.setDeclaredFee(o.getDeclaredFee());
+ vo.setEstimatedAmount(o.getEstimatedAmount());
+
+ List<OrdersDetail> details = ordersDetailMapper.selectList(
+ new QueryWrapper<OrdersDetail>().lambda()
+ .eq(OrdersDetail::getOrderId, o.getId())
+ .eq(OrdersDetail::getDeleted, Constants.ZERO));
+
+ vo.setDetailList(buildDetailList(details));
+
if (Integer.valueOf(Constants.OrderStatus.arrived.getStatus()).equals(o.getStatus())) {
OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(o, details);
vo.setOverdue(overdueInfo.getOverdue());
@@ -1607,6 +1718,443 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
+ public PayResponse payOverdueFee(Integer orderId, Integer memberId) {
+ // 1. 鏌ヨ瀵勫瓨璁㈠崟
+ Orders order = ordersMapper.selectOne(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getId, orderId)
+ .eq(Orders::getMemberId, memberId)
+ .eq(Orders::getDeleted, Constants.ZERO));
+ if (order == null) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "璁㈠崟涓嶅瓨鍦�");
+ }
+ // 2. 鏍¢獙鐘舵�侊細寰呭彇浠�(5) + 閫炬湡(1)
+ if (!Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.arrived.getStatus())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠璁㈠崟鐘舵�佷笉鏀寔閫炬湡鏀粯");
+ }
+ if (!Constants.equalsInteger(order.getOverdueStatus(), Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇ヨ鍗曚笉瀛樺湪閫炬湡璐圭敤");
+ }
+ if (order.getOverdueAmount() == null || order.getOverdueAmount() <= 0) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "閫炬湡璐圭敤寮傚父锛屾棤娉曞彂璧锋敮浠�");
+ }
+ // 3. 鏌ヨ浼氬憳
+ Member member = memberMapper.selectById(memberId);
+ if (member == null || StringUtils.isBlank(member.getOpenid())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鐢ㄦ埛淇℃伅寮傚父锛屾棤娉曞彂璧锋敮浠�");
+ }
+ // 4. 鍒涘缓閫炬湡璐圭敤璁㈠崟
+ String outTradeNo = generateOrderTradeNo();
+ Date now = new Date();
+ OtherOrders otherOrders = new OtherOrders();
+ otherOrders.setType(Constants.TWO); // 2=閫炬湡璐圭敤璁㈠崟
+ otherOrders.setMemberId(memberId);
+ otherOrders.setOrderId(orderId);
+ otherOrders.setPayAccount(order.getOverdueAmount());
+ otherOrders.setPayStatus(Constants.ZERO);
+ otherOrders.setCode("OD" + new java.text.SimpleDateFormat("yyyyMMddHHmmss").format(now) + orderId);
+ otherOrders.setOutTradeNo(outTradeNo);
+ otherOrders.setDeleted(Constants.ZERO);
+ otherOrders.setCreateTime(now);
+ otherOrdersMapper.insert(otherOrders);
+
+ // 5. 鍞よ捣寰俊鏀粯
+ return wxPayForOtherOrder(otherOrders, member.getOpenid(), Constants.OrdersAttach.OVERDUE_FEE);
+ }
+
+ @Override
+ @Transactional(rollbackFor = {Exception.class, BusinessException.class})
+ public void handleOverdueFeePayNotify(String outTradeNo, String wxTradeNo) {
+ // 1. 鏌ユ壘閫炬湡璐圭敤璁㈠崟
+ OtherOrders otherOrders = otherOrdersMapper.selectOne(new QueryWrapper<OtherOrders>().lambda()
+ .eq(OtherOrders::getOutTradeNo, outTradeNo)
+ .eq(OtherOrders::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ if (otherOrders == null) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "閫炬湡璐圭敤璁㈠崟涓嶅瓨鍦�: " + outTradeNo);
+ }
+ // 2. 骞傜瓑锛氬凡鏀粯鍒欒烦杩�
+ if (Constants.equalsInteger(otherOrders.getPayStatus(), Constants.ONE)) {
+ return;
+ }
+ Date now = new Date();
+ // 3. 鏇存柊閫炬湡璐圭敤璁㈠崟鐘舵��
+ otherOrders.setPayStatus(Constants.ONE);
+ otherOrders.setPayTime(now);
+ otherOrders.setWxExternalNo(wxTradeNo);
+ otherOrders.setUpdateTime(now);
+ otherOrdersMapper.updateById(otherOrders);
+
+ // 4. 鏇存柊瀵勫瓨璁㈠崟閫炬湡鐘舵�佷负宸叉敮浠�(2)锛屾洿鏂版�婚噾棰濓紝閲嶇畻涓夋柟鏀剁泭
+ if (otherOrders.getOrderId() != null) {
+ Orders order = ordersMapper.selectById(otherOrders.getOrderId());
+ if (order != null) {
+ order.setOverdueStatus(Constants.TWO); // 2=宸叉敮浠�
+ // 鎬婚噾棰� = 鍘熼噾棰� + 閫炬湡璐圭敤
+ Long overdueFee = otherOrders.getPayAccount() != null ? otherOrders.getPayAccount() : 0L;
+ long newTotal = (order.getTotalAmount() != null ? order.getTotalAmount() : 0L) + overdueFee;
+ order.setTotalAmount(newTotal);
+ order.setUpdateTime(now);
+ ordersMapper.updateById(order);
+ // 閲嶇畻涓夋柟鏀剁泭
+ calculateAndSaveOrderFees(order.getId());
+ }
+ }
+ }
+
+ @Override
+ public void deleteMyOrder(Integer orderId, Integer memberId) {
+ Orders order = ordersMapper.selectById(orderId);
+ if (order == null || !Constants.equalsInteger(order.getDeleted(), Constants.ZERO)) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ if (!Constants.equalsInteger(order.getMemberId(), memberId)) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鏃犳潈鎿嶄綔姝よ鍗�");
+ }
+ // 浠呭凡瀹屾垚(7)銆佸凡鍙栨秷(99)銆佸凡閫�娆�(96)鍙垹闄�
+ int status = Constants.formatIntegerNum(order.getStatus());
+ if (status != Constants.OrderStatus.finished.getStatus()
+ && status != Constants.OrderStatus.cancelled.getStatus()
+ && status != Constants.OrderStatus.closed.getStatus()) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "褰撳墠璁㈠崟鐘舵�佷笉鍙垹闄�");
+ }
+ ordersMapper.update(new UpdateWrapper<Orders>().lambda()
+ .set(Orders::getDeleted, Constants.ONE)
+ .set(Orders::getUpdateTime, new Date())
+ .eq(Orders::getId, orderId));
+ }
+
+ @Override
+ @Transactional(rollbackFor = {Exception.class, BusinessException.class})
+ public PayResponse payShopDeposit(Integer shopId) {
+ // 1. 鏌ヨ闂ㄥ簵淇℃伅
+ ShopInfo shopInfo = shopInfoMapper.selectById(shopId);
+ if (shopInfo == null) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "闂ㄥ簵涓嶅瓨鍦�");
+ }
+ // 2. 鏍¢獙鐘舵�侊細瀹℃壒閫氳繃(1)鎵嶈兘鏀粯鎶奸噾
+ if (!Constants.equalsInteger(shopInfo.getAuditStatus(), Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠闂ㄥ簵鐘舵�佷笉鏀寔鏀粯鎶奸噾");
+ }
+ if (shopInfo.getDepositAmount() == null || shopInfo.getDepositAmount() <= 0) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎶奸噾閲戦寮傚父锛屾棤娉曞彂璧锋敮浠�");
+ }
+ // 3. 鏌ヨ浼氬憳openid
+ Member member = memberMapper.selectById(shopInfo.getRegionMemberId());
+ if (member == null || StringUtils.isBlank(member.getOpenid())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鐢ㄦ埛淇℃伅寮傚父锛屾棤娉曞彂璧锋敮浠�");
+ }
+ // 4. 鍒涘缓鎶奸噾璁㈠崟
+ String outTradeNo = generateOrderTradeNo();
+ Date now = new Date();
+ OtherOrders otherOrders = new OtherOrders();
+ otherOrders.setType(Constants.ZERO); // 0=搴楅摵鎶奸噾璁㈠崟
+ otherOrders.setMemberId(shopInfo.getRegionMemberId());
+ otherOrders.setPayAccount(shopInfo.getDepositAmount());
+ otherOrders.setPayStatus(Constants.ZERO);
+ otherOrders.setCode("SD" + new java.text.SimpleDateFormat("yyyyMMddHHmmss").format(now) + shopId);
+ otherOrders.setOutTradeNo(outTradeNo);
+ otherOrders.setDeleted(Constants.ZERO);
+ otherOrders.setCreateTime(now);
+ otherOrdersMapper.insert(otherOrders);
+
+ // 5. 鍞よ捣寰俊鏀粯
+ return wxPayForOtherOrder(otherOrders, member.getOpenid(), Constants.OrdersAttach.SHOP_DEPOSIT);
+ }
+
+ @Override
+ @Transactional(rollbackFor = {Exception.class, BusinessException.class})
+ public void handleShopDepositPayNotify(String outTradeNo, String wxTradeNo) {
+ // 1. 鏌ユ壘鎶奸噾璁㈠崟
+ OtherOrders otherOrders = otherOrdersMapper.selectOne(new QueryWrapper<OtherOrders>().lambda()
+ .eq(OtherOrders::getOutTradeNo, outTradeNo)
+ .eq(OtherOrders::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ if (otherOrders == null) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鎶奸噾璁㈠崟涓嶅瓨鍦�: " + outTradeNo);
+ }
+ // 2. 骞傜瓑锛氬凡鏀粯鍒欒烦杩�
+ if (Constants.equalsInteger(otherOrders.getPayStatus(), Constants.ONE)) {
+ return;
+ }
+ Date now = new Date();
+ // 3. 鏇存柊鎶奸噾璁㈠崟鐘舵��
+ otherOrders.setPayStatus(Constants.ONE);
+ otherOrders.setPayTime(now);
+ otherOrders.setWxExternalNo(wxTradeNo);
+ otherOrders.setUpdateTime(now);
+ otherOrdersMapper.updateById(otherOrders);
+
+ // 4. 鏌ヨ闂ㄥ簵淇℃伅锛堥�氳繃娉ㄥ唽浼氬憳涓婚敭鍏宠仈锛�
+ ShopInfo shopInfo = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
+ .eq(ShopInfo::getRegionMemberId, otherOrders.getMemberId())
+ .eq(ShopInfo::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ if (shopInfo == null) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "闂ㄥ簵涓嶅瓨鍦�");
+ }
+ // 5. 鏇存柊闂ㄥ簵鐘舵�侊細宸叉敮浠樻娂閲�
+ shopInfo.setAuditStatus(Constants.THREE); // 3=宸叉敮浠樻娂閲�
+ shopInfo.setPayStatus(Constants.ONE);
+ shopInfo.setPayTime(now);
+ shopInfo.setWxExternalNo(wxTradeNo);
+ shopInfo.setCode(otherOrders.getCode());
+ Member member = memberMapper.selectById(otherOrders.getMemberId());
+ if (member != null) {
+ shopInfo.setPayMemberOpenId(member.getOpenid());
+ }
+ shopInfo.setUpdateTime(now);
+ shopInfoMapper.updateById(shopInfo);
+
+ // 6. 鎶奸噾鏀粯瀹屾垚鍚庯紝鑻ュ煄甯傛湭寮�閫氬垯鑷姩寮�閫�
+ if (shopInfo.getAreaId() != null) {
+ Areas shopArea = areasBiz.resolveArea(shopInfo.getAreaId());
+ if (shopArea != null && shopArea.getParentId() != null) {
+ Areas cityArea = areasBiz.resolveArea(shopArea.getParentId());
+ if (cityArea != null && !Constants.equalsInteger(cityArea.getStatus(), Constants.ONE)) {
+ cityArea.setStatus(Constants.ONE);
+ cityArea.setEditDate(now);
+ areasService.updateById(cityArea);
+ areasService.cacheData();
+ }
+ }
+ }
+ }
+
+ @Override
+ @Transactional(rollbackFor = {Exception.class, BusinessException.class})
+ public void settleOrders() {
+ // 1. 璇诲彇缁撶畻澶╂暟閰嶇疆
+ SystemDictData settlementConfig = systemDictDataBiz.queryByCode(Constants.OPERATION_CONFIG, Constants.OP_SETTLEMENT_DATE);
+ if (settlementConfig == null || StringUtils.isBlank(settlementConfig.getCode())) {
+ return;
+ }
+ int days = Integer.parseInt(settlementConfig.getCode());
+ // 缁撶畻鎴鏃堕棿 = 褰撳墠鏃堕棿 - N澶�
+ Calendar cal = Calendar.getInstance();
+ cal.add(Calendar.DAY_OF_MONTH, -days);
+ Date deadline = cal.getTime();
+
+ // 2. 鏌ヨ宸插畬鎴愮殑寰呯粨绠楄鍗曪紙瀹屾垚鏃堕棿 <= 鎴鏃堕棿锛�
+ List<Orders> ordersList = ordersMapper.selectList(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getDeleted, Constants.ZERO)
+ .eq(Orders::getStatus, Constants.OrderStatus.finished.getStatus())
+ .eq(Orders::getSettlementStatus, Constants.ZERO)
+ .le(Orders::getFinishTime, deadline));
+ if (ordersList == null || ordersList.isEmpty()) {
+ return;
+ }
+
+ Date now = new Date();
+ for (Orders order : ordersList) {
+ // 3. 鏇存柊璁㈠崟缁撶畻鐘舵��
+ ordersMapper.update(new UpdateWrapper<Orders>().lambda()
+ .set(Orders::getSettlementStatus, Constants.ONE)
+ .set(Orders::getSettlementTime, now)
+ .set(Orders::getUpdateTime, now)
+ .eq(Orders::getId, order.getId()));
+
+ // 4. 鏌ヨ鍏宠仈鐨勫緟鍏ヨ处 Revenue 璁板綍
+ List<Revenue> revenues = revenueMapper.selectList(new QueryWrapper<Revenue>().lambda()
+ .eq(Revenue::getObjId, order.getId())
+ .eq(Revenue::getObjType, Constants.ZERO)
+ .eq(Revenue::getVaildStatus, Constants.ZERO)
+ .eq(Revenue::getDeleted, Constants.ZERO));
+
+ for (Revenue revenue : revenues) {
+ Long amount = revenue.getAmount() != null ? revenue.getAmount() : 0L;
+ // 鏇存柊 Revenue 涓哄凡鍏ヨ处
+ revenueMapper.update(new UpdateWrapper<Revenue>().lambda()
+ .set(Revenue::getVaildStatus, Constants.ONE)
+ .set(Revenue::getUpdateTime, now)
+ .eq(Revenue::getId, revenue.getId()));
+
+ // 鏍规嵁 memberType 鏇存柊浣欓
+ if (Constants.equalsInteger(revenue.getMemberType(), Constants.ONE)) {
+ // 鍙告満锛氶�氳繃 memberId 鏌� DriverInfo锛屾洿鏂� balance / totalBalance
+ DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
+ .eq(DriverInfo::getMemberId, revenue.getMemberId())
+ .eq(DriverInfo::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ if (driver != null) {
+ driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda()
+ .setSql(" BALANCE = IFNULL(BALANCE, 0) + " + amount)
+ .setSql(" TOTAL_BALANCE = IFNULL(TOTAL_BALANCE, 0) + " + amount)
+ .eq(DriverInfo::getId, driver.getId()));
+ }
+ } else if (Constants.equalsInteger(revenue.getMemberType(), Constants.TWO)) {
+ // 闂ㄥ簵锛氶�氳繃 memberId 鏌� ShopInfo(regionMemberId)锛屾洿鏂� balance / totalBalance
+ ShopInfo shop = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
+ .eq(ShopInfo::getRegionMemberId, revenue.getMemberId())
+ .eq(ShopInfo::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ if (shop != null) {
+ shopInfoMapper.update(new UpdateWrapper<ShopInfo>().lambda()
+ .setSql(" BALANCE = IFNULL(BALANCE, 0) + " + amount)
+ .setSql(" TOTAL_BALANCE = IFNULL(TOTAL_BALANCE, 0) + " + amount)
+ .eq(ShopInfo::getId, shop.getId()));
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ @Transactional(rollbackFor = {Exception.class, BusinessException.class})
+ public void commentOrder(CommentOrderDTO dto, Integer memberId) {
+ // 1. 鏍¢獙璁㈠崟
+ Orders order = ordersMapper.selectById(dto.getOrderId());
+ if (order == null || Constants.equalsInteger(order.getDeleted(), Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "璁㈠崟涓嶅瓨鍦�");
+ }
+ if (!Constants.equalsInteger(order.getMemberId(), memberId)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏃犳潈璇勪环璇ヨ鍗�");
+ }
+ if (!Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.finished.getStatus())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠璁㈠崟鐘舵�佷笉鏀寔璇勪环");
+ }
+ if (Constants.equalsInteger(order.getCommentStatus(), Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇ヨ鍗曞凡璇勪环");
+ }
+
+ // 2. 寮傚湴瀵勫瓨璁㈠崟锛氬彇浠堕棬搴楀拰鍙告満璇勫垎鏍¢獙
+ boolean isRemote = Constants.equalsInteger(order.getType(), Constants.ONE);
+ if (isRemote) {
+ if (dto.getDriverScore() == null) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "寮傚湴瀵勫瓨璁㈠崟蹇呴』璇勪环鍙告満");
+ }
+ if (order.getTakeShopId() != null && dto.getTakeScore() == null) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇疯瘎浠峰彇浠堕棬搴�");
+ }
+ }
+
+ Date now = new Date();
+
+ // 3. 鏇存柊璁㈠崟璇勪环鐘舵��
+ order.setCommentStatus(Constants.ONE);
+ order.setCommentInfo(dto.getContent());
+ order.setCommentDepositLevel(dto.getDepositScore());
+ order.setCommentTakeLevel(dto.getTakeScore());
+ order.setCommentDriverLevel(dto.getDriverScore());
+ order.setCommentTime(now);
+ order.setUpdateTime(now);
+ ordersMapper.updateById(order);
+
+ // 4. 鍒涘缓璇勪环璁板綍
+ // 4.1 瀛樹欢闂ㄥ簵
+ OrderComment depositComment = new OrderComment();
+ depositComment.setOrderId(order.getId());
+ depositComment.setOrderCode(order.getCode());
+ depositComment.setMemberId(memberId);
+ depositComment.setTargetType(Constants.ONE); // 1=瀛樹欢闂ㄥ簵
+ depositComment.setTargetId(order.getDepositShopId());
+ depositComment.setScore(dto.getDepositScore());
+ depositComment.setContent(dto.getContent());
+ depositComment.setDeleted(Constants.ZERO);
+ depositComment.setCreateTime(now);
+ orderCommentMapper.insert(depositComment);
+
+ // 4.2 鍙栦欢闂ㄥ簵锛堝紓鍦板瘎瀛樹笖鏈夊彇浠堕棬搴楋級
+ if (isRemote && order.getTakeShopId() != null && dto.getTakeScore() != null) {
+ OrderComment takeComment = new OrderComment();
+ takeComment.setOrderId(order.getId());
+ takeComment.setOrderCode(order.getCode());
+ takeComment.setMemberId(memberId);
+ takeComment.setTargetType(Constants.TWO); // 2=鍙栦欢闂ㄥ簵
+ takeComment.setTargetId(order.getTakeShopId());
+ takeComment.setScore(dto.getTakeScore());
+ takeComment.setContent(dto.getContent());
+ takeComment.setDeleted(Constants.ZERO);
+ takeComment.setCreateTime(now);
+ orderCommentMapper.insert(takeComment);
+ }
+
+ // 4.3 鍙告満锛堝紓鍦板瘎瀛橈級
+ if (isRemote && order.getAcceptDriver() != null && dto.getDriverScore() != null) {
+ OrderComment driverComment = new OrderComment();
+ driverComment.setOrderId(order.getId());
+ driverComment.setOrderCode(order.getCode());
+ driverComment.setMemberId(memberId);
+ driverComment.setTargetType(Constants.THREE); // 3=鍙告満
+ driverComment.setTargetId(order.getAcceptDriver());
+ driverComment.setScore(dto.getDriverScore());
+ driverComment.setContent(dto.getContent());
+ driverComment.setDeleted(Constants.ZERO);
+ driverComment.setCreateTime(now);
+ orderCommentMapper.insert(driverComment);
+ }
+
+ // 5. 鏇存柊闂ㄥ簵/鍙告満骞冲潎璇勫垎
+ updateTargetScore(Constants.ONE, order.getDepositShopId());
+ if (isRemote && order.getTakeShopId() != null) {
+ updateTargetScore(Constants.TWO, order.getTakeShopId());
+ }
+ if (isRemote && order.getAcceptDriver() != null) {
+ updateTargetScore(Constants.THREE, order.getAcceptDriver());
+ }
+ }
+
+ /**
+ * 鏇存柊璇勪环瀵硅薄锛堥棬搴�/鍙告満锛夌殑骞冲潎璇勫垎
+ */
+ private void updateTargetScore(Integer targetType, Integer targetId) {
+ List<OrderComment> comments = orderCommentMapper.selectList(new QueryWrapper<OrderComment>().lambda()
+ .eq(OrderComment::getDeleted, Constants.ZERO)
+ .eq(OrderComment::getTargetType, targetType)
+ .eq(OrderComment::getTargetId, targetId));
+ if (comments.isEmpty()) {
+ return;
+ }
+ double avg = comments.stream()
+ .mapToInt(OrderComment::getScore)
+ .average()
+ .orElse(0.0);
+ BigDecimal score = BigDecimal.valueOf(avg).setScale(1, BigDecimal.ROUND_HALF_UP);
+ Date now = new Date();
+ if (Constants.equalsInteger(targetType, Constants.ONE) || Constants.equalsInteger(targetType, Constants.TWO)) {
+ ShopInfo shopInfo = shopInfoMapper.selectById(targetId);
+ if (shopInfo != null) {
+ shopInfo.setScore(score);
+ shopInfo.setUpdateTime(now);
+ shopInfoMapper.updateById(shopInfo);
+ }
+ } else if (Constants.equalsInteger(targetType, Constants.THREE)) {
+ DriverInfo driverInfo = driverInfoMapper.selectById(targetId);
+ if (driverInfo != null) {
+ driverInfo.setScore(score);
+ driverInfo.setUpdateTime(now);
+ driverInfoMapper.updateById(driverInfo);
+ }
+ }
+ }
+
+ /**
+ * 鍞よ捣寰俊鏀粯锛堝叾浠栬鍗曪級
+ */
+ private PayResponse wxPayForOtherOrder(OtherOrders otherOrders, String openid, Constants.OrdersAttach ordersAttach) {
+ try {
+ WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
+ request.setBody(ordersAttach.getName());
+ request.setAttach(ordersAttach.getKey());
+ request.setOutTradeNo(otherOrders.getOutTradeNo());
+ long totalFee = otherOrders.getPayAccount() != null ? otherOrders.getPayAccount() : 0L;
+ request.setTotalFee((int) totalFee);
+ request.setTimeStart(DateUtil.DateToString(new Date(), "yyyyMMddHHmmss"));
+ request.setSpbillCreateIp(Constants.getIpAddr());
+ request.setOpenid(openid);
+
+ Object response = WxMiniConfig.wxPayService.createOrder(request);
+
+ PayResponse payResponse = new PayResponse();
+ payResponse.setResponse(response);
+ payResponse.setOrderId(otherOrders.getId());
+ return payResponse;
+ } catch (WxPayException e) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏀粯璋冭捣澶辫触锛�" + e.getMessage());
+ }
+ }
+
+ @Override
@Transactional(rollbackFor = {Exception.class, BusinessException.class})
public void shopVerifyOrder(String verifyCode, Integer shopId, List<String> images, String remark) {
if (StringUtils.isBlank(verifyCode)) {
@@ -1663,11 +2211,217 @@
releaseVerifyCode(verifyCode);
// 淇濆瓨鍑哄簱鍥剧墖锛坥bj_type=13 闂ㄥ簵鍑哄簱鍥剧墖锛屾渶澶�3寮狅級
saveVerifyImages(order.getId(), images, Constants.FileType.STORE_OUT.getKey(), shopId);
+ // 鐢熸垚鏀剁泭璁板綍
+ calculateAndSaveOrderFees(order.getId());
+ generateRevenueRecords(order.getId());
// 璁板綍璁㈠崟鏃ュ織
saveShopVerifyLog(order, "闂ㄥ簵纭鍙栦欢", "闂ㄥ簵銆�" + shopName + "銆戠‘璁ゅ彇浠讹紝璁㈠崟瀹屾垚", remark, shopId);
} else {
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠璁㈠崟鐘舵�佷笉鍏佽鏍搁攢");
}
+ }
+
+ @Override
+ @Transactional(rollbackFor = {Exception.class, BusinessException.class})
+ public void confirmStoreOut(Integer orderId, Integer shopId, List<String> images, String remark) {
+ // 1. 鏌ヨ璁㈠崟
+ Orders order = ordersMapper.selectById(orderId);
+ if (order == null || Constants.equalsInteger(order.getDeleted(), Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "璁㈠崟涓嶅瓨鍦�");
+ }
+ // 2. 鏍¢獙鐘舵�侊細寰呭彇浠�(5)
+ if (!Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.arrived.getStatus())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠璁㈠崟鐘舵�佷笉鍏佽鍑哄簱");
+ }
+ // 3. 鏍¢獙閫炬湡鐘舵�侊細0=鏈�炬湡 鎴� 2=宸叉敮浠�
+ if (order.getOverdueStatus() != null && Constants.equalsInteger(order.getOverdueStatus(), Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璁㈠崟瀛樺湪閫炬湡鏈敮浠樿垂鐢紝璇峰厛瀹屾垚閫炬湡璐圭敤鏀粯");
+ }
+ // 4. 鏍¢獙纭鍒板簵鏃堕棿涓嶄负绌�
+ if (order.getConfirmArriveTime() == null) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璁㈠崟灏氭湭纭鍒板簵锛屾棤娉曞嚭搴�");
+ }
+ // 5. 鏍¢獙闂ㄥ簵涓庤鍗曞叧绯�
+ if (Constants.equalsInteger(order.getType(), Constants.ZERO)) {
+ // 灏卞湴瀵勫瓨锛氬彇浠堕棬搴楀嵆瀛樹欢闂ㄥ簵
+ if (!shopId.equals(order.getDepositShopId())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇ヨ鍗曚笉灞炰簬褰撳墠闂ㄥ簵");
+ }
+ } else {
+ // 寮傚湴瀵勫瓨锛氭牎楠屽彇浠堕棬搴�
+ if (order.getTakeShopId() == null) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇ヨ鍗曟棤鍙栦欢闂ㄥ簵锛屾棤娉曞嚭搴�");
+ }
+ if (!shopId.equals(order.getTakeShopId())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇ヨ鍗曚笉灞炰簬褰撳墠闂ㄥ簵");
+ }
+ }
+
+ // 6. 鏌ヨ闂ㄥ簵鍚嶇О
+ String shopName = "";
+ ShopInfo shopInfo = shopInfoMapper.selectById(shopId);
+ if (shopInfo != null) {
+ shopName = shopInfo.getName() != null ? shopInfo.getName() : "";
+ }
+
+ // 7. 鏇存柊璁㈠崟鐘舵�佷负宸插畬鎴�
+ Date now = new Date();
+ order.setStatus(Constants.OrderStatus.finished.getStatus());
+ order.setFinishTime(now);
+ order.setUpdateTime(now);
+ ordersMapper.updateById(order);
+
+ // 8. 閲婃斁鏍搁攢鐮�
+ if (StringUtils.isNotBlank(order.getMemberVerifyCode())) {
+ releaseVerifyCode(order.getMemberVerifyCode());
+ }
+
+ // 9. 淇濆瓨鍑哄簱鍥剧墖锛坥bj_type=13 闂ㄥ簵鍑哄簱鍥剧墖锛屾渶澶�3寮狅級
+ saveVerifyImages(order.getId(), images, Constants.FileType.STORE_OUT.getKey(), shopId);
+
+ // 10. 濡傛灉瀛樺湪閫�娆鹃噾棰濓紝鍏堜繚瀛橀��娆捐褰曞啀璋冪敤寰俊閫�娆�
+ // 閫�娆捐褰曞湪閫�娆捐皟鐢ㄥ墠钀藉簱锛岄伩鍏嶉��娆炬垚鍔熶絾鏈湴寮傚父瀵艰嚧鏃犺褰�
+ if (order.getRefundAmount() != null && order.getRefundAmount() > 0
+ && StringUtils.isNotBlank(order.getOutTradeNo())
+ && order.getPayAmount() != null && order.getPayAmount() > 0) {
+ OrdersRefund refundRecord = new OrdersRefund();
+ refundRecord.setOrderId(orderId);
+ refundRecord.setType(3); // 鍑哄簱閫�娆�
+ refundRecord.setCreateTime(now);
+ refundRecord.setRefundRemark(remark);
+ refundRecord.setDeleted(Constants.ZERO);
+ ordersRefundMapper.insert(refundRecord);
+
+ // 璋冪敤寰俊閫�娆撅紙鏀惧湪鏈�鍚庯紝纭繚鍓嶇疆鎿嶄綔鍏ㄩ儴鎴愬姛锛�
+ String refundCode = wxMiniUtilService.wxRefund(
+ order.getOutTradeNo(), order.getPayAmount(), order.getRefundAmount());
+
+ // 閫�娆炬垚鍔熷悗鍥炲~閫�娆惧崟鍙峰拰鏃堕棿
+ refundRecord.setRefundCode(refundCode);
+ refundRecord.setRefundTime(new Date());
+ ordersRefundMapper.updateById(refundRecord);
+ }
+
+ // 11. 鐢熸垚鏀剁泭璁板綍
+ calculateAndSaveOrderFees(orderId);
+ generateRevenueRecords(orderId);
+
+ // 12. 璁板綍璁㈠崟鏃ュ織
+ String logInfo = "闂ㄥ簵銆�" + shopName + "銆戠‘璁ゅ嚭搴擄紝璁㈠崟瀹屾垚";
+ if (order.getRefundAmount() != null && order.getRefundAmount() > 0) {
+ logInfo += "锛岄��娆�" + Constants.getFormatMoney(order.getRefundAmount()) + "鍏�";
+ }
+ saveShopVerifyLog(order, "闂ㄥ簵纭鍑哄簱", logInfo, remark, shopId);
+ }
+
+ @Override
+ public void calculateAndSaveOrderFees(Integer orderId) {
+ Orders order = ordersMapper.selectById(orderId);
+ if (order == null || Constants.equalsInteger(order.getDeleted(), Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "璁㈠崟涓嶅瓨鍦�");
+ }
+
+ Long totalAmount = order.getTotalAmount() != null ? order.getTotalAmount() : 0L;
+ // 璐圭巼锛堜负绌烘椂榛樿0锛�
+ BigDecimal depositRate = order.getDepositShopFeeRata() != null ? order.getDepositShopFeeRata() : BigDecimal.ZERO;
+ BigDecimal takeRate = order.getTakeShopFeeRata() != null ? order.getTakeShopFeeRata() : BigDecimal.ZERO;
+ BigDecimal driverRate = order.getDriverFeeRata() != null ? order.getDriverFeeRata() : BigDecimal.ZERO;
+ Long exceptionFeeVal = order.getExceptionFee() != null ? order.getExceptionFee() : 0L;
+
+ //瀛樹欢闂ㄥ簵鏀剁泭
+ Long depositShopFee = new BigDecimal(totalAmount)
+ .multiply(depositRate)
+ .setScale(0, RoundingMode.HALF_UP)
+ .longValue();
+
+ Long takeShopFee = 0L;
+ Long driverFee = 0L;
+
+ if (Constants.equalsInteger(order.getType(), Constants.TWO)) {
+ // 寮傚湴瀵勫瓨锛氬瓨浠堕棬搴� + 鍙告満
+ driverFee = new BigDecimal(totalAmount)
+ .multiply(driverRate)
+ .setScale(0, RoundingMode.HALF_UP)
+ .longValue()
+ + exceptionFeeVal;
+
+ // 寮傚湴瀵勫瓨涓旀湁鍙栦欢闂ㄥ簵锛氬姞涓婂彇浠堕棬搴楁敹鐩�
+ if (order.getTakeShopId() != null) {
+ takeShopFee = new BigDecimal(totalAmount)
+ .multiply(takeRate)
+ .setScale(0, RoundingMode.HALF_UP)
+ .longValue();
+ }
+ }
+
+ ordersMapper.update(new UpdateWrapper<Orders>().lambda()
+ .eq(Orders::getId, orderId)
+ .set(Orders::getDepositShopFee, depositShopFee)
+ .set(Orders::getTakeShopFee, takeShopFee)
+ .set(Orders::getDriverFee, driverFee)
+ .set(Orders::getUpdateTime, new Date()));
+ }
+
+ /**
+ * 鐢熸垚闂ㄥ簵/鍙告満鏀剁泭璁板綍锛堟湭缁撶畻锛�
+ * 璁㈠崟瀹屾垚鏃惰皟鐢紝璇诲彇璁㈠崟涓婂凡璁$畻濂界殑璐圭敤瀛楁
+ */
+ private void generateRevenueRecords(Integer orderId) {
+ Orders order = ordersMapper.selectById(orderId);
+ if (order == null) {
+ return;
+ }
+ Date now = new Date();
+ Long depositShopFee = order.getDepositShopFee() != null ? order.getDepositShopFee() : 0L;
+ Long takeShopFee = order.getTakeShopFee() != null ? order.getTakeShopFee() : 0L;
+ Long driverFee = order.getDriverFee() != null ? order.getDriverFee() : 0L;
+
+ // 瀛樹欢闂ㄥ簵鏀剁泭
+ if (depositShopFee > 0 && order.getDepositShopId() != null) {
+ ShopInfo depositShop = shopInfoMapper.selectById(order.getDepositShopId());
+ if (depositShop != null && depositShop.getRegionMemberId() != null) {
+ revenueMapper.insert(buildRevenue(depositShop.getRegionMemberId(), Constants.TWO,
+ depositShopFee, orderId, order.getCode()));
+ }
+ }
+
+ // 鍙栦欢闂ㄥ簵鏀剁泭锛堝紓鍦板瘎瀛樹笖鏈夊彇浠堕棬搴楋級
+ if (takeShopFee > 0 && order.getTakeShopId() != null) {
+ ShopInfo takeShop = shopInfoMapper.selectById(order.getTakeShopId());
+ if (takeShop != null && takeShop.getRegionMemberId() != null) {
+ revenueMapper.insert(buildRevenue(takeShop.getRegionMemberId(), Constants.TWO,
+ takeShopFee, orderId, order.getCode()));
+ }
+ }
+
+ // 鍙告満鏀剁泭锛堝紓鍦板瘎瀛橈級
+ if (driverFee > 0 && order.getAcceptDriver() != null) {
+ DriverInfo driver = driverInfoMapper.selectById(order.getAcceptDriver());
+ if (driver != null && driver.getMemberId() != null) {
+ revenueMapper.insert(buildRevenue(driver.getMemberId(), Constants.ONE,
+ driverFee, orderId, order.getCode()));
+ }
+ }
+ }
+
+ /**
+ * 鏋勫缓鏀剁泭璁板綍
+ */
+ private Revenue buildRevenue(Integer memberId, Integer memberType, Long amount, Integer orderId, String orderNo) {
+ Revenue revenue = new Revenue();
+ revenue.setMemberId(memberId);
+ revenue.setMemberType(memberType); // 1=鍙告満, 2=闂ㄥ簵
+ revenue.setType(Constants.ZERO); // 0=瀹屾垚璁㈠崟
+ revenue.setOptType(Constants.ONE); // 1=鏀跺叆
+ revenue.setAmount(amount);
+ revenue.setVaildStatus(Constants.ZERO); // 0=鍏ヨ处涓紙鏈粨绠楋級
+ revenue.setObjId(orderId);
+ revenue.setObjType(Constants.ZERO); // 0=璁㈠崟涓氬姟
+ revenue.setStatus(Constants.ZERO); // 0=鎴愬姛
+ revenue.setOrderNo(orderNo);
+ revenue.setDeleted(Constants.ZERO);
+ revenue.setCreateTime(new Date());
+ return revenue;
}
@Override
@@ -1799,23 +2553,48 @@
+ "澶╋紝閫炬湡璐圭敤" + Constants.getFormatMoney(overdueInfo.getOverdueFee()) + "鍏�",
null, shopId);
} else {
- // 鏈�炬湡锛氬畬鎴愯鍗�
- order.setStatus(Constants.OrderStatus.finished.getStatus());
+ // 鏈�炬湡锛氭爣璁伴�炬湡鐘舵�佷负0锛岃鍗曚繚鎸佸綋鍓嶇姸鎬�
order.setConfirmArriveTime(now);
- order.setFinishTime(now);
order.setOverdueStatus(Constants.ZERO);
+
+ // 灏卞湴瀵勫瓨锛氳绠楁槸鍚﹂渶瑕侀��娆�
+ if (Constants.equalsInteger(order.getType(), Constants.ZERO) && !CollectionUtils.isEmpty(details)) {
+ int actualDays = calcActualDepositDays(now, order.getDepositTime());
+ order.setDepositDays(actualDays);
+
+ int estimatedDays = order.getEstimatedDepositDays() != null ? order.getEstimatedDepositDays() : 1;
+ int refundDays = estimatedDays - actualDays;
+ if (refundDays > 0) {
+ // 閫�娆鹃噾棰� = 閫�娆惧ぉ鏁� 脳 危(鐗╁搧鍗曚环 脳 鏁伴噺)
+ long dailyBaseFee = 0L;
+ for (OrdersDetail d : details) {
+ dailyBaseFee += (d.getUnitPrice() != null ? d.getUnitPrice() : 0L)
+ * (d.getNum() != null ? d.getNum() : 0);
+ }
+ long refundAmount = (long) refundDays * dailyBaseFee;
+ order.setRefundAmount(refundAmount);
+ }
+ }
+
order.setUpdateTime(now);
ordersMapper.updateById(order);
- // 閲婃斁鏍搁攢鐮�
- if (StringUtils.isNotBlank(order.getMemberVerifyCode())) {
- releaseVerifyCode(order.getMemberVerifyCode());
+ // 閫�娆惧鑷存�婚噾棰濆彉鍖栵紝閲嶇畻涓夋柟鏀剁泭
+ if (order.getRefundAmount() != null && order.getRefundAmount() > 0) {
+ long newTotal = (order.getTotalAmount() != null ? order.getTotalAmount() : 0L) - order.getRefundAmount();
+ order.setTotalAmount(newTotal);
+ ordersMapper.update(new UpdateWrapper<Orders>().lambda()
+ .eq(Orders::getId, orderId)
+ .set(Orders::getTotalAmount, newTotal));
+ calculateAndSaveOrderFees(orderId);
}
// 璁板綍璁㈠崟鏃ュ織
- saveShopVerifyLog(order, "纭椤惧鍒板簵",
- "闂ㄥ簵銆�" + shopName + "銆戠‘璁ら【瀹㈠埌搴楋紝璁㈠崟瀹屾垚",
- null, shopId);
+ String logInfo = "闂ㄥ簵銆�" + shopName + "銆戠‘璁ら【瀹㈠埌搴楋紝鏈�炬湡";
+ if (order.getRefundAmount() != null && order.getRefundAmount() > 0) {
+ logInfo += "锛岄渶閫�娆�" + Constants.getFormatMoney(order.getRefundAmount()) + "鍏�";
+ }
+ saveShopVerifyLog(order, "纭椤惧鍒板簵", logInfo, null, shopId);
}
}
@@ -1972,6 +2751,32 @@
}
/**
+ * 璁$畻瀹為檯瀵勫瓨澶╂暟锛坉epositTime 鍒� now 鐨勫ぉ鏁板樊锛屾渶灏�1澶╋級
+ */
+ private int calcActualDepositDays(Date now, Date depositTime) {
+ if (depositTime == null || now == null) {
+ return 1;
+ }
+ Calendar depositCal = Calendar.getInstance();
+ depositCal.setTime(depositTime);
+ depositCal.set(Calendar.HOUR_OF_DAY, 0);
+ depositCal.set(Calendar.MINUTE, 0);
+ depositCal.set(Calendar.SECOND, 0);
+ depositCal.set(Calendar.MILLISECOND, 0);
+
+ Calendar nowCal = Calendar.getInstance();
+ nowCal.setTime(now);
+ nowCal.set(Calendar.HOUR_OF_DAY, 0);
+ nowCal.set(Calendar.MINUTE, 0);
+ nowCal.set(Calendar.SECOND, 0);
+ nowCal.set(Calendar.MILLISECOND, 0);
+
+ long diffMs = nowCal.getTimeInMillis() - depositCal.getTimeInMillis();
+ int days = (int) (diffMs / (1000 * 60 * 60 * 24));
+ return Math.max(days, 1);
+ }
+
+ /**
* 灏卞湴瀵勫瓨閫炬湡澶╂暟璁$畻
* 杩囦簡棰勮鍙栦欢鏃堕棿褰撳ぉ鐨�12鐐瑰悗鎵嶇畻涓�澶�
*/
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/OtherOrdersServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/OtherOrdersServiceImpl.java
new file mode 100644
index 0000000..9d06292
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/impl/OtherOrdersServiceImpl.java
@@ -0,0 +1,131 @@
+package com.doumee.service.business.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.core.constants.Constants;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.OtherOrdersMapper;
+import com.doumee.dao.business.model.OtherOrders;
+import com.doumee.service.business.OtherOrdersService;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 鍏朵粬璁㈠崟璁板綍Service瀹炵幇
+ * @author rk
+ * @date 2026/04/16
+ */
+@Service
+public class OtherOrdersServiceImpl implements OtherOrdersService {
+
+ @Autowired
+ private OtherOrdersMapper otherOrdersMapper;
+
+ @Override
+ public Integer create(OtherOrders otherOrders) {
+ otherOrdersMapper.insert(otherOrders);
+ return otherOrders.getId();
+ }
+
+ @Override
+ public void deleteById(Integer id) {
+ otherOrdersMapper.update(new UpdateWrapper<OtherOrders>().lambda()
+ .set(OtherOrders::getDeleted, Constants.ONE)
+ .eq(OtherOrders::getId, id));
+ }
+
+ @Override
+ public void delete(OtherOrders otherOrders) {
+ UpdateWrapper<OtherOrders> deleteWrapper = new UpdateWrapper<>(otherOrders);
+ otherOrdersMapper.delete(deleteWrapper);
+ }
+
+ @Override
+ public void deleteByIdInBatch(List<Integer> ids) {
+ if (ids == null || ids.isEmpty()) {
+ return;
+ }
+ otherOrdersMapper.deleteBatchIds(ids);
+ }
+
+ @Override
+ public void updateById(OtherOrders otherOrders) {
+ otherOrdersMapper.updateById(otherOrders);
+ }
+
+ @Override
+ public void updateByIdInBatch(List<OtherOrders> otherOrdersList) {
+ if (otherOrdersList == null || otherOrdersList.isEmpty()) {
+ return;
+ }
+ for (OtherOrders otherOrders : otherOrdersList) {
+ this.updateById(otherOrders);
+ }
+ }
+
+ @Override
+ public OtherOrders findById(Integer id) {
+ OtherOrders otherOrders = otherOrdersMapper.selectById(id);
+ if (Objects.isNull(otherOrders)) {
+ throw new BusinessException(com.doumee.core.constants.ResponseStatus.DATA_EMPTY);
+ }
+ return otherOrders;
+ }
+
+ @Override
+ public OtherOrders findOne(OtherOrders otherOrders) {
+ QueryWrapper<OtherOrders> wrapper = new QueryWrapper<>(otherOrders);
+ return otherOrdersMapper.selectOne(wrapper);
+ }
+
+ @Override
+ public List<OtherOrders> findList(OtherOrders otherOrders) {
+ QueryWrapper<OtherOrders> wrapper = new QueryWrapper<>(otherOrders);
+ return otherOrdersMapper.selectList(wrapper);
+ }
+
+ @Override
+ public PageData<OtherOrders> findPage(PageWrap<OtherOrders> pageWrap) {
+ IPage<OtherOrders> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ MPJLambdaWrapper<OtherOrders> queryWrapper = new MPJLambdaWrapper<OtherOrders>()
+ .selectAll(OtherOrders.class);
+ Utils.MP.blankToNull(pageWrap.getModel());
+ pageWrap.getModel().setDeleted(Constants.ZERO);
+ OtherOrders model = pageWrap.getModel();
+ if (model.getType() != null) {
+ queryWrapper.eq(OtherOrders::getType, model.getType());
+ }
+ if (model.getMemberId() != null) {
+ queryWrapper.eq(OtherOrders::getMemberId, model.getMemberId());
+ }
+ if (model.getPayStatus() != null) {
+ queryWrapper.eq(OtherOrders::getPayStatus, model.getPayStatus());
+ }
+ if (model.getOrderId() != null) {
+ queryWrapper.eq(OtherOrders::getOrderId, model.getOrderId());
+ }
+ for (PageWrap.SortData sortData : pageWrap.getSorts()) {
+ if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+ queryWrapper.orderByDesc(sortData.getProperty());
+ } else {
+ queryWrapper.orderByAsc(sortData.getProperty());
+ }
+ }
+ return PageData.from(otherOrdersMapper.selectJoinPage(page, OtherOrders.class, queryWrapper));
+ }
+
+ @Override
+ public long count(OtherOrders otherOrders) {
+ QueryWrapper<OtherOrders> wrapper = new QueryWrapper<>(otherOrders);
+ return otherOrdersMapper.selectCount(wrapper);
+ }
+}
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 441ea60..16e0ab0 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
@@ -11,13 +11,21 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.RevenueMapper;
+import com.doumee.dao.business.WithdrawalOrdersMapper;
+import com.doumee.dao.business.MemberMapper;
+import com.doumee.dao.business.ShopInfoMapper;
import com.doumee.dao.business.model.Revenue;
+import com.doumee.dao.business.model.ShopInfo;
+import com.doumee.dao.business.model.Member;
+import com.doumee.dao.business.model.WithdrawalOrders;
+import com.doumee.dao.vo.RevenueStatisticsVO;
import com.doumee.service.business.RevenueService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
/**
@@ -30,6 +38,15 @@
@Autowired
private RevenueMapper revenueMapper;
+
+ @Autowired
+ private WithdrawalOrdersMapper withdrawalOrdersMapper;
+
+ @Autowired
+ private ShopInfoMapper shopInfoMapper;
+
+ @Autowired
+ private MemberMapper memberMapper;
@Override
public Integer create(Revenue revenue) {
@@ -148,4 +165,74 @@
return revenueMapper.selectCount(wrapper);
}
+ @Override
+ public RevenueStatisticsVO getShopRevenueStatistics(Integer shopId) {
+ ShopInfo shop = shopInfoMapper.selectById(shopId);
+ 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());
+ }
+
+ @Override
+ public RevenueStatisticsVO getDriverRevenueStatistics(Integer memberId) {
+ Member member = memberMapper.selectById(memberId);
+ if (member == null) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鐢ㄦ埛涓嶅瓨鍦�");
+ }
+ return buildRevenueStatistics(memberId, Constants.ONE, member.getAmount());
+ }
+
+ /**
+ * 鏋勫缓鏀剁泭缁熻
+ *
+ * @param memberId 浼氬憳涓婚敭
+ * @param memberType 浼氬憳绫诲瀷锛�1=鍙告満锛�2=闂ㄥ簵
+ * @param balance 褰撳墠浣欓锛堝垎锛�
+ */
+ private RevenueStatisticsVO buildRevenueStatistics(Integer memberId, Integer memberType, Long balance) {
+ RevenueStatisticsVO vo = new RevenueStatisticsVO();
+ vo.setBalance(balance != null ? balance : 0L);
+
+ // 寰呯粨绠楅噾棰濓細revenue涓� vaildStatus=0 涓� type=0锛堝畬鎴愯鍗曪級鐨勬敹鍏ヤ箣鍜�
+ QueryWrapper<Revenue> pendingWrapper = new QueryWrapper<>();
+ pendingWrapper.select("IFNULL(SUM(AMOUNT), 0) as amount")
+ .eq("MEMBER_ID", memberId)
+ .eq("MEMBER_TYPE", memberType)
+ .eq("VAILD_STATUS", Constants.ZERO)
+ .eq("TYPE", Constants.ZERO)
+ .eq("OPT_TYPE", Constants.ONE)
+ .eq("DELETED", Constants.ZERO);
+ Map<String, Object> pendingResult = revenueMapper.selectMaps(pendingWrapper).stream().findFirst().orElse(null);
+ vo.setPendingAmount(pendingResult != null && pendingResult.get("amount") != null
+ ? Long.parseLong(pendingResult.get("amount").toString()) : 0L);
+
+ // 绱鎻愮幇閲戦锛歸ithdrawal_orders涓� status=1锛堟彁鐜版垚鍔燂級涓� type=0锛堟彁鐜帮級
+ QueryWrapper<WithdrawalOrders> successWrapper = new QueryWrapper<>();
+ successWrapper.select("IFNULL(SUM(AMOUNT), 0) as amount")
+ .eq("MEMBER_ID", memberId)
+ .eq("MEMBER_TYPE", memberType)
+ .eq("STATUS", Constants.ONE)
+ .eq("TYPE", Constants.ZERO)
+ .eq("DELETED", Constants.ZERO);
+ Map<String, Object> successResult = withdrawalOrdersMapper.selectMaps(successWrapper).stream().findFirst().orElse(null);
+ vo.setTotalWithdrawn(successResult != null && successResult.get("amount") != null
+ ? Long.parseLong(successResult.get("amount").toString()) : 0L);
+
+ // 鎻愮幇涓噾棰濓細withdrawal_orders涓� status=0锛堟彁鐜扮敵璇蜂腑锛変笖 type=0锛堟彁鐜帮級
+ QueryWrapper<WithdrawalOrders> progressWrapper = new QueryWrapper<>();
+ progressWrapper.select("IFNULL(SUM(AMOUNT), 0) as amount")
+ .eq("MEMBER_ID", memberId)
+ .eq("MEMBER_TYPE", memberType)
+ .eq("STATUS", Constants.ZERO)
+ .eq("TYPE", Constants.ZERO)
+ .eq("DELETED", Constants.ZERO);
+ Map<String, Object> progressResult = withdrawalOrdersMapper.selectMaps(progressWrapper).stream().findFirst().orElse(null);
+ vo.setWithdrawingAmount(progressResult != null && progressResult.get("amount") != null
+ ? Long.parseLong(progressResult.get("amount").toString()) : 0L);
+
+ return vo;
+ }
+
}
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 b46cb11..bf5a84a 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
@@ -16,18 +16,24 @@
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.dao.business.MemberMapper;
import com.doumee.dao.business.MultifileMapper;
+import com.doumee.dao.business.OrdersMapper;
+import com.doumee.dao.business.PricingRuleMapper;
import com.doumee.dao.business.ShopInfoMapper;
import com.doumee.dao.business.model.Areas;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.Multifile;
+import com.doumee.dao.business.model.Orders;
+import com.doumee.dao.business.model.PricingRule;
import com.doumee.dao.business.model.ShopInfo;
import com.doumee.dao.dto.*;
import com.doumee.dao.system.SystemUserMapper;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.dao.vo.ShopDetailVO;
+import com.doumee.dao.vo.ShopCenterVO;
import com.doumee.dao.vo.ShopLoginVO;
import com.doumee.dao.vo.ShopNearbyVO;
import com.doumee.dao.vo.ShopWebDetailVO;
+import com.doumee.service.business.AreasService;
import com.doumee.service.business.ShopInfoService;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
@@ -68,6 +74,15 @@
@Autowired
private RedisTemplate<String,Object> redisTemplate;
+
+ @Autowired
+ private PricingRuleMapper pricingRuleMapper;
+
+ @Autowired
+ private OrdersMapper ordersMapper;
+
+ @Autowired
+ private AreasService areasService;
@Override
public Integer create(ShopInfo shopInfo) {
shopInfoMapper.insert(shopInfo);
@@ -299,6 +314,7 @@
existing.setLegalPersonCard(request.getLegalPersonCard());
existing.setPassword(encryptedPassword);
existing.setSalt(salt);
+ existing.setAliAccount(request.getAliAccount());
existing.setAuditStatus(Constants.ZERO);
existing.setUpdateTime(now);
existing.setUpdateUser(memberId);
@@ -328,6 +344,7 @@
shopInfo.setLegalPersonCard(request.getLegalPersonCard());
shopInfo.setPassword(encryptedPassword);
shopInfo.setSalt(salt);
+ shopInfo.setAliAccount(request.getAliAccount());
shopInfo.setOpenid(member.getOpenid());
shopInfo.setAuditStatus(Constants.ZERO);
shopInfo.setStatus(Constants.ZERO);
@@ -407,6 +424,38 @@
shopInfo.setAuditRemark(auditDTO.getAuditRemark());
shopInfo.setAuditUserId(auditDTO.getAuditUser());
shopInfo.setUpdateTime(now);
+ // 瀹℃壒閫氳繃鏃讹紝鏍¢獙鍩庡競pricing_rule閰嶇疆锛岃鍙栨娂閲戦噾棰�
+ if (Constants.equalsInteger(newAuditStatus, Constants.ONE)) {
+ // 1. 瑙f瀽闂ㄥ簵鎵�鍦ㄥ煄甯�
+ Areas area = areasBiz.resolveArea(shopInfo.getAreaId());
+ if (area == null || area.getParentId() == null) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "闂ㄥ簵鍖哄垝淇℃伅寮傚父锛屾棤娉曠‘瀹氭墍鍦ㄥ煄甯�");
+ }
+ Integer cityId = area.getParentId();
+
+ // 2. 鏍¢獙 pricing_rule 閰嶇疆锛堝煄甯傚紑閫氬湪鎶奸噾鏀粯瀹屾垚鍚庡鐞嗭級
+ Areas cityArea = areasService.findById(cityId, Constants.ONE);
+ if (cityArea == null) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鍩庡競淇℃伅涓嶅瓨鍦�");
+ }
+ if (!Constants.equalsInteger(cityArea.getStatus(), Constants.ONE)) {
+ List<String> errors = validateCityPricingRules(cityId);
+ if (!errors.isEmpty()) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),
+ "鍩庡競[" + cityArea.getName() + "]灏氭湭寮�閫氾紝瀹氫环瑙勫垯鏈厤缃畬鏁达細" + String.join("锛�", errors));
+ }
+ }
+
+ // 3. 浠嶱ricingRule璇诲彇鎶奸噾閲戦
+ PricingRule pricingRule = pricingRuleMapper.selectOne(new QueryWrapper<PricingRule>().lambda()
+ .eq(PricingRule::getDeleted, Constants.ZERO)
+ .eq(PricingRule::getType, Constants.THREE)
+ .eq(PricingRule::getFieldA, String.valueOf(shopInfo.getCompanyType()))
+ .last("limit 1"));
+ if (pricingRule != null && StringUtils.isNotBlank(pricingRule.getFieldB())) {
+ shopInfo.setDepositAmount(Long.parseLong(pricingRule.getFieldB()));
+ }
+ }
shopInfoMapper.updateById(shopInfo);
}
@@ -612,7 +661,7 @@
// 鎷兼帴鍥剧墖鍓嶇紑
String imgPrefix = "";
try {
- imgPrefix = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.RESOURCE_PATH).getCode()
+ imgPrefix = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+ systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.SHOP_FILES).getCode();
} catch (Exception e) {
// 鏈厤缃椂蹇界暐
@@ -670,7 +719,7 @@
if (payMember != null && StringUtils.isNotBlank(payMember.getCoverImage())) {
String memberPrefix = "";
try {
- memberPrefix = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.RESOURCE_PATH).getCode()
+ memberPrefix = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+ systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.MEMBER_FILES).getCode();
} catch (Exception e) {
// 鏈厤缃椂蹇界暐
@@ -861,7 +910,7 @@
*/
private String getShopPrefix() {
try {
- return systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.RESOURCE_PATH).getCode()
+ return systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+ systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.SHOP_FILES).getCode();
} catch (Exception e) {
return "";
@@ -903,7 +952,37 @@
return urls;
}
-
+ @Override
+ public ShopCenterVO getShopCenterInfo(Integer shopId) {
+ ShopInfo shop = shopInfoMapper.selectById(shopId);
+ if (shop == null || Constants.equalsInteger(shop.getDeleted(), Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ ShopCenterVO vo = new ShopCenterVO();
+ vo.setShopName(shop.getName());
+ vo.setLinkName(shop.getLinkName());
+ vo.setCompanyType(shop.getCompanyType());
+ vo.setCoverImg(shop.getCoverImg());
+ if (StringUtils.isNotBlank(shop.getCoverImg())) {
+ String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+ + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.SHOP_FILES).getCode();
+ vo.setFullCoverImg(path + shop.getCoverImg());
+ }
+ vo.setHasMessage(false);
+ // 寰呮牳楠岃鍗曟暟閲忥紙瀛樹欢闂ㄥ簵锛宻tatus=1锛�
+ Long waitDepositCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getDepositShopId, shopId)
+ .eq(Orders::getDeleted, Constants.ZERO)
+ .eq(Orders::getStatus, Constants.OrderStatus.waitDeposit.getStatus()));
+ vo.setWaitDepositCount(waitDepositCount.intValue());
+ // 寰呮敹璐ц鍗曟暟閲忥紙鍙栦欢闂ㄥ簵锛宻tatus IN 4,5锛�
+ Long waitReceiveCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getTakeShopId, shopId)
+ .eq(Orders::getDeleted, Constants.ZERO)
+ .in(Orders::getStatus, Constants.OrderStatus.delivering.getStatus(), Constants.OrderStatus.arrived.getStatus()));
+ vo.setWaitReceiveCount(waitReceiveCount.intValue());
+ return vo;
+ }
/**
* 鍟嗘埛璐﹀彿瀵嗙爜鐧诲綍
@@ -993,4 +1072,91 @@
return vo;
}
+ /**
+ * 鏍¢獙鍩庡競瀹氫环瑙勫垯閰嶇疆鏄惁瀹屾暣
+ * @param cityId 鍩庡競涓婚敭
+ * @return 閿欒淇℃伅鍒楄〃锛岀┖琛ㄧず鏍¢獙閫氳繃
+ */
+ private List<String> validateCityPricingRules(Integer cityId) {
+ List<String> errors = new ArrayList<>();
+
+ // type=0 灏卞湴瀛樺彇瑙勫垯锛氳嚦灏�1鏉★紝fieldB涓嶄负绌�
+ List<PricingRule> type0 = pricingRuleMapper.selectList(new QueryWrapper<PricingRule>().lambda()
+ .eq(PricingRule::getDeleted, Constants.ZERO)
+ .eq(PricingRule::getType, Constants.ZERO)
+ .eq(PricingRule::getCityId, cityId));
+ if (type0.isEmpty()) {
+ errors.add("缂哄皯灏卞湴瀛樺彇瑙勫垯");
+ } else if (type0.stream().allMatch(r -> StringUtils.isBlank(r.getFieldB()))) {
+ errors.add("灏卞湴瀛樺彇瑙勫垯鏈厤缃敹璐瑰崟浠�");
+ }
+
+ // type=1 寮傚湴瀵勯�佽鍒欙細鑷冲皯1鏉★紝fieldB/C/D/E涓嶄负绌�
+ List<PricingRule> type1 = pricingRuleMapper.selectList(new QueryWrapper<PricingRule>().lambda()
+ .eq(PricingRule::getDeleted, Constants.ZERO)
+ .eq(PricingRule::getType, Constants.ONE)
+ .eq(PricingRule::getCityId, cityId));
+ if (type1.isEmpty()) {
+ errors.add("缂哄皯寮傚湴瀵勯�佽鍒�");
+ } else if (type1.stream().allMatch(r -> StringUtils.isAnyBlank(r.getFieldB(), r.getFieldC(), r.getFieldD(), r.getFieldE()))) {
+ errors.add("寮傚湴瀵勯�佽鍒欓厤缃笉瀹屾暣");
+ }
+
+ // type=2 棰勮鏃舵晥锛歠ieldA=1(鏍囬�熻揪) 鍜� fieldA=2(鏋侀�熻揪) 鍚�1鏉�
+ List<PricingRule> type2 = pricingRuleMapper.selectList(new QueryWrapper<PricingRule>().lambda()
+ .eq(PricingRule::getDeleted, Constants.ZERO)
+ .eq(PricingRule::getType, Constants.TWO)
+ .eq(PricingRule::getCityId, cityId));
+ Map<String, PricingRule> type2Map = type2.stream()
+ .collect(Collectors.toMap(PricingRule::getFieldA, r -> r, (a, b) -> a));
+ if (!type2Map.containsKey("1")) {
+ errors.add("缂哄皯棰勮鏃舵晥-鏍囬�熻揪閰嶇疆");
+ } else if (StringUtils.isAnyBlank(type2Map.get("1").getFieldB(), type2Map.get("1").getFieldC(),
+ type2Map.get("1").getFieldD(), type2Map.get("1").getFieldE())) {
+ errors.add("棰勮鏃舵晥-鏍囬�熻揪閰嶇疆涓嶅畬鏁�");
+ }
+ if (!type2Map.containsKey("2")) {
+ errors.add("缂哄皯棰勮鏃舵晥-鏋侀�熻揪閰嶇疆");
+ } else if (StringUtils.isAnyBlank(type2Map.get("2").getFieldB(), type2Map.get("2").getFieldC(),
+ type2Map.get("2").getFieldD(), type2Map.get("2").getFieldE())) {
+ errors.add("棰勮鏃舵晥-鏋侀�熻揪閰嶇疆涓嶅畬鏁�");
+ }
+
+ // type=3 闂ㄥ簵娉ㄥ唽鎶奸噾锛歠ieldA=0(浼佷笟) 鍜� fieldA=1(涓汉) 鍚�1鏉★紝fieldB涓嶄负绌�
+ List<PricingRule> type3 = pricingRuleMapper.selectList(new QueryWrapper<PricingRule>().lambda()
+ .eq(PricingRule::getDeleted, Constants.ZERO)
+ .eq(PricingRule::getType, Constants.THREE)
+ .eq(PricingRule::getCityId, cityId));
+ Map<String, PricingRule> type3Map = type3.stream()
+ .collect(Collectors.toMap(PricingRule::getFieldA, r -> r, (a, b) -> a));
+ String[] depositNames = {"浼佷笟", "涓汉"};
+ for (int i = 0; i <= 1; i++) {
+ String key = String.valueOf(i);
+ if (!type3Map.containsKey(key)) {
+ errors.add("缂哄皯闂ㄥ簵娉ㄥ唽鎶奸噾-" + depositNames[i] + "閰嶇疆");
+ } else if (StringUtils.isBlank(type3Map.get(key).getFieldB())) {
+ errors.add("闂ㄥ簵娉ㄥ唽鎶奸噾-" + depositNames[i] + "鏈厤缃娂閲戦噾棰�");
+ }
+ }
+
+ // type=4 鍒嗘垚姣斾緥锛歠ieldA=0~4 鍏�5鏉★紝fieldB涓嶄负绌�
+ List<PricingRule> type4 = pricingRuleMapper.selectList(new QueryWrapper<PricingRule>().lambda()
+ .eq(PricingRule::getDeleted, Constants.ZERO)
+ .eq(PricingRule::getType, Constants.FOUR)
+ .eq(PricingRule::getCityId, cityId));
+ String[] shareNames = {"浼佷笟瀵�", "涓汉瀵�", "浼佷笟鍙�", "涓汉鍙�", "閰嶉�佸憳"};
+ Map<String, PricingRule> type4Map = type4.stream()
+ .collect(Collectors.toMap(PricingRule::getFieldA, r -> r, (a, b) -> a));
+ for (int i = 0; i <= 4; i++) {
+ String key = String.valueOf(i);
+ if (!type4Map.containsKey(key)) {
+ errors.add("缂哄皯鍒嗘垚姣斾緥-" + shareNames[i] + "閰嶇疆");
+ } else if (StringUtils.isBlank(type4Map.get(key).getFieldB())) {
+ errors.add("鍒嗘垚姣斾緥-" + shareNames[i] + "鏈厤缃垎鎴愭瘮渚�");
+ }
+ }
+
+ return errors;
+ }
+
}
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java
index 2602c77..83e7959 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java
@@ -11,12 +11,15 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.DriverInfoMapper;
+import com.doumee.dao.business.RevenueMapper;
import com.doumee.dao.business.ShopInfoMapper;
import com.doumee.dao.business.WithdrawalOrdersMapper;
import com.doumee.dao.business.model.DriverInfo;
+import com.doumee.dao.business.model.Revenue;
import com.doumee.dao.business.model.ShopInfo;
import com.doumee.dao.business.model.WithdrawalOrders;
import com.doumee.dao.dto.WithdrawalApproveDTO;
+import com.doumee.dao.dto.WithdrawalDTO;
import com.doumee.dao.system.SystemUserMapper;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.WithdrawalOrdersService;
@@ -25,10 +28,13 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Objects;
+import java.util.concurrent.ThreadLocalRandom;
/**
* 鎻愮幇鐢宠璁板綍Service瀹炵幇
@@ -49,6 +55,9 @@
@Autowired
private DriverInfoMapper driverInfoMapper;
+
+ @Autowired
+ private RevenueMapper revenueMapper;
@Override
public Integer create(WithdrawalOrders withdrawalOrders) {
@@ -238,15 +247,60 @@
// 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛
Integer currentUserId = getCurrentUserId();
+ Date now = new Date();
WithdrawalOrders update = new WithdrawalOrders();
update.setId(dto.getId());
update.setStatus(dto.getStatus());
update.setUserId(currentUserId);
- update.setApproveTime(new Date());
+ update.setApproveTime(now);
update.setApproveRemark(dto.getApproveRemark());
- update.setUpdateTime(new Date());
+ update.setUpdateTime(now);
withdrawalOrdersMapper.updateById(update);
+
+ // 椹冲洖鏃堕��鍥炰綑棰�
+ if (Constants.TWO.equals(dto.getStatus())) {
+ Long amountFen = order.getAmount() != null ? order.getAmount() : 0L;
+ if (amountFen > 0 && order.getMemberId() != null) {
+ if (Constants.equalsInteger(order.getMemberType(), Constants.ONE)) {
+ // 鍙告満锛氶�氳繃 memberId 鏌� DriverInfo锛岄��鍥� balance
+ DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
+ .eq(DriverInfo::getMemberId, order.getMemberId())
+ .eq(DriverInfo::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ if (driver != null) {
+ driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda()
+ .setSql(" BALANCE = IFNULL(BALANCE, 0) + " + amountFen)
+ .eq(DriverInfo::getId, driver.getId()));
+ }
+ } else if (Constants.equalsInteger(order.getMemberType(), Constants.TWO)) {
+ // 闂ㄥ簵锛氶�氳繃 memberId 鏌� ShopInfo锛岄��鍥� balance
+ ShopInfo shop = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
+ .eq(ShopInfo::getRegionMemberId, order.getMemberId())
+ .eq(ShopInfo::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ if (shop != null) {
+ shopInfoMapper.update(new UpdateWrapper<ShopInfo>().lambda()
+ .setSql(" BALANCE = IFNULL(BALANCE, 0) + " + amountFen)
+ .eq(ShopInfo::getId, shop.getId()));
+ }
+ }
+ // 鍒涘缓閫�鍥� Revenue 璁板綍
+ Revenue revenue = new Revenue();
+ revenue.setMemberId(order.getMemberId());
+ revenue.setMemberType(order.getMemberType());
+ revenue.setType(Constants.TWO); // 2=鎻愮幇閫�鍥�
+ revenue.setOptType(Constants.ONE); // 1=鏀跺叆
+ revenue.setAmount(amountFen);
+ revenue.setVaildStatus(Constants.ONE); // 宸插叆璐�
+ revenue.setObjId(order.getId());
+ revenue.setObjType(Constants.ONE); // 1=鎻愮幇涓氬姟
+ revenue.setStatus(Constants.ZERO);
+ revenue.setDeleted(Constants.ZERO);
+ revenue.setCreateTime(now);
+ revenueMapper.insert(revenue);
+ }
+ }
}
private Integer getCurrentUserId() {
@@ -289,4 +343,113 @@
}
}
+ @Override
+ public void applyDriverWithdrawal(WithdrawalDTO dto, Integer memberId) {
+ DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
+ .eq(DriverInfo::getMemberId, memberId)
+ .eq(DriverInfo::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ if (driver == null) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍙告満淇℃伅涓嶅瓨鍦�");
+ }
+ long amountFen = dto.getAmount().multiply(new BigDecimal(100)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
+ long balance = driver.getBalance() != null ? driver.getBalance() : 0L;
+ if (amountFen <= 0) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎻愮幇閲戦蹇呴』澶т簬0");
+ }
+ if (amountFen > balance) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎻愮幇閲戦涓嶈兘瓒呰繃鍙敤浣欓");
+ }
+ String billNo = generateBillNo();
+ Date now = new Date();
+ // 鎵e噺鍙告満浣欓
+ driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda()
+ .setSql(" BALANCE = IFNULL(BALANCE, 0) - " + amountFen)
+ .eq(DriverInfo::getId, driver.getId()));
+ // 鍒涘缓鎻愮幇璁板綍
+ WithdrawalOrders order = new WithdrawalOrders();
+ order.setMemberId(memberId);
+ order.setMemberType(Constants.ONE);
+ order.setAmount(amountFen);
+ order.setStatus(Constants.ZERO);
+ order.setType(Constants.ZERO);
+ order.setOutBillNo(billNo);
+ order.setAliAccount(dto.getAliAccount());
+ order.setDeleted(Constants.ZERO);
+ order.setCreateTime(now);
+ order.setUpdateTime(now);
+ order.setCreateUser(memberId);
+ withdrawalOrdersMapper.insert(order);
+ // 鍒涘缓鏀嚭 Revenue 璁板綍
+ Revenue revenue = new Revenue();
+ revenue.setMemberId(memberId);
+ revenue.setMemberType(Constants.ONE);
+ revenue.setType(Constants.ONE);
+ revenue.setOptType(-Constants.ONE);
+ revenue.setAmount(amountFen);
+ revenue.setVaildStatus(Constants.ONE);
+ revenue.setObjId(order.getId());
+ revenue.setObjType(Constants.ONE);
+ revenue.setStatus(Constants.ZERO);
+ revenue.setDeleted(Constants.ZERO);
+ revenue.setCreateTime(now);
+ revenueMapper.insert(revenue);
+ }
+
+ @Override
+ public void applyShopWithdrawal(WithdrawalDTO dto, Integer shopId) {
+ ShopInfo shop = shopInfoMapper.selectById(shopId);
+ if (shop == null) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ long amountFen = dto.getAmount().multiply(new BigDecimal(100)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
+ long balance = shop.getBalance() != null ? shop.getBalance() : 0L;
+ if (amountFen <= 0) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎻愮幇閲戦蹇呴』澶т簬0");
+ }
+ if (amountFen > balance) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎻愮幇閲戦涓嶈兘瓒呰繃鍙敤浣欓");
+ }
+ String billNo = generateBillNo();
+ Date now = new Date();
+ // 鎵e噺闂ㄥ簵浣欓
+ shopInfoMapper.update(new UpdateWrapper<ShopInfo>().lambda()
+ .setSql(" BALANCE = IFNULL(BALANCE, 0) - " + amountFen)
+ .eq(ShopInfo::getId, shopId));
+ // 鍒涘缓鎻愮幇璁板綍
+ WithdrawalOrders order = new WithdrawalOrders();
+ order.setMemberId(shop.getRegionMemberId());
+ order.setMemberType(Constants.TWO);
+ order.setAmount(amountFen);
+ order.setStatus(Constants.ZERO);
+ order.setType(Constants.ZERO);
+ order.setOutBillNo(billNo);
+ order.setAliAccount(dto.getAliAccount());
+ order.setDeleted(Constants.ZERO);
+ order.setCreateTime(now);
+ order.setUpdateTime(now);
+ order.setCreateUser(shop.getRegionMemberId());
+ withdrawalOrdersMapper.insert(order);
+ // 鍒涘缓鏀嚭 Revenue 璁板綍
+ Revenue revenue = new Revenue();
+ revenue.setMemberId(shop.getRegionMemberId());
+ revenue.setMemberType(Constants.TWO);
+ revenue.setType(Constants.ONE); // 1=鎻愮幇鏀嚭
+ revenue.setOptType(-Constants.ONE); // -1=鏀嚭
+ revenue.setAmount(amountFen);
+ revenue.setVaildStatus(Constants.ONE); // 宸插叆璐�
+ revenue.setObjId(order.getId());
+ revenue.setObjType(Constants.ONE); // 1=鎻愮幇涓氬姟
+ revenue.setStatus(Constants.ZERO);
+ revenue.setDeleted(Constants.ZERO);
+ revenue.setCreateTime(now);
+ revenueMapper.insert(revenue);
+ }
+
+ private String generateBillNo() {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+ String random = String.valueOf(ThreadLocalRandom.current().nextInt(100000, 999999));
+ return "TX" + sdf.format(new Date()) + random;
+ }
+
}
diff --git a/server/web/src/main/java/com/doumee/api/web/AccountApi.java b/server/web/src/main/java/com/doumee/api/web/AccountApi.java
index eb4aeaa..fcaf0aa 100644
--- a/server/web/src/main/java/com/doumee/api/web/AccountApi.java
+++ b/server/web/src/main/java/com/doumee/api/web/AccountApi.java
@@ -61,6 +61,7 @@
return ApiResponse.success("鎿嶄綔鎴愬姛",memberService.wxAuthPhone(wxPhoneRequest));
}
+
@ApiOperation(value = "闂ㄥ簵璐﹀彿瀵嗙爜鐧诲綍", notes = "灏忕▼搴忕锛岄棬搴楃敤鎴烽�氳繃鎵嬫満鍙�+瀵嗙爜鐧诲綍")
@PostMapping("/shopLogin")
public ApiResponse<ShopLoginVO> shopLogin(@RequestBody @Validated ShopLoginDTO dto) {
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 46a157e..0391012 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
@@ -10,7 +10,7 @@
import com.doumee.dao.dto.CalculateRemotePriceDTO;
import com.doumee.dao.vo.AccountResponse;
import com.doumee.dao.vo.PriceCalculateVO;
-import com.doumee.dao.vo.UserCenterVO;
+import com.doumee.dao.vo.PlatformAboutVO;
import com.doumee.service.business.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -89,12 +89,9 @@
@ApiOperation(value = "鑾峰彇绯荤粺閰嶇疆", notes = "灏忕▼搴忕")
@GetMapping("/getPlatformAboutUs")
- public ApiResponse<UserCenterVO> getPlatformAboutUs() {
+ public ApiResponse<PlatformAboutVO> getPlatformAboutUs() {
return ApiResponse.success("鏌ヨ鎴愬姛",memberService.getPlatformAboutUs());
}
-
-
-
@LoginRequired
@ApiOperation(value = "璁$畻淇濅环璐圭敤", notes = "鏍规嵁鎶ヤ环閲戦璁$畻淇濅环璐圭敤")
diff --git a/server/web/src/main/java/com/doumee/api/web/MemberApi.java b/server/web/src/main/java/com/doumee/api/web/MemberApi.java
index ec9eb29..b49cade 100644
--- a/server/web/src/main/java/com/doumee/api/web/MemberApi.java
+++ b/server/web/src/main/java/com/doumee/api/web/MemberApi.java
@@ -42,7 +42,7 @@
@ApiImplicitParams({
@ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
})
- public ApiResponse<Member> getMemberInfo() {
+ public ApiResponse<UserCenterVO> getMemberInfo() {
return ApiResponse.success("鏌ヨ鎴愬姛",memberService.getMemberInfo(getMemberId()));
}
diff --git a/server/web/src/main/java/com/doumee/api/web/OrdersApi.java b/server/web/src/main/java/com/doumee/api/web/OrdersApi.java
index e2b9e33..5292cb9 100644
--- a/server/web/src/main/java/com/doumee/api/web/OrdersApi.java
+++ b/server/web/src/main/java/com/doumee/api/web/OrdersApi.java
@@ -7,9 +7,12 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.dto.CancelOrderDTO;
+import com.doumee.dao.dto.CommentOrderDTO;
+import com.doumee.dao.dto.ConfirmArriveDTO;
import com.doumee.dao.dto.CreateOrderDTO;
import com.doumee.dao.dto.DriverVerifyDTO;
import com.doumee.dao.dto.ShopVerifyDTO;
+import com.doumee.dao.dto.StoreOutDTO;
import com.doumee.dao.dto.MyOrderDTO;
import com.doumee.dao.vo.MyOrderDetailVO;
import com.doumee.dao.vo.MyOrderVO;
@@ -77,6 +80,16 @@
return ApiResponse.success("鏌ヨ鎴愬姛", ordersService.findMyOrderPage(pageWrap, getMemberId()));
}
+ @LoginShopRequired
+ @ApiOperation(value = "闂ㄥ簵璁㈠崟鍒嗛〉", notes = "闂ㄥ簵绔紝鏌ヨ瀛樹欢/鍙栦欢闂ㄥ簵涓哄綋鍓嶉棬搴楃殑璁㈠崟")
+ @PostMapping("/shopPage")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "闂ㄥ簵token鍊�", required = true)
+ })
+ public ApiResponse<PageData<MyOrderVO>> shopPage(@RequestBody @Validated PageWrap<MyOrderDTO> pageWrap) {
+ return ApiResponse.success("鏌ヨ鎴愬姛", ordersService.findShopOrderPage(pageWrap, getShopId()));
+ }
+
@LoginRequired
@ApiOperation(value = "浼氬憳璁㈠崟璇︽儏", notes = "灏忕▼搴忕锛屾煡璇㈠綋鍓嶄細鍛樼殑璁㈠崟璇︽儏")
@GetMapping("/detail/{orderId}")
@@ -108,6 +121,29 @@
})
public ApiResponse<OverdueFeeVO> overdueFee(@PathVariable Integer orderId) {
return ApiResponse.success("鏌ヨ鎴愬姛", ordersService.calculateOverdueFee(orderId));
+ }
+
+ @LoginRequired
+ @ApiOperation(value = "閫炬湡璐圭敤鏀粯", notes = "閫炬湡璁㈠崟鍞よ捣寰俊鏀粯")
+ @PostMapping("/payOverdueFee/{orderId}")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "path", dataType = "Integer", name = "orderId", value = "璁㈠崟涓婚敭", required = true),
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+ })
+ public ApiResponse<PayResponse> payOverdueFee(@PathVariable Integer orderId) {
+ return ApiResponse.success("鎿嶄綔鎴愬姛", ordersService.payOverdueFee(orderId, getMemberId()));
+ }
+
+ @LoginRequired
+ @ApiOperation(value = "浼氬憳鍒犻櫎璁㈠崟", notes = "浠呭凡瀹屾垚/宸插彇娑�/宸查��娆捐鍗曞彲鍒犻櫎锛岄�昏緫鍒犻櫎")
+ @PostMapping("/delete/{orderId}")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "path", dataType = "Integer", name = "orderId", value = "璁㈠崟涓婚敭", required = true),
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+ })
+ public ApiResponse deleteOrder(@PathVariable Integer orderId) {
+ ordersService.deleteMyOrder(orderId, getMemberId());
+ return ApiResponse.success("鍒犻櫎鎴愬姛");
}
@LoginShopRequired
@@ -145,5 +181,38 @@
return ApiResponse.success("鏌ヨ鎴愬姛", ordersService.findShopOrderDetail(orderId, verifyCode));
}
+ @LoginShopRequired
+ @ApiOperation(value = "闂ㄥ簵纭鍑哄簱", notes = "鍙栦欢闂ㄥ簵纭鍑哄簱锛岃鍗曞畬鎴�")
+ @PostMapping("/storeOut")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "闂ㄥ簵token鍊�", required = true)
+ })
+ public ApiResponse storeOut(@RequestBody @Validated StoreOutDTO dto) {
+ ordersService.confirmStoreOut(dto.getOrderId(), getShopId(), dto.getImages(), dto.getRemark());
+ return ApiResponse.success("鍑哄簱鎴愬姛");
+ }
+
+ @LoginShopRequired
+ @ApiOperation(value = "纭椤惧鍒板簵", notes = "闂ㄥ簵纭椤惧宸插埌搴楀彇浠讹紝妫�鏌ラ�炬湡/閫�娆�")
+ @PostMapping("/confirmArrived")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "闂ㄥ簵token鍊�", required = true)
+ })
+ public ApiResponse confirmArrived(@RequestBody @Validated ConfirmArriveDTO dto) {
+ ordersService.confirmCustomerArrived(dto.getOrderId(), getShopId());
+ return ApiResponse.success("鎿嶄綔鎴愬姛");
+ }
+
+ @LoginRequired
+ @ApiOperation(value = "璁㈠崟璇勪环", notes = "宸插畬鎴愪笖鏈瘎浠风殑璁㈠崟鍙繘琛岃瘎浠�")
+ @PostMapping("/comment")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+ })
+ public ApiResponse comment(@RequestBody @Validated CommentOrderDTO dto) {
+ ordersService.commentOrder(dto, getMemberId());
+ return ApiResponse.success("璇勪环鎴愬姛");
+ }
+
}
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 f537df4..328d3fa 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
@@ -58,12 +58,12 @@
}
//搴楅摵鎶奸噾璁㈠崟
case "shopDeposit": {
-
+ ordersService.handleShopDepositPayNotify(outTradeNo, paymentNo);
break;
}
//閫炬湡璐圭敤璁㈠崟
case "overdueFee": {
-
+ ordersService.handleOverdueFeePayNotify(outTradeNo, paymentNo);
break;
}
}
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 0f31c5a..60b5eee 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
@@ -11,10 +11,15 @@
import com.doumee.dao.dto.ShopInfoMaintainDTO;
import com.doumee.dao.dto.ShopNearbyDTO;
import com.doumee.dao.vo.ShopDetailVO;
+import com.doumee.dao.vo.ShopCenterVO;
import com.doumee.dao.vo.ShopNearbyVO;
import com.doumee.dao.vo.ShopWebDetailVO;
+import com.doumee.dao.vo.PayResponse;
+import com.doumee.service.business.OrdersService;
import com.doumee.service.business.ShopInfoService;
import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -32,6 +37,9 @@
@Autowired
private ShopInfoService shopInfoService;
+
+ @Autowired
+ private OrdersService ordersService;
@LoginRequired
@ApiOperation("闂ㄥ簵鍏ラ┗鐢宠/淇敼")
@@ -62,6 +70,16 @@
}
@LoginShopRequired
+ @ApiOperation("鑾峰彇闂ㄥ簵鐧诲綍鍚庝俊鎭�")
+ @GetMapping("/getShopInfo")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "闂ㄥ簵token鍊�", required = true)
+ })
+ public ApiResponse<ShopCenterVO> getShopInfo() {
+ return ApiResponse.success("鏌ヨ鎴愬姛", shopInfoService.getShopCenterInfo(getShopId()));
+ }
+
+ @LoginShopRequired
@ApiOperation("缁存姢闂ㄥ簵淇℃伅锛堟敮浠樻娂閲戝悗锛�")
@PostMapping("/maintain")
public ApiResponse maintain(@RequestBody ShopInfoMaintainDTO dto) {
@@ -76,4 +94,14 @@
return ApiResponse.success(shopInfoService.getShopMaintainInfo(this.getMemberId()));
}
+ @LoginShopRequired
+ @ApiOperation("闂ㄥ簵鏀粯鎶奸噾")
+ @PostMapping("/payDeposit")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "闂ㄥ簵token鍊�", required = true)
+ })
+ public ApiResponse<PayResponse> payDeposit() {
+ return ApiResponse.success("鎿嶄綔鎴愬姛", ordersService.payShopDeposit(getShopId()));
+ }
+
}
diff --git a/server/web/src/main/java/com/doumee/api/web/WalletApi.java b/server/web/src/main/java/com/doumee/api/web/WalletApi.java
new file mode 100644
index 0000000..ac0cb79
--- /dev/null
+++ b/server/web/src/main/java/com/doumee/api/web/WalletApi.java
@@ -0,0 +1,83 @@
+package com.doumee.api.web;
+
+import com.doumee.core.annotation.LoginRequired;
+import com.doumee.core.annotation.LoginShopRequired;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.dao.dto.WithdrawalDTO;
+import com.doumee.dao.vo.RevenueStatisticsVO;
+import com.doumee.service.business.RevenueService;
+import com.doumee.service.business.WithdrawalOrdersService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2026/4/16 18:05
+ */
+@Api(tags = "閽卞寘涓氬姟")
+@RestController
+@RequestMapping("/web/wallet")
+public class WalletApi extends ApiController{
+
+
+
+ @Autowired
+ private WithdrawalOrdersService withdrawalOrdersService;
+
+ @Autowired
+ private RevenueService revenueService;
+
+ @LoginRequired
+ @ApiOperation(value = "鍙告満鎻愮幇鐢宠", notes = "灏忕▼搴忕")
+ @PostMapping("/driverApply")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+ })
+ public ApiResponse driverApply(@RequestBody @Validated WithdrawalDTO dto) {
+ withdrawalOrdersService.applyDriverWithdrawal(dto, getMemberId());
+ return ApiResponse.success("鎻愮幇鐢宠宸叉彁浜�");
+ }
+
+ @LoginShopRequired
+ @ApiOperation(value = "闂ㄥ簵鎻愮幇鐢宠", notes = "灏忕▼搴忕")
+ @PostMapping("/shopApply")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "闂ㄥ簵token鍊�", required = true),
+ })
+ public ApiResponse shopApply(@RequestBody @Validated WithdrawalDTO dto) {
+ withdrawalOrdersService.applyShopWithdrawal(dto, getShopId());
+ return ApiResponse.success("鎻愮幇鐢宠宸叉彁浜�");
+ }
+
+ @LoginShopRequired
+ @ApiOperation(value = "闂ㄥ簵鏀剁泭缁熻", notes = "褰撳墠鐧诲綍闂ㄥ簵鐨勬敹鐩�/鎻愮幇缁熻")
+ @GetMapping("/shopStatistics")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "闂ㄥ簵token鍊�", required = true)
+ })
+ public ApiResponse<RevenueStatisticsVO> shopStatistics() {
+ return ApiResponse.success("鏌ヨ鎴愬姛", revenueService.getShopRevenueStatistics(getShopId()));
+ }
+
+ @LoginRequired
+ @ApiOperation(value = "鍙告満鏀剁泭缁熻", notes = "褰撳墠鐧诲綍鍙告満鐨勬敹鐩�/鎻愮幇缁熻")
+ @GetMapping("/driverStatistics")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+ })
+ public ApiResponse<RevenueStatisticsVO> driverStatistics() {
+ return ApiResponse.success("鏌ヨ鎴愬姛", revenueService.getDriverRevenueStatistics(getMemberId()));
+ }
+
+}
--
Gitblit v1.9.3