From 142e151cc0dfa17420192b9ef476891031f2062d Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期一, 20 四月 2026 17:20:27 +0800
Subject: [PATCH] Merge branch 'master' of http://139.186.142.91:10010/r/productDev/gtzxinglijicun
---
server/services/src/main/java/com/doumee/dao/dto/DriverGrabOrderDTO.java | 27
server/services/src/main/java/com/doumee/dao/vo/DriverOrderDetailVO.java | 89 ++
server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java | 649 +++++++++++++++++
server/web/src/main/java/com/doumee/api/web/ApiController.java | 14
server/web/src/main/java/com/doumee/api/web/RevenueApi.java | 72 ++
server/services/src/main/java/com/doumee/service/business/impl/SmsrecordServiceImpl.java | 17
server/services/src/main/java/com/doumee/dao/dto/CalculateLocalPriceDTO.java | 14
server/services/src/main/java/com/doumee/service/business/ShopInfoService.java | 2
server/web/src/main/java/com/doumee/api/web/ConfigApi.java | 31
server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java | 5
server/services/src/main/java/com/doumee/core/utils/aliyun/AliSmsService.java | 2
server/services/src/main/java/com/doumee/dao/vo/AccountResponse.java | 9
server/services/src/main/java/com/doumee/service/business/impl/AreasServiceImpl.java | 15
server/services/src/main/java/com/doumee/dao/business/model/DriverInfo.java | 9
server/services/src/main/java/com/doumee/dao/vo/ShopNearbyVO.java | 6
server/services/src/main/java/com/doumee/dao/business/model/Category.java | 2
server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java | 25
server/services/src/main/java/com/doumee/dao/vo/RevenueSummaryVO.java | 17
server/services/src/main/java/com/doumee/dao/vo/DriverCenterVO.java | 46 +
server/web/src/main/java/com/doumee/api/web/ShopInfoApi.java | 4
server/services/src/main/java/com/doumee/dao/business/model/PricingRule.java | 2
server/services/src/main/java/com/doumee/dao/dto/ShopNearbyDTO.java | 3
server/web/src/main/java/com/doumee/api/web/OrdersApi.java | 11
server/services/src/main/java/com/doumee/service/business/RevenueService.java | 38 +
server/services/src/main/resources/application-pro.yml | 44
server/services/src/main/java/com/doumee/dao/vo/EstimatedDeliveryResultVO.java | 26
server/services/src/main/java/com/doumee/dao/vo/ShopWebDetailVO.java | 12
server/services/src/main/java/com/doumee/dao/vo/UserCenterVO.java | 17
server/services/src/main/java/com/doumee/dao/business/model/Orders.java | 15
server/services/src/main/java/com/doumee/service/business/DriverInfoService.java | 63 +
server/services/src/main/java/com/doumee/core/utils/Tencent/MapUtil.java | 58 +
server/services/src/main/java/com/doumee/dao/dto/RevenueQueryDTO.java | 28
server/web/src/main/java/com/doumee/api/web/WalletApi.java | 13
server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java | 55 +
server/services/src/main/java/com/doumee/dao/dto/DriverActiveOrderDTO.java | 22
server/services/src/main/java/com/doumee/config/wx/WxPayProperties.java | 39 +
server/services/src/main/java/com/doumee/core/annotation/LoginDriverRequired.java | 10
server/services/src/main/java/com/doumee/service/business/OrdersService.java | 25
server/services/src/main/java/com/doumee/dao/dto/SameCityCheckDTO.java | 34
server/services/src/main/java/com/doumee/dao/dto/CalculateRemotePriceDTO.java | 3
server/services/src/main/java/com/doumee/service/business/AreasService.java | 8
server/services/src/main/java/com/doumee/dao/vo/DriverGrabOrderVO.java | 71 +
server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java | 31
server/services/src/main/resources/application-dev.yml | 31
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 | 8
server/web/src/main/java/com/doumee/api/web/DriverInfoApi.java | 107 ++
server/services/src/main/java/com/doumee/dao/vo/PriceCalculateVO.java | 6
server/services/src/main/java/com/doumee/service/business/impl/RevenueServiceImpl.java | 116 +++
server/services/db/db_change.sql | 20
server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java | 29
server/services/src/main/java/com/doumee/dao/dto/ShopApplyDTO.java | 3
server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java | 142 +++
server/web/src/main/resources/application.yml | 2
server/services/src/main/java/com/doumee/config/alipay/AlipayFundTransUniTransfer.java | 11
55 files changed, 1,998 insertions(+), 162 deletions(-)
diff --git a/server/services/db/db_change.sql b/server/services/db/db_change.sql
index eab5b91..2afd4ab 100644
--- a/server/services/db/db_change.sql
+++ b/server/services/db/db_change.sql
@@ -5,6 +5,25 @@
-- ============================================================
+-- 2026/04/20 璁㈠崟琛ㄥ鍔犵墿鍝佺骇鍒瓧娈�
+-- ============================================================
+ALTER TABLE `orders` ADD COLUMN `GOOD_LEVEL` INT DEFAULT NULL COMMENT '鐗╁搧绾у埆锛坈ategory涓婚敭锛宼ype=3锛�' AFTER `GOOD_TYPE`;
+
+
+-- ============================================================
+-- 2026/04/17 璁㈠崟棰勮閫佽揪鏃堕棿瀛楁
+-- ============================================================
+ALTER TABLE `orders` ADD COLUMN `ESTIMATED_DELIVERY_TIME` DATETIME DEFAULT NULL COMMENT '棰勮閫佽揪鏃堕棿' AFTER `CODE`;
+
+
+-- ============================================================
+-- 2026/04/17 鍙告満瀹炴椂瀹氫綅瀛楁
+-- ============================================================
+ALTER TABLE `driver_info` ADD COLUMN `LONGITUDE` DOUBLE DEFAULT NULL COMMENT '瀹氫綅缁忓害' AFTER `ACCEPTING_STATUS`;
+ALTER TABLE `driver_info` ADD COLUMN `LATITUDE` DOUBLE DEFAULT NULL COMMENT '瀹氫綅绾害' AFTER `LONGITUDE`;
+
+
+-- ============================================================
-- 2026/04/16 璁㈠崟缁撶畻鍔熻兘锛氱粨绠楁椂闂村瓧娈� + 闂ㄥ簵/鍙告満浣欓瀛楁
-- ============================================================
ALTER TABLE `orders` ADD COLUMN `SETTLEMENT_TIME` DATETIME DEFAULT NULL COMMENT '缁撶畻鏃堕棿' AFTER `SETTLEMENT_STATUS`;
@@ -14,6 +33,7 @@
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`;
+ALTER TABLE `driver_info` ADD COLUMN `ACCEPTING_STATUS` INT DEFAULT 0 COMMENT '鏄惁鎺ュ崟涓細0=鏈帴鍗曪紱1=鎺ュ崟涓�' AFTER `TOTAL_BALANCE`;
-- ============================================================
diff --git a/server/services/src/main/java/com/doumee/config/alipay/AlipayFundTransUniTransfer.java b/server/services/src/main/java/com/doumee/config/alipay/AlipayFundTransUniTransfer.java
index def1a64..e495576 100644
--- a/server/services/src/main/java/com/doumee/config/alipay/AlipayFundTransUniTransfer.java
+++ b/server/services/src/main/java/com/doumee/config/alipay/AlipayFundTransUniTransfer.java
@@ -17,39 +17,29 @@
ApiClient defaultClient = Configuration.getDefaultApiClient();
// 鍒濆鍖朼lipay鍙傛暟锛堝叏灞�璁剧疆涓�娆★級
defaultClient.setAlipayConfig(getAlipayConfig());
-
// 鏋勯�犺姹傚弬鏁颁互璋冪敤鎺ュ彛
AlipayFundTransUniApi api = new AlipayFundTransUniApi();
AlipayFundTransUniTransferModel data = new AlipayFundTransUniTransferModel();
-
// 璁剧疆鍟嗗渚у敮涓�璁㈠崟鍙�
data.setOutBizNo("202606300001");
-
// 璁剧疆璁㈠崟鎬婚噾棰�
data.setTransAmount("1");
-
// 璁剧疆鎻忚堪鐗瑰畾鐨勪笟鍔″満鏅�
data.setBizScene("DIRECT_TRANSFER");
-
// 璁剧疆涓氬姟浜у搧鐮�
data.setProductCode("TRANS_ACCOUNT_NO_PWD");
-
// 璁剧疆杞处涓氬姟鐨勬爣棰�
data.setOrderTitle("201905浠e彂");
-
// 璁剧疆鍘熸敮浠樺疂涓氬姟鍗曞彿
data.setOriginalOrderId("20190620110075000006640000063056");
-
// 璁剧疆鏀舵鏂逛俊鎭�
Participant payeeInfo = new Participant();
payeeInfo.setIdentity("15345690849");
payeeInfo.setName("姹熻悕");
payeeInfo.setIdentityType("ALIPAY_LOGON_ID");
data.setPayeeInfo(payeeInfo);
-
// 璁剧疆涓氬姟澶囨敞
data.setRemark("201905浠e彂");
-
// 璁剧疆杞处鍦烘櫙鍚嶇О
data.setTransferSceneName("浣i噾鎶ラ叕");
@@ -74,7 +64,6 @@
signData.setOriCharSet("UTF-8");
data.setSignData(signData);
*/
-
try {
AlipayFundTransUniTransferResponseModel response = api.transfer(data);
} catch (ApiException e) {
diff --git a/server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java b/server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
index aab481a..1adf556 100644
--- a/server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
+++ b/server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
@@ -29,11 +29,10 @@
public static final String MEMBER_ID = "MEMBER_ID";
- public static final String MEMBER_INFO = "MEMBER_INFO";
-
public static final String SHOP_ID = "SHOP_ID";
- public static final String SHOP_INFO = "SHOP_INFO";
+ public static final String DRIVER_ID = "DRIVER_ID";
+
@Resource
private RedisTemplate<String,Object> redisTemplate;
diff --git a/server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java b/server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java
index 6a3bcd9..3c85107 100644
--- a/server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java
+++ b/server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java
@@ -1,6 +1,7 @@
package com.doumee.config.jwt;
import com.alibaba.fastjson.JSONObject;
+import com.doumee.core.annotation.LoginDriverRequired;
import com.doumee.core.annotation.LoginRequired;
import com.doumee.core.annotation.LoginShopRequired;
import com.doumee.core.constants.Constants;
@@ -87,6 +88,22 @@
} else {
throw new BusinessException(ResponseStatus.BE_OVERDUE.getCode(),"鏈櫥褰�");
}
+ }else if (beanType.isAnnotationPresent(LoginDriverRequired.class)) {
+ //鑾峰彇token
+ String token = request.getHeader(JwtTokenUtil.HEADER_KEY); // 浠� http 璇锋眰澶翠腑鍙栧嚭 token
+ if (StringUtils.isNotBlank(token)) {
+ checkDriverLogin(request,response);
+ } else {
+ throw new BusinessException(ResponseStatus.BE_OVERDUE.getCode(),"鏈櫥褰�");
+ }
+ }else if (handlerMethod.hasMethodAnnotation(LoginDriverRequired.class)){
+ //鑾峰彇token
+ String token = request.getHeader(JwtTokenUtil.HEADER_KEY); // 浠� http 璇锋眰澶翠腑鍙栧嚭 token
+ if (StringUtils.isNotBlank(token)) {
+ checkDriverLogin(request,response);
+ } else {
+ throw new BusinessException(ResponseStatus.BE_OVERDUE.getCode(),"鏈櫥褰�");
+ }
}
return true;
}
@@ -99,11 +116,10 @@
public Boolean checkMemberLogin(HttpServletRequest request, HttpServletResponse response){
String token = request.getHeader(JwtTokenUtil.HEADER_KEY);
try {
-
if(!token.startsWith(Constants.ZERO+"")){
throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME);
}
- String tokenRedis = (String) redisTemplate.opsForValue().get(token);
+ String tokenRedis = (String) redisTemplate.opsForValue().get(Constants.REDIS_TOKEN_KEY+token);
if(StringUtils.isBlank(tokenRedis)){
throw new BusinessException(ResponseStatus.BE_OVERDUE);
}
@@ -117,7 +133,6 @@
}
Integer count = dao.queryForObject("select count(1) from member where id = ?", Integer.class, member.getId());
if (count != null && count > 0) {
- request.setAttribute(JwtTokenUtil.MEMBER_INFO, JSONObject.toJSONString(member));
request.setAttribute(JwtTokenUtil.MEMBER_ID, member.getId());
return true;
}else{
@@ -135,7 +150,7 @@
if(!token.startsWith(Constants.TWO+"")){
throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME);
}
- String tokenRedis = (String) redisTemplate.opsForValue().get(token);
+ String tokenRedis = (String) redisTemplate.opsForValue().get(Constants.REDIS_TOKEN_KEY+token);
if(StringUtils.isBlank(tokenRedis)){
throw new BusinessException(ResponseStatus.BE_OVERDUE);
}
@@ -159,7 +174,6 @@
}
Integer count = dao.queryForObject("select count(1) from shop where id = ?", Integer.class, shopId);
if (count != null && count > 0) {
- request.setAttribute(JwtTokenUtil.SHOP_INFO, JSONObject.toJSONString(shop));
request.setAttribute(JwtTokenUtil.SHOP_ID, shop.getId());
return true;
}else{
@@ -170,6 +184,37 @@
}
}
+ public Boolean checkDriverLogin(HttpServletRequest request, HttpServletResponse response){
+ String token = request.getHeader(JwtTokenUtil.HEADER_KEY);
+ try {
+ if(!token.startsWith(Constants.ONE+"")){
+ throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME);
+ }
+ String tokenRedis = (String) redisTemplate.opsForValue().get(Constants.REDIS_TOKEN_KEY+token);
+ if(StringUtils.isBlank(tokenRedis)){
+ throw new BusinessException(ResponseStatus.BE_OVERDUE);
+ }
+ Integer memberId = getTokenId(token);
+ Integer isDeleted = dao.queryForObject(" select COALESCE(DELETED,1) from member where user_type = 1 and id = ?", Integer.class, memberId);
+ if(isDeleted== Constants.ONE){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍙告満淇℃伅宸插垹闄�,璇疯仈绯荤鐞嗗憳");
+ }
+ Integer isForbidden = dao.queryForObject(" select COALESCE(STATUS,0) from member where user_type = 1 and id = ?", Integer.class, memberId);
+ if(isForbidden == Constants.ONE){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍙告満淇℃伅宸茬鐢�,璇疯仈绯荤鐞嗗憳");
+ }
+ Integer count = dao.queryForObject("select count(1) from member where user_type = 1 and id = ?", Integer.class, memberId);
+ if (count != null && count > 0) {
+ request.setAttribute(JwtTokenUtil.DRIVER_ID, memberId);
+ return true;
+ }else{
+ throw new BusinessException(ResponseStatus.BE_OVERDUE.getCode(),"鍙告満淇℃伅鍑洪敊");
+ }
+ } catch (IllegalArgumentException | JwtException e) {
+ throw new BusinessException(ResponseStatus.BE_OVERDUE);
+ }
+ }
+
public Integer getTokenId(String token){
try {
diff --git a/server/services/src/main/java/com/doumee/config/wx/WxPayProperties.java b/server/services/src/main/java/com/doumee/config/wx/WxPayProperties.java
index 5c86de7..e4c45ba 100644
--- a/server/services/src/main/java/com/doumee/config/wx/WxPayProperties.java
+++ b/server/services/src/main/java/com/doumee/config/wx/WxPayProperties.java
@@ -46,4 +46,43 @@
*/
private String keyPath;
+
+
+ /**
+ * apiV3Key
+ */
+ private String apiV3Key;
+
+
+
+ /**
+ * 鍟嗘埛璇佷功搴忓垪鍙�
+ */
+ private String serialNumer;
+
+ /**
+ * 閫�娆惧洖璋�
+ */
+ private String refundNotifyUrl;
+
+ /**
+ * 鍟嗘埛鏀粯鍏挜
+ */
+ private String pubKeyPath;
+
+
+ /**
+ * 鏀粯绉橀挜
+ */
+ private String privateCertPath;
+
+
+
+ /**
+ * 鏀粯key
+ */
+ private String privateKeyPath;
+
+
+
}
diff --git a/server/services/src/main/java/com/doumee/core/annotation/LoginDriverRequired.java b/server/services/src/main/java/com/doumee/core/annotation/LoginDriverRequired.java
new file mode 100644
index 0000000..f8e4dda
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/core/annotation/LoginDriverRequired.java
@@ -0,0 +1,10 @@
+package com.doumee.core.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ElementType.METHOD,ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface LoginDriverRequired {}
diff --git a/server/services/src/main/java/com/doumee/core/utils/Tencent/MapUtil.java b/server/services/src/main/java/com/doumee/core/utils/Tencent/MapUtil.java
index cf377b8..9604686 100644
--- a/server/services/src/main/java/com/doumee/core/utils/Tencent/MapUtil.java
+++ b/server/services/src/main/java/com/doumee/core/utils/Tencent/MapUtil.java
@@ -28,6 +28,9 @@
/** 璺濈鐭╅樀API */
public static final String MATRIX_URL = "https://apis.map.qq.com/ws/distance/v1/matrix";
+ /** 閫嗗湴鐞嗚В鏋� */
+ public static final String GEO_URL = "https://apis.map.qq.com/ws/geocoder/v1/";
+
/** 鏀寔鐨勬ā寮� */
private static final List<String> SUPPORTED_MODES = Arrays.asList("driving", "bicycling");
@@ -121,4 +124,59 @@
.map(row -> ((JSONObject) row).getJSONArray("elements").getJSONObject(0))
.collect(Collectors.toList());
}
+
+ /**
+ * 閫嗗湴鐞嗚В鏋� - 鏍规嵁缁忕含搴﹁幏鍙栧湴鍧�淇℃伅
+ *
+ * @param lat 绾害
+ * @param lng 缁忓害
+ * @return result.ad_info 涓殑 adcode(鍖哄垝鐮�)銆乧ity(鍩庡競)銆乨istrict(鍖�) 绛変俊鎭�
+ */
+ public static JSONObject reverseGeocode(double lat, double lng) {
+ try {
+ String url = GEO_URL
+ + "?key=" + tencentKey
+ + "&location=" + lat + "," + lng;
+
+ log.info("鑵捐鍦板浘閫嗗湴鐞嗚В鏋愯姹�: location={},{}", lat, lng);
+
+ JSONObject json = new Http().build(url)
+ .setConnectTimeout(5000)
+ .setReadTimeout(10000)
+ .get()
+ .toJSONObject();
+
+ log.info("鑵捐鍦板浘閫嗗湴鐞嗚В鏋愬搷搴�: {}", json);
+
+ if (json.getIntValue("status") != 0) {
+ throw new RuntimeException("鑵捐鍦板浘閫嗗湴鐞嗚В鏋愬け璐�: " + json.getString("message"));
+ }
+
+ return json.getJSONObject("result");
+ } catch (IOException e) {
+ log.error("鑵捐鍦板浘閫嗗湴鐞嗚В鏋愬紓甯�", e);
+ throw new RuntimeException("鑵捐鍦板浘閫嗗湴鐞嗚В鏋愬紓甯�", e);
+ }
+ }
+
+ /**
+ * 鍒ゆ柇涓や釜缁忕含搴︽槸鍚﹀湪鍚屼竴涓煄甯�
+ *
+ * @param lat1 绗竴涓偣绾害
+ * @param lng1 绗竴涓偣缁忓害
+ * @param lat2 绗簩涓偣绾害
+ * @param lng2 绗簩涓偣缁忓害
+ * @return true=鍚屽煄锛宖alse=涓嶅悓鍩�
+ */
+ public static boolean isSameCity(double lat1, double lng1, double lat2, double lng2) {
+ JSONObject result1 = reverseGeocode(lat1, lng1);
+ JSONObject result2 = reverseGeocode(lat2, lng2);
+
+ String city1 = result1.getJSONObject("ad_info").getString("city");
+ String city2 = result2.getJSONObject("ad_info").getString("city");
+
+ log.info("鍒ゆ柇鍚屽煄: ({},{}) => city={}, ({},{}) => city={}", lat1, lng1, city1, lat2, lng2, city2);
+
+ return city1 != null && city1.equals(city2);
+ }
}
diff --git a/server/services/src/main/java/com/doumee/service/business/AliSmsService.java b/server/services/src/main/java/com/doumee/core/utils/aliyun/AliSmsService.java
similarity index 98%
rename from server/services/src/main/java/com/doumee/service/business/AliSmsService.java
rename to server/services/src/main/java/com/doumee/core/utils/aliyun/AliSmsService.java
index 43f915d..66796b6 100644
--- a/server/services/src/main/java/com/doumee/service/business/AliSmsService.java
+++ b/server/services/src/main/java/com/doumee/core/utils/aliyun/AliSmsService.java
@@ -1,4 +1,4 @@
-package com.doumee.service.business;
+package com.doumee.core.utils.aliyun;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Category.java b/server/services/src/main/java/com/doumee/dao/business/model/Category.java
index 62bdcfd..7905e9e 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Category.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Category.java
@@ -79,7 +79,7 @@
@ExcelColumn(name="鎺掑簭鐮侊紙鍗囧簭锛�")
private Integer sortnum;
- @ApiModelProperty(value = "闄勫睘瀛楁1 (type=1:鏄惁闇�瑕佷笂浼犻┚椹惰瘉锛�0=涓嶉渶瑕侊紱1=闇�瑕侊紱) ")
+ @ApiModelProperty(value = "闄勫睘瀛楁1 (type=1:鏄惁闇�瑕佷笂浼犻┚椹惰瘉锛�0=涓嶉渶瑕侊紱1=闇�瑕侊紱type=3:鏄惁璐甸噸鐗╁搧锛�0=鍚︼紱1=鏄紱type=4:灏哄鎻忚堪锛�) ")
@ExcelColumn(name="鍐呭")
private String otherField;
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 c38dd92..0ccc1e6 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
@@ -141,6 +141,15 @@
@ApiModelProperty(value = "鍘嗗彶鎬婚噾棰�(鍒�)")
private Long totalBalance;
+ @ApiModelProperty(value = "鏄惁鎺ュ崟涓細0=宸蹭笅绾匡紱1=鎺ュ崟涓�", example = "0")
+ private Integer acceptingStatus;
+
+ @ApiModelProperty(value = "瀹氫綅缁忓害", example = "116.404")
+ private Double longitude;
+
+ @ApiModelProperty(value = "瀹氫綅绾害", example = "39.915")
+ private Double latitude;
+
@ApiModelProperty(value = "杞﹁締鐓х墖鍒楄〃")
@TableField(exist = false)
private List<Multifile> carImgList = new ArrayList<>();
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 d8b5f77..ab1ac3d 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
@@ -191,6 +191,9 @@
@ExcelColumn(name = "鍟嗗搧绫诲瀷")
private Integer goodType;
+ @ApiModelProperty(value = "鐗╁搧绾у埆锛坈ategory涓婚敭锛宼ype=3锛�")
+ private Integer goodLevel;
+
@ApiModelProperty(value = "琛ュ厖淇℃伅")
@ExcelColumn(name = "琛ュ厖淇℃伅")
private String supplement;
@@ -283,6 +286,10 @@
@ApiModelProperty(value = "璁㈠崟缂栧彿")
@ExcelColumn(name = "璁㈠崟缂栧彿")
private String code;
+
+ @ApiModelProperty(value = "棰勮閫佽揪鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date estimatedDeliveryTime;
@ApiModelProperty(value = "鍙告満钖叕锛堝垎锛�")
@ExcelColumn(name = "鍙告満钖叕")
@@ -397,4 +404,12 @@
@ApiModelProperty(value = "鍙栦欢闂ㄥ簵鍦板潃锛堝叧鑱旀煡璇級")
private String takeShopAddress;
+ @TableField(exist = false)
+ @ApiModelProperty(value = "鍙栦欢闂ㄥ簵鑱旂郴鐢佃瘽锛堝叧鑱旀煡璇級")
+ private String takeShopLinkPhone;
+
+ @TableField(exist = false)
+ @ApiModelProperty(value = "鐗╁搧绛夌骇璐甸噸鏍囪瘑锛堝叧鑱旀煡璇細0=鍚︼紱1=鏄級")
+ private String c2OtherField;
+
}
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/PricingRule.java b/server/services/src/main/java/com/doumee/dao/business/model/PricingRule.java
index 18fb878..dd30250 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/PricingRule.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/PricingRule.java
@@ -48,7 +48,7 @@
@ApiModelProperty(value = "鍩庡競涓婚敭锛坅rea_id锛�", example = "1")
private Integer cityId;
- @ApiModelProperty(value = "绫诲瀷锛�0=灏卞湴瀛樺彇瑙勫垯锛�1=寮傚湴瀛樺彇瑙勫垯锛�2=棰勮澶辨晥锛�3=闂ㄥ簵娉ㄥ唽鎶奸噾锛�4=鍒嗘垚姣斾緥", example = "0")
+ @ApiModelProperty(value = "绫诲瀷锛�0=灏卞湴瀛樺彇瑙勫垯锛�1=寮傚湴瀛樺彇瑙勫垯锛�2=棰勮鏃舵晥锛�3=闂ㄥ簵娉ㄥ唽鎶奸噾锛�4=鍒嗘垚姣斾緥", example = "0")
@ExcelColumn(name = "绫诲瀷", index = 2, width = 10, valueMapping = "0=灏卞湴瀛樺彇瑙勫垯;1=寮傚湴瀛樺彇瑙勫垯;2=棰勮澶辨晥;3=闂ㄥ簵娉ㄥ唽鎶奸噾;4=鍒嗘垚姣斾緥;")
private Integer type;
diff --git a/server/services/src/main/java/com/doumee/dao/dto/CalculateLocalPriceDTO.java b/server/services/src/main/java/com/doumee/dao/dto/CalculateLocalPriceDTO.java
index c411602..9d95813 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/CalculateLocalPriceDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/CalculateLocalPriceDTO.java
@@ -8,6 +8,7 @@
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
+import java.util.Date;
import java.util.List;
/**
@@ -24,17 +25,18 @@
@NotNull(message = "鍩庡競涓嶈兘涓虹┖")
private Integer cityId;
- @ApiModelProperty(value = "棰勮瀛樻斁澶╂暟", required = true)
- @NotNull(message = "棰勮瀛樻斁澶╂暟涓嶈兘涓虹┖")
- private Integer estimatedDepositDays;
+ @ApiModelProperty(value = "棰勮瀛樻斁寮�濮嬫椂闂�", required = true)
+ @NotNull(message = "棰勮瀛樻斁寮�濮嬫椂闂翠笉鑳戒负绌�")
+ private Date depositStartTime;
+
+ @ApiModelProperty(value = "棰勮瀛樻斁缁撴潫鏃堕棿", required = true)
+ @NotNull(message = "棰勮瀛樻斁缁撴潫鏃堕棿涓嶈兘涓虹┖")
+ private Date depositEndTime;
@ApiModelProperty(value = "鐗╁搧鍒楄〃", required = true)
@NotEmpty(message = "鐗╁搧鍒楄〃涓嶈兘涓虹┖")
@Valid
private List<OrderItemDTO> items;
-
- @ApiModelProperty(value = "鏄惁淇濅环")
- private Boolean insured;
@ApiModelProperty(value = "淇濅环閲戦(鍏�)")
private BigDecimal declaredAmount;
diff --git a/server/services/src/main/java/com/doumee/dao/dto/CalculateRemotePriceDTO.java b/server/services/src/main/java/com/doumee/dao/dto/CalculateRemotePriceDTO.java
index b512f85..e4e2bc2 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/CalculateRemotePriceDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/CalculateRemotePriceDTO.java
@@ -45,9 +45,6 @@
@Valid
private List<OrderItemDTO> items;
- @ApiModelProperty(value = "鏄惁淇濅环")
- private Boolean insured;
-
@ApiModelProperty(value = "淇濅环閲戦(鍏�)")
private BigDecimal declaredAmount;
diff --git a/server/services/src/main/java/com/doumee/dao/dto/DriverActiveOrderDTO.java b/server/services/src/main/java/com/doumee/dao/dto/DriverActiveOrderDTO.java
new file mode 100644
index 0000000..4b6bbe9
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/DriverActiveOrderDTO.java
@@ -0,0 +1,22 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 鍙告満杩涜涓鍗曟煡璇㈣姹�
+ * @author rk
+ * @date 2026/04/17
+ */
+@Data
+@ApiModel("鍙告満杩涜涓鍗曟煡璇㈣姹�")
+public class DriverActiveOrderDTO {
+
+ @NotNull(message = "璁㈠崟鐘舵�佷笉鑳戒负绌�")
+ @ApiModelProperty(value = "璁㈠崟鐘舵�侊細3=宸叉姠鍗曪紱4=娲鹃�佷腑", example = "3", required = true)
+ private Integer status;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/DriverGrabOrderDTO.java b/server/services/src/main/java/com/doumee/dao/dto/DriverGrabOrderDTO.java
new file mode 100644
index 0000000..36081b7
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/DriverGrabOrderDTO.java
@@ -0,0 +1,27 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 鍙告満鎶㈠崟澶у巺鏌ヨ璇锋眰
+ * @author rk
+ * @date 2026/04/17
+ */
+@Data
+@ApiModel("鍙告満鎶㈠崟澶у巺鏌ヨ璇锋眰")
+public class DriverGrabOrderDTO implements Serializable {
+
+ @ApiModelProperty(value = "鎺掑簭绫诲瀷锛�1=缁煎悎鎺掑簭锛堝垱寤烘椂闂村�掑簭锛夛紱2=璺濈鏈�杩戯紙璺濆瓨浠堕棬搴楄窛绂诲崌搴忥級", example = "1")
+ private Integer sortType;
+
+ @ApiModelProperty(value = "鐗╁搧绛夌骇ID锛坈ategory type=3锛夛紝绛涢�夎绛夌骇涓嬬殑鎵�鏈夌墿鍝佸垎绫�", example = "5")
+ private Integer gradeId;
+
+ @ApiModelProperty(value = "璺濈绛涢�夛紙鍗曚綅锛氱背锛夛紝鍙告満鍒板瓨浠堕棬搴楃殑鏈�澶ц窛绂�", example = "5000")
+ private Integer distance;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/RevenueQueryDTO.java b/server/services/src/main/java/com/doumee/dao/dto/RevenueQueryDTO.java
new file mode 100644
index 0000000..4c888bd
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/RevenueQueryDTO.java
@@ -0,0 +1,28 @@
+package com.doumee.dao.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@ApiModel("娴佹按鏌ヨ鏉′欢")
+public class RevenueQueryDTO {
+
+ @ApiModelProperty(value = "鏀舵敮绫诲瀷锛�1=鏀跺叆锛�-1=鏀嚭")
+ private Integer optType;
+
+ @ApiModelProperty(value = "鍙樺姩绫诲瀷锛�0=瀹屾垚璁㈠崟锛�1=鎻愮幇鏀嚭锛�2=鎻愮幇閫�鍥烇紱3=骞冲彴濂栧姳")
+ private Integer type;
+
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @ApiModelProperty(value = "寮�濮嬫椂闂�")
+ private Date startTime;
+
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @ApiModelProperty(value = "缁撴潫鏃堕棿")
+ private Date endTime;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/SameCityCheckDTO.java b/server/services/src/main/java/com/doumee/dao/dto/SameCityCheckDTO.java
new file mode 100644
index 0000000..9b83d85
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/SameCityCheckDTO.java
@@ -0,0 +1,34 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 鏍¢獙涓や釜缁忕含搴︽槸鍚﹀悓鍩庤姹�
+ * @author rk
+ * @date 2026/04/17
+ */
+@Data
+@ApiModel("鏍¢獙鍚屽煄璇锋眰")
+public class SameCityCheckDTO {
+
+ @NotNull(message = "绗竴涓偣绾害涓嶈兘涓虹┖")
+ @ApiModelProperty(value = "绗竴涓偣绾害", example = "39.915", required = true)
+ private Double lat1;
+
+ @NotNull(message = "绗竴涓偣缁忓害涓嶈兘涓虹┖")
+ @ApiModelProperty(value = "绗竴涓偣缁忓害", example = "116.404", required = true)
+ private Double lng1;
+
+ @NotNull(message = "绗簩涓偣绾害涓嶈兘涓虹┖")
+ @ApiModelProperty(value = "绗簩涓偣绾害", example = "31.230", required = true)
+ private Double lat2;
+
+ @NotNull(message = "绗簩涓偣缁忓害涓嶈兘涓虹┖")
+ @ApiModelProperty(value = "绗簩涓偣缁忓害", example = "121.473", required = true)
+ private Double lng2;
+
+}
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 634ff08..9dad07d 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
@@ -19,6 +19,9 @@
@ApiModel("闂ㄥ簵鍏ラ┗鐢宠璇锋眰")
public class ShopApplyDTO implements Serializable {
+ @ApiModelProperty(value = "鐧诲綍鐢ㄦ埛涓婚敭", hidden = true, example = "0")
+ private Integer memberId;
+
@ApiModelProperty(value = "浼佷笟绫诲瀷锛�0=涓汉锛�1=浼佷笟", required = true, example = "0")
@NotNull(message = "浼佷笟绫诲瀷涓嶈兘涓虹┖")
private Integer companyType;
diff --git a/server/services/src/main/java/com/doumee/dao/dto/ShopNearbyDTO.java b/server/services/src/main/java/com/doumee/dao/dto/ShopNearbyDTO.java
index b322330..5d91f4a 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/ShopNearbyDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/ShopNearbyDTO.java
@@ -36,4 +36,7 @@
@ApiModelProperty(value = "闂ㄥ簵鍚嶇О锛堟ā绯婃煡璇級", example = "XX闂ㄥ簵")
private String name;
+ @ApiModelProperty(value = "鍩庡競涓婚敭", example = "1")
+ private Integer cityId;
+
}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/AccountResponse.java b/server/services/src/main/java/com/doumee/dao/vo/AccountResponse.java
index 5bd0298..e229cd6 100644
--- a/server/services/src/main/java/com/doumee/dao/vo/AccountResponse.java
+++ b/server/services/src/main/java/com/doumee/dao/vo/AccountResponse.java
@@ -27,15 +27,6 @@
@ApiModelProperty(value = "鐢ㄦ埛淇℃伅")
private Member member;
- @ApiModelProperty(value = "鎴戞敞鍐岀殑闂ㄥ簵涓婚敭锛堥棬搴楃敤鎴锋椂杩斿洖锛�")
- private Integer shopId;
-
- @ApiModelProperty(value = "鎴戞敞鍐岀殑闂ㄥ簵瀹℃牳鐘舵�侊紙闂ㄥ簵鐢ㄦ埛鏃惰繑鍥烇級: 0=寰呭鏍� 1=宸查�氳繃 2=宸查┏鍥� 3=宸茬即绾充繚璇侀噾")
- private Integer shopAuditStatus;
-
- @ApiModelProperty(value = "闂ㄥ簵token")
- private String loginShopToken;
-
diff --git a/server/services/src/main/java/com/doumee/dao/vo/DriverCenterVO.java b/server/services/src/main/java/com/doumee/dao/vo/DriverCenterVO.java
new file mode 100644
index 0000000..b637fc2
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/DriverCenterVO.java
@@ -0,0 +1,46 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鍙告満绔椤典俊鎭�
+ * @author rk
+ * @date 2026/04/17
+ */
+@Data
+@ApiModel("鍙告満绔椤典俊鎭�")
+public class DriverCenterVO {
+
+ @ApiModelProperty(value = "鍙告満濮撳悕")
+ private String name;
+
+ @ApiModelProperty(value = "鍙告満澶村儚")
+ private String imgUrl;
+
+ @ApiModelProperty(value = "鍙告満澶村儚鍏ㄨ矾寰�")
+ private String fullImgUrl;
+
+ @ApiModelProperty(value = "杞︾墝鍙�")
+ private String carCode;
+
+ @ApiModelProperty(value = "鏈嶅姟璇勫垎")
+ private String score;
+
+ @ApiModelProperty(value = "浠婃棩棰勮浣i噾(鍒�)")
+ private Long todayCommission;
+
+ @ApiModelProperty(value = "浠婃棩鎺ュ崟鏁�")
+ private Integer todayOrderCount;
+
+ @ApiModelProperty(value = "鎴戠殑浣欓(鍒�)")
+ private Long balance;
+
+ @ApiModelProperty(value = "寰呭彇璐ц鍗曟暟閲�")
+ private Integer waitPickCount;
+
+ @ApiModelProperty(value = "寰呴厤閫佽鍗曟暟閲�")
+ private Integer waitDeliverCount;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/DriverGrabOrderVO.java b/server/services/src/main/java/com/doumee/dao/vo/DriverGrabOrderVO.java
new file mode 100644
index 0000000..926cb22
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/DriverGrabOrderVO.java
@@ -0,0 +1,71 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 鍙告満鎶㈠崟澶у巺鍒楄〃椤�
+ * @author rk
+ * @date 2026/04/17
+ */
+@Data
+@ApiModel("鍙告満鎶㈠崟澶у巺鍒楄〃椤�")
+public class DriverGrabOrderVO implements Serializable {
+
+ @ApiModelProperty(value = "璁㈠崟涓婚敭")
+ private Integer id;
+
+ @ApiModelProperty(value = "璁㈠崟缂栧彿")
+ private String code;
+
+ @ApiModelProperty(value = "鍓╀綑鍒嗛挓鏁帮紙褰撳墠鏃堕棿鍒伴璁¢�佽揪鏃堕棿锛�")
+ private Long remainMinutes;
+
+ @ApiModelProperty(value = "鏄惁鍔犳�ワ細0=鍚︼紱1=鏄�")
+ private Integer isUrgent;
+
+ @ApiModelProperty(value = "瀛樹欢闂ㄥ簵鍚嶇О")
+ private String depositShopName;
+
+ @ApiModelProperty(value = "瀛樹欢闂ㄥ簵鍦板潃")
+ private String depositShopAddress;
+
+ @ApiModelProperty(value = "璺濆瓨浠堕棬搴楄窛绂伙紙濡� 500m銆�1.2km锛�")
+ private String depositDistance;
+
+ @ApiModelProperty(value = "鍙栦欢鍚嶇О锛堥棬搴楀悕绉版垨鑷畾涔夊湴鐐癸級")
+ private String takeName;
+
+ @ApiModelProperty(value = "鍙栦欢璺濈锛堝 500m銆�1.2km锛�")
+ private String takeDistance;
+
+ @ApiModelProperty(value = "鑱旂郴鐢佃瘽锛坰tatus=2鍙栦欢闂ㄥ簵鐢佃瘽锛泂tatus=3/4鏈夊彇浠堕棬搴楄繑鍥為棬搴楃數璇濓紝鏃犲垯杩斿洖鍙栦欢浜虹數璇濓級")
+ private String contactPhone;
+
+ @ApiModelProperty(value = "鍙告満钖叕锛堝垎锛�")
+ private Long driverFee;
+
+ @ApiModelProperty(value = "鍔犳�ヨ垂鐢紙鍒嗭級")
+ private Long urgentAmount;
+
+ @ApiModelProperty(value = "鐗╁搧鏄庣粏鍒楄〃")
+ private List<OrderItem> items;
+
+ @ApiModelProperty(value = "鏄惁璐甸噸鐗╁搧")
+ private Boolean isValuable;
+
+ @Data
+ @ApiModel("鎶㈠崟澶у巺鐗╁搧椤�")
+ public static class OrderItem implements Serializable {
+ @ApiModelProperty(value = "鐗╁搧鍚嶇О")
+ private String name;
+
+ @ApiModelProperty(value = "鏁伴噺")
+ private Integer quantity;
+ }
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/DriverOrderDetailVO.java b/server/services/src/main/java/com/doumee/dao/vo/DriverOrderDetailVO.java
new file mode 100644
index 0000000..9506d34
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/DriverOrderDetailVO.java
@@ -0,0 +1,89 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 鍙告満绔鍗曡鎯�
+ * @author rk
+ * @date 2026/04/17
+ */
+@Data
+@ApiModel("鍙告満绔鍗曡鎯�")
+public class DriverOrderDetailVO implements Serializable {
+
+ @ApiModelProperty(value = "璁㈠崟涓婚敭")
+ private Integer id;
+
+ @ApiModelProperty(value = "璁㈠崟缂栧彿")
+ private String code;
+
+ @ApiModelProperty(value = "璁㈠崟鐘舵��")
+ private Integer status;
+
+ @ApiModelProperty(value = "璁㈠崟鐘舵�佹弿杩�")
+ private String statusDesc;
+
+ @ApiModelProperty(value = "鍓╀綑鍒嗛挓鏁帮紙褰撳墠鏃堕棿鍒伴璁¢�佽揪鏃堕棿锛�")
+ private Long remainMinutes;
+
+ @ApiModelProperty(value = "鏄惁鍔犳�ワ細0=鍚︼紱1=鏄�")
+ private Integer isUrgent;
+
+ @ApiModelProperty(value = "瀛樹欢闂ㄥ簵鍚嶇О")
+ private String depositShopName;
+
+ @ApiModelProperty(value = "瀛樹欢闂ㄥ簵鍦板潃")
+ private String depositShopAddress;
+
+ @ApiModelProperty(value = "璺濆瓨浠堕棬搴楄窛绂伙紙濡� 500m銆�1.2km锛�")
+ private String depositDistance;
+
+ @ApiModelProperty(value = "鍙栦欢鍚嶇О锛堥棬搴楀悕绉版垨鑷畾涔夊湴鐐癸級")
+ private String takeName;
+
+ @ApiModelProperty(value = "鍙栦欢璺濈锛堝 500m銆�1.2km锛�")
+ private String takeDistance;
+
+ @ApiModelProperty(value = "鑱旂郴鐢佃瘽")
+ private String contactPhone;
+
+ @ApiModelProperty(value = "鍙告満钖叕锛堝垎锛�")
+ private Long driverFee;
+
+ @ApiModelProperty(value = "鍔犳�ヨ垂鐢紙鍒嗭級")
+ private Long urgentAmount;
+
+ @ApiModelProperty(value = "鐗╁搧鏄庣粏鍒楄〃")
+ private List<OrderItem> items;
+
+ @ApiModelProperty(value = "鏄惁璐甸噸鐗╁搧")
+ private Boolean isValuable;
+
+ @ApiModelProperty(value = "瀵艰埅绾害锛坰tatus=2瀛樹欢闂ㄥ簵绾害锛宻tatus=3/4鍙栦欢绾害锛�")
+ private Double navigateLat;
+
+ @ApiModelProperty(value = "瀵艰埅缁忓害锛坰tatus=2瀛樹欢闂ㄥ簵缁忓害锛宻tatus=3/4鍙栦欢缁忓害锛�")
+ private Double navigateLng;
+
+ @ApiModelProperty(value = "瀹㈡埛淇℃伅锛屽锛氬垬鍏堢敓锛堟墜鏈哄熬鍙�1234锛�")
+ private String customerInfo;
+
+ @ApiModelProperty(value = "涓嬪崟闄勪欢鍥剧墖鍏ㄨ矾寰勫垪琛�")
+ private List<String> orderImages;
+
+ @Data
+ @ApiModel("鐗╁搧椤�")
+ public static class OrderItem implements Serializable {
+ @ApiModelProperty(value = "鐗╁搧鍚嶇О")
+ private String name;
+
+ @ApiModelProperty(value = "鏁伴噺")
+ private Integer quantity;
+ }
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/EstimatedDeliveryResultVO.java b/server/services/src/main/java/com/doumee/dao/vo/EstimatedDeliveryResultVO.java
new file mode 100644
index 0000000..4749c3d
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/EstimatedDeliveryResultVO.java
@@ -0,0 +1,26 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 棰勮閫佽揪鏃舵晥缁撴灉
+ * @author rk
+ * @date 2026/04/17
+ */
+@Data
+@ApiModel("棰勮閫佽揪鏃舵晥缁撴灉")
+public class EstimatedDeliveryResultVO {
+
+ @ApiModelProperty(value = "瀹為檯璺濈锛堝叕閲岋級")
+ private BigDecimal distanceKm;
+
+ @ApiModelProperty(value = "鏍囬�熻揪鏃舵晥锛堝皬鏃讹級")
+ private BigDecimal standardHours;
+
+ @ApiModelProperty(value = "鏋侀�熻揪鏃舵晥锛堝皬鏃讹級")
+ private BigDecimal expressHours;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/PriceCalculateVO.java b/server/services/src/main/java/com/doumee/dao/vo/PriceCalculateVO.java
index a42b9f2..dee37e7 100644
--- a/server/services/src/main/java/com/doumee/dao/vo/PriceCalculateVO.java
+++ b/server/services/src/main/java/com/doumee/dao/vo/PriceCalculateVO.java
@@ -35,6 +35,12 @@
@ApiModelProperty("璺濈(km)")
private BigDecimal distance;
+ @ApiModelProperty("鏍囬�熻揪棰勮鏃堕暱(灏忔椂锛屼笂鍙栨暣)")
+ private Integer standardHours;
+
+ @ApiModelProperty("鏋侀�熻揪棰勮鏃堕暱(灏忔椂锛屼笂鍙栨暣)")
+ private Integer urgentHours;
+
@ApiModelProperty("澶╂暟")
private Integer days;
}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/RevenueSummaryVO.java b/server/services/src/main/java/com/doumee/dao/vo/RevenueSummaryVO.java
new file mode 100644
index 0000000..6ca15e1
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/RevenueSummaryVO.java
@@ -0,0 +1,17 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("娴佹按鏀舵敮缁熻")
+public class RevenueSummaryVO {
+
+ @ApiModelProperty(value = "鏀跺叆鎬婚锛堝垎锛�")
+ private Long totalIncome;
+
+ @ApiModelProperty(value = "鏀嚭鎬婚锛堝垎锛�")
+ private Long totalExpense;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/ShopNearbyVO.java b/server/services/src/main/java/com/doumee/dao/vo/ShopNearbyVO.java
index 753a3c3..e955c96 100644
--- a/server/services/src/main/java/com/doumee/dao/vo/ShopNearbyVO.java
+++ b/server/services/src/main/java/com/doumee/dao/vo/ShopNearbyVO.java
@@ -36,4 +36,10 @@
@ApiModelProperty(value = "闂ㄥ簵璇勫垎")
private BigDecimal score;
+
+ @ApiModelProperty(value = "闂ㄥ簵绾害")
+ private Double latitude;
+
+ @ApiModelProperty(value = "闂ㄥ簵缁忓害")
+ private Double longitude;
}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/ShopWebDetailVO.java b/server/services/src/main/java/com/doumee/dao/vo/ShopWebDetailVO.java
index 6da15a3..efeebf1 100644
--- a/server/services/src/main/java/com/doumee/dao/vo/ShopWebDetailVO.java
+++ b/server/services/src/main/java/com/doumee/dao/vo/ShopWebDetailVO.java
@@ -33,4 +33,16 @@
@ApiModelProperty(value = "璺濈锛堝 500m銆�1.2km锛夛紝鏃犵粡绾害鍏ュ弬鏃朵负绌�")
private String distanceText;
+
+ @ApiModelProperty(value = "瀵勫瓨绫诲瀷锛堥�楀彿鍒嗛殧鐨刢ategory涓婚敭锛�")
+ private String depositTypes;
+
+ @ApiModelProperty(value = "鏀惰垂鏍囧噯")
+ private String feeStandard;
+
+ @ApiModelProperty(value = "闂ㄥ簵绾害")
+ private Double latitude;
+
+ @ApiModelProperty(value = "闂ㄥ簵缁忓害")
+ private Double longitude;
}
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 8927049..63ff222 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
@@ -12,6 +12,9 @@
@Data
public class UserCenterVO {
+ @ApiModelProperty(value = "openid")
+ private String openid;
+
@ApiModelProperty(value = "浼氬憳澶村儚鍏ㄨ矾寰�")
private String fullCoverImage;
@@ -36,4 +39,18 @@
@ApiModelProperty(value = "寰呮敹璐ц鍗曟暟閲�")
private Integer waitReceiveCount;
+ @ApiModelProperty(value = "閫�娆句腑璁㈠崟鏁伴噺")
+ private Integer refundingCount;
+
+ @ApiModelProperty(value = "鎴戞敞鍐岀殑闂ㄥ簵涓婚敭锛堥棬搴楃敤鎴锋椂杩斿洖锛�")
+ private Integer shopId;
+
+ @ApiModelProperty(value = "鎴戞敞鍐岀殑闂ㄥ簵瀹℃牳鐘舵�侊紙闂ㄥ簵鐢ㄦ埛鏃惰繑鍥烇級: 0=寰呭鏍� 1=宸查�氳繃 2=宸查┏鍥� 3=宸茬即绾充繚璇侀噾")
+ private Integer shopAuditStatus;
+
+ @ApiModelProperty(value = "鎴戝綋鍓嶇粦瀹氱殑闂ㄥ簵")
+ private String bindShopId;
+
+
+
}
diff --git a/server/services/src/main/java/com/doumee/service/business/AreasService.java b/server/services/src/main/java/com/doumee/service/business/AreasService.java
index 6bd137a..a012865 100644
--- a/server/services/src/main/java/com/doumee/service/business/AreasService.java
+++ b/server/services/src/main/java/com/doumee/service/business/AreasService.java
@@ -140,4 +140,12 @@
*/
List<Areas> getOpenCityList();
+ /**
+ * 鏍规嵁鍩庡競鍚嶇О鏌ヨ宸插紑閫氱殑鍩庡競淇℃伅
+ *
+ * @param cityName 鍩庡競鍚嶇О
+ * @return 鍩庡競淇℃伅锛屾湭寮�閫氬垯杩斿洖null
+ */
+ Areas getOpenedCityByName(String cityName);
+
}
diff --git a/server/services/src/main/java/com/doumee/service/business/DriverInfoService.java b/server/services/src/main/java/com/doumee/service/business/DriverInfoService.java
index d931cad..3c7f772 100644
--- a/server/services/src/main/java/com/doumee/service/business/DriverInfoService.java
+++ b/server/services/src/main/java/com/doumee/service/business/DriverInfoService.java
@@ -2,6 +2,8 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
+import com.doumee.dao.dto.DriverActiveOrderDTO;
+import com.doumee.dao.dto.DriverGrabOrderDTO;
import com.doumee.dao.business.model.DriverInfo;
import com.doumee.dao.dto.DriverLoginRequest;
import com.doumee.dao.dto.DriverRegisterRequest;
@@ -161,4 +163,65 @@
*/
void changeStatus(com.doumee.dao.dto.ChangeStatusDTO dto);
+ /**
+ * 鍒囨崲鍙告満鎺ュ崟鐘舵��
+ *
+ * @param memberId 浼氬憳涓婚敭
+ * @param status 鎺ュ崟鐘舵�侊細0=鏈帴鍗曪紱1=鎺ュ崟涓�
+ */
+ void updateAcceptingStatus(Integer memberId, Integer status);
+
+ /**
+ * 鏇存柊鍙告満瀹炴椂瀹氫綅
+ *
+ * @param memberId 浼氬憳涓婚敭
+ * @param longitude 缁忓害
+ * @param latitude 绾害
+ */
+ void updateLocation(Integer memberId, Double longitude, Double latitude);
+
+ /**
+ * 鑾峰彇鍙告満绔椤典俊鎭�
+ *
+ * @param memberId 浼氬憳涓婚敭
+ * @return DriverCenterVO
+ */
+ com.doumee.dao.vo.DriverCenterVO getDriverCenterInfo(Integer memberId);
+
+ /**
+ * 鍙告満鎶㈠崟澶у巺 - 鍒嗛〉鏌ヨ鍙姠璁㈠崟
+ *
+ * @param memberId 褰撳墠鐧诲綍浼氬憳涓婚敭
+ * @param pageWrap 鍒嗛〉璇锋眰
+ * @return PageData<DriverGrabOrderVO>
+ */
+ com.doumee.core.model.PageData<com.doumee.dao.vo.DriverGrabOrderVO> grabOrderHall(Integer memberId, PageWrap<DriverGrabOrderDTO> pageWrap);
+
+ /**
+ * 鍙告満杩涜涓鍗曞垪琛�
+ *
+ * @param memberId 浼氬憳涓婚敭
+ * @param dto 鏌ヨ鏉′欢锛坰tatus: 3=宸叉姠鍗�, 4=娲鹃�佷腑锛�
+ * @return 璁㈠崟鍒楄〃
+ */
+ java.util.List<com.doumee.dao.vo.DriverGrabOrderVO> activeOrders(Integer memberId, DriverActiveOrderDTO dto);
+
+ /**
+ * 鍙告満绔鍗曡鎯�
+ *
+ * @param driverId 鍙告満涓婚敭
+ * @param orderId 璁㈠崟涓婚敭
+ * @return DriverOrderDetailVO
+ */
+ com.doumee.dao.vo.DriverOrderDetailVO driverOrderDetail(Integer driverId, Integer orderId);
+
+ /**
+ * 鍙告満鍙栨秷璁㈠崟锛堝凡鎺ュ崟status=2鏃跺彇娑堬紝閲婃斁鍥炴姠鍗曞ぇ鍘咃級
+ *
+ * @param driverId 鍙告満涓婚敭
+ * @param orderId 璁㈠崟涓婚敭
+ * @param reason 鍙栨秷鍘熷洜
+ */
+ void cancelOrder(Integer driverId, Integer orderId, String reason);
+
}
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 58debcd..91ecdf9 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
@@ -17,6 +17,7 @@
import com.doumee.dao.vo.OverdueFeeVO;
import com.doumee.dao.vo.PayResponse;
import com.doumee.dao.vo.PriceCalculateVO;
+import com.doumee.dao.vo.EstimatedDeliveryResultVO;
import java.math.BigDecimal;
import java.util.List;
@@ -298,6 +299,15 @@
void confirmStoreOut(Integer orderId, Integer shopId, List<String> images, String remark);
/**
+ * 浼氬憳纭鏀惰揣
+ * 寮傚湴瀵勫瓨涓旀棤鍙栦欢闂ㄥ簵鐨勮鍗曪紝閫佽揪鍚�(status=5)锛屼細鍛樼‘璁ゆ敹璐ф爣璁拌鍗曞畬鎴�
+ *
+ * @param orderId 璁㈠崟涓婚敭
+ * @param memberId 褰撳墠鐧诲綍浼氬憳ID
+ */
+ void memberConfirmReceipt(Integer orderId, Integer memberId);
+
+ /**
* 璁$畻骞舵洿鏂拌鍗曚笁鏂规敹鐩婏紙瀛樹欢闂ㄥ簵/鍙栦欢闂ㄥ簵/鍙告満锛�
* 灏卞湴瀵勫瓨锛氫粎瀛樹欢闂ㄥ簵鏀剁泭
* 寮傚湴瀵勫瓨锛氬瓨浠堕棬搴� + 鍙告満鏀剁泭锛涙湁鍙栦欢闂ㄥ簵鏃跺姞涓婂彇浠堕棬搴楁敹鐩�
@@ -355,4 +365,19 @@
*/
PageData<MyOrderVO> findShopOrderPage(PageWrap<MyOrderDTO> pageWrap, Integer shopId);
+ /**
+ * 璁$畻涓ゅ湴涔嬮棿鐨勯璁¢�佽揪鏃舵晥锛堟爣閫熻揪 + 鏋侀�熻揪锛�
+ * 閫氳繃鑵捐鍦板浘API璁$畻瀹為檯璺濈锛屽啀鏍规嵁pricing_rule type=2璁$畻鏃舵晥
+ *
+ * @param cityId 鍩庡競涓婚敭
+ * @param fromLat 璧风偣绾害
+ * @param fromLng 璧风偣缁忓害
+ * @param toLat 缁堢偣绾害
+ * @param toLng 缁堢偣缁忓害
+ * @return 棰勮閫佽揪鏃舵晥缁撴灉
+ */
+ EstimatedDeliveryResultVO calculateEstimatedDelivery(Integer cityId,
+ Double fromLat, Double fromLng,
+ Double toLat, Double toLng);
+
}
\ No newline at end of file
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 de5f4ce..3e82d3c 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,7 +3,9 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.Revenue;
+import com.doumee.dao.dto.RevenueQueryDTO;
import com.doumee.dao.vo.RevenueStatisticsVO;
+import com.doumee.dao.vo.RevenueSummaryVO;
import java.util.List;
@@ -113,4 +115,40 @@
*/
RevenueStatisticsVO getDriverRevenueStatistics(Integer memberId);
+ /**
+ * 鍙告満娴佹按鍒嗛〉鏌ヨ
+ *
+ * @param pageWrap 鍒嗛〉鍙傛暟
+ * @param memberId 浼氬憳涓婚敭
+ * @return 鍒嗛〉缁撴灉
+ */
+ PageData<Revenue> findDriverRevenuePage(PageWrap<RevenueQueryDTO> pageWrap, Integer memberId);
+
+ /**
+ * 闂ㄥ簵娴佹按鍒嗛〉鏌ヨ
+ *
+ * @param pageWrap 鍒嗛〉鍙傛暟
+ * @param shopId 闂ㄥ簵涓婚敭
+ * @return 鍒嗛〉缁撴灉
+ */
+ PageData<Revenue> findShopRevenuePage(PageWrap<RevenueQueryDTO> pageWrap, Integer shopId);
+
+ /**
+ * 鍙告満娴佹按鏀舵敮缁熻
+ *
+ * @param queryDTO 鏌ヨ鏉′欢
+ * @param memberId 浼氬憳涓婚敭
+ * @return 鏀舵敮姹囨��
+ */
+ RevenueSummaryVO getDriverRevenueSummary(RevenueQueryDTO queryDTO, Integer memberId);
+
+ /**
+ * 闂ㄥ簵娴佹按鏀舵敮缁熻
+ *
+ * @param queryDTO 鏌ヨ鏉′欢
+ * @param shopId 闂ㄥ簵涓婚敭
+ * @return 鏀舵敮姹囨��
+ */
+ RevenueSummaryVO getShopRevenueSummary(RevenueQueryDTO queryDTO, Integer shopId);
+
}
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 2908a9e..590941b 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
@@ -109,7 +109,7 @@
* @param request 鐢宠璇锋眰
* @param member 褰撳墠鐧诲綍浼氬憳
*/
- void applyShop(ShopApplyDTO request, Member member);
+ void applyShop(ShopApplyDTO request);
/**
* 鏌ヨ闂ㄥ簵璇︽儏锛堝惈闄勪欢锛�
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/AreasServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/AreasServiceImpl.java
index c147960..0ac6b5e 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/AreasServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/AreasServiceImpl.java
@@ -537,4 +537,19 @@
return list;
}
+ @Override
+ public Areas getOpenedCityByName(String cityName) {
+ if (StringUtils.isBlank(cityName)) {
+ return null;
+ }
+ QueryWrapper<Areas> qw = new QueryWrapper<>();
+ qw.lambda()
+ .eq(Areas::getType, Constants.ONE)
+ .eq(Areas::getStatus, Constants.ONE)
+ .eq(Areas::getIsdeleted, Constants.ZERO)
+ .eq(Areas::getName, cityName)
+ .last("limit 1");
+ return areasMapper.selectOne(qw);
+ }
+
}
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 0cb5720..e989ed7 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
@@ -229,6 +229,6 @@
private String getBannerPath() {
return systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
- + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.BANNER_FILES).getCode();
+ + systemDictDataBiz.queryByCode(Constants.OSS, 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 46ee50f..63d34d1 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
@@ -140,7 +140,7 @@
}
if(StringUtils.isNotBlank(category.getIcon())){
String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
- +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.CATEGORY_FILES).getCode();
+ +systemDictDataBiz.queryByCode(Constants.OSS,Constants.CATEGORY_FILES).getCode();
category.setIconFull(path + category.getIcon());
}
return category;
@@ -209,7 +209,7 @@
PageData<Category> result =PageData.from(categoryMapper.selectJoinPage(page, Category.class,queryWrapper));
if(result!=null && result.getRecords()!=null){
String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
- +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.CATEGORY_FILES).getCode();
+ +systemDictDataBiz.queryByCode(Constants.OSS,Constants.CATEGORY_FILES).getCode();
for(Category cate : result.getRecords()){
try {
if(StringUtils.isNotBlank(cate.getIcon())){
@@ -237,7 +237,7 @@
);
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(categoryList)){
String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
- +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.CATEGORY_FILES).getCode();
+ +systemDictDataBiz.queryByCode(Constants.OSS,Constants.CATEGORY_FILES).getCode();
for (Category category:categoryList) {
if(StringUtils.isNotBlank(category.getIcon())){
category.setIconFull(path + category.getIcon());
@@ -276,7 +276,7 @@
// 3. 鎷兼帴鍥炬爣鍏ㄨ矾寰�
if (!CollectionUtils.isEmpty(sizeList)) {
String path = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.RESOURCE_PATH).getCode()
- + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.CATEGORY_FILES).getCode();
+ + systemDictDataBiz.queryByCode(Constants.OSS, Constants.CATEGORY_FILES).getCode();
for (Category cate : sizeList) {
if (StringUtils.isNotBlank(cate.getIcon())) {
cate.setIconFull(path + cate.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 11ec88f..8110145 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
@@ -17,19 +17,33 @@
import com.doumee.dao.business.MultifileMapper;
import com.doumee.dao.business.SmsrecordMapper;
import com.doumee.dao.business.CategoryMapper;
+import com.doumee.dao.business.OrdersMapper;
+import com.doumee.dao.business.OrdersDetailMapper;
+import com.doumee.dao.business.RevenueMapper;
import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.biz.system.OperationConfigBiz;
+import com.doumee.dao.business.OrderLogMapper;
import com.doumee.dao.business.model.Category;
import com.doumee.dao.business.model.DriverInfo;
+import com.doumee.dao.business.model.OrderLog;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.Multifile;
import com.doumee.dao.business.model.Smsrecord;
+import com.doumee.dao.business.model.Orders;
+import com.doumee.dao.business.model.OrdersDetail;
+import com.doumee.dao.business.model.Revenue;
import com.doumee.dao.vo.AccountResponse;
+import com.doumee.dao.vo.DriverCenterVO;
+import com.doumee.dao.vo.DriverGrabOrderVO;
+import com.doumee.dao.vo.DriverOrderDetailVO;
import com.doumee.dao.dto.AuditDTO;
import com.doumee.dao.dto.ChangeStatusDTO;
import com.doumee.dao.dto.DriverLoginRequest;
import com.doumee.dao.dto.DriverRegisterRequest;
import com.doumee.dao.dto.DriverVerifyRequest;
-import com.doumee.service.business.AliSmsService;
+import com.doumee.dao.dto.DriverActiveOrderDTO;
+import com.doumee.dao.dto.DriverGrabOrderDTO;
+import com.doumee.core.utils.aliyun.AliSmsService;
import com.doumee.service.business.DriverInfoService;
import com.alibaba.fastjson.JSONObject;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
@@ -41,10 +55,8 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
/**
* 鍙告満娉ㄥ唽淇℃伅Service瀹炵幇
@@ -79,7 +91,22 @@
private CategoryMapper categoryMapper;
@Autowired
+ private OrdersMapper ordersMapper;
+
+ @Autowired
+ private RevenueMapper revenueMapper;
+
+ @Autowired
+ private OrdersDetailMapper ordersDetailMapper;
+
+ @Autowired
private SystemDictDataBiz systemDictDataBiz;
+
+ @Autowired
+ private OrderLogMapper orderLogMapper;
+
+ @Autowired
+ private OperationConfigBiz operationConfigBiz;
@Override
public Integer create(DriverInfo driverInfo) {
@@ -289,7 +316,7 @@
member.setCreateTime(now);
member.setUpdateTime(now);
member.setTelephone(telephone);
- member.setNickName(telephone);
+ member.setNickName(telephone.substring(0, 3) + "****" + telephone.substring(7));
member.setName(telephone);
member.setUserType(Constants.ONE);
member.setBusinessStatus(Constants.ZERO);
@@ -556,7 +583,7 @@
String imgPrefix = "";
try {
imgPrefix = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
- + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.DRIVER_FILES).getCode();
+ + systemDictDataBiz.queryByCode(Constants.OSS, Constants.DRIVER_FILES).getCode();
} catch (Exception e) {
// 鏈厤缃椂蹇界暐
}
@@ -630,4 +657,612 @@
}
}
+ @Override
+ public void updateAcceptingStatus(Integer memberId, Integer status) {
+ if (!Constants.ZERO.equals(status) && !Constants.ONE.equals(status)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ 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(), "鍙告満淇℃伅涓嶅瓨鍦�");
+ }
+ if (!Constants.THREE.equals(driver.getAuditStatus())) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "璇峰厛瀹屾垚鎶奸噾鏀粯");
+ }
+ driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda()
+ .set(DriverInfo::getAcceptingStatus, status)
+ .eq(DriverInfo::getId, driver.getId()));
+ }
+
+ @Override
+ public void updateLocation(Integer memberId, Double longitude, Double latitude) {
+ if (longitude == null || latitude == null) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "缁忕含搴︿笉鑳戒负绌�");
+ }
+ 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(), "鍙告満淇℃伅涓嶅瓨鍦�");
+ }
+ driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda()
+ .set(DriverInfo::getLongitude, longitude)
+ .set(DriverInfo::getLatitude, latitude)
+ .eq(DriverInfo::getId, driver.getId()));
+ }
+
+ @Override
+ public DriverCenterVO getDriverCenterInfo(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(), "鍙告満淇℃伅涓嶅瓨鍦�");
+ }
+ DriverCenterVO vo = new DriverCenterVO();
+ vo.setName(driver.getName());
+ vo.setImgUrl(driver.getImgurl());
+ vo.setCarCode(driver.getCarCode());
+ vo.setScore(driver.getScore() != null ? driver.getScore().toPlainString() : "0");
+ vo.setBalance(driver.getBalance() != null ? driver.getBalance() : 0L);
+
+ // 澶村儚鍏ㄨ矾寰�
+ if (StringUtils.isNotBlank(driver.getImgurl())) {
+ String imgPrefix = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+ + systemDictDataBiz.queryByCode(Constants.OSS, Constants.MEMBER_FILES).getCode();
+ vo.setFullImgUrl(imgPrefix + driver.getImgurl());
+ }
+
+ // 浠婃棩棰勮浣i噾锛歳evenue琛ㄤ腑浠婂ぉ鐨勬敹鍏ヨ褰曢噾棰濅箣鍜�
+ Date now = new Date();
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(now);
+ cal.set(Calendar.HOUR_OF_DAY, 0);
+ cal.set(Calendar.MINUTE, 0);
+ cal.set(Calendar.SECOND, 0);
+ cal.set(Calendar.MILLISECOND, 0);
+ Date todayStart = cal.getTime();
+
+ QueryWrapper<Revenue> revenueWrapper = new QueryWrapper<>();
+ revenueWrapper.lambda()
+ .eq(Revenue::getMemberId, memberId)
+ .eq(Revenue::getMemberType, Constants.ONE)
+ .eq(Revenue::getOptType, Constants.ONE)
+ .eq(Revenue::getDeleted, Constants.ZERO)
+ .ge(Revenue::getCreateTime, todayStart);
+ revenueWrapper.select("IFNULL(SUM(AMOUNT),0) as amount");
+ Revenue sumResult = revenueMapper.selectOne(revenueWrapper);
+ vo.setTodayCommission(sumResult != null && sumResult.getAmount() != null ? sumResult.getAmount() : 0L);
+
+ // 浠婃棩鎺ュ崟鏁帮細浠婂ぉ瀹屾垚鐨勮鍗曟暟锛坅cceptDriver=鍙告満涓婚敭锛岀姸鎬�=宸插畬鎴愶級
+ Long todayOrderCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getAcceptDriver, driver.getId())
+ .eq(Orders::getDeleted, Constants.ZERO)
+ .ge(Orders::getFinishTime, todayStart));
+ vo.setTodayOrderCount(todayOrderCount.intValue());
+
+ // 寰呭彇璐э紙宸叉帴鍗�=3锛�
+ Long waitPickCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getAcceptDriver, driver.getId())
+ .eq(Orders::getDeleted, Constants.ZERO)
+ .eq(Orders::getStatus, Constants.OrderStatus.accepted.getStatus()));
+ vo.setWaitPickCount(waitPickCount.intValue());
+
+ // 寰呴厤閫侊紙娲鹃�佷腑=4锛�
+ Long waitDeliverCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getAcceptDriver, driver.getId())
+ .eq(Orders::getDeleted, Constants.ZERO)
+ .eq(Orders::getStatus, Constants.OrderStatus.delivering.getStatus()));
+ vo.setWaitDeliverCount(waitDeliverCount.intValue());
+
+ return vo;
+ }
+
+ @Override
+ public PageData<DriverGrabOrderVO> grabOrderHall(Integer memberId, PageWrap<DriverGrabOrderDTO> pageWrap) {
+ DriverGrabOrderDTO dto = pageWrap.getModel();
+
+ // 1. 鑾峰彇鍙告満瀹氫綅
+ DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
+ .eq(DriverInfo::getMemberId, memberId)
+ .eq(DriverInfo::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ if (driver == null || driver.getLatitude() == null || driver.getLongitude() == null) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鍙告満浣嶇疆淇℃伅缂哄け锛岃鍏堝紑鍚畾浣�");
+ }
+ // 鏍¢獙鍙告満宸叉敮浠樻娂閲�
+ if (!Constants.THREE.equals(driver.getAuditStatus())) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "璇峰厛瀹屾垚鎶奸噾鏀粯");
+ }
+ double driverLat = driver.getLatitude();
+ double driverLng = driver.getLongitude();
+
+ // 2. 棰勬煡鐗╁搧绛夌骇瀵瑰簲鐨勭墿鍝佸垎绫籌D
+ List<Integer> goodTypeIds = null;
+ if (dto != null && dto.getGradeId() != null) {
+ List<Category> cats = categoryMapper.selectList(new QueryWrapper<Category>().lambda()
+ .eq(Category::getDeleted, Constants.ZERO)
+ .eq(Category::getType, Constants.TWO)
+ .eq(Category::getRelationId, dto.getGradeId()));
+ if (cats.isEmpty()) {
+ return emptyPage(pageWrap);
+ }
+ goodTypeIds = cats.stream().map(Category::getId).collect(Collectors.toList());
+ }
+
+ // 3. Haversine SQL鍏紡锛氬徃鏈哄埌瀛樹欢闂ㄥ簵璺濈(km)锛屼娇鐢∣rders鑷甫鍧愭爣
+ String depositDist = "(6371 * acos(cos(radians(" + driverLat + ")) * cos(radians(t.DEPOSIT_LGT)) "
+ + "* cos(radians(t.DEPOSIT_LAT) - radians(" + driverLng + ")) "
+ + "+ sin(radians(" + driverLat + ")) * sin(radians(t.DEPOSIT_LGT))))";
+
+ // 4. 鏋勯�燤PJ鏌ヨ
+ IPage<Orders> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ MPJLambdaWrapper<Orders> wrapper = new MPJLambdaWrapper<>();
+ wrapper.selectAll(Orders.class)
+ // 瀛樹欢闂ㄥ簵
+ .select("s1.name", Orders::getDepositShopName)
+ .select("s1.address", Orders::getDepositShopAddress)
+ // 鍙栦欢闂ㄥ簵
+ .select("s2.name", Orders::getTakeShopName)
+ .select("s2.address", Orders::getTakeShopAddress)
+ .select("s2.link_phone as takeShopLinkPhone")
+ // 鐗╁搧绛夌骇璐甸噸鏍囪瘑
+ .select("c2.other_field as c2OtherField")
+ // JOIN
+ .leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID and s1.DELETED = 0")
+ .leftJoin("shop_info s2 on s2.id = t.TAKE_SHOP_ID and s2.DELETED = 0")
+ .leftJoin("category c1 on c1.id = t.GOOD_TYPE and c1.DELETED = 0")
+ .leftJoin("category c2 on c2.id = c1.RELATION_ID and c2.DELETED = 0 and c2.TYPE = 3");
+
+ // 鏍稿績鏉′欢
+ wrapper.eq(Orders::getType, Constants.ONE)
+ .eq(Orders::getStatus, Constants.TWO)
+ .eq(Orders::getDeleted, Constants.ZERO);
+
+ // 鍙告満绾у埆 >= 璁㈠崟鐗╁搧绾у埆
+ if (driver.getDriverLevel() != null) {
+ wrapper.apply("t.GOOD_LEVEL <= {0}", driver.getDriverLevel());
+ }
+
+ // 鍔犳�� OR 鍦ㄩ厤閫佽寖鍥村唴
+ wrapper.and(w -> w
+ .eq(Orders::getIsUrgent, Constants.ONE)
+ .or()
+ .apply(depositDist + " <= s1.delivery_area"));
+
+ // 鐢ㄦ埛璺濈杩囨护
+ if (dto != null && dto.getDistance() != null && dto.getDistance() > 0) {
+ double maxKm = dto.getDistance() / 1000.0;
+ wrapper.apply(depositDist + " <= {0}", maxKm);
+ }
+
+ // 鐗╁搧绛夌骇杩囨护
+ if (goodTypeIds != null && !goodTypeIds.isEmpty()) {
+ wrapper.in(Orders::getGoodType, goodTypeIds);
+ }
+
+ // 鎺掑簭
+ Integer sortType = (dto != null) ? dto.getSortType() : null;
+ if (sortType != null && sortType == Constants.TWO) {
+ wrapper.last("ORDER BY " + depositDist + " ASC");
+ } else {
+ wrapper.orderByDesc(Orders::getCreateTime);
+ }
+
+ IPage<Orders> result = ordersMapper.selectJoinPage(page, Orders.class, wrapper);
+
+ // 5. 鎵归噺鏌ヨ鐗╁搧鏄庣粏
+ List<Integer> orderIds = result.getRecords().stream()
+ .map(Orders::getId).collect(Collectors.toList());
+ Map<Integer, List<OrdersDetail>> detailMap = new HashMap<>();
+ if (!orderIds.isEmpty()) {
+ List<OrdersDetail> allDetails = ordersDetailMapper.selectList(
+ new QueryWrapper<OrdersDetail>().lambda()
+ .in(OrdersDetail::getOrderId, orderIds));
+ for (OrdersDetail d : allDetails) {
+ detailMap.computeIfAbsent(d.getOrderId(), k -> new ArrayList<>()).add(d);
+ }
+ }
+
+ // 6. 鏋勫缓VO锛堜娇鐢ㄥ叡鐢ㄦ柟娉曪級
+ Date now = new Date();
+ List<DriverGrabOrderVO> voList = new ArrayList<>();
+ for (Orders order : result.getRecords()) {
+ voList.add(buildDriverOrderVO(order, driverLat, driverLng, true, now, detailMap));
+ }
+
+ // 7. 鎵嬪姩鍒嗛〉
+ PageData<DriverGrabOrderVO> pageData = new PageData<>(result.getCurrent(), result.getSize());
+ pageData.setTotal(result.getTotal());
+ pageData.setRecords(voList);
+ return pageData;
+ }
+
+ @Override
+ public List<DriverGrabOrderVO> activeOrders(Integer memberId, DriverActiveOrderDTO dto) {
+ if (dto == null || dto.getStatus() == null ||
+ (!Constants.equalsInteger(dto.getStatus(), Constants.THREE) && !Constants.equalsInteger(dto.getStatus(), Constants.FOUR))) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璁㈠崟鐘舵�佸彧鑳戒负3(宸叉姠鍗�)鎴�4(娲鹃�佷腑)");
+ }
+
+ // 鑾峰彇鍙告満淇℃伅
+ 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(), "鍙告満淇℃伅涓嶅瓨鍦�");
+ }
+
+ boolean needDepositDist = Constants.equalsInteger(dto.getStatus(), Constants.THREE);
+ Double driverLat = driver.getLatitude();
+ Double driverLng = driver.getLongitude();
+
+ // MPJ鏌ヨ
+ MPJLambdaWrapper<Orders> wrapper = new MPJLambdaWrapper<>();
+ wrapper.selectAll(Orders.class)
+ .select("s1.name", Orders::getDepositShopName)
+ .select("s1.address", Orders::getDepositShopAddress)
+ .select("s2.name", Orders::getTakeShopName)
+ .select("s2.address", Orders::getTakeShopAddress)
+ .select("s2.link_phone as takeShopLinkPhone")
+ .select("c2.other_field as c2OtherField")
+ .leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID and s1.DELETED = 0")
+ .leftJoin("shop_info s2 on s2.id = t.TAKE_SHOP_ID and s2.DELETED = 0")
+ .leftJoin("category c1 on c1.id = t.GOOD_TYPE and c1.DELETED = 0")
+ .leftJoin("category c2 on c2.id = c1.RELATION_ID and c2.DELETED = 0 and c2.TYPE = 3")
+ .eq(Orders::getAcceptDriver, driver.getId())
+ .eq(Orders::getType, Constants.ONE)
+ .eq(Orders::getStatus, dto.getStatus())
+ .eq(Orders::getDeleted, Constants.ZERO)
+ .orderByAsc(Orders::getAcceptTime);
+
+ List<Orders> ordersList = ordersMapper.selectJoinList(Orders.class, wrapper);
+
+ // 鎵归噺鏌ョ墿鍝佹槑缁�
+ List<Integer> orderIds = ordersList.stream().map(Orders::getId).collect(Collectors.toList());
+ Map<Integer, List<OrdersDetail>> detailMap = new HashMap<>();
+ if (!orderIds.isEmpty()) {
+ List<OrdersDetail> allDetails = ordersDetailMapper.selectList(
+ new QueryWrapper<OrdersDetail>().lambda()
+ .in(OrdersDetail::getOrderId, orderIds));
+ for (OrdersDetail d : allDetails) {
+ detailMap.computeIfAbsent(d.getOrderId(), k -> new ArrayList<>()).add(d);
+ }
+ }
+
+ // 鏋勫缓VO锛堜娇鐢ㄥ叡鐢ㄦ柟娉曪級
+ Date now = new Date();
+ List<DriverGrabOrderVO> voList = new ArrayList<>();
+ for (Orders order : ordersList) {
+ voList.add(buildDriverOrderVO(order, driverLat, driverLng, needDepositDist, now, detailMap));
+ }
+
+ return voList;
+ }
+
+ @Override
+ public DriverOrderDetailVO driverOrderDetail(Integer driverId, Integer orderId) {
+ // 鏌ヨ璁㈠崟锛圡PJ JOIN 闂ㄥ簵鍚嶇О+鍒嗙被锛岃窛绂昏绠椾娇鐢∣rders鑷甫鍧愭爣锛�
+ MPJLambdaWrapper<Orders> wrapper = new MPJLambdaWrapper<>();
+ wrapper.selectAll(Orders.class)
+ .select("s1.name", Orders::getDepositShopName)
+ .select("s1.address", Orders::getDepositShopAddress)
+ .select("s2.name", Orders::getTakeShopName)
+ .select("s2.address", Orders::getTakeShopAddress)
+ .select("s2.link_phone as takeShopLinkPhone")
+ .select("c2.other_field as c2OtherField")
+ .leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID and s1.DELETED = 0")
+ .leftJoin("shop_info s2 on s2.id = t.TAKE_SHOP_ID and s2.DELETED = 0")
+ .leftJoin("category c1 on c1.id = t.GOOD_TYPE and c1.DELETED = 0")
+ .leftJoin("category c2 on c2.id = c1.RELATION_ID and c2.DELETED = 0 and c2.TYPE = 3")
+ .eq(Orders::getId, orderId)
+ .eq(Orders::getDeleted, Constants.ZERO);
+ Orders order = ordersMapper.selectJoinOne(Orders.class, wrapper);
+ if (order == null) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "璁㈠崟涓嶅瓨鍦�");
+ }
+
+ // 鏉冮檺鏍¢獙锛氭姠鍗曞ぇ鍘呭彲瑙�(status=2, type=1) 鎴� 宸叉姠鍗�/娲鹃�佷腑(acceptDriver=driverId)
+ boolean canView = false;
+ if (Constants.equalsInteger(order.getStatus(), Constants.TWO) && Constants.equalsInteger(order.getType(), Constants.ONE)) {
+ canView = true;
+ }
+ if (driverId != null && driverId.equals(order.getAcceptDriver())) {
+ canView = true;
+ }
+ if (!canView) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鏃犳潈鏌ョ湅璇ヨ鍗�");
+ }
+
+ // 鑾峰彇鍙告満浣嶇疆锛堢敤浜庤窛绂昏绠楋級
+ Double driverLat = null;
+ Double driverLng = null;
+ if (driverId != null) {
+ DriverInfo driver = driverInfoMapper.selectById(driverId);
+ if (driver != null) {
+ driverLat = driver.getLatitude();
+ driverLng = driver.getLongitude();
+ }
+ }
+
+ // 鐗╁搧鏄庣粏
+ List<OrdersDetail> details = ordersDetailMapper.selectList(
+ new QueryWrapper<OrdersDetail>().lambda()
+ .eq(OrdersDetail::getOrderId, orderId));
+ Map<Integer, List<OrdersDetail>> detailMap = new HashMap<>();
+ for (OrdersDetail d : details) {
+ detailMap.computeIfAbsent(d.getOrderId(), k -> new ArrayList<>()).add(d);
+ }
+
+ // 浣跨敤鍏辩敤鏂规硶鏋勫缓鍩虹VO瀛楁
+ Date now = new Date();
+ DriverGrabOrderVO base = buildDriverOrderVO(order, driverLat, driverLng, true, now, detailMap);
+
+ // 鏋勫缓璇︽儏VO
+ DriverOrderDetailVO vo = new DriverOrderDetailVO();
+ vo.setId(base.getId());
+ vo.setCode(base.getCode());
+ vo.setRemainMinutes(base.getRemainMinutes());
+ vo.setIsUrgent(base.getIsUrgent());
+ vo.setDepositShopName(base.getDepositShopName());
+ vo.setDepositShopAddress(base.getDepositShopAddress());
+ vo.setDepositDistance(base.getDepositDistance());
+ vo.setTakeName(base.getTakeName());
+ vo.setTakeDistance(base.getTakeDistance());
+ vo.setContactPhone(base.getContactPhone());
+ vo.setDriverFee(base.getDriverFee());
+ vo.setUrgentAmount(base.getUrgentAmount());
+ vo.setIsValuable(base.getIsValuable());
+
+ // 鐗╁搧鏄庣粏锛堣浆鎹㈢被鍨嬶級
+ List<DriverOrderDetailVO.OrderItem> detailItems = new ArrayList<>();
+ if (base.getItems() != null) {
+ for (DriverGrabOrderVO.OrderItem src : base.getItems()) {
+ DriverOrderDetailVO.OrderItem item = new DriverOrderDetailVO.OrderItem();
+ item.setName(src.getName());
+ item.setQuantity(src.getQuantity());
+ detailItems.add(item);
+ }
+ }
+ vo.setItems(detailItems);
+
+ // 璇︽儏鐗规湁瀛楁
+ vo.setStatus(order.getStatus());
+ vo.setStatusDesc(getStatusDesc(order.getStatus()));
+
+ // 瀹㈡埛淇℃伅
+ String customerInfo = "";
+ if (StringUtils.isNotBlank(order.getTakeUser())) {
+ customerInfo = order.getTakeUser();
+ }
+ if (StringUtils.isNotBlank(order.getTakePhone()) && order.getTakePhone().length() >= 4) {
+ customerInfo += "锛堟墜鏈哄熬鍙�" + order.getTakePhone().substring(order.getTakePhone().length() - 4) + "锛�";
+ }
+ vo.setCustomerInfo(customerInfo);
+
+ // 瀵艰埅缁忕含搴︼紙浣跨敤Orders鑷甫鍧愭爣锛�
+ if (Constants.equalsInteger(order.getStatus(), Constants.TWO)) {
+ if (order.getDepositLgt() != null && order.getDepositLat() != null) {
+ vo.setNavigateLat(order.getDepositLgt().doubleValue());
+ vo.setNavigateLng(order.getDepositLat().doubleValue());
+ }
+ } else {
+ if (order.getTakeLgt() != null && order.getTakeLat() != null) {
+ vo.setNavigateLat(order.getTakeLgt().doubleValue());
+ vo.setNavigateLng(order.getTakeLat().doubleValue());
+ }
+ }
+
+ // 涓嬪崟闄勪欢鍥剧墖
+ String imgPrefix = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+ + systemDictDataBiz.queryByCode(Constants.OSS, Constants.MEMBER_FILES).getCode();
+ vo.setOrderImages(getFileUrls(orderId, Constants.FileType.ORDER_FILE.getKey(), imgPrefix));
+
+ return vo;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void cancelOrder(Integer driverId, Integer orderId, String reason) {
+ // 1. 鏌ヨ鍙告満淇℃伅
+ DriverInfo driver = driverInfoMapper.selectById(driverId);
+ if (driver == null) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍙告満淇℃伅涓嶅瓨鍦�");
+ }
+
+ // 2. 鏍¢獙璁㈠崟
+ Orders order = ordersMapper.selectById(orderId);
+ if (order == null || Constants.ONE.equals(order.getDeleted())) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "璁㈠崟涓嶅瓨鍦�");
+ }
+ if (!Constants.ONE.equals(order.getType())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "浠呭紓鍦板瘎瀛樿鍗曞彲鍙栨秷");
+ }
+ if (!Constants.TWO.equals(order.getStatus())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠璁㈠崟鐘舵�佷笉鍏佽鍙栨秷");
+ }
+ if (!driverId.equals(order.getAcceptDriver())) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鏃犳潈鎿嶄綔璇ヨ鍗�");
+ }
+
+ // 3. 姣忔棩鍙栨秷娆℃暟闄愬埗
+ String limitStr = operationConfigBiz.getConfig().getDriverDailyCancelLimit();
+ int limit = 3;
+ if (StringUtils.isNotBlank(limitStr)) {
+ try { limit = Integer.parseInt(limitStr); } catch (NumberFormatException ignored) {}
+ }
+ Calendar cal = Calendar.getInstance();
+ cal.set(Calendar.HOUR_OF_DAY, 0);
+ cal.set(Calendar.MINUTE, 0);
+ cal.set(Calendar.SECOND, 0);
+ cal.set(Calendar.MILLISECOND, 0);
+ Date todayStart = cal.getTime();
+ Long todayCancelCount = orderLogMapper.selectCount(new QueryWrapper<OrderLog>().lambda()
+ .eq(OrderLog::getOptUserId, driver.getMemberId())
+ .eq(OrderLog::getObjType, Constants.ORDER_LOG_CANCEL)
+ .eq(OrderLog::getOptUserType, Constants.ONE)
+ .ge(OrderLog::getCreateTime, todayStart));
+ if (todayCancelCount != null && todayCancelCount >= limit) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "浠婃棩鍙栨秷娆℃暟宸茶揪涓婇檺");
+ }
+
+ // 4. 閲嶇疆璁㈠崟鍙告満瀛楁锛堜繚鎸乻tatus=2锛岄噴鏀惧洖鎶㈠崟澶у巺锛�
+ ordersMapper.update(new UpdateWrapper<Orders>().lambda()
+ .set(Orders::getAcceptDriver, null)
+ .set(Orders::getAcceptTime, null)
+ .set(Orders::getAcceptType, null)
+ .eq(Orders::getId, orderId));
+
+ // 5. 鍐欏叆鍙栨秷鏃ュ織
+ OrderLog log = new OrderLog();
+ log.setOrderId(orderId);
+ log.setTitle("鍙告満鍙栨秷璁㈠崟");
+ log.setLogInfo(StringUtils.isNotBlank(reason) ? reason : "鍙告満鍙栨秷鎺ュ崟");
+ log.setObjType(Constants.ORDER_LOG_CANCEL);
+ log.setOptUserId(driver.getMemberId());
+ log.setOptUserType(Constants.ONE);
+ log.setOrderStatus(order.getStatus());
+ log.setCreateTime(new Date());
+ log.setDeleted(Constants.ZERO);
+ orderLogMapper.insert(log);
+ }
+
+ private List<String> getFileUrls(Integer orderId, int objType, String prefix) {
+ List<Multifile> files = multifileMapper.selectList(
+ new QueryWrapper<Multifile>().lambda()
+ .eq(Multifile::getObjId, orderId)
+ .eq(Multifile::getObjType, objType)
+ .eq(Multifile::getIsdeleted, Constants.ZERO)
+ .orderByAsc(Multifile::getSortnum));
+ List<String> urls = new ArrayList<>();
+ if (files != null) {
+ for (Multifile f : files) {
+ if (StringUtils.isNotBlank(f.getFileurl())) {
+ urls.add(prefix + f.getFileurl());
+ }
+ }
+ }
+ return urls;
+ }
+
+ private String getStatusDesc(Integer status) {
+ if (status == null) return "";
+ switch (status) {
+ case 0: return "寰呮敮浠�";
+ case 1: return "寰呭瘎瀛�";
+ case 2: return "宸插瘎瀛�";
+ case 3: return "宸叉帴鍗�";
+ case 4: return "娲鹃�佷腑";
+ case 5: return "寰呭彇浠�";
+ case 7: return "宸插畬鎴�";
+ case 96: return "璁㈠崟鍏抽棴";
+ case 98: return "鍙栨秷涓�";
+ case 99: return "宸插彇娑�";
+ default: return "";
+ }
+ }
+
+ private String formatDistance(double km) {
+ if (km < 1) {
+ return Math.round(km * 1000) + "m";
+ }
+ return String.format("%.1fkm", km);
+ }
+
+ private double haversine(double lat1, double lng1, double lat2, double lng2) {
+ double R = 6371;
+ double dLat = Math.toRadians(lat2 - lat1);
+ double dLng = Math.toRadians(lng2 - lng1);
+ double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
+ + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2))
+ * Math.sin(dLng / 2) * Math.sin(dLng / 2);
+ double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
+ return R * c;
+ }
+
+ private <T> PageData<T> emptyPage(PageWrap<?> pageWrap) {
+ PageData<T> pd = new PageData<>(pageWrap.getPage(), pageWrap.getCapacity());
+ pd.setTotal(0);
+ pd.setRecords(new ArrayList<>());
+ return pd;
+ }
+
+ /**
+ * 鏋勫缓鍙告満绔鍗曞垪琛ㄥ叡鐢╒O锛堜娇鐢∣rders鑷甫鍧愭爣璁$畻璺濈锛�
+ *
+ * @param order 璁㈠崟瀹炰綋锛圡PJ宸插~鍏卍epositShopName绛夊叧鑱斿瓧娈碉級
+ * @param driverLat 鍙告満绾害
+ * @param driverLng 鍙告満缁忓害
+ * @param needDepositDist 鏄惁闇�瑕佽绠楄窛瀛樹欢闂ㄥ簵璺濈
+ * @param now 褰撳墠鏃堕棿
+ * @param detailMap 璁㈠崟鐗╁搧鏄庣粏Map锛坥rderId 鈫� detailList锛�
+ * @return DriverGrabOrderVO
+ */
+ private DriverGrabOrderVO buildDriverOrderVO(Orders order, Double driverLat, Double driverLng,
+ boolean needDepositDist, Date now, Map<Integer, List<OrdersDetail>> detailMap) {
+ DriverGrabOrderVO vo = new DriverGrabOrderVO();
+ vo.setId(order.getId());
+ vo.setCode(order.getCode());
+
+ // 鍓╀綑鏃堕暱
+ if (order.getEstimatedDeliveryTime() != null) {
+ long diffMs = order.getEstimatedDeliveryTime().getTime() - now.getTime();
+ vo.setRemainMinutes(diffMs > 0 ? diffMs / (60 * 1000) : 0L);
+ } else {
+ vo.setRemainMinutes(0L);
+ }
+
+ vo.setIsUrgent(order.getIsUrgent());
+ vo.setDriverFee(order.getDriverFee());
+ vo.setUrgentAmount(order.getUrgentAmount());
+
+ // 瀛樹欢闂ㄥ簵锛堜娇鐢∣rders鑷甫鍧愭爣锛�
+ vo.setDepositShopName(order.getDepositShopName());
+ vo.setDepositShopAddress(order.getDepositShopAddress());
+ if (needDepositDist && driverLat != null && driverLng != null
+ && order.getDepositLgt() != null && order.getDepositLat() != null) {
+ double distKm = haversine(driverLat, driverLng,
+ order.getDepositLgt().doubleValue(), order.getDepositLat().doubleValue());
+ vo.setDepositDistance(formatDistance(distKm));
+ }
+
+ // 鍙栦欢淇℃伅 + 鑱旂郴鐢佃瘽锛堜娇鐢∣rders鑷甫鍧愭爣锛�
+ boolean hasTakeShop = order.getTakeShopId() != null && StringUtils.isNotBlank(order.getTakeShopName());
+ if (hasTakeShop) {
+ vo.setTakeName(order.getTakeShopName());
+ vo.setContactPhone(order.getTakeShopLinkPhone());
+ } else {
+ vo.setTakeName(order.getTakeLocation());
+ vo.setContactPhone(order.getTakePhone());
+ }
+ if (driverLat != null && driverLng != null
+ && order.getTakeLgt() != null && order.getTakeLat() != null) {
+ double takeDist = haversine(driverLat, driverLng,
+ order.getTakeLgt().doubleValue(), order.getTakeLat().doubleValue());
+ vo.setTakeDistance(formatDistance(takeDist));
+ }
+
+ // 璐甸噸鐗╁搧
+ vo.setIsValuable("1".equals(order.getC2OtherField()));
+
+ // 鐗╁搧鏄庣粏
+ List<OrdersDetail> details = detailMap.getOrDefault(order.getId(), Collections.emptyList());
+ List<DriverGrabOrderVO.OrderItem> items = new ArrayList<>();
+ for (OrdersDetail detail : details) {
+ DriverGrabOrderVO.OrderItem item = new DriverGrabOrderVO.OrderItem();
+ item.setName(detail.getLuggageName());
+ item.setQuantity(detail.getNum());
+ items.add(item);
+ }
+ vo.setItems(items);
+
+ return vo;
+ }
+
}
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 5c4f12d..a4554eb 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
@@ -286,8 +286,6 @@
String token = JwtTokenUtil.generateTokenForRedis(member.getId(), Constants.ZERO, JSONObject.toJSONString(member), redisTemplate);
accountResponse.setToken(token);
accountResponse.setMember(member);
- // 闂ㄥ簵鐢ㄦ埛韬唤鏃讹紝杩斿洖鐢宠鐨勯棬搴楃姸鎬�
- fillShopInfo(accountResponse, member);
return accountResponse;
} catch (WxErrorException e) {
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "寰俊鐧诲綍寮傚父锛佽鑱旂郴绠$悊鍛�");
@@ -341,8 +339,6 @@
AccountResponse accountResponse = new AccountResponse();
accountResponse.setToken(token);
accountResponse.setMember(member);
- // 闂ㄥ簵鐢ㄦ埛韬唤鏃讹紝杩斿洖鐢宠鐨勯棬搴楃姸鎬�
- fillShopInfo(accountResponse, member);
return accountResponse;
} catch (Exception e) {
e.printStackTrace();
@@ -353,15 +349,25 @@
/**
* 闂ㄥ簵鐢ㄦ埛韬唤鏃讹紝濉厖闂ㄥ簵瀹℃牳鐘舵��
*/
- private void fillShopInfo(AccountResponse response, Member member) {
+ private void fillShopInfo(UserCenterVO userCenterVO, Member member) {
if (Constants.TWO.equals(member.getUserType())) {
ShopInfo shopInfo = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
.eq(ShopInfo::getRegionMemberId, member.getId())
.eq(ShopInfo::getDeleted, Constants.ZERO)
.last("limit 1"));
if (shopInfo != null) {
- response.setShopId(shopInfo.getId());
- response.setShopAuditStatus(shopInfo.getAuditStatus());
+ userCenterVO.setShopId(shopInfo.getId());
+ userCenterVO.setShopAuditStatus(shopInfo.getAuditStatus());
+ }
+ }
+ // 鏍规嵁openid鏌ヨ褰撳墠缁戝畾鐨勯棬搴�
+ if (StringUtils.isNotBlank(member.getOpenid())) {
+ ShopInfo bindShop = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
+ .eq(ShopInfo::getOpenid, member.getOpenid())
+ .eq(ShopInfo::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ if (bindShop != null) {
+ userCenterVO.setBindShopId(String.valueOf(bindShop.getId()));
}
}
}
@@ -398,6 +404,7 @@
userCenterVO.setName(member.getName());
userCenterVO.setTelephone(member.getTelephone());
userCenterVO.setCoverImage(member.getCoverImage());
+ userCenterVO.setOpenid(member.getOpenid());
if(StringUtils.isNotBlank(member.getCoverImage())){
String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
+systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILES).getCode();
@@ -417,6 +424,14 @@
.eq(Orders::getDeleted, Constants.ZERO)
.in(Orders::getStatus, Arrays.stream(waitReceiveStatuses).boxed().collect(Collectors.toList())));
userCenterVO.setWaitReceiveCount(waitReceiveCount.intValue());
+ // 閫�娆句腑璁㈠崟鏁伴噺
+ Long refundingCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getMemberId, memberId)
+ .eq(Orders::getDeleted, Constants.ZERO)
+ .eq(Orders::getStatus, 98));
+ userCenterVO.setRefundingCount(refundingCount.intValue());
+ // 闂ㄥ簵鐢ㄦ埛韬唤鏃讹紝杩斿洖鐢宠鐨勯棬搴楃姸鎬�
+ fillShopInfo(userCenterVO, member);
return userCenterVO;
}
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 5224b0f..8fa0b27 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
@@ -33,6 +33,7 @@
import com.doumee.service.business.OrderLogService;
import com.doumee.service.business.OrdersService;
import com.doumee.service.business.AreasService;
+import com.doumee.service.business.PricingRuleService;
import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
import com.github.binarywang.wxpay.exception.WxPayException;
@@ -111,6 +112,10 @@
@Autowired
private PricingRuleMapper pricingRuleMapper;
+
+ @Autowired
+ private PricingRuleService pricingRuleService;
+
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@@ -303,9 +308,9 @@
*/
@Override
public PriceCalculateVO calculateLocalPrice(CalculateLocalPriceDTO dto) {
- // 澶╂暟鏍¢獙锛屾渶灏�1澶�
- int days = dto.getEstimatedDepositDays() != null && dto.getEstimatedDepositDays() > 0
- ? dto.getEstimatedDepositDays() : 1;
+ // 鏍规嵁寮�濮嬪拰缁撴潫鏃堕棿璁$畻澶╂暟锛屾渶灏�1澶�
+ long diffMs = dto.getDepositEndTime().getTime() - dto.getDepositStartTime().getTime();
+ int days = (int) Math.max(1, (diffMs / (1000 * 60 * 60 * 24)) + 1);
// 鏀堕泦鎵�鏈夌墿鍝佺被鍨婭D
List<Integer> categoryIds = new ArrayList<>();
@@ -364,9 +369,9 @@
itemPriceTotal += subtotal;
}
- // 淇濅环璐圭敤锛氭姤浠烽噾棰� 脳 淇濅环璐圭巼(瀛楀吀 INSURANCE_RATE)锛屽厓鈫掑垎
+ // 淇濅环璐圭敤锛氭姤浠烽噾棰� 脳 淇濅环璐圭巼(瀛楀吀 INSURANCE_RATE)锛屽厓鈫掑垎锛堜繚浠烽噾棰�>0鏃惰璐癸級
long insuranceFeeFen = 0L;
- if (Boolean.TRUE.equals(dto.getInsured()) && dto.getDeclaredAmount() != null) {
+ if (dto.getDeclaredAmount() != null && dto.getDeclaredAmount().compareTo(BigDecimal.ZERO) > 0) {
BigDecimal insuranceFeeYuan = calculateInsuranceFee(dto.getDeclaredAmount());
insuranceFeeFen = insuranceFeeYuan.multiply(new BigDecimal(100)).longValue();
}
@@ -504,9 +509,9 @@
itemPriceTotal += subtotal;
}
- // 4. 淇濅环璐圭敤锛氭姤浠烽噾棰� 脳 淇濅环璐圭巼(瀛楀吀 INSURANCE_RATE)锛屽厓鈫掑垎
+ // 4. 淇濅环璐圭敤锛氭姤浠烽噾棰� 脳 淇濅环璐圭巼(瀛楀吀 INSURANCE_RATE)锛屽厓鈫掑垎锛堜繚浠烽噾棰�>0鏃惰璐癸級
long insuranceFeeFen = 0L;
- if (Boolean.TRUE.equals(dto.getInsured()) && dto.getDeclaredAmount() != null) {
+ if (dto.getDeclaredAmount() != null && dto.getDeclaredAmount().compareTo(BigDecimal.ZERO) > 0) {
BigDecimal insuranceFeeYuan = calculateInsuranceFee(dto.getDeclaredAmount());
insuranceFeeFen = insuranceFeeYuan.multiply(new BigDecimal(100)).longValue();
}
@@ -531,6 +536,33 @@
result.setUrgentFee(urgentFeeFen);
result.setTotalPrice(totalPrice);
result.setDistance(distanceKm);
+
+ // 7. 棰勮閫佽揪鏃堕暱锛歱ricing_rule type=2锛坒ieldA=1鏍囬�熻揪锛宖ieldA=2鏋侀�熻揪锛�
+ List<PricingRule> timeRules = pricingRuleMapper.selectList(new QueryWrapper<PricingRule>().lambda()
+ .eq(PricingRule::getDeleted, Constants.ZERO)
+ .eq(PricingRule::getType, Constants.TWO)
+ .eq(PricingRule::getCityId, dto.getCityId())
+ .in(PricingRule::getFieldA, Arrays.asList("1", "2")));
+ for (PricingRule tr : timeRules) {
+ BigDecimal baseKm = new BigDecimal(tr.getFieldB());
+ int baseHours = Integer.parseInt(tr.getFieldC());
+ BigDecimal extraKm = new BigDecimal(tr.getFieldD());
+ int extraHours = Integer.parseInt(tr.getFieldE());
+ int hours;
+ if (distanceKm.compareTo(baseKm) <= 0) {
+ hours = baseHours;
+ } else {
+ BigDecimal overDistance = distanceKm.subtract(baseKm);
+ int extraCount = overDistance.divide(extraKm, 0, RoundingMode.CEILING).intValue();
+ hours = baseHours + extraCount * extraHours;
+ }
+ if ("1".equals(tr.getFieldA())) {
+ result.setStandardHours(hours);
+ } else if ("2".equals(tr.getFieldA())) {
+ result.setUrgentHours(hours);
+ }
+ }
+
return result;
}
@@ -633,6 +665,11 @@
takeLgt = BigDecimal.valueOf(takeShop.getLongitude());
takeLocationValue = takeShop.getAddress();
} else if (dto.getTakeLat() != null && dto.getTakeLgt() != null && StringUtils.isNotBlank(dto.getTakeLocation())) {
+ // 鏃犲彇浠堕棬搴楋紝鏍¢獙瀛樹欢鐐逛笌鑷�夊彇浠剁偣鏄惁鍦ㄥ悓涓�鍩庡競
+ if (MapUtil.isSameCity(depositShop.getLatitude(), depositShop.getLongitude(),
+ dto.getTakeLat().doubleValue(), dto.getTakeLgt().doubleValue())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "寮傚湴瀵勫瓨璁㈠崟瀛樺彇鐐逛笉鑳藉湪鍚屼竴鍩庡競锛屽闇�鍚屽煄瀵勫瓨璇烽�夋嫨灏辫繎闂ㄥ簵");
+ }
takeLat = dto.getTakeLat();
takeLgt = dto.getTakeLgt();
takeLocationValue = dto.getTakeLocation();
@@ -647,15 +684,12 @@
// ========== 3. 璁$畻璐圭敤 ==========
PriceCalculateVO priceResult;
if (Constants.ZERO.equals(dto.getType())) {
- // 灏卞湴瀵勫瓨锛氳绠楀ぉ鏁�
- long diffMs = takeTime.getTime() - depositTime.getTime();
- int days = (int) Math.max(1, (diffMs / (1000 * 60 * 60 * 24)) + 1);
-
+ // 灏卞湴瀵勫瓨
CalculateLocalPriceDTO priceDTO = new CalculateLocalPriceDTO();
priceDTO.setCityId(dto.getCityId());
- priceDTO.setEstimatedDepositDays(days);
+ priceDTO.setDepositStartTime(depositTime);
+ priceDTO.setDepositEndTime(takeTime);
priceDTO.setItems(dto.getItems());
- priceDTO.setInsured(dto.getDeclaredAmount() != null && dto.getDeclaredAmount().compareTo(BigDecimal.ZERO) > 0);
priceDTO.setDeclaredAmount(dto.getDeclaredAmount());
priceResult = calculateLocalPrice(priceDTO);
} else {
@@ -667,7 +701,6 @@
priceDTO.setToLat(takeLat);
priceDTO.setToLgt(takeLgt);
priceDTO.setItems(dto.getItems());
- priceDTO.setInsured(dto.getDeclaredAmount() != null && dto.getDeclaredAmount().compareTo(BigDecimal.ZERO) > 0);
priceDTO.setDeclaredAmount(dto.getDeclaredAmount());
priceDTO.setUrgent(Constants.ONE.equals(dto.getIsUrgent()));
priceResult = calculateRemotePrice(priceDTO);
@@ -736,6 +769,7 @@
// 鐗╁搧淇℃伅
orders.setGoodType(dto.getGoodType());
+ orders.setGoodLevel(goodTypeCategory.getRelationId());
// 鎷兼帴鐗╁搧淇℃伅锛氱墿鍝佺被鍨嬪悕绉般�佸昂瀵稿悕绉�*鏁伴噺锛堟暟缁勫瓧绗︿覆锛�
List<String> goodsParts = new ArrayList<>();
for (ItemPriceVO itemVO : priceResult.getItemList()) {
@@ -1714,6 +1748,24 @@
order.setUpdateTime(now);
// 鐢熸垚浼氬憳鏍搁攢鐮�
order.setMemberVerifyCode(generateVerifyCode());
+ // 寮傚湴瀵勫瓨锛氳绠楅璁¢�佽揪鏃堕棿
+ if (Constants.ONE.equals(order.getType())
+ && order.getDepositLat() != null && order.getDepositLgt() != null
+ && order.getTakeLat() != null && order.getTakeLgt() != null) {
+ EstimatedDeliveryResultVO deliveryResult = calculateEstimatedDelivery(
+ Integer.valueOf(order.getCityId()),
+ order.getDepositLat().doubleValue(), order.getDepositLgt().doubleValue(),
+ order.getTakeLat().doubleValue(), order.getTakeLgt().doubleValue());
+ // isUrgent: 0=鏍囬�熻揪; 1=鏋侀�熻揪
+ BigDecimal hours = Constants.ONE.equals(order.getIsUrgent())
+ ? deliveryResult.getExpressHours()
+ : deliveryResult.getStandardHours();
+ if (hours != null) {
+ long millis = hours.multiply(new BigDecimal("3600000"))
+ .setScale(0, RoundingMode.HALF_UP).longValue();
+ order.setEstimatedDeliveryTime(new Date(now.getTime() + millis));
+ }
+ }
ordersMapper.updateById(order);
}
@@ -2315,6 +2367,43 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
+ public void memberConfirmReceipt(Integer orderId, Integer memberId) {
+ // 1. 鏌ヨ璁㈠崟
+ Orders order = ordersMapper.selectById(orderId);
+ if (order == null || Constants.equalsInteger(order.getDeleted(), Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "璁㈠崟涓嶅瓨鍦�");
+ }
+ // 2. 鏍¢獙褰掑睘
+ if (!memberId.equals(order.getMemberId())) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鏃犳潈鎿嶄綔璇ヨ鍗�");
+ }
+ // 3. 鏍¢獙璁㈠崟绫诲瀷锛氬紓鍦板瘎瀛�
+ if (!Constants.ONE.equals(order.getType())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "浠呭紓鍦板瘎瀛樿鍗曞彲鎿嶄綔");
+ }
+ // 4. 鏍¢獙鏃犲彇浠堕棬搴�
+ if (order.getTakeShopId() != null) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇ヨ鍗曟湁鍙栦欢闂ㄥ簵锛岄渶闂ㄥ簵纭鍑哄簱");
+ }
+ // 5. 鏍¢獙鐘舵�侊細宸查�佽揪(5)
+ if (!Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.arrived.getStatus())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠璁㈠崟鐘舵�佷笉鍏佽纭鏀惰揣");
+ }
+
+ // 6. 鏇存柊璁㈠崟鐘舵�佷负宸插畬鎴�
+ Date now = new Date();
+ order.setStatus(Constants.OrderStatus.finished.getStatus());
+ order.setFinishTime(now);
+ order.setUpdateTime(now);
+ ordersMapper.updateById(order);
+
+ // 7. 鐢熸垚鏀剁泭璁板綍
+ calculateAndSaveOrderFees(orderId);
+ generateRevenueRecords(orderId);
+ }
+
+ @Override
public void calculateAndSaveOrderFees(Integer orderId) {
Orders order = ordersMapper.selectById(orderId);
if (order == null || Constants.equalsInteger(order.getDeleted(), Constants.ONE)) {
@@ -2857,4 +2946,29 @@
return Math.max(days, 0);
}
+ @Override
+ public EstimatedDeliveryResultVO calculateEstimatedDelivery(Integer cityId,
+ Double fromLat, Double fromLng,
+ Double toLat, Double toLng) {
+ // 鑵捐鍦板浘璺濈鐭╅樀API璁$畻瀹為檯璺濈
+ String from = fromLat + "," + fromLng;
+ String to = toLat + "," + toLng;
+ JSONObject distanceResult = MapUtil.distanceSingle("driving", from, to);
+
+ // 鑾峰彇璺濈锛堢背锛夛紝杞叕閲�
+ int distanceMeters = distanceResult.getIntValue("distance");
+ BigDecimal distanceKm = new BigDecimal(distanceMeters)
+ .divide(new BigDecimal("1000"), 2, RoundingMode.HALF_UP);
+
+ // 鏍规嵁pricing_rule type=2 璁$畻 鏍囬�熻揪(1) 鍜� 鏋侀�熻揪(2) 鏃舵晥
+ BigDecimal standardTime = pricingRuleService.calculateEstimatedTime(cityId, 1, distanceKm);
+ BigDecimal expressTime = pricingRuleService.calculateEstimatedTime(cityId, 2, distanceKm);
+
+ EstimatedDeliveryResultVO vo = new EstimatedDeliveryResultVO();
+ vo.setDistanceKm(distanceKm);
+ vo.setStandardHours(standardTime);
+ vo.setExpressHours(expressTime);
+ return vo;
+ }
+
}
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 16e0ab0..bf73fc6 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
@@ -18,7 +18,9 @@
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.dto.RevenueQueryDTO;
import com.doumee.dao.vo.RevenueStatisticsVO;
+import com.doumee.dao.vo.RevenueSummaryVO;
import com.doumee.service.business.RevenueService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -235,4 +237,118 @@
return vo;
}
+ @Override
+ public PageData<Revenue> findDriverRevenuePage(PageWrap<RevenueQueryDTO> pageWrap, Integer memberId) {
+ IPage<Revenue> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ QueryWrapper<Revenue> qw = buildRevenueQueryWrapper(pageWrap.getModel(), memberId);
+ PageData<Revenue> result = PageData.from(revenueMapper.selectPage(page, qw));
+ if (result != null && result.getRecords() != null) {
+ for (Revenue model : result.getRecords()) {
+ model.setAmountInfo(Constants.getFormatMoney(model.getAmount()));
+ }
+ }
+ return result;
+ }
+
+ @Override
+ public PageData<Revenue> findShopRevenuePage(PageWrap<RevenueQueryDTO> pageWrap, Integer shopId) {
+ ShopInfo shop = shopInfoMapper.selectById(shopId);
+ if (shop == null || Constants.equalsInteger(shop.getDeleted(), Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ IPage<Revenue> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ QueryWrapper<Revenue> qw = buildRevenueQueryWrapper(pageWrap.getModel(), shop.getRegionMemberId());
+ PageData<Revenue> result = PageData.from(revenueMapper.selectPage(page, qw));
+ if (result != null && result.getRecords() != null) {
+ for (Revenue model : result.getRecords()) {
+ model.setAmountInfo(Constants.getFormatMoney(model.getAmount()));
+ }
+ }
+ return result;
+ }
+
+ @Override
+ public RevenueSummaryVO getDriverRevenueSummary(RevenueQueryDTO queryDTO, Integer memberId) {
+ return buildRevenueSummary(queryDTO, memberId);
+ }
+
+ @Override
+ public RevenueSummaryVO getShopRevenueSummary(RevenueQueryDTO queryDTO, Integer shopId) {
+ ShopInfo shop = shopInfoMapper.selectById(shopId);
+ if (shop == null || Constants.equalsInteger(shop.getDeleted(), Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ return buildRevenueSummary(queryDTO, shop.getRegionMemberId());
+ }
+
+ private QueryWrapper<Revenue> buildRevenueQueryWrapper(RevenueQueryDTO query, Integer memberId) {
+ QueryWrapper<Revenue> qw = new QueryWrapper<>();
+ qw.lambda().eq(Revenue::getDeleted, Constants.ZERO);
+ qw.lambda().eq(Revenue::getMemberId, memberId);
+ if (query != null) {
+ if (query.getOptType() != null) {
+ qw.lambda().eq(Revenue::getOptType, query.getOptType());
+ }
+ if (query.getType() != null) {
+ qw.lambda().eq(Revenue::getType, query.getType());
+ }
+ if (query.getStartTime() != null) {
+ qw.lambda().ge(Revenue::getCreateTime, query.getStartTime());
+ }
+ if (query.getEndTime() != null) {
+ qw.lambda().le(Revenue::getCreateTime, Utils.Date.getEnd(query.getEndTime()));
+ }
+ }
+ qw.lambda().orderByDesc(Revenue::getCreateTime);
+ return qw;
+ }
+
+ private RevenueSummaryVO buildRevenueSummary(RevenueQueryDTO queryDTO, Integer memberId) {
+ // 鏀跺叆
+ QueryWrapper<Revenue> incomeQw = new QueryWrapper<>();
+ incomeQw.eq("DELETED", Constants.ZERO);
+ incomeQw.eq("MEMBER_ID", memberId);
+ incomeQw.eq("OPT_TYPE", Constants.ONE);
+ if (queryDTO != null) {
+ if (queryDTO.getType() != null) {
+ incomeQw.eq("TYPE", queryDTO.getType());
+ }
+ if (queryDTO.getStartTime() != null) {
+ incomeQw.ge("CREATE_TIME", queryDTO.getStartTime());
+ }
+ if (queryDTO.getEndTime() != null) {
+ incomeQw.le("CREATE_TIME", Utils.Date.getEnd(queryDTO.getEndTime()));
+ }
+ }
+ incomeQw.select("IFNULL(SUM(AMOUNT), 0) as amount");
+ Map<String, Object> incomeResult = revenueMapper.selectMaps(incomeQw).stream().findFirst().orElse(null);
+ long totalIncome = incomeResult != null && incomeResult.get("amount") != null
+ ? Long.parseLong(incomeResult.get("amount").toString()) : 0L;
+ // 鏀嚭
+ QueryWrapper<Revenue> expenseQw = new QueryWrapper<>();
+ expenseQw.eq("DELETED", Constants.ZERO);
+ expenseQw.eq("MEMBER_ID", memberId);
+ expenseQw.eq("OPT_TYPE", -Constants.ONE);
+ if (queryDTO != null) {
+ if (queryDTO.getType() != null) {
+ expenseQw.eq("TYPE", queryDTO.getType());
+ }
+ if (queryDTO.getStartTime() != null) {
+ expenseQw.ge("CREATE_TIME", queryDTO.getStartTime());
+ }
+ if (queryDTO.getEndTime() != null) {
+ expenseQw.le("CREATE_TIME", Utils.Date.getEnd(queryDTO.getEndTime()));
+ }
+ }
+ expenseQw.select("IFNULL(SUM(AMOUNT), 0) as amount");
+ Map<String, Object> expenseResult = revenueMapper.selectMaps(expenseQw).stream().findFirst().orElse(null);
+ long totalExpense = expenseResult != null && expenseResult.get("amount") != null
+ ? Long.parseLong(expenseResult.get("amount").toString()) : 0L;
+
+ RevenueSummaryVO vo = new RevenueSummaryVO();
+ vo.setTotalIncome(totalIncome);
+ vo.setTotalExpense(totalExpense);
+ 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 bf5a84a..f08ea2e 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
@@ -236,8 +236,8 @@
@Override
@Transactional(rollbackFor = Exception.class)
- public void applyShop(ShopApplyDTO request, Member member) {
- Integer memberId = member.getId();
+ public void applyShop(ShopApplyDTO request) {
+ Member member = memberMapper.selectById(request.getMemberId());
// 1. 鏍¢獙闂ㄥ簵鎵嬫満鍙峰敮涓�鎬э紙shop_info.telephone锛�
checkTelephoneUnique(request.getTelephone(), null);
@@ -275,7 +275,7 @@
// 3. 鏌ヨ璇ヤ細鍛樻槸鍚﹀凡鏈夐棬搴楄褰�
QueryWrapper<ShopInfo> existQw = new QueryWrapper<>();
existQw.lambda()
- .eq(ShopInfo::getRegionMemberId, memberId)
+ .eq(ShopInfo::getRegionMemberId, member.getId())
.eq(ShopInfo::getDeleted, Constants.ZERO)
.last("limit 1");
ShopInfo existing = shopInfoMapper.selectOne(existQw);
@@ -317,7 +317,6 @@
existing.setAliAccount(request.getAliAccount());
existing.setAuditStatus(Constants.ZERO);
existing.setUpdateTime(now);
- existing.setUpdateUser(memberId);
existing.setAuditRemark(null);
existing.setAuditTime(null);
existing.setAuditUserId(null);
@@ -351,8 +350,7 @@
shopInfo.setDeleted(Constants.ZERO);
shopInfo.setCreateTime(now);
shopInfo.setUpdateTime(now);
- shopInfo.setCreateUser(memberId);
- shopInfo.setRegionMemberId(memberId);
+ shopInfo.setRegionMemberId(member.getId());
shopInfoMapper.insert(shopInfo);
shopId = shopInfo.getId();
}
@@ -662,7 +660,7 @@
String imgPrefix = "";
try {
imgPrefix = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
- + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.SHOP_FILES).getCode();
+ + systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHOP_FILES).getCode();
} catch (Exception e) {
// 鏈厤缃椂蹇界暐
}
@@ -720,7 +718,7 @@
String memberPrefix = "";
try {
memberPrefix = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
- + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.MEMBER_FILES).getCode();
+ + systemDictDataBiz.queryByCode(Constants.OSS, Constants.MEMBER_FILES).getCode();
} catch (Exception e) {
// 鏈厤缃椂蹇界暐
}
@@ -761,6 +759,12 @@
qw.lambda().like(ShopInfo::getName, dto.getName());
}
+ // 鍩庡競绛涢�夛紙areaId鏄尯鍘匡紝闇�鍖归厤鍏秔arentId绛変簬鍩庡競ID锛�
+ if (dto.getCityId() != null) {
+ qw.inSql("AREA_ID",
+ "SELECT id FROM areas WHERE parent_id = " + dto.getCityId() + " AND isdeleted = 0");
+ }
+
// 璺濈绛涢�夛紙鍗曚綅锛氱背 鈫� 杞崲涓簁m姣旇緝锛�
if (distanceMeter != null && distanceMeter > 0) {
double maxKm = distanceMeter / 1000.0;
@@ -793,6 +797,8 @@
vo.setShopHours(shop.getShopHours());
vo.setAddress(shop.getAddress());
vo.setScore(shop.getScore());
+ vo.setLatitude(shop.getLatitude());
+ vo.setLongitude(shop.getLongitude());
// 闂ㄥご鐓х涓�寮�
vo.setCoverImg(getFirstImage(shop.getId(), Constants.FileType.STORE_FRONT.getKey(), imgPrefix));
// 璺濈
@@ -823,6 +829,10 @@
vo.setName(shop.getName());
vo.setAddress(shop.getAddress());
vo.setContent(shop.getContent());
+ vo.setDepositTypes(shop.getDepositTypes());
+ vo.setFeeStandard(shop.getFeeStandard());
+ vo.setLatitude(shop.getLatitude());
+ vo.setLongitude(shop.getLongitude());
// 闂ㄥご鐓� + 鍐呴儴鐓� 鍏ㄨ矾寰勯泦鍚�
String imgPrefix = getShopPrefix();
@@ -911,7 +921,7 @@
private String getShopPrefix() {
try {
return systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
- + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.SHOP_FILES).getCode();
+ + systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHOP_FILES).getCode();
} catch (Exception e) {
return "";
}
@@ -965,7 +975,7 @@
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();
+ + systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHOP_FILES).getCode();
vo.setFullCoverImg(path + shop.getCoverImg());
}
vo.setHasMessage(false);
@@ -1055,7 +1065,6 @@
if (shop == null) {
return null;
}
-
// 鍒涘缓token锛坓enerateTokenForRedis 宸茶嚜鍔ㄦ竻闄よ鐢ㄦ埛鏃oken锛屼繚璇佸敮涓�鏈夋晥锛�
String token = JwtTokenUtil.generateTokenForRedis(shop.getId(), Constants.TWO, JSONObject.toJSONString(shop), redisTemplate);
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/SmsrecordServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/SmsrecordServiceImpl.java
index b551c26..182169c 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/SmsrecordServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/SmsrecordServiceImpl.java
@@ -1,7 +1,5 @@
package com.doumee.service.business.impl;
-import com.alibaba.fastjson.JSONObject;
-import com.aliyuncs.CommonResponse;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -14,7 +12,7 @@
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.Strings;
import com.doumee.core.utils.Utils;
-import com.doumee.core.utils.aliyun.ALiYunSmSUtil;
+import com.doumee.core.utils.aliyun.AliSmsService;
import com.doumee.dao.business.SmsrecordMapper;
import com.doumee.dao.business.model.Smsrecord;
import com.doumee.service.business.SmsrecordService;
@@ -179,15 +177,10 @@
);
String digits = Strings.randomNumeric(4);
//鍙戦�侀獙璇佺爜
- Map<String,Object> map = new HashMap<String,Object>();
- map.put("code",digits);
- CommonResponse response = ALiYunSmSUtil.sendMessage(phone,map);
- if(response.getHttpResponse().isSuccess()){
- JSONObject data = JSONObject.parseObject(response.getData());
- String returnCode = data.getString("Code");
- if(!returnCode.equals("OK")){
- throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐭俊鍙戦�佸け璐ワ細" + data.getString("Message"));
- }
+ String templateParam = "{\"code\":\"" + digits + "\"}";
+ Boolean result = AliSmsService.sendSms(phone, "SMS_491325122", templateParam);
+ if (!result) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鐭俊鍙戦�佸け璐ワ紝璇风◢鍚庨噸璇�");
}
//瀛樺偍鐭俊楠岃瘉鐮�
Smsrecord smsrecord = new Smsrecord();
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 83e7959..3484958 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
@@ -258,6 +258,22 @@
update.setUpdateTime(now);
withdrawalOrdersMapper.updateById(update);
+ // 鏇存柊鍏宠仈鐨勬彁鐜� Revenue 璁板綍鐘舵��
+ // 閫氳繃 objId + objType=1(鎻愮幇涓氬姟) + type=1(鎻愮幇鏀嚭) 鎵惧埌鍘熷鎻愮幇鏀嚭璁板綍
+ Revenue withdrawalRevenue = revenueMapper.selectOne(new QueryWrapper<Revenue>().lambda()
+ .eq(Revenue::getObjId, order.getId())
+ .eq(Revenue::getObjType, Constants.ONE)
+ .eq(Revenue::getType, Constants.ONE)
+ .eq(Revenue::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ if (withdrawalRevenue != null) {
+ Integer revenueStatus = Constants.ONE.equals(dto.getStatus()) ? Constants.ZERO : Constants.ONE; // 閫氳繃=0鎴愬姛, 椹冲洖=1澶辫触
+ revenueMapper.update(new UpdateWrapper<Revenue>().lambda()
+ .set(Revenue::getStatus, revenueStatus)
+ .set(Revenue::getUpdateTime, now)
+ .eq(Revenue::getId, withdrawalRevenue.getId()));
+ }
+
// 椹冲洖鏃堕��鍥炰綑棰�
if (Constants.TWO.equals(dto.getStatus())) {
Long amountFen = order.getAmount() != null ? order.getAmount() : 0L;
@@ -295,7 +311,8 @@
revenue.setVaildStatus(Constants.ONE); // 宸插叆璐�
revenue.setObjId(order.getId());
revenue.setObjType(Constants.ONE); // 1=鎻愮幇涓氬姟
- revenue.setStatus(Constants.ZERO);
+ revenue.setOrderNo(order.getOutBillNo());
+ revenue.setStatus(Constants.ZERO); // 0=鎴愬姛
revenue.setDeleted(Constants.ZERO);
revenue.setCreateTime(now);
revenueMapper.insert(revenue);
@@ -390,7 +407,8 @@
revenue.setVaildStatus(Constants.ONE);
revenue.setObjId(order.getId());
revenue.setObjType(Constants.ONE);
- revenue.setStatus(Constants.ZERO);
+ revenue.setOrderNo(billNo);
+ revenue.setStatus(Constants.TWO); // 2=澶勭悊涓�
revenue.setDeleted(Constants.ZERO);
revenue.setCreateTime(now);
revenueMapper.insert(revenue);
@@ -440,7 +458,8 @@
revenue.setVaildStatus(Constants.ONE); // 宸插叆璐�
revenue.setObjId(order.getId());
revenue.setObjType(Constants.ONE); // 1=鎻愮幇涓氬姟
- revenue.setStatus(Constants.ZERO);
+ revenue.setOrderNo(billNo);
+ revenue.setStatus(Constants.TWO); // 2=澶勭悊涓�
revenue.setDeleted(Constants.ZERO);
revenue.setCreateTime(now);
revenueMapper.insert(revenue);
diff --git a/server/services/src/main/resources/application-dev.yml b/server/services/src/main/resources/application-dev.yml
index 65f07cc..fa3d1ce 100644
--- a/server/services/src/main/resources/application-dev.yml
+++ b/server/services/src/main/resources/application-dev.yml
@@ -83,12 +83,31 @@
########################寰俊鏀粯鐩稿叧閰嶇疆########################
wx:
pay:
- appId: wxcd2b89fd2ff065f8
- appSecret: 3462fa186da7cb06c544df8d8664b63a
- mchId: 1229817002
- mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
- notifyUrl: https://test.doumee.cn/dmmall_web_api/web/api/wxPayNotify
- keyPath: D:\DouMee\dmkjWxcert\apiclient_cert.p12
+# appId: wxcd2b89fd2ff065f8
+# appSecret: 3462fa186da7cb06c544df8d8664b63a
+# mchId: 1229817002
+# mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
+# notifyUrl: http://xiaopiqiu2.natapp1.cc/web/api/wxPayNotify
+# keyPath: D:\DouMee\dmkjWxcert\apiclient_cert.p12
+ appId: wxb1b59320e803dc6c
+ appSecret: eb93785c7bca3f0ff0364b0e26bfeb59
+ mchId: 1229817002 #鍟嗘埛鍙�
+ mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM #鍟嗘埛绉橀挜
+ apiV3Key: 7tG4Vk9Zp2L8dXw5Jq0N3hR6yE1sF3cB #apiV3Key
+ serialNumer: 3FE90C2F3D40A56E1C51926F31B8A8D22426CCE0 #鍟嗘埛璇佷功搴忓垪鍙�
+ notifyUrl: http://xiaopiqiu2.natapp1.cc/web/wxPayNotify
+ refundNotifyUrl: http://xiaopiqiu2.natapp1.cc/web/wxRefundNotify
+ keyPath: D:\DouMee\1229817002_20220310_cert\apiclient_cert.p12
+ privateCertPath: D:\DouMee\1229817002_20220310_cert\apiclient_cert.pem
+ privateKeyPath: D:\DouMee\1229817002_20220310_cert\apiclient_key.pem
+ pubKeyPath: D:\DouMee\1229817002_20220310_cert\pub_key.pem #鍟嗘埛鏀粯鍏挜
+
+# appId: wx6264b4f3a697cbe8
+# appSecret: 23734577e8978138c946b727f0394027
+# mchId: 1629568742
+# mchKey: NJTLJSTZYXZRGScaiwubuzichanbu666
+# notifyUrl: https://test.doumee.cn/dmmall_web_api/web/api/wxPayNotify
+# keyPath: D:\DouMee\gtxljcWxcert\apiclient_cert.p12
alipay:
pay:
diff --git a/server/services/src/main/resources/application-pro.yml b/server/services/src/main/resources/application-pro.yml
index bb5fcb0..d47e4ed 100644
--- a/server/services/src/main/resources/application-pro.yml
+++ b/server/services/src/main/resources/application-pro.yml
@@ -52,39 +52,19 @@
########################寰俊鏀粯鐩稿叧閰嶇疆########################
wx:
pay:
- #鏈嶅姟鍟�---------start------- 鍙傛暟璇﹁В鍦板潃 https://pay.weixin.qq.com/doc/v3/partner/4013080340
- mchId: 1700071922 #鏈嶅姟鍟嗗湪寰俊鏀粯渚х殑鍞竴韬唤鏍囪瘑
- appId: wx6cc1087ca79db7f6 #鏈嶅姟鍟嗗湪寰俊寮�鏀惧钩鍙帮紙绉诲姩搴旂敤锛夋垨鍏紬骞冲彴锛堝叕浼楀彿/灏忕▼搴忥級涓婄敵璇风殑涓�涓敮涓�鏍囪瘑
- apiV3Key: 0a056faa107c2b2944b9d6a9aa6d4142 #7tG4Vk9Zp2L8dXw5Jq0N3hR6yE1sF3cB
- serialNumer: 6696086F6EFB8D6A4F821BD47DDBAF75C3BC1209 #38495CE0137D90E4DC4F64F7ECDE035A35470BE3 #鏈嶅姟鍟嗚瘉涔﹀簭鍒楀彿
- payPublicKeyId: PUB_KEY_ID_0117000719222024112700219100000508 #鍟嗘埛/骞冲彴鏀粯鍏挜id
- #mchKey: W97N53Q71326D6JZ2E9HY5M4VT4BAC8S
- notifyUrl: https://jinkuai.832smartfarm.com/jinkuai_admin/web/wxPayNotify
- refundNotifyUrl: https://jinkuai.832smartfarm.com/jinkuai_admin/web/wxRefundNotify
- keyPath: /usr/local/jars/payFile/apiclient_cert.p12
- privateCertPath: /usr/local/jars/payFile/apiclient_cert.pem
- privateKeyPath: /usr/local/jars/payFile/apiclient_key.pem
- pubKeyPath: /usr/local/jars/payFile/pub_key.pem #鍟嗘埛鏀粯鍏挜
+ appId: wxb1b59320e803dc6c
+ appSecret: eb93785c7bca3f0ff0364b0e26bfeb59
+ mchId: 1229817002 #鍟嗘埛鍙�
+ mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM #鍟嗘埛绉橀挜
+ apiV3Key: 7tG4Vk9Zp2L8dXw5Jq0N3hR6yE1sF3cB #apiV3Key
+ serialNumer: 3FE90C2F3D40A56E1C51926F31B8A8D22426CCE0 #鍟嗘埛璇佷功搴忓垪鍙�
+ notifyUrl: http://xiaopiqiu2.natapp1.cc/web/wxPayNotify
+ refundNotifyUrl: http://xiaopiqiu2.natapp1.cc/web/wxRefundNotify
+ keyPath: D:\DouMee\1229817002_20220310_cert\apiclient_cert.p12
+ privateCertPath: D:\DouMee\1229817002_20220310_cert\apiclient_cert.pem
+ privateKeyPath: D:\DouMee\1229817002_20220310_cert\apiclient_key.pem
+ pubKeyPath: D:\DouMee\1229817002_20220310_cert\pub_key.pem #鍟嗘埛鏀粯鍏挜
- #鏈嶅姟鍟�-------------end---
-
- #鍟嗘埛淇℃伅
- wechatSerialNumer: 12C0F0DD0F3D2B565B45586D3FEA225EBF723BEC
- wechatPayPublicKeyId: PUB_KEY_ID_0117233260692025072500181939000603 #鍟嗘埛/骞冲彴鏀粯鍏挜id
- wechatPubKeyPath: /usr/local/jars/payFile/shanghu/pub_key.pem #鍟嗘埛鏀粯鍏挜
- wechatPrivateKeyPath: /usr/local/jars/payFile/shanghu/apiclient_key.pem #鍟嗘埛绉侀挜
- wechatNotifyUrl: https://jinkuai.832smartfarm.com/jinkuai_admin/web/wechat/transferNotify #鍟嗘埛杞处鍥炶皟鍦板潃
- wechatApiV3Key: 7tG4Vk9Zp2L8dXw5Jq0N3hR6yE1sF3cB
-
-
- existsSub: 1
- appSecret:
- #瀛愬晢鎴�------------start----
- subMchId: 1723326069 #瀛愬晢鎴峰彿
- subAppId: wx332441ae5b12be7d #灏忕▼搴廼d
- subAppSecret: add86d6406f5c14501ac5bbb1a60e004 #灏忕▼搴忕閽�
- #瀛愬晢鎴�------------end----
- # mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
typeId: jinkuai
alipay:
diff --git a/server/web/src/main/java/com/doumee/api/web/ApiController.java b/server/web/src/main/java/com/doumee/api/web/ApiController.java
index 897ce33..1383dcd 100644
--- a/server/web/src/main/java/com/doumee/api/web/ApiController.java
+++ b/server/web/src/main/java/com/doumee/api/web/ApiController.java
@@ -42,16 +42,8 @@
return obj != null ? (Integer) obj : null;
}
- /**
- * 鑾峰彇鐧诲綍鐢ㄦ埛瀵硅薄淇℃伅
- * @return
- */
- protected Member getMemberResponse(){
- Object obj = this.getRequest().getAttribute(JwtTokenUtil.MEMBER_INFO);
- if(obj != null){
- return JSONObject.parseObject(obj.toString(),Member.class);
- }
- return null;
+ protected Integer getDriverId() {
+ Object obj = this.getRequest().getAttribute(JwtTokenUtil.DRIVER_ID);
+ return obj != null ? (Integer) obj : null;
}
-
}
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 0391012..bc17bac 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
@@ -3,12 +3,14 @@
import com.doumee.core.annotation.LoginRequired;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.model.ApiResponse;
+import com.doumee.core.utils.Tencent.MapUtil;
import com.doumee.dao.business.model.Areas;
import com.doumee.dao.business.model.Banner;
import com.doumee.dao.business.model.Category;
+import com.doumee.dao.dto.AreasDto;
import com.doumee.dao.dto.CalculateLocalPriceDTO;
import com.doumee.dao.dto.CalculateRemotePriceDTO;
-import com.doumee.dao.vo.AccountResponse;
+import com.doumee.dao.dto.SameCityCheckDTO;
import com.doumee.dao.vo.PriceCalculateVO;
import com.doumee.dao.vo.PlatformAboutVO;
import com.doumee.service.business.*;
@@ -17,7 +19,7 @@
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
-import org.checkerframework.checker.units.qual.A;
+import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -52,6 +54,15 @@
@Autowired
private MemberService memberService;
+
+ @ApiOperation("鍏ㄩ儴鍖哄垝鏍戝舰鏌ヨ")
+ @PostMapping("/treeList")
+ public ApiResponse<List<Areas>> treeList (@RequestBody AreasDto pageWrap) {
+ Areas a = new Areas();
+ BeanUtils.copyProperties(pageWrap,a);
+ areasService.cacheData();
+ return ApiResponse.success(areasService.findList(a));
+ }
@ApiOperation(value = "鑾峰彇鍒嗙被鍒楄〃", notes = "灏忕▼搴忕")
@GetMapping("/getCategoryList")
@@ -118,10 +129,20 @@
return ApiResponse.success("鎿嶄綔鎴愬姛", ordersService.calculateRemotePrice(dto));
}
+ @ApiOperation(value = "鏍¢獙涓や釜缁忕含搴︽槸鍚﹀悓鍩�", notes = "浼犲叆涓ょ粍缁忕含搴︼紝杩斿洖鏄惁鍦ㄥ悓涓�鍩庡競")
+ @PostMapping("/isSameCity")
+ public ApiResponse<Boolean> isSameCity(@RequestBody SameCityCheckDTO dto) {
+ return ApiResponse.success("鎿嶄綔鎴愬姛", MapUtil.isSameCity(dto.getLat1(), dto.getLng1(), dto.getLat2(), dto.getLng2()));
+ }
-
-
-
+ @ApiOperation(value = "鏍规嵁鍩庡競鍚嶇О鏌ヨ鍩庡競淇℃伅", notes = "浠呰繑鍥炲凡寮�閫氱殑鍩庡競锛屾湭寮�閫氳繑鍥炵┖")
+ @GetMapping("/getCityByName")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "query", dataType = "String", name = "cityName", value = "鍩庡競鍚嶇О", required = true)
+ })
+ public ApiResponse<Areas> getCityByName(@RequestParam String cityName) {
+ return ApiResponse.success("鏌ヨ鎴愬姛", areasService.getOpenedCityByName(cityName));
+ }
}
diff --git a/server/web/src/main/java/com/doumee/api/web/DriverInfoApi.java b/server/web/src/main/java/com/doumee/api/web/DriverInfoApi.java
index 95cc355..2dc0bc4 100644
--- a/server/web/src/main/java/com/doumee/api/web/DriverInfoApi.java
+++ b/server/web/src/main/java/com/doumee/api/web/DriverInfoApi.java
@@ -1,12 +1,21 @@
package com.doumee.api.web;
+import com.doumee.core.annotation.LoginDriverRequired;
import com.doumee.core.annotation.LoginRequired;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.DriverInfo;
+import com.doumee.dao.dto.DriverActiveOrderDTO;
+import com.doumee.dao.dto.DriverGrabOrderDTO;
import com.doumee.dao.dto.DriverLoginRequest;
import com.doumee.dao.dto.DriverRegisterRequest;
import com.doumee.dao.dto.DriverVerifyRequest;
import com.doumee.dao.vo.AccountResponse;
+import com.doumee.dao.vo.DriverCenterVO;
+import com.doumee.dao.vo.DriverGrabOrderVO;
+import com.doumee.dao.vo.DriverOrderDetailVO;
import com.doumee.service.business.DriverInfoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -15,6 +24,9 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
/**
* 鍙告満楠岃瘉鐮佺櫥褰曟帴鍙�
@@ -56,7 +68,7 @@
return ApiResponse.success("鐧诲綍鎴愬姛", driverInfoService.login(request));
}
- @LoginRequired
+ @LoginDriverRequired
@Trace
@ApiOperation(value = "鎻愪氦瀹炲悕璁よ瘉", notes = "鍒濇鎻愪氦鎴栭┏鍥炲悗淇敼")
@PostMapping("/submitVerify")
@@ -64,19 +76,104 @@
@ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
})
public ApiResponse submitVerify(@RequestBody DriverVerifyRequest request) {
- driverInfoService.submitVerify(this.getMemberId(), request);
+ driverInfoService.submitVerify(this.getDriverId(), request);
return ApiResponse.success("鎻愪氦鎴愬姛");
}
- @LoginRequired
+ @LoginDriverRequired
@Trace
@ApiOperation(value = "鏌ヨ瀹炲悕璁よ瘉璇︽儏", notes = "鍙告満绔煡璇�")
@GetMapping("/verifyDetail")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
})
- public ApiResponse verifyDetail() {
- return ApiResponse.success(driverInfoService.getVerifyDetail(this.getMemberId()));
+ public ApiResponse<DriverInfo> verifyDetail() {
+ return ApiResponse.success(driverInfoService.getVerifyDetail(this.getDriverId()));
+ }
+
+ @LoginDriverRequired
+ @Trace
+ @ApiOperation(value = "鍒囨崲鎺ュ崟鐘舵��", notes = "0=鏈帴鍗曪紱1=鎺ュ崟涓�")
+ @GetMapping("/updateAcceptingStatus")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+ @ApiImplicitParam(paramType = "query", dataType = "int", name = "status", value = "鎺ュ崟鐘舵�侊細0=鏈帴鍗曪紱1=鎺ュ崟涓�", required = true)
+ })
+ public ApiResponse updateAcceptingStatus(@RequestParam Integer status) {
+ driverInfoService.updateAcceptingStatus(this.getDriverId(), status);
+ return ApiResponse.success("鎿嶄綔鎴愬姛");
+ }
+
+ @LoginDriverRequired
+ @Trace
+ @ApiOperation(value = "鏇存柊瀹炴椂瀹氫綅", notes = "鍙告満绔笂鎶ュ綋鍓嶄綅缃粡绾害")
+ @GetMapping("/updateLocation")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+ @ApiImplicitParam(paramType = "query", dataType = "Double", name = "longitude", value = "缁忓害", required = true),
+ @ApiImplicitParam(paramType = "query", dataType = "Double", name = "latitude", value = "绾害", required = true)
+ })
+ public ApiResponse updateLocation(@RequestParam Double longitude, @RequestParam Double latitude) {
+ driverInfoService.updateLocation(this.getDriverId(), longitude, latitude);
+ return ApiResponse.success("鎿嶄綔鎴愬姛");
+ }
+
+ @LoginDriverRequired
+ @Trace
+ @ApiOperation(value = "鍙告満绔椤典俊鎭�", notes = "濮撳悕銆佸ご鍍忋�佽溅鐗屽彿銆佽瘎鍒嗐�佷粖鏃ヤ剑閲戙�佷粖鏃ユ帴鍗曟暟銆佷綑棰�")
+ @GetMapping("/centerInfo")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+ })
+ public ApiResponse<DriverCenterVO> centerInfo() {
+ return ApiResponse.success("鎿嶄綔鎴愬姛", driverInfoService.getDriverCenterInfo(this.getDriverId()));
+ }
+
+ @LoginDriverRequired
+ @Trace
+ @ApiOperation(value = "鍙告満鎶㈠崟澶у巺", notes = "鍒嗛〉鏌ヨ鍙姠鐨勫紓鍦板瘎瀛樿鍗�")
+ @PostMapping("/grabOrderHall")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+ })
+ public ApiResponse<PageData<DriverGrabOrderVO>> grabOrderHall(@RequestBody PageWrap<DriverGrabOrderDTO> pageWrap) {
+ return ApiResponse.success("鎿嶄綔鎴愬姛", driverInfoService.grabOrderHall(this.getDriverId(), pageWrap));
+ }
+
+ @LoginDriverRequired
+ @Trace
+ @ApiOperation(value = "鍙告満杩涜涓鍗�", notes = "鏌ヨ宸叉姠鍗�(status=3)鎴栨淳閫佷腑(status=4)鐨勮鍗曞垪琛�")
+ @PostMapping("/activeOrders")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+ })
+ public ApiResponse<List<DriverGrabOrderVO>> activeOrders(@RequestBody @Valid DriverActiveOrderDTO dto) {
+ return ApiResponse.success("鎿嶄綔鎴愬姛", driverInfoService.activeOrders(this.getDriverId(), dto));
+ }
+
+ @LoginDriverRequired
+ @Trace
+ @ApiOperation(value = "鍙告満绔鍗曡鎯�", notes = "鏍规嵁璁㈠崟涓婚敭鏌ヨ璇︽儏")
+ @GetMapping("/orderDetail")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+ @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "orderId", value = "璁㈠崟涓婚敭", required = true)
+ })
+ public ApiResponse<DriverOrderDetailVO> orderDetail(@RequestParam Integer orderId) {
+ return ApiResponse.success("鎿嶄綔鎴愬姛", driverInfoService.driverOrderDetail(this.getDriverId(), orderId));
+ }
+
+ @LoginDriverRequired
+ @Trace
+ @ApiOperation(value = "鍙告満鍙栨秷璁㈠崟", notes = "宸叉帴鍗�(status=2)鏃跺彇娑堬紝閲婃斁璁㈠崟鍥炴姠鍗曞ぇ鍘�")
+ @PostMapping("/cancelOrder")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+ })
+ public ApiResponse cancelOrder(@RequestParam Integer orderId,
+ @RequestParam(required = false) String reason) {
+ driverInfoService.cancelOrder(this.getDriverId(), orderId, reason);
+ return ApiResponse.success("鍙栨秷鎴愬姛");
}
}
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 5292cb9..d966ade 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
@@ -214,5 +214,16 @@
return ApiResponse.success("璇勪环鎴愬姛");
}
+ @LoginRequired
+ @ApiOperation(value = "浼氬憳纭鏀惰揣", notes = "寮傚湴瀵勫瓨涓旀棤鍙栦欢闂ㄥ簵鐨勮鍗曪紝閫佽揪鍚庣‘璁ゆ敹璐ф爣璁拌鍗曞畬鎴�")
+ @PostMapping("/confirmReceipt")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+ })
+ public ApiResponse confirmReceipt(@RequestParam Integer orderId) {
+ ordersService.memberConfirmReceipt(orderId, getMemberId());
+ return ApiResponse.success("纭鏀惰揣鎴愬姛");
+ }
+
}
diff --git a/server/web/src/main/java/com/doumee/api/web/RevenueApi.java b/server/web/src/main/java/com/doumee/api/web/RevenueApi.java
new file mode 100644
index 0000000..0357de5
--- /dev/null
+++ b/server/web/src/main/java/com/doumee/api/web/RevenueApi.java
@@ -0,0 +1,72 @@
+package com.doumee.api.web;
+
+import com.doumee.core.annotation.LoginRequired;
+import com.doumee.core.annotation.LoginShopRequired;
+import com.doumee.core.annotation.trace.Trace;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.Revenue;
+import com.doumee.dao.dto.RevenueQueryDTO;
+import com.doumee.dao.vo.RevenueSummaryVO;
+import com.doumee.service.business.RevenueService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+@Api(tags = "浜ゆ槗娴佹按")
+@Trace(exclude = true)
+@RestController
+@RequestMapping("/web/revenue")
+@Slf4j
+public class RevenueApi extends ApiController {
+
+ @Autowired
+ private RevenueService revenueService;
+
+ @LoginRequired
+ @ApiOperation(value = "鍙告満娴佹按鍒嗛〉", notes = "灏忕▼搴忕")
+ @PostMapping("/driverPage")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+ })
+ public ApiResponse<PageData<Revenue>> driverPage(@RequestBody @Validated PageWrap<RevenueQueryDTO> pageWrap) {
+ return ApiResponse.success("鏌ヨ鎴愬姛", revenueService.findDriverRevenuePage(pageWrap, getMemberId()));
+ }
+
+ @LoginRequired
+ @ApiOperation(value = "鍙告満娴佹按鏀舵敮缁熻", notes = "鏍规嵁鏌ヨ鏉′欢缁熻鏀跺叆涓庢敮鍑�")
+ @PostMapping("/driverSummary")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+ })
+ public ApiResponse<RevenueSummaryVO> driverSummary(@RequestBody RevenueQueryDTO queryDTO) {
+ return ApiResponse.success("鏌ヨ鎴愬姛", revenueService.getDriverRevenueSummary(queryDTO, getMemberId()));
+ }
+
+ @LoginShopRequired
+ @ApiOperation(value = "闂ㄥ簵娴佹按鍒嗛〉", notes = "灏忕▼搴忕")
+ @PostMapping("/shopPage")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "闂ㄥ簵token鍊�", required = true),
+ })
+ public ApiResponse<PageData<Revenue>> shopPage(@RequestBody @Validated PageWrap<RevenueQueryDTO> pageWrap) {
+ return ApiResponse.success("鏌ヨ鎴愬姛", revenueService.findShopRevenuePage(pageWrap, getShopId()));
+ }
+
+ @LoginShopRequired
+ @ApiOperation(value = "闂ㄥ簵娴佹按鏀舵敮缁熻", notes = "鏍规嵁鏌ヨ鏉′欢缁熻鏀跺叆涓庢敮鍑�")
+ @PostMapping("/shopSummary")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "闂ㄥ簵token鍊�", required = true),
+ })
+ public ApiResponse<RevenueSummaryVO> shopSummary(@RequestBody RevenueQueryDTO queryDTO) {
+ return ApiResponse.success("鏌ヨ鎴愬姛", revenueService.getShopRevenueSummary(queryDTO, getShopId()));
+ }
+
+}
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 60b5eee..d16ee9f 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
@@ -45,8 +45,8 @@
@ApiOperation("闂ㄥ簵鍏ラ┗鐢宠/淇敼")
@PostMapping("/apply")
public ApiResponse apply(@RequestBody @Validated ShopApplyDTO request) {
- Member member = this.getMemberResponse();
- shopInfoService.applyShop(request, member);
+ request.setMemberId(getMemberId());
+ shopInfoService.applyShop(request);
return ApiResponse.success("鎿嶄綔鎴愬姛");
}
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
index ac0cb79..b94319c 100644
--- a/server/web/src/main/java/com/doumee/api/web/WalletApi.java
+++ b/server/web/src/main/java/com/doumee/api/web/WalletApi.java
@@ -5,6 +5,7 @@
import com.doumee.core.model.ApiResponse;
import com.doumee.dao.dto.WithdrawalDTO;
import com.doumee.dao.vo.RevenueStatisticsVO;
+import com.doumee.dao.business.model.WithdrawalOrders;
import com.doumee.service.business.RevenueService;
import com.doumee.service.business.WithdrawalOrdersService;
import io.swagger.annotations.Api;
@@ -14,6 +15,7 @@
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.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -80,4 +82,15 @@
return ApiResponse.success("鏌ヨ鎴愬姛", revenueService.getDriverRevenueStatistics(getMemberId()));
}
+ @LoginRequired
+ @ApiOperation(value = "鎻愮幇璇︽儏", notes = "鏍规嵁鎻愮幇涓婚敭鏌ヨ璇︽儏锛堝惈瀹℃壒浜轰俊鎭級")
+ @GetMapping("/detail/{id}")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+ @ApiImplicitParam(paramType = "path", dataType = "Integer", name = "id", value = "鎻愮幇璁板綍涓婚敭", required = true)
+ })
+ public ApiResponse<WithdrawalOrders> detail(@PathVariable Integer id) {
+ return ApiResponse.success("鏌ヨ鎴愬姛", withdrawalOrdersService.findById(id));
+ }
+
}
diff --git a/server/web/src/main/resources/application.yml b/server/web/src/main/resources/application.yml
index 28dea6f..17dde0d 100644
--- a/server/web/src/main/resources/application.yml
+++ b/server/web/src/main/resources/application.yml
@@ -12,7 +12,7 @@
spring:
profiles:
- active: pro
+ active: dev
# JSON杩斿洖閰嶇疆
jackson:
# 榛樿鏃跺尯
--
Gitblit v1.9.3