From 59b1f0e9967902aa10f5e017d5a0bdfd1b60c9ea Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期三, 29 四月 2026 09:42:45 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
server/services/src/main/java/com/doumee/dao/business/model/ShopInfo.java | 3
server/services/src/main/java/com/doumee/dao/dto/ChangePasswordDTO.java | 26 +
server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java | 68 +-
server/web/src/main/java/com/doumee/api/web/PaymentCallback.java | 9
server/services/src/main/java/com/doumee/config/wx/WxPayV3Service.java | 6
server/services/src/main/java/com/doumee/dao/dto/PrinterBindDTO.java | 25 +
server/services/src/main/java/com/doumee/service/business/PrinterInfoService.java | 37 +
server/services/src/main/java/com/doumee/service/business/impl/SmsrecordServiceImpl.java | 4
server/services/src/main/java/com/doumee/service/business/ShopInfoService.java | 15
server/web/src/main/java/com/doumee/api/web/ConfigApi.java | 40 +
server/services/src/main/java/com/doumee/service/business/impl/PrinterInfoServiceImpl.java | 118 +++++
server/services/src/main/java/com/doumee/core/utils/aliyun/AliSmsService.java | 32 -
server/admin/src/main/java/com/doumee/api/business/DriverInfoController.java | 4
server/services/src/main/java/com/doumee/core/utils/xpyun/XpyunPrintService.java | 199 +++++++++
server/admin/src/main/java/com/doumee/api/business/ShopInfoController.java | 24 +
server/services/src/main/java/com/doumee/service/business/impl/AreasServiceImpl.java | 5
server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java | 4
server/services/src/main/java/com/doumee/dao/business/model/DriverInfo.java | 6
server/services/src/main/java/com/doumee/core/constants/Constants.java | 31
server/.claude/settings.json | 10
server/services/src/main/java/com/doumee/dao/business/PrinterInfoMapper.java | 12
server/services/src/main/java/com/doumee/service/business/impl/AppVersionServiceImpl.java | 64 --
server/services/src/main/java/com/doumee/dao/business/model/Category.java | 8
server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java | 43 +
server/services/src/main/java/com/doumee/core/utils/xpyun/XpyunResponse.java | 18
server/admin/src/main/java/com/doumee/api/business/PrinterInfoController.java | 84 +++
server/services/src/main/java/com/doumee/dao/vo/DriverCenterVO.java | 3
server/services/src/main/java/com/doumee/service/business/AreasService.java | 2
server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java | 94 +++
server/web/src/main/java/com/doumee/api/web/ShopInfoApi.java | 7
server/services/src/main/java/com/doumee/dao/business/model/AppVersion.java | 5
server/services/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java | 10
server/services/src/main/java/com/doumee/dao/business/model/PrinterInfo.java | 55 ++
server/web/src/main/java/com/doumee/api/web/DriverInfoApi.java | 6
server/admin/src/main/java/com/doumee/api/business/MemberController.java | 15
server/services/src/main/java/com/doumee/dao/dto/WithdrawalDTO.java | 4
server/services/db/db_change.sql | 31 +
server/services/src/main/java/com/doumee/dao/business/model/Orders.java | 12
server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java | 8
server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java | 152 +++---
server/services/src/main/java/com/doumee/config/alipay/AlipayFundTransUniTransfer.java | 4
41 files changed, 1,053 insertions(+), 250 deletions(-)
diff --git a/server/.claude/settings.json b/server/.claude/settings.json
new file mode 100644
index 0000000..1003419
--- /dev/null
+++ b/server/.claude/settings.json
@@ -0,0 +1,10 @@
+{
+ "permissions": {
+ "allow": [
+ "WebSearch"
+ ],
+ "additionalDirectories": [
+ "d:\\DouMee\\javaCodeGit\\gtzxinglijicun\\server\\services\\src\\main\\java\\com\\doumee\\core\\utils"
+ ]
+ }
+}
diff --git a/server/admin/src/main/java/com/doumee/api/business/DriverInfoController.java b/server/admin/src/main/java/com/doumee/api/business/DriverInfoController.java
index 32afb96..e83a307 100644
--- a/server/admin/src/main/java/com/doumee/api/business/DriverInfoController.java
+++ b/server/admin/src/main/java/com/doumee/api/business/DriverInfoController.java
@@ -109,9 +109,9 @@
}
@ApiOperation("淇敼鍙告満鐘舵��")
- @PostMapping("/changeStatus")
+ @PostMapping("/updateStatus")
@RequiresPermissions("business:driverInfo:update")
- public ApiResponse changeStatus(@RequestBody ChangeStatusDTO dto) {
+ public ApiResponse updateStatus(@RequestBody ChangeStatusDTO dto) {
driverInfoService.changeStatus(dto);
return ApiResponse.success("鎿嶄綔鎴愬姛");
}
diff --git a/server/admin/src/main/java/com/doumee/api/business/MemberController.java b/server/admin/src/main/java/com/doumee/api/business/MemberController.java
index 16544ac..b87ce4b 100644
--- a/server/admin/src/main/java/com/doumee/api/business/MemberController.java
+++ b/server/admin/src/main/java/com/doumee/api/business/MemberController.java
@@ -8,6 +8,7 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.Member;
+import com.doumee.dao.dto.ChangeStatusDTO;
import com.doumee.dao.dto.MemberListQueryDTO;
import com.doumee.dao.vo.MemberDetailVO;
import com.doumee.dao.vo.MemberListVO;
@@ -118,4 +119,18 @@
public ApiResponse<MemberDetailVO> findMemberDetail(@PathVariable Integer id) {
return ApiResponse.success(memberService.findMemberDetail(id));
}
+
+ @ApiOperation("淇敼浼氬憳鐘舵��")
+ @PostMapping("/updateStatus")
+ @RequiresPermissions("business:member:update")
+ public ApiResponse updateStatus(@RequestBody ChangeStatusDTO dto) {
+ if (dto.getId() == null || dto.getStatus() == null || (dto.getStatus() != 0 && dto.getStatus() != 1)) {
+ return ApiResponse.failed("鍙傛暟閿欒锛岀姸鎬侊細0=鍚敤锛�1=绂佺敤");
+ }
+ Member member = new Member();
+ member.setId(dto.getId());
+ member.setStatus(dto.getStatus());
+ memberService.updateById(member);
+ return ApiResponse.success("鎿嶄綔鎴愬姛");
+ }
}
diff --git a/server/admin/src/main/java/com/doumee/api/business/PrinterInfoController.java b/server/admin/src/main/java/com/doumee/api/business/PrinterInfoController.java
new file mode 100644
index 0000000..aafc45e
--- /dev/null
+++ b/server/admin/src/main/java/com/doumee/api/business/PrinterInfoController.java
@@ -0,0 +1,84 @@
+package com.doumee.api.business;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.PrinterInfo;
+import com.doumee.service.business.PrinterInfoService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 鎵撳嵃鏈轰俊鎭�
+ * @author rk
+ * @date 2026/04/28
+ */
+@Api(tags = "鎵撳嵃鏈轰俊鎭�")
+@RestController
+@RequestMapping("/business/printerInfo")
+public class PrinterInfoController extends BaseController {
+
+ @Autowired
+ private PrinterInfoService printerInfoService;
+
+ @PreventRepeat
+ @ApiOperation("鏂板缓")
+ @PostMapping("/create")
+ @RequiresPermissions("business:printerInfo:create")
+ public ApiResponse create(@RequestBody PrinterInfo printerInfo) {
+ printerInfo.setCreateUser(this.getLoginUser().getId());
+ return ApiResponse.success(printerInfoService.create(printerInfo));
+ }
+
+ @ApiOperation("鍒犻櫎")
+ @GetMapping("/delete/{id}")
+ @RequiresPermissions("business:printerInfo:delete")
+ public ApiResponse deleteById(@PathVariable Integer id) {
+ printerInfoService.deleteById(id);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鎵归噺鍒犻櫎")
+ @GetMapping("/delete/batch")
+ @RequiresPermissions("business:printerInfo:delete")
+ public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+ String[] idArray = ids.split(",");
+ List<Integer> idList = new ArrayList<>();
+ for (String id : idArray) {
+ idList.add(Integer.valueOf(id));
+ }
+ printerInfoService.deleteByIdInBatch(idList);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("淇敼")
+ @PostMapping("/updateById")
+ @RequiresPermissions("business:printerInfo:update")
+ public ApiResponse updateById(@RequestBody PrinterInfo printerInfo) {
+ printerInfo.setUpdateUser(this.getLoginUser().getId());
+ printerInfoService.updateById(printerInfo);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鍒嗛〉鏌ヨ")
+ @PostMapping("/page")
+ @RequiresPermissions("business:printerInfo:query")
+ public ApiResponse<PageData<PrinterInfo>> findPage(@RequestBody PageWrap<PrinterInfo> pageWrap) {
+ return ApiResponse.success(printerInfoService.findPage(pageWrap));
+ }
+
+ @ApiOperation("鏍规嵁ID鏌ヨ")
+ @GetMapping("/{id}")
+ @RequiresPermissions("business:printerInfo:query")
+ public ApiResponse findById(@PathVariable Integer id) {
+ return ApiResponse.success(printerInfoService.findById(id));
+ }
+}
diff --git a/server/admin/src/main/java/com/doumee/api/business/ShopInfoController.java b/server/admin/src/main/java/com/doumee/api/business/ShopInfoController.java
index 98989c6..55e0888 100644
--- a/server/admin/src/main/java/com/doumee/api/business/ShopInfoController.java
+++ b/server/admin/src/main/java/com/doumee/api/business/ShopInfoController.java
@@ -9,6 +9,7 @@
import com.doumee.dao.business.model.ShopInfo;
import com.doumee.dao.dto.AuditDTO;
import com.doumee.dao.dto.ChangeStatusDTO;
+import com.doumee.dao.dto.PrinterBindDTO;
import com.doumee.dao.dto.ResetPasswordDTO;
import com.doumee.dao.dto.ShopUpdateDTO;
import com.doumee.dao.vo.ShopDetailVO;
@@ -135,4 +136,27 @@
return ApiResponse.success("淇敼鎴愬姛");
}
+ @ApiOperation("缁戝畾鎵撳嵃鏈�")
+ @PostMapping("/bindPrinter")
+ @RequiresPermissions("business:shopInfo:update")
+ public ApiResponse bindPrinter(@RequestBody @javax.validation.Valid PrinterBindDTO dto) {
+ shopInfoService.bindPrinter(dto);
+ return ApiResponse.success("缁戝畾鎴愬姛");
+ }
+
+ @ApiOperation("瑙g粦鎵撳嵃鏈�")
+ @PostMapping("/unbindPrinter/{shopId}")
+ @RequiresPermissions("business:shopInfo:update")
+ public ApiResponse unbindPrinter(@PathVariable Integer shopId) {
+ shopInfoService.unbindPrinter(shopId);
+ return ApiResponse.success("瑙g粦鎴愬姛");
+ }
+
+ @ApiOperation("鏌ヨ鎵撳嵃鏈虹姸鎬�")
+ @GetMapping("/printerStatus/{shopId}")
+ @RequiresPermissions("business:shopInfo:query")
+ public ApiResponse queryPrinterStatus(@PathVariable Integer shopId) {
+ return ApiResponse.success(shopInfoService.queryPrinterStatus(shopId));
+ }
+
}
diff --git a/server/services/db/db_change.sql b/server/services/db/db_change.sql
index de96424..2d5ddb2 100644
--- a/server/services/db/db_change.sql
+++ b/server/services/db/db_change.sql
@@ -5,6 +5,37 @@
-- ============================================================
+-- 2026/04/28 APP鐗堟湰鏂囦欢璺緞瀛楀吀
+-- ============================================================
+INSERT INTO `system_dict_data` (`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES ((SELECT `id` FROM `system_dict` WHERE `code` = 'OSS'), '', 'APP_FILES', 'APP鐗堟湰鏂囦欢璺緞', 0, 0, 1, NOW(), 0);
+
+
+-- ============================================================
+-- 2026/04/28 鎵撳嵃鏈轰俊鎭〃 + 鏉冮檺
+-- ============================================================
+
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:printerInfo:create', '鏂板缓鎵撳嵃鏈�', '鎵撳嵃鏈轰俊鎭�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:printerInfo:delete', '鍒犻櫎鎵撳嵃鏈�', '鎵撳嵃鏈轰俊鎭�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:printerInfo:update', '淇敼鎵撳嵃鏈�', '鎵撳嵃鏈轰俊鎭�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:printerInfo:query', '鏌ヨ鎵撳嵃鏈�', '鎵撳嵃鏈轰俊鎭�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
+
+
+-- ============================================================
+-- 2026/04/28 鑺儴浜戞墦鍗版満闆嗘垚锛氶棬搴楄〃澧炲姞鎵撳嵃鏈篠N瀛楁
+-- ============================================================
+ALTER TABLE `shop_info` ADD COLUMN `PRINTER_SN` VARCHAR(64) DEFAULT NULL COMMENT '鑺儴浜戞墦鍗版満SN缂栧彿' AFTER `BUSINESS_TYPE`;
+
+
+-- ============================================================
+-- 2026/04/28 鑺儴浜戞墦鍗版満閰嶇疆瀛楀吀锛堣处鍙蜂俊鎭悗缁墜鍔ㄧ淮鎶ODE鍊硷級
+-- ============================================================
+INSERT INTO `system_dict` (`id`, `code`, `name`, `disabled`, `deleted`) VALUES (106, 'XPYUN_CONFIG', '鑺儴浜戦厤缃�', 0, 0);
+INSERT INTO `system_dict_data` (`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES (106, '', 'XPYUN_USER', '鑺儴浜戝紑鍙戣�匢D', 0, 0, 1, NOW(), 0);
+INSERT INTO `system_dict_data` (`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES (106, '', 'XPYUN_USER_KEY', '鑺儴浜戝紑鍙戣�呭瘑閽�', 1, 0, 1, NOW(), 0);
+
+
+-- ============================================================
-- 2026/04/22 璁㈠崟閫�娆捐〃鏂板閫�娆惧墠璁㈠崟鐘舵�佸瓧娈�
-- ============================================================
ALTER TABLE `orders_refund` ADD COLUMN `BEFORE_STATUS` INT NULL DEFAULT NULL COMMENT '閫�娆惧墠璁㈠崟鐘舵��' AFTER `STATUS`;
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 5202daa..0aafe4e 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
@@ -75,10 +75,10 @@
// 璁剧疆鍟嗗渚у敮涓�璁㈠崟鍙�
data.setOutBizNo(dto.getOutBizNo());
// 璁剧疆璁㈠崟鎬婚噾棰�
- data.setTransAmount("1");
+ data.setTransAmount("0.1");
// 璁剧疆鎻忚堪鐗瑰畾鐨勪笟鍔″満鏅�
data.setOutBizNo(dto.getOutBizNo());
- data.setTransAmount(dto.getTransAmount().setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString());
+// data.setTransAmount(dto.getTransAmount().setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString());
data.setBizScene("DIRECT_TRANSFER");
// 璁剧疆涓氬姟浜у搧鐮�
data.setProductCode("TRANS_ACCOUNT_NO_PWD");
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 289102e..06c4084 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
@@ -171,10 +171,6 @@
if(isForbidden == Constants.ONE){
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍟嗘埛宸茬鐢�,璇疯仈绯荤鐞嗗憳");
}
- String dbOpenid = dao.queryForObject(" select ifnull(openid,'') from shop_info where id = ?", String.class, shopId);
- if(StringUtils.isBlank(dbOpenid)||!openid.equals(dbOpenid)){
- throw new BusinessException(ResponseStatus.SHOP_TOKEN_EXCEED_TIME);
- }
Integer count = dao.queryForObject("select count(1) from shop_info where id = ?", Integer.class, shopId);
if (count != null && count > 0) {
request.setAttribute(JwtTokenUtil.SHOP_ID, shop.getId());
diff --git a/server/services/src/main/java/com/doumee/config/wx/WxPayV3Service.java b/server/services/src/main/java/com/doumee/config/wx/WxPayV3Service.java
index 6faab65..2224ae4 100644
--- a/server/services/src/main/java/com/doumee/config/wx/WxPayV3Service.java
+++ b/server/services/src/main/java/com/doumee/config/wx/WxPayV3Service.java
@@ -59,7 +59,7 @@
com.wechat.pay.java.service.payments.jsapi.model.Amount amount =
new com.wechat.pay.java.service.payments.jsapi.model.Amount();
- amount.setTotal(1);//totalCents.intValue());
+ amount.setTotal(totalCents.intValue());
amount.setCurrency("CNY");
request.setAmount(amount);
@@ -109,8 +109,8 @@
request.setNotifyUrl(notifyUrl);
AmountReq amount = new AmountReq();
- amount.setRefund(1L);//refundCents);
- amount.setTotal(1L);//totalCents);
+ amount.setRefund(refundCents);
+ amount.setTotal(totalCents);
amount.setCurrency("CNY");
request.setAmount(amount);
diff --git a/server/services/src/main/java/com/doumee/core/constants/Constants.java b/server/services/src/main/java/com/doumee/core/constants/Constants.java
index 478b52a..467cfc2 100644
--- a/server/services/src/main/java/com/doumee/core/constants/Constants.java
+++ b/server/services/src/main/java/com/doumee/core/constants/Constants.java
@@ -88,6 +88,7 @@
public static final String DRIVER_FILES = "DRIVER_FILES";
public static final String BANNER_FILES = "BANNER_FILES";
public static final String ORDERS_FILES = "ORDERS_FILES";
+ public static final String APP_FILES = "APP_FILES";
// 杩愯惀閰嶇疆
public static final String OPERATION_CONFIG = "OPERATION_CONFIG";
@@ -102,6 +103,12 @@
public static final String OP_NO_GRAB_NOTIFY_TIME = "NO_GRAB_NOTIFY_TIME";
public static final String OP_NO_GRAB_NOTIFY_USERS = "NO_GRAB_NOTIFY_USERS";
public static final String OP_DEFAULT_DELIVERY_RANGE = "DEFAULT_DELIVERY_RANGE";
+
+ // 鑺儴浜戞墦鍗版満閰嶇疆
+ public static final String XPYUN_CONFIG = "XPYUN_CONFIG";
+ public static final String XPYUN_USER = "XPYUN_USER";
+ public static final String XPYUN_USER_KEY = "XPYUN_USER_KEY";
+
public static boolean WORKORDER_SHE_EMAIL_SENDING = false;
public static boolean DEALING_COMPANY_SYNC = false ;
public static boolean DEALING_MEMBER_SYNC = false ;
@@ -431,7 +438,7 @@
waitPay(0, "寰呮敮浠�", new int[]{OrderStatus.waitPay.status}),
waitDeposit(1, "寰呮牳楠�", new int[]{OrderStatus.waitDeposit.status}),
waitDeliver(2, "寰呴厤閫�", new int[]{OrderStatus.accepted.status}),
- waitReceive(3, "寰呮敹璐�", new int[]{ OrderStatus.delivering.status, OrderStatus.arrived.status}),
+ waitReceive(3, "寰呮敹璐�", new int[]{ OrderStatus.arrived.status}),
finished(4, "宸插畬鎴�", new int[]{OrderStatus.finished.status}),
refund(5, "鍙栨秷", new int[]{OrderStatus.cancelled.status}),
home(6, "棣栭〉鏌ヨ", new int[]{OrderStatus.waitPay.status, OrderStatus.waitDeposit.status, OrderStatus.deposited.status
@@ -603,22 +610,22 @@
@Getter
@AllArgsConstructor
public enum SmsNotify {
- PLATFORM_WAIT_GRAB("SMS_505790009", "骞冲彴绔�-寰呮姠鍗�", "鎮ㄥソ锛岃鍗曪細{orderNo}宸茶秴杩噞time}鍒嗛挓鏃犲徃鏈烘姠鍗曪紝璇峰敖蹇姞鎬ユ淳鍗曪紝閬垮厤瀹㈡埛杩囦箙绛夊緟銆�"),
- SHOP_REFUNDING("SMS_505900008", "闂ㄥ簵绔�-閫�娆句腑", "琛屾潕璁㈠崟锛歿orderNo}瀹㈡埛宸叉彁浜ら��娆剧敵璇凤紝璇峰敖蹇鐞嗐��"),
- SHOP_WAIT_VERIFY("SMS_505925004", "闂ㄥ簵绔�-寰呮牳楠�", "鏂拌鏉庤鍗曪細{orderNo}瀹㈡埛宸叉敮浠橈紝璇峰敖蹇牳楠岀敤鎴风墿鍝佷俊鎭��"),
- DRIVER_REFUNDING("SMS_505795005", "鍙告満绔�-閫�娆句腑", "琛屾潕璁㈠崟锛歿orderNo}鐢ㄦ埛宸叉彁浜ら��娆剧敵璇凤紝璇ヨ鍗曚换鍔″凡鍙栨秷锛岃鍕垮墠寰�銆�"),
- DRIVER_WAIT_PICKUP("SMS_505650038", "鍙告満绔�-寰呭彇浠�", "鎮ㄥ凡鎶㈠崟鎴愬姛锛岃鍗晎orderNo}锛岃鎸夋椂鍒皗address}鍙栦欢銆�"),
- MEMBER_CANCELLED("SMS_505605028", "浼氬憳绔�-宸插彇娑�", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}宸插彇娑堬紝鎰熻阿鎮ㄧ殑鏀寔锛屾杩庝笅娆″啀浼氥��"),
- MEMBER_REFUNDED("SMS_505920002", "浼氬憳绔�-宸查��娆�", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}閫�娆惧凡瀹屾垚锛岄噾棰漿money}鍏冨皢鍘熻矾閫�鍥烇紝璇锋敞鎰忔煡鏀躲��"),
- MEMBER_ARRIVED("SMS_505875004", "浼氬憳绔�-宸查�佽揪", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}宸查�佸埌{address}锛岃鍙婃椂鍙栦欢锛屽彇浠剁爜锛歿code}銆�"),
- MEMBER_DELIVERING("SMS_505935002", "浼氬憳绔�-閰嶉�佷腑", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}宸茬敱鍙告満{name}鍙栦欢锛屾杩愬線鐩殑鍦般��"),
+ PLATFORM_WAIT_GRAB("SMS_505865290", "骞冲彴绔�-寰呮姠鍗�", "鎮ㄥソ锛岃鍗曪細{orderNo}宸茶秴杩噞time}鍒嗛挓鏃犲徃鏈烘姠鍗曪紝璇峰敖蹇姞鎬ユ淳鍗曪紝閬垮厤瀹㈡埛杩囦箙绛夊緟銆�"),
+ SHOP_REFUNDING("SMS_505905263", "闂ㄥ簵绔�-閫�娆句腑", "琛屾潕璁㈠崟锛歿orderNo}瀹㈡埛宸叉彁浜ら��娆剧敵璇凤紝璇峰敖蹇鐞嗐��"),
+ SHOP_WAIT_VERIFY("SMS_505915292", "闂ㄥ簵绔�-寰呮牳楠�", "鏂拌鏉庤鍗曪細{orderNo}瀹㈡埛宸叉敮浠橈紝璇峰敖蹇牳楠岀敤鎴风墿鍝佷俊鎭��"),
+ DRIVER_REFUNDING("SMS_505905264", "鍙告満绔�-閫�娆句腑", "琛屾潕璁㈠崟锛歿orderNo}鐢ㄦ埛宸叉彁浜ら��娆剧敵璇凤紝璇ヨ鍗曚换鍔″凡鍙栨秷锛岃鍕垮墠寰�銆�"),
+ DRIVER_WAIT_PICKUP("SMS_505960277", "鍙告満绔�-寰呭彇浠�", "鎮ㄥ凡鎶㈠崟鎴愬姛锛岃鍗晎orderNo}锛岃鎸夋椂鍒皗address}鍙栦欢銆�"),
+ MEMBER_CANCELLED("SMS_505615328", "浼氬憳绔�-宸插彇娑�", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}宸插彇娑堬紝鎰熻阿鎮ㄧ殑鏀寔锛屾杩庝笅娆″啀浼氥��"),
+ MEMBER_REFUNDED("SMS_505850299", "浼氬憳绔�-宸查��娆�", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}閫�娆惧凡瀹屾垚锛岄噾棰漿money}鍏冨皢鍘熻矾閫�鍥烇紝璇锋敞鎰忔煡鏀躲��"),
+ MEMBER_ARRIVED("SMS_505645328", "浼氬憳绔�-宸查�佽揪", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}宸查�佸埌{address}锛岃鍙婃椂鍙栦欢锛屽彇浠剁爜锛歿code}銆�"),
+ MEMBER_DELIVERING("SMS_505715321", "浼氬憳绔�-閰嶉�佷腑", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}宸茬敱鍙告満{name}鍙栦欢锛屾杩愬線鐩殑鍦般��"),
VERIFY_CODE("SMS_333770877", "楠岃瘉鐮佺煭淇�", "鎮ㄧ殑楠岃瘉鐮佷负锛歿code}锛岃鍕挎硠闇蹭簬浠栦汉锛�"),
DRIVER_AUTH_REJECTED("SMS_505790115", "鍙告満绔�-鍙告満璁よ瘉琚嫆缁�", "灏婃暚鐨剓driver}锛屽緢閬楁喚锛屾偍鐨勫徃鏈鸿璇佹湭閫氳繃瀹℃牳銆傚師鍥狅細{reason}銆傛偍鍙慨鏀硅祫鏂欏悗閲嶆柊鎻愪氦銆�"),
DRIVER_AUTH_APPROVED("SMS_505885083", "鍙告満绔�-鍙告満璁よ瘉閫氳繃", "灏婃暚鐨剓driver}锛屾伃鍠滄偍宸查�氳繃骞冲彴鍙告満璁よ瘉瀹℃牳銆傛偍鍙櫥褰曞徃鏈虹APP寮�濮嬫帴鍗曪紝閰嶉�佽繃绋嬩腑璇锋敞鎰忓畨鍏紝绁濇偍鎺ュ崟椤哄埄锛�"),
- DRIVER_URGENT_DISPATCH("SMS_505885082", "鍙告満绔�-鍔犳�ユ淳鍗�", "鎮ㄥソ锛屾偍鏈変竴涓柊鐨勮鏉庤鍗曪紙缂栧彿锛歿orderNo}锛夈�傝捣鐐癸細{address1}锛岀粓鐐癸細{address2}锛岄厤閫佽垂{money1}鍏冿紙鍚姞鎬ヨ垂{money2}鍏冿級銆傝灏藉揩纭璁㈠崟浠诲姟銆�"),
+ DRIVER_URGENT_DISPATCH("SMS_505940293", "鍙告満绔�-鍔犳�ユ淳鍗�", "鎮ㄥソ锛屾偍鏈変竴涓柊鐨勮鏉庤鍗曪紙缂栧彿锛歿orderNo}锛夈�傝捣鐐癸細{address1}锛岀粓鐐癸細{address2}锛岄厤閫佽垂{money1}鍏冿紙鍚姞鎬ヨ垂{money2}鍏冿級銆傝灏藉揩纭璁㈠崟浠诲姟銆�"),
SHOP_AUTH_REJECTED("SMS_505925106", "闂ㄥ簵绔�-璧勬枡瀹℃牳琚嫆缁�", "寰堥仐鎲撅紝鎮ㄧ殑闂ㄥ簵\"{storeName}\"鏈�氳繃瀹℃牳锛屽師鍥狅細{reason}锛屾偍鍙慨鏀硅祫鏂欏悗閲嶆柊鎻愪氦銆�"),
SHOP_AUTH_APPROVED_DEPOSIT("SMS_505705111", "闂ㄥ簵绔�-瀹℃牳閫氳繃闇�缂寸撼鎶奸噾", "鎭枩鎮紒鎮ㄧ殑闂ㄥ簵\"{storeName}\"宸查�氳繃鍒濇瀹℃牳銆傝鏀粯鎶奸噾{money}鍏冧互瀹屾垚鍏ラ┗锛屾敮浠樺悗鍗冲彲鐧诲綍闂ㄥ簵鍚庡彴姝e紡鎺ュ崟銆�"),
- SHOP_AUTH_SUCCESS("SMS_505810110", "闂ㄥ簵绔�-鎴愬姛鍏ラ┗閫氱煡", "鎭枩鎮紒鎮ㄧ殑闂ㄥ簵\"{storeName}\"宸查�氳繃骞冲彴瀹℃牳锛屾寮忓叆椹绘垚鍔熴�傛偍鍙櫥褰曞晢瀹跺悗鍙板紑濮嬫帴鍗曪紝璐﹀彿锛歿phone}锛屽垵濮嬪瘑鐮侊細{password}锛堝缓璁娆$櫥褰曞悗淇敼锛夈��"),
+ SHOP_AUTH_SUCCESS("SMS_505915289", "闂ㄥ簵绔�-鎴愬姛鍏ラ┗閫氱煡", "鎭枩鎮紒鎮ㄧ殑闂ㄥ簵\"{storeName}\"宸查�氳繃骞冲彴瀹℃牳锛屾寮忓叆椹绘垚鍔熴�� 鎮ㄥ彲鐧诲綍鍟嗗鍚庡彴寮�濮嬫帴鍗曪紝璐﹀彿锛氭敞鍐屾墜鏈哄彿锛屽垵濮嬪瘑鐮侊細锛歿password}锛堝缓璁娆$櫥褰曞悗淇敼锛夈��"),
;
private final String templateCode;
diff --git a/server/services/src/main/java/com/doumee/core/utils/aliyun/AliSmsService.java b/server/services/src/main/java/com/doumee/core/utils/aliyun/AliSmsService.java
index e18cb9c..d6d889d 100644
--- a/server/services/src/main/java/com/doumee/core/utils/aliyun/AliSmsService.java
+++ b/server/services/src/main/java/com/doumee/core/utils/aliyun/AliSmsService.java
@@ -44,49 +44,33 @@
* @param templateParam 妯℃澘鍙橀噺json瀛楃涓�
* @return 澶勭悊缁撴灉
*/
- public static Boolean sendSms(String phone, String templateCode, String templateParam) {
+ public static String sendSms(String phone, String templateCode, String templateParam) {
try {
- //璁剧疆瓒呮椂鏃堕棿-鍙嚜琛岃皟鏁�
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
- //鍒濆鍖朼scClient闇�瑕佺殑鍑犱釜鍙傛暟
- //鐭俊API浜у搧鍚嶇О锛堢煭淇′骇鍝佸悕鍥哄畾锛屾棤闇�淇敼锛�
final String product = "Dysmsapi";
- //鐭俊API浜у搧鍩熷悕锛堟帴鍙e湴鍧�鍥哄畾锛屾棤闇�淇敼锛�
final String domain = "dysmsapi.aliyuncs.com";
- //鍒濆鍖朼scClient,鏆傛椂涓嶆敮鎸佸region锛堣鍕夸慨鏀癸級
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESS_KEY_ID, ACCESS_KEY_SECRET);
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
IAcsClient acsClient = new DefaultAcsClient(profile);
- //缁勮璇锋眰瀵硅薄
SendSmsRequest request = new SendSmsRequest();
- //浣跨敤post鎻愪氦
request.setMethod(MethodType.POST);
- //蹇呭~:寰呭彂閫佹墜鏈哄彿銆傛敮鎸佷互閫楀彿鍒嗛殧鐨勫舰寮忚繘琛屾壒閲忚皟鐢紝鎵归噺涓婇檺涓�1000涓墜鏈哄彿鐮�,鎵归噺璋冪敤鐩稿浜庡崟鏉¤皟鐢ㄥ強鏃舵�х◢鏈夊欢杩�,楠岃瘉鐮佺被鍨嬬殑鐭俊鎺ㄨ崘浣跨敤鍗曟潯璋冪敤鐨勬柟寮�
request.setPhoneNumbers(phone);
- //蹇呭~:鐭俊绛惧悕-鍙湪鐭俊鎺у埗鍙颁腑鎵惧埌
request.setSignName(SING_NAME);
- //蹇呭~:鐭俊妯℃澘-鍙湪鐭俊鎺у埗鍙颁腑鎵惧埌
request.setTemplateCode(templateCode);
- //鍙��:妯℃澘涓殑鍙橀噺鏇挎崲JSON涓�,濡傛ā鏉垮唴瀹逛负"浜茬埍鐨�${name},鎮ㄧ殑楠岃瘉鐮佷负${code}"鏃讹紝姝ゅ鐨勫�间负
- //鍙嬫儏鎻愮ず:濡傛灉JSON涓渶瑕佸甫鎹㈣绗�,璇峰弬鐓ф爣鍑嗙殑JSON鍗忚瀵规崲琛岀鐨勮姹�,姣斿鐭俊鍐呭涓寘鍚玕r\n鐨勬儏鍐靛湪JSON涓渶瑕佽〃绀烘垚\\r\n,鍚﹀垯浼氬鑷碕SON鍦ㄦ湇鍔$瑙f瀽澶辫触
request.setTemplateParam(templateParam);
- //鍙��-涓婅鐭俊鎵╁睍鐮�(鎵╁睍鐮佸瓧娈垫帶鍒跺湪7浣嶆垨浠ヤ笅锛屾棤鐗规畩闇�姹傜敤鎴疯蹇界暐姝ゅ瓧娈�)
- //dto.setSmsUpExtendCode("90997");
- //鍙��:outId涓烘彁渚涚粰涓氬姟鏂规墿灞曞瓧娈�,鏈�缁堝湪鐭俊鍥炴墽娑堟伅涓皢姝ゅ�煎甫鍥炵粰璋冪敤鑰�
- //dto.setOutId("yourOutId");
- //璇锋眰澶辫触杩欓噷浼氭姏ClientException寮傚父
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
- log.info("鐭俊鍙戦�佸唴瀹癸細"+phone + "-" + templateCode + "-" + templateParam + " >>> " + JSON.toJSONString(sendSmsResponse));
- return true;
+ log.info("鐭俊鍙戦�佹垚鍔燂細phone={}, template={}", phone, templateCode);
+ return null;
} else {
- log.error("鐭俊鍙戦�佸唴瀹癸細"+phone + "-" + templateCode + "-" + templateParam + " >>> " + JSON.toJSONString(sendSmsResponse));
+ String error = sendSmsResponse.getCode() + ":" + sendSmsResponse.getMessage();
+ log.error("鐭俊鍙戦�佸け璐ワ細phone={}, template={}, error={}", phone, templateCode, error);
+ return error;
}
} catch (Exception e) {
- e.printStackTrace();
-// logger.error(e);
+ log.error("鐭俊鍙戦�佸紓甯革細phone={}, template={}, error={}", phone, templateCode, e.getMessage());
+ return e.getMessage();
}
- return false;
}
}
diff --git a/server/services/src/main/java/com/doumee/core/utils/xpyun/XpyunPrintService.java b/server/services/src/main/java/com/doumee/core/utils/xpyun/XpyunPrintService.java
new file mode 100644
index 0000000..d059d4e
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/core/utils/xpyun/XpyunPrintService.java
@@ -0,0 +1,199 @@
+package com.doumee.core.utils.xpyun;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.constants.Constants;
+import com.doumee.core.utils.HttpsUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 鑺儴浜戞墦鍗版満API鏈嶅姟
+ */
+@Slf4j
+@Service
+public class XpyunPrintService {
+
+ private static final String BASE_URL = "https://open.xpyun.net/api/openapi/xprinter/";
+
+ @Autowired
+ private SystemDictDataBiz systemDictDataBiz;
+
+ /**
+ * 娣诲姞鎵撳嵃鏈�
+ */
+ public XpyunResponse addPrinter(String sn, String name) {
+ JSONObject body = buildBaseRequest();
+ JSONArray printerContent = new JSONArray();
+ JSONObject printer = new JSONObject();
+ printer.put("sn", sn);
+ printer.put("name", name);
+ printerContent.add(printer);
+ body.put("printerContent", printerContent);
+ return callApi("addPrinters", body);
+ }
+
+ /**
+ * 鍒犻櫎鎵撳嵃鏈�
+ */
+ public XpyunResponse deletePrinter(String sn) {
+ JSONObject body = buildBaseRequest();
+ JSONArray snlist = new JSONArray();
+ snlist.add(sn);
+ body.put("snlist", snlist);
+ return callApi("delPrinters", body);
+ }
+
+ /**
+ * 鏌ヨ鎵撳嵃鏈虹姸鎬�
+ */
+ public XpyunResponse queryPrinterStatus(String sn) {
+ JSONObject body = buildBaseRequest();
+ body.put("sn", sn);
+ return callApi("queryPrinterStatus", body);
+ }
+
+ /**
+ * 鎵撳嵃鏍囩
+ */
+ public XpyunResponse printLabel(String sn, String content) {
+ JSONObject body = buildBaseRequest();
+ body.put("sn", sn);
+ body.put("content", content);
+ return callApi("printLabel", body);
+ }
+
+ /**
+ * 鏋勫缓璁㈠崟鏍囩鍐呭 (60mm 脳 60mm = 480 脳 480 dots)
+ *
+ * 甯冨眬:
+ * shopName sn/countSn
+ * 璁㈠崟缂栧彿锛歝ode 涓嬪崟鏃堕棿锛歺xx
+ * 鏀朵欢淇℃伅锛氬紶涓夛紙鎵嬫満灏惧彿1234锛�
+ * 璁㈠崟琛屾潕锛�
+ * 琛屾潕绠泵�1 鍙岃偐鍖吤�2
+ * 璁㈠崟澶囨敞
+ * xxxxxxx
+ */
+ public String buildOrderLabel(String shopName, String orderCode, String createTime,
+ String takeUser, String takePhone,
+ String goodsInfo, String remark,
+ String snLabel) {
+ StringBuilder sb = new StringBuilder();
+ sb.append("<PAGE>");
+ sb.append("<WIDTH>480</WIDTH>");
+ sb.append("<HEIGHT>480</HEIGHT>");
+
+ // 绗�1琛�: shopName 宸︿晶, snLabel 鍙充晶
+ sb.append("<TEXT X=\"8\" Y=\"8\" W=\"320\" H=\"28\" T=\"16\">")
+ .append(escapeXml(shopName)).append("</TEXT>");
+ sb.append("<TEXT X=\"340\" Y=\"8\" W=\"140\" H=\"28\" T=\"14\">")
+ .append(escapeXml(snLabel)).append("</TEXT>");
+
+ // 绗�2琛�: 璁㈠崟缂栧彿 + 涓嬪崟鏃堕棿
+ sb.append("<TEXT X=\"8\" Y=\"44\" W=\"340\" H=\"24\" T=\"13\">")
+ .append("璁㈠崟缂栧彿锛�").append(escapeXml(orderCode)).append("</TEXT>");
+ sb.append("<TEXT X=\"356\" Y=\"44\" W=\"124\" H=\"24\" T=\"13\">")
+ .append(escapeXml(createTime)).append("</TEXT>");
+
+ // 璁㈠崟缂栧彿鏉″舰鐮�
+ sb.append("<C128 X=\"8\" Y=\"72\" W=\"464\" H=\"56\" T=\"")
+ .append(escapeXml(orderCode)).append("\"/>");
+
+ // 绗�4琛�: 鏀朵欢淇℃伅
+ String contactInfo = takeUser != null ? takeUser : "";
+ if (takePhone != null && takePhone.length() >= 4) {
+ contactInfo += "锛堟墜鏈哄熬鍙�" + takePhone.substring(takePhone.length() - 4) + "锛�";
+ }
+ sb.append("<TEXT X=\"8\" Y=\"140\" W=\"464\" H=\"24\" T=\"13\">")
+ .append("鏀朵欢淇℃伅锛�").append(escapeXml(contactInfo)).append("</TEXT>");
+
+ // 绗�5琛�: 璁㈠崟琛屾潕
+ sb.append("<TEXT X=\"8\" Y=\"172\" W=\"464\" H=\"24\" T=\"13\">")
+ .append("璁㈠崟琛屾潕锛�</TEXT>");
+ if (StringUtils.isNotBlank(goodsInfo)) {
+ sb.append("<TEXT X=\"8\" Y=\"200\" W=\"464\" H=\"24\" T=\"12\">")
+ .append(escapeXml(goodsInfo)).append("</TEXT>");
+ }
+
+ // 璁㈠崟澶囨敞
+ if (StringUtils.isNotBlank(remark)) {
+ sb.append("<TEXT X=\"8\" Y=\"240\" W=\"464\" H=\"24\" T=\"13\">")
+ .append("璁㈠崟澶囨敞锛�</TEXT>");
+ sb.append("<TEXT X=\"8\" Y=\"268\" W=\"464\" H=\"48\" T=\"12\">")
+ .append(escapeXml(remark)).append("</TEXT>");
+ }
+
+ sb.append("</PAGE>");
+ return sb.toString();
+ }
+
+ // ========== 绉佹湁鏂规硶 ==========
+
+ private JSONObject buildBaseRequest() {
+ String user = systemDictDataBiz.queryByCode(Constants.XPYUN_CONFIG, Constants.XPYUN_USER).getCode();
+ String userKey = systemDictDataBiz.queryByCode(Constants.XPYUN_CONFIG, Constants.XPYUN_USER_KEY).getCode();
+ long timestamp = System.currentTimeMillis() / 1000;
+ String sign = sha1(user + userKey + timestamp);
+
+ JSONObject body = new JSONObject();
+ body.put("user", user);
+ body.put("timestamp", timestamp);
+ body.put("sign", sign);
+ return body;
+ }
+
+ private XpyunResponse callApi(String endpoint, JSONObject body) {
+ try {
+ String url = BASE_URL + endpoint;
+ String result = HttpsUtil.postJson(url, body.toJSONString());
+ if (result == null) {
+ log.error("鑺儴浜慉PI璋冪敤澶辫触: endpoint={}, 鍝嶅簲涓虹┖", endpoint);
+ XpyunResponse resp = new XpyunResponse();
+ resp.setCode(-1);
+ resp.setMsg("鍝嶅簲涓虹┖");
+ return resp;
+ }
+ return JSON.parseObject(result, XpyunResponse.class);
+ } catch (Exception e) {
+ log.error("鑺儴浜慉PI璋冪敤寮傚父: endpoint={}, error={}", endpoint, e.getMessage(), e);
+ XpyunResponse resp = new XpyunResponse();
+ resp.setCode(-1);
+ resp.setMsg(e.getMessage());
+ return resp;
+ }
+ }
+
+ private static String sha1(String input) {
+ try {
+ MessageDigest md = MessageDigest.getInstance("SHA-1");
+ byte[] digest = md.digest(input.getBytes(StandardCharsets.UTF_8));
+ StringBuilder sb = new StringBuilder();
+ for (byte b : digest) {
+ sb.append(String.format("%02x", b));
+ }
+ return sb.toString();
+ } catch (Exception e) {
+ throw new RuntimeException("SHA-1璁$畻澶辫触", e);
+ }
+ }
+
+ private static String escapeXml(String text) {
+ if (text == null) return "";
+ return text.replace("&", "&")
+ .replace("<", "<")
+ .replace(">", ">")
+ .replace("\"", """)
+ .replace("'", "'");
+ }
+}
diff --git a/server/services/src/main/java/com/doumee/core/utils/xpyun/XpyunResponse.java b/server/services/src/main/java/com/doumee/core/utils/xpyun/XpyunResponse.java
new file mode 100644
index 0000000..94ef363
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/core/utils/xpyun/XpyunResponse.java
@@ -0,0 +1,18 @@
+package com.doumee.core.utils.xpyun;
+
+import lombok.Data;
+
+/**
+ * 鑺儴浜慉PI鍝嶅簲
+ */
+@Data
+public class XpyunResponse {
+
+ private Integer code;
+
+ private String msg;
+
+ private Object data;
+
+ private Long serverExecutedTime;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/PrinterInfoMapper.java b/server/services/src/main/java/com/doumee/dao/business/PrinterInfoMapper.java
new file mode 100644
index 0000000..82b8922
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/PrinterInfoMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.doumee.dao.business.model.PrinterInfo;
+import com.github.yulichang.base.MPJBaseMapper;
+
+/**
+ * 鎵撳嵃鏈轰俊鎭疢apper
+ * @author rk
+ * @date 2026/04/28
+ */
+public interface PrinterInfoMapper extends MPJBaseMapper<PrinterInfo> {
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/AppVersion.java b/server/services/src/main/java/com/doumee/dao/business/model/AppVersion.java
index ff34807..e1a5367 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/AppVersion.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/AppVersion.java
@@ -1,6 +1,7 @@
package com.doumee.dao.business.model;
import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.doumee.core.annotation.excel.ExcelColumn;
@@ -91,4 +92,8 @@
@ExcelColumn(name = "鐗堟湰鍙�")
private Integer versionNum;
+ @ApiModelProperty(value = "鍒涘缓浜哄悕绉�")
+ @TableField(exist = false)
+ private String createUserName;
+
}
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 b77bd52..6193e3a 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
@@ -102,4 +102,12 @@
@ApiModelProperty(value = "鑷叧鑱斿璞″悕绉�")
@TableField(exist = false)
private String relationName;
+
+ @ApiModelProperty(value = "鑷叧鑱斿璞therField")
+ @TableField(exist = false)
+ private String relationOtherField;
+
+ @ApiModelProperty(value = "鑷叧鑱斿璞″娉�")
+ @TableField(exist = false)
+ private String relationRemark;
}
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 8a0f9c1..d7c54ae 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
@@ -111,7 +111,7 @@
private String unionid;
@ApiModelProperty(value = "瀹℃壒鏃堕棿")
- @JsonFormat(pattern = "yyyy-MM-dd")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date auditTime;
@ApiModelProperty(value = "瀹℃壒浜�", example = "1")
@@ -229,4 +229,8 @@
@ApiModelProperty(value = "鍖哄幙鍚嶇О")
private String districtName;
+ @TableField(exist = false)
+ @ApiModelProperty(value = "瀹℃壒浜哄悕绉�")
+ private String auditUserName;
+
}
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 916f386..ae1f59d 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
@@ -370,13 +370,13 @@
private Date platformSmsNotifiedTime;
@TableField(exist = false)
- @ApiModelProperty(value = "鍒涘缓寮�濮嬫椂闂�(鏌ヨ鐢�)", example = "2026-01-01")
- @JsonFormat(pattern = "yyyy-MM-dd")
+ @ApiModelProperty(value = "鍒涘缓寮�濮嬫椂闂�(鏌ヨ鐢�)", example = "2026-01-01 00:00:00")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createStartTime;
@TableField(exist = false)
- @ApiModelProperty(value = "鍒涘缓缁撴潫鏃堕棿(鏌ヨ鐢�)", example = "2026-12-31")
- @JsonFormat(pattern = "yyyy-MM-dd")
+ @ApiModelProperty(value = "鍒涘缓缁撴潫鏃堕棿(鏌ヨ鐢�)", example = "2026-12-31 23:59:59")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createEndTime;
@TableField(exist = false)
@@ -443,4 +443,8 @@
@ApiModelProperty(value = "鍙告満鐢佃瘽锛堝叧鑱旀煡璇級")
private String driverPhone;
+ @TableField(exist = false)
+ @ApiModelProperty(value = "闂ㄥ簵涓婚敭锛堝悓鏃舵煡璇㈠瓨浠�/鍙栦欢闂ㄥ簵锛�")
+ private Integer shopId;
+
}
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/PrinterInfo.java b/server/services/src/main/java/com/doumee/dao/business/model/PrinterInfo.java
new file mode 100644
index 0000000..d6f16aa
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/model/PrinterInfo.java
@@ -0,0 +1,55 @@
+package com.doumee.dao.business.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 鎵撳嵃鏈轰俊鎭�
+ * @author rk
+ * @date 2026/04/28
+ */
+@Data
+@ApiModel("鎵撳嵃鏈轰俊鎭�")
+@TableName("`printer_info`")
+public class PrinterInfo {
+
+ @TableId(type = IdType.AUTO)
+ @ApiModelProperty(value = "涓婚敭", example = "1")
+ private Integer id;
+
+ @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�")
+ private Integer deleted;
+
+ @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�")
+ private Integer createUser;
+
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ private Date createTime;
+
+ @ApiModelProperty(value = "鏇存柊浜虹紪鐮�")
+ private Integer updateUser;
+
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ private Date updateTime;
+
+ @ApiModelProperty(value = "澶囨敞")
+ private String remark;
+
+ @ApiModelProperty(value = "鎵撳嵃鏈哄悕绉�")
+ private String name;
+
+ @ApiModelProperty(value = "SN")
+ private String sn;
+
+ @ApiModelProperty(value = "闂ㄥ簵涓婚敭")
+ private Integer shopId;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/ShopInfo.java b/server/services/src/main/java/com/doumee/dao/business/model/ShopInfo.java
index aa6ab19..b93c060 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/ShopInfo.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/ShopInfo.java
@@ -186,6 +186,9 @@
@ApiModelProperty(value = "闂ㄥ簵钀ヤ笟绫诲瀷锛�0=闈炲叏澶╋紱1=鍏ㄥぉ", example = "0")
private Integer businessType;
+ @ApiModelProperty(value = "鑺儴浜戞墦鍗版満SN缂栧彿")
+ private String printerSn;
+
// 闈炴寔涔呭寲锛氶檮浠跺垪琛�
@TableField(exist = false)
diff --git a/server/services/src/main/java/com/doumee/dao/dto/ChangePasswordDTO.java b/server/services/src/main/java/com/doumee/dao/dto/ChangePasswordDTO.java
new file mode 100644
index 0000000..529d02f
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/ChangePasswordDTO.java
@@ -0,0 +1,26 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 淇敼瀵嗙爜璇锋眰
+ *
+ * @author rk
+ * @date 2026/04/28
+ */
+@Data
+@ApiModel("淇敼瀵嗙爜璇锋眰")
+public class ChangePasswordDTO {
+
+ @NotBlank(message = "鏃у瘑鐮佷笉鑳戒负绌�")
+ @ApiModelProperty(value = "鏃у瘑鐮�", required = true)
+ private String oldPassword;
+
+ @NotBlank(message = "鏂板瘑鐮佷笉鑳戒负绌�")
+ @ApiModelProperty(value = "鏂板瘑鐮�", required = true)
+ private String newPassword;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/PrinterBindDTO.java b/server/services/src/main/java/com/doumee/dao/dto/PrinterBindDTO.java
new file mode 100644
index 0000000..f5a02bc
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/PrinterBindDTO.java
@@ -0,0 +1,25 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel("鎵撳嵃鏈虹粦瀹氳姹�")
+public class PrinterBindDTO {
+
+ @ApiModelProperty(value = "闂ㄥ簵ID", required = true)
+ @NotNull(message = "闂ㄥ簵ID涓嶈兘涓虹┖")
+ private Integer shopId;
+
+ @ApiModelProperty(value = "鎵撳嵃鏈篠N缂栧彿", required = true)
+ @NotBlank(message = "鎵撳嵃鏈篠N涓嶈兘涓虹┖")
+ private String printerSn;
+
+ @ApiModelProperty(value = "鎵撳嵃鏈篕EY", required = true)
+ @NotBlank(message = "鎵撳嵃鏈篕EY涓嶈兘涓虹┖")
+ private String printerKey;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/WithdrawalDTO.java b/server/services/src/main/java/com/doumee/dao/dto/WithdrawalDTO.java
index 10b9d97..97a3010 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/WithdrawalDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/WithdrawalDTO.java
@@ -28,4 +28,8 @@
@NotBlank(message = "鏀粯瀹濇彁鐜拌处鎴蜂笉鑳戒负绌�")
private String aliAccount;
+ @ApiModelProperty(value = "鏀粯瀹濆疄鍚嶅鍚�", required = true)
+ @NotBlank(message = "鏀粯瀹濆疄鍚嶅鍚嶄笉鑳戒负绌�")
+ private String aliName;
+
}
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
index 422938d..929217f 100644
--- a/server/services/src/main/java/com/doumee/dao/vo/DriverCenterVO.java
+++ b/server/services/src/main/java/com/doumee/dao/vo/DriverCenterVO.java
@@ -31,6 +31,9 @@
@ApiModelProperty(value = "鍙告満瀹氱骇锛�5=S 4=A 3=B 2=C 1=D")
private Integer driverLevel;
+ @ApiModelProperty(value = "鍙告満瀹氱骇鍚嶇О锛歋/A/B/C/D")
+ private String driverLevelName;
+
@ApiModelProperty(value = "瀹℃牳鐘舵�侊細0=寰呭鎵� 1=瀹℃壒閫氳繃 2=瀹℃壒椹冲洖")
private Integer auditStatus;
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 4e29e04..6871b4b 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
@@ -64,6 +64,8 @@
*/
Areas findById(Integer id);
+ Areas getById(Integer id);
+
/**
* 鏍规嵁id鍜宼ype鏌ヨ瀵硅薄淇℃伅
* @param id
diff --git a/server/services/src/main/java/com/doumee/service/business/PrinterInfoService.java b/server/services/src/main/java/com/doumee/service/business/PrinterInfoService.java
new file mode 100644
index 0000000..54cf9f2
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/PrinterInfoService.java
@@ -0,0 +1,37 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.PrinterInfo;
+
+import java.util.List;
+
+/**
+ * 鎵撳嵃鏈轰俊鎭疭ervice瀹氫箟
+ * @author rk
+ * @date 2026/04/28
+ */
+public interface PrinterInfoService {
+
+ Integer create(PrinterInfo printerInfo);
+
+ void deleteById(Integer id);
+
+ void delete(PrinterInfo printerInfo);
+
+ void deleteByIdInBatch(List<Integer> ids);
+
+ void updateById(PrinterInfo printerInfo);
+
+ void updateByIdInBatch(List<PrinterInfo> printerInfos);
+
+ PrinterInfo findById(Integer id);
+
+ PrinterInfo findOne(PrinterInfo printerInfo);
+
+ List<PrinterInfo> findList(PrinterInfo printerInfo);
+
+ PageData<PrinterInfo> findPage(PageWrap<PrinterInfo> pageWrap);
+
+ long count(PrinterInfo printerInfo);
+}
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 be2b405..35a568e 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
@@ -219,4 +219,19 @@
*/
void changePassword(Integer shopId, String oldPassword, String newPassword, String token);
+ /**
+ * 缁戝畾鎵撳嵃鏈�
+ */
+ void bindPrinter(com.doumee.dao.dto.PrinterBindDTO dto);
+
+ /**
+ * 瑙g粦鎵撳嵃鏈�
+ */
+ void unbindPrinter(Integer shopId);
+
+ /**
+ * 鏌ヨ鎵撳嵃鏈虹姸鎬�
+ */
+ Object queryPrinterStatus(Integer shopId);
+
}
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/AppVersionServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/AppVersionServiceImpl.java
index 814ee65..28b7b42 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/AppVersionServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/AppVersionServiceImpl.java
@@ -13,6 +13,7 @@
import com.doumee.dao.business.AppVersionMapper;
import com.doumee.dao.business.model.AppVersion;
import com.doumee.service.business.AppVersionService;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -108,55 +109,30 @@
@Override
public PageData<AppVersion> findPage(PageWrap<AppVersion> pageWrap) {
IPage<AppVersion> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
- QueryWrapper<AppVersion> queryWrapper = new QueryWrapper<>();
- Utils.MP.blankToNull(pageWrap.getModel());
- pageWrap.getModel().setDeleted(Constants.ZERO);
- if (pageWrap.getModel().getId() != null) {
- queryWrapper.lambda().eq(AppVersion::getId, pageWrap.getModel().getId());
+ MPJLambdaWrapper<AppVersion> wrapper = new MPJLambdaWrapper<>();
+ wrapper.selectAll(AppVersion.class)
+ .select("su.REALNAME as createUserName")
+ .leftJoin("system_user su on su.ID = t.CREATE_USER")
+ .eq(AppVersion::getDeleted, Constants.ZERO);
+ AppVersion model = pageWrap.getModel();
+ Utils.MP.blankToNull(model);
+ if (model.getVersionInfo() != null) {
+ wrapper.like(AppVersion::getVersionInfo, model.getVersionInfo());
}
- if (pageWrap.getModel().getDeleted() != null) {
- queryWrapper.lambda().eq(AppVersion::getDeleted, pageWrap.getModel().getDeleted());
+ if (model.getName() != null) {
+ wrapper.like(AppVersion::getName, model.getName());
}
- if (pageWrap.getModel().getCreateUser() != null) {
- queryWrapper.lambda().eq(AppVersion::getCreateUser, pageWrap.getModel().getCreateUser());
+ if (model.getTitle() != null) {
+ wrapper.like(AppVersion::getTitle, model.getTitle());
}
- if (pageWrap.getModel().getCreateTime() != null) {
- queryWrapper.lambda().ge(AppVersion::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime()));
- queryWrapper.lambda().le(AppVersion::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime()));
+ if (model.getIsForce() != null) {
+ wrapper.eq(AppVersion::getIsForce, model.getIsForce());
}
- if (pageWrap.getModel().getUpdateUser() != null) {
- queryWrapper.lambda().eq(AppVersion::getUpdateUser, pageWrap.getModel().getUpdateUser());
+ if (model.getType() != null) {
+ wrapper.eq(AppVersion::getType, model.getType());
}
- if (pageWrap.getModel().getUpdateTime() != null) {
- queryWrapper.lambda().ge(AppVersion::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime()));
- queryWrapper.lambda().le(AppVersion::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime()));
- }
- if (pageWrap.getModel().getRemark() != null) {
- queryWrapper.lambda().eq(AppVersion::getRemark, pageWrap.getModel().getRemark());
- }
- if (pageWrap.getModel().getVersionInfo() != null) {
- queryWrapper.lambda().like(AppVersion::getVersionInfo, pageWrap.getModel().getVersionInfo());
- }
- if (pageWrap.getModel().getName() != null) {
- queryWrapper.lambda().like(AppVersion::getName, pageWrap.getModel().getName());
- }
- if (pageWrap.getModel().getTitle() != null) {
- queryWrapper.lambda().like(AppVersion::getTitle, pageWrap.getModel().getTitle());
- }
- if (pageWrap.getModel().getIsForce() != null) {
- queryWrapper.lambda().eq(AppVersion::getIsForce, pageWrap.getModel().getIsForce());
- }
- if (pageWrap.getModel().getType() != null) {
- queryWrapper.lambda().eq(AppVersion::getType, pageWrap.getModel().getType());
- }
- for (PageWrap.SortData sortData : pageWrap.getSorts()) {
- if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
- queryWrapper.orderByDesc(sortData.getProperty());
- } else {
- queryWrapper.orderByAsc(sortData.getProperty());
- }
- }
- return PageData.from(appVersionMapper.selectPage(page, queryWrapper));
+ wrapper.orderByDesc(AppVersion::getId);
+ return PageData.from(appVersionMapper.selectJoinPage(page, AppVersion.class, wrapper));
}
@Override
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 8408aca..fa0eda3 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
@@ -133,6 +133,11 @@
}
@Override
+ public Areas getById(Integer id) {
+ return areasMapper.selectById(id);
+ }
+
+ @Override
public Areas findById(Integer id) {
if(ALL_AREA_LIST!=null){
for(Areas a : ALL_AREA_LIST){
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 bf73741..f53c922 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
@@ -252,11 +252,17 @@
}
}
java.util.Map<Integer, String> relationNameMap = new java.util.HashMap<>();
+ java.util.Map<Integer, String> relationOtherFieldMap = new java.util.HashMap<>();
+ java.util.Map<Integer, String> relationRemarkMap = new java.util.HashMap<>();
if (!relationIds.isEmpty()) {
categoryMapper.selectList(new QueryWrapper<Category>().lambda()
.in(Category::getId, relationIds)
.eq(Category::getDeleted, Constants.ZERO))
- .forEach(c -> relationNameMap.put(c.getId(), c.getName()));
+ .forEach(c -> {
+ relationNameMap.put(c.getId(), c.getName());
+ relationOtherFieldMap.put(c.getId(), c.getOtherField());
+ relationRemarkMap.put(c.getId(), c.getRemark());
+ });
}
for (Category category:categoryList) {
if(StringUtils.isNotBlank(category.getIcon())){
@@ -264,6 +270,8 @@
}
if (category.getRelationId() != null) {
category.setRelationName(relationNameMap.get(category.getRelationId()));
+ category.setRelationOtherField(relationOtherFieldMap.get(category.getRelationId()));
+ category.setRelationRemark(relationRemarkMap.get(category.getRelationId()));
}
}
}
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 6617be5..7d642a5 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
@@ -34,6 +34,8 @@
import com.doumee.dao.vo.DriverCancelLimitVO;
import com.doumee.dao.vo.DriverCenterVO;
import com.doumee.dao.vo.DriverGrabOrderVO;
+import com.doumee.dao.system.model.SystemUser;
+import com.doumee.service.system.SystemUserService;
import com.doumee.dao.vo.DriverOrderDetailVO;
import com.doumee.core.utils.aliyun.AliSmsService;
import com.doumee.service.business.DriverInfoService;
@@ -115,6 +117,9 @@
@Autowired
private AreasBizImpl areasBiz;
+
+ @Autowired
+ private SystemUserService systemUserService;
/**
* 鍙戦�佽鍗曠珯鍐呬俊閫氱煡
@@ -270,13 +275,7 @@
.select(" ( select ifnull(sum(r.OPT_TYPE * r.AMOUNT),0) from revenue r where r.MEMBER_TYPE = 1 and r.MEMBER_ID= t.id and r.VAILD_STATUS = 1 ) as memberAmount ")
.selectAs(Category::getName,DriverInfo::getCarTypeName)
.leftJoin(Category.class, Category::getId,DriverInfo::getCarType);
- for (PageWrap.SortData sortData : pageWrap.getSorts()) {
- if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
- queryWrapper.orderByDesc(sortData.getProperty());
- } else {
- queryWrapper.orderByAsc(sortData.getProperty());
- }
- }
+ queryWrapper.orderByDesc(DriverInfo::getId);
PageData<DriverInfo> pageData = PageData.from(driverInfoMapper.selectPage(page, queryWrapper));
for (DriverInfo d : pageData.getRecords()) {
d.setGender(Constants.getGenderByIdCard(d.getIdcard()));
@@ -301,7 +300,7 @@
String code = RandomStringUtils.randomNumeric(6);
// 鍙戦�佺煭淇�
String templateParam = "{\"code\":\"" + code + "\"}";
- AliSmsService.sendSms(telephone, "SMS_491325122", templateParam);
+ AliSmsService.sendSms(telephone, Constants.SmsNotify.VERIFY_CODE.getTemplateCode(), templateParam);
// 淇濆瓨鐭俊璁板綍
Smsrecord smsrecord = new Smsrecord();
smsrecord.setDeleted(Constants.ZERO);
@@ -716,6 +715,17 @@
}
}
}
+ // 鏌ヨ瀹℃壒浜哄悕绉�
+ if (driverInfo.getAuditUser() != null) {
+ try {
+ SystemUser auditUser = systemUserService.findById(driverInfo.getAuditUser());
+ if (auditUser != null) {
+ driverInfo.setAuditUserName(auditUser.getRealname());
+ }
+ } catch (Exception e) {
+ // 瀹℃壒浜哄凡鍒犻櫎绛夊紓甯稿拷鐣�
+ }
+ }
return driverInfo;
}
@@ -812,6 +822,7 @@
vo.setCarCode(driver.getCarCode());
vo.setScore(driver.getScore() != null ? driver.getScore().toPlainString() : "0");
vo.setDriverLevel(driver.getDriverLevel());
+ vo.setDriverLevelName(Constants.getDriverLevelName(driver.getDriverLevel()));
vo.setAuditStatus(driver.getAuditStatus());
vo.setAuditRemark(driver.getAuditRemark());
vo.setBalance(driver.getBalance() != null ? driver.getBalance() : 0L);
@@ -823,7 +834,7 @@
vo.setFullImgUrl(imgPrefix + driver.getImgurl());
}
- // 浠婃棩棰勮浣i噾锛歳evenue琛ㄤ腑浠婂ぉ鐨勬敹鍏ヨ褰曢噾棰濅箣鍜�
+ // 浠婃棩棰勮浣i噾锛氫粖鏃ユ帴鍗曠殑鍙告満浣i噾 + 骞冲彴濂栧姳閲�
Date now = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(now);
@@ -833,16 +844,16 @@
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);
+ QueryWrapper<Orders> commissionWrapper = new QueryWrapper<>();
+ commissionWrapper.lambda()
+ .eq(Orders::getAcceptDriver, driver.getId())
+ .eq(Orders::getDeleted, Constants.ZERO)
+ .ge(Orders::getAcceptTime, todayStart);
+ commissionWrapper.select("IFNULL(SUM(DRIVER_FEE),0) as driverFee", "IFNULL(SUM(PLATFORM_REWARD_AMOUNT),0) as platformRewardAmount");
+ Orders commissionResult = ordersMapper.selectOne(commissionWrapper);
+ long driverFee = commissionResult != null && commissionResult.getDriverFee() != null ? commissionResult.getDriverFee() : 0L;
+ long rewardAmount = commissionResult != null && commissionResult.getPlatformRewardAmount() != null ? commissionResult.getPlatformRewardAmount() : 0L;
+ vo.setTodayCommission(driverFee + rewardAmount);
// 浠婃棩鎺ュ崟鏁帮細浠婂ぉ瀹屾垚鐨勮鍗曟暟锛坅cceptDriver=鍙告満涓婚敭锛岀姸鎬�=宸插畬鎴愶級
Long todayOrderCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
@@ -966,7 +977,7 @@
.select("c2.other_field as c2OtherField")
.select("c2.name as goodLevelName")
// 鏄惁瀛樺湪鐗瑰ぇ灏哄
- .select("IF(EXISTS(SELECT 1 FROM orders_detail od JOIN category c3 ON c3.id = od.LUGGAGE_ID AND c3.TYPE = 4 AND c3.OTHER_FIELD = '1' WHERE od.ORDER_ID = t.ID AND od.DELETED = 0), 1, 0) as hasOversized")
+ .select("IF(EXISTS(SELECT 1 FROM orders_detail od JOIN category c3 ON c3.id = od.LUGGAGE_ID AND c3.TYPE = 4 AND c3.detail = '1' WHERE od.ORDER_ID = t.ID AND od.DELETED = 0), 1, 0) as hasOversized")
// 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")
@@ -1418,6 +1429,7 @@
// 7. 閫氱煡浼氬憳锛氬徃鏈哄凡鎶㈠崟
sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.WAIT_PICKUP_GRABBED, orderId,
+ "orderNo", order.getCode(),
"driverName", driver.getName());
// 閫氱煡瀛樹欢闂ㄥ簵锛氳鍗曞凡鎶㈠崟寰呭彇浠�
@@ -1804,19 +1816,16 @@
for (int i = 0; i < paramPairs.length - 1; i += 2) {
templateParam.put(paramPairs[i], paramPairs[i + 1]);
}
- boolean result = AliSmsService.sendSms(phone, smsNotify.getTemplateCode(),
+ String error = AliSmsService.sendSms(phone, smsNotify.getTemplateCode(),
templateParam.toJSONString());
- if (result) {
- log.info("鐭俊鍙戦�佹垚鍔�: phone={}, template={}", phone, smsNotify.name());
- } else {
- log.warn("鐭俊鍙戦�佸け璐�: phone={}, template={}", phone, smsNotify.name());
- }
- // 瀛樺偍鐭俊璁板綍
Smsrecord record = new Smsrecord();
record.setPhone(phone);
record.setContent(content);
- record.setType(Constants.ONE); // 1=璁㈠崟閫氱煡
- record.setStatus(result ? Constants.ONE : Constants.ZERO);
+ record.setType(Constants.ONE);
+ record.setStatus(error == null ? Constants.ONE : Constants.ZERO);
+ if (error != null) {
+ record.setRemark(error);
+ }
record.setCreateTime(new Date());
record.setDeleted(Constants.ZERO);
smsrecordMapper.insert(record);
@@ -1828,6 +1837,7 @@
record.setContent(content);
record.setType(Constants.ONE);
record.setStatus(Constants.ZERO);
+ record.setRemark(e.getMessage());
record.setCreateTime(new Date());
record.setDeleted(Constants.ZERO);
smsrecordMapper.insert(record);
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 6b5c5cc..415462e 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
@@ -519,13 +519,7 @@
queryWrapper.lambda().le(Member::getCreateTime, Utils.Date.getEnd(query.getEndTime()));
}
}
- for (PageWrap.SortData sortData : pageWrap.getSorts()) {
- if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
- queryWrapper.orderByDesc(sortData.getProperty());
- } else {
- queryWrapper.orderByAsc(sortData.getProperty());
- }
- }
+ queryWrapper.lambda().orderByDesc(Member::getId);
IPage<Member> memberPage = memberMapper.selectPage(page, queryWrapper);
IPage<MemberListVO> voPage = memberPage.convert(this::toListVO);
return PageData.from(voPage);
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 aec4757..f087f1c 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
@@ -222,8 +222,8 @@
queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getDepositShopName()), "s1.name", pageWrap.getModel().getDepositShopName());
queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getTakeShopName()), "s2.name", pageWrap.getModel().getTakeShopName());
queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getGoodsInfo()), Orders::getGoodsInfo, pageWrap.getModel().getGoodsInfo());
- queryWrapper.ge(pageWrap.getModel().getCreateStartTime() != null, Orders::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateStartTime()));
- queryWrapper.le(pageWrap.getModel().getCreateEndTime() != null, Orders::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateEndTime()));
+ queryWrapper.ge(pageWrap.getModel().getCreateStartTime() != null, Orders::getCreateTime, pageWrap.getModel().getCreateStartTime());
+ queryWrapper.le(pageWrap.getModel().getCreateEndTime() != null, Orders::getCreateTime, pageWrap.getModel().getCreateEndTime());
queryWrapper.eq(pageWrap.getModel().getDepositShopId() != null, Orders::getDepositShopId, pageWrap.getModel().getDepositShopId());
queryWrapper.eq(pageWrap.getModel().getType() != null, Orders::getType, pageWrap.getModel().getType());
queryWrapper.eq(pageWrap.getModel().getStatus() != null, Orders::getStatus, pageWrap.getModel().getStatus());
@@ -231,6 +231,9 @@
queryWrapper.and(pageWrap.getModel().getDriverKeyword() != null, i->i.like(DriverInfo::getName, pageWrap.getModel().getDriverKeyword())
.or().like(DriverInfo::getTelephone, pageWrap.getModel().getDriverKeyword()));
queryWrapper.eq(pageWrap.getModel().getSettlementStatus() != null, Orders::getSettlementStatus, pageWrap.getModel().getSettlementStatus());
+ queryWrapper.eq(pageWrap.getModel().getAcceptDriver() != null, Orders::getAcceptDriver, pageWrap.getModel().getAcceptDriver());
+ queryWrapper.and(pageWrap.getModel().getShopId() != null, i -> i.eq(Orders::getDepositShopId, pageWrap.getModel().getShopId())
+ .or().eq(Orders::getTakeShopId, pageWrap.getModel().getShopId()));
for (PageWrap.SortData sortData : pageWrap.getSorts()) {
if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
queryWrapper.orderByDesc(sortData.getProperty());
@@ -263,8 +266,8 @@
queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getDepositShopName()), "s1.name", pageWrap.getModel().getDepositShopName());
queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getTakeShopName()), "s2.name", pageWrap.getModel().getTakeShopName());
queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getGoodsInfo()), Orders::getGoodsInfo, pageWrap.getModel().getGoodsInfo());
- queryWrapper.ge(pageWrap.getModel().getCreateStartTime() != null, Orders::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateStartTime()));
- queryWrapper.le(pageWrap.getModel().getCreateEndTime() != null, Orders::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateEndTime()));
+ queryWrapper.ge(pageWrap.getModel().getCreateStartTime() != null, Orders::getCreateTime, pageWrap.getModel().getCreateStartTime());
+ queryWrapper.le(pageWrap.getModel().getCreateEndTime() != null, Orders::getCreateTime, pageWrap.getModel().getCreateEndTime());
queryWrapper.eq(pageWrap.getModel().getDepositShopId() != null, Orders::getDepositShopId, pageWrap.getModel().getDepositShopId());
queryWrapper.eq(pageWrap.getModel().getType() != null, Orders::getType, pageWrap.getModel().getType());
queryWrapper.eq(pageWrap.getModel().getStatus() != null, Orders::getStatus, pageWrap.getModel().getStatus());
@@ -272,6 +275,9 @@
queryWrapper.and(pageWrap.getModel().getDriverKeyword() != null, i->i.like(DriverInfo::getName, pageWrap.getModel().getDriverKeyword())
.or().like(DriverInfo::getTelephone, pageWrap.getModel().getDriverKeyword()));
queryWrapper.eq(pageWrap.getModel().getSettlementStatus() != null, Orders::getSettlementStatus, pageWrap.getModel().getSettlementStatus());
+ queryWrapper.eq(pageWrap.getModel().getAcceptDriver() != null, Orders::getAcceptDriver, pageWrap.getModel().getAcceptDriver());
+ queryWrapper.and(pageWrap.getModel().getShopId() != null, i -> i.eq(Orders::getDepositShopId, pageWrap.getModel().getShopId())
+ .or().eq(Orders::getTakeShopId, pageWrap.getModel().getShopId()));
queryWrapper.select(
"IFNULL(SUM(t.total_amount), 0) as total_amount_sum",
@@ -544,18 +550,26 @@
insuranceFeeFen = insuranceFeeYuan.multiply(new BigDecimal(100)).longValue();
}
- // 5. 鍔犳�ヨ垂鐢細鐗╁搧浠锋牸 脳 鍔犳�ョ郴鏁�(瀛楀吀 URGENT_COEFFICIENT)
+ // 5. 鍔犳�ヨ垂鐢細鐗╁搧浠锋牸 脳 (鍔犳�ョ郴鏁�-1)锛屽150%琛ㄧず澧炲姞50%
long urgentFeeFen = 0L;
String urgentRateStr = systemDictDataBiz.queryByCode(
Constants.OPERATION_CONFIG, Constants.OP_URGENT_COEFFICIENT).getCode();
BigDecimal urgentRate = new BigDecimal(urgentRateStr);
- urgentFeeFen = new BigDecimal(itemPriceTotal).multiply(urgentRate)
+ BigDecimal urgentIncreaseRate = urgentRate.subtract(BigDecimal.ONE);
+ urgentFeeFen = new BigDecimal(itemPriceTotal).multiply(urgentIncreaseRate)
.setScale(0, RoundingMode.HALF_UP).longValue();
// 6. 鎬讳环鏍� = 鐗╁搧浠锋牸 + 淇濅环璐圭敤 + 鍔犳�ヨ垂鐢紙鍔犳�ユ椂鎵嶅寘鍚姞鎬ヨ垂锛�
long totalPrice = itemPriceTotal + insuranceFeeFen;
if (Boolean.TRUE.equals(dto.getUrgent())) {
totalPrice += urgentFeeFen;
+ // 鍔犳�ユ椂鏇存柊鐗╁搧鏄庣粏鍗曚环鍜屽皬璁�
+ for (ItemPriceVO vo : itemList) {
+ long adjustedUnitPrice = new BigDecimal(vo.getUnitPrice()).multiply(urgentRate)
+ .setScale(0, RoundingMode.HALF_UP).longValue();
+ vo.setUnitPrice(adjustedUnitPrice);
+ vo.setSubtotal(adjustedUnitPrice * vo.getQuantity());
+ }
}
PriceCalculateVO result = new PriceCalculateVO();
@@ -830,6 +844,12 @@
orders.setEstimatedAmount(priceResult.getTotalPrice());
orders.setTotalAmount(priceResult.getTotalPrice());
orders.setUrgentAmount(priceResult.getUrgentFee());
+ // 瀛樺偍鍔犳�ョ郴鏁�
+ if (Constants.ONE.equals(dto.getType()) && Constants.ONE.equals(dto.getIsUrgent())) {
+ String urgentRateStr = systemDictDataBiz.queryByCode(
+ Constants.OPERATION_CONFIG, Constants.OP_URGENT_COEFFICIENT).getCode();
+ orders.setUrgentRata(new BigDecimal(urgentRateStr));
+ }
if (dto.getDeclaredAmount() != null && dto.getDeclaredAmount().compareTo(BigDecimal.ZERO) > 0) {
orders.setDeclaredAmount(dto.getDeclaredAmount().multiply(new BigDecimal(100)).longValue());
} else {
@@ -861,6 +881,13 @@
orderLogService.create(createLog);
// ========== 7. 鍒涘缓璁㈠崟鏄庣粏 ==========
+ // 寮傚湴瀵勫瓨鏋侀�熻揪鏃讹紝鎸夊姞鎬ユ瘮渚嬭绠楁槑缁嗚鍗曚环
+ BigDecimal urgentIncreaseRate = null;
+ if (Constants.ONE.equals(dto.getType()) && Constants.ONE.equals(dto.getIsUrgent())) {
+ String urgentRateStr = systemDictDataBiz.queryByCode(
+ Constants.OPERATION_CONFIG, Constants.OP_URGENT_COEFFICIENT).getCode();
+ urgentIncreaseRate = new BigDecimal(urgentRateStr).subtract(BigDecimal.ONE);
+ }
for (ItemPriceVO itemVO : priceResult.getItemList()) {
OrdersDetail detail = new OrdersDetail();
detail.setOrderId(orderId);
@@ -868,11 +895,29 @@
detail.setLuggageName(itemVO.getCategoryName());
detail.setLuggageDetail(itemVO.getDetail());
detail.setNum(itemVO.getQuantity());
- detail.setUnitPrice(itemVO.getUnitPrice());
+ long detailUnitPrice = itemVO.getUnitPrice();
+ if (urgentIncreaseRate != null) {
+ detailUnitPrice = new BigDecimal(detailUnitPrice)
+ .multiply(BigDecimal.ONE.add(urgentIncreaseRate))
+ .setScale(0, RoundingMode.HALF_UP).longValue();
+ }
+ detail.setUnitPrice(detailUnitPrice);
detail.setStartDistance(itemVO.getStartDistance());
- detail.setStartPrice(itemVO.getStartPrice());
+ if (urgentIncreaseRate != null && itemVO.getStartPrice() != null) {
+ detail.setStartPrice(new BigDecimal(itemVO.getStartPrice())
+ .multiply(BigDecimal.ONE.add(urgentIncreaseRate))
+ .setScale(0, RoundingMode.HALF_UP).longValue());
+ } else {
+ detail.setStartPrice(itemVO.getStartPrice());
+ }
detail.setExtraDistance(itemVO.getExtraDistance());
- detail.setExtraPrice(itemVO.getExtraPrice());
+ if (urgentIncreaseRate != null && itemVO.getExtraPrice() != null) {
+ detail.setExtraPrice(new BigDecimal(itemVO.getExtraPrice())
+ .multiply(BigDecimal.ONE.add(urgentIncreaseRate))
+ .setScale(0, RoundingMode.HALF_UP).longValue());
+ } else {
+ detail.setExtraPrice(itemVO.getExtraPrice());
+ }
detail.setLocallyPrice(itemVO.getLocallyPrice());
detail.setDeleted(Constants.ZERO);
detail.setCreateTime(now);
@@ -1816,46 +1861,17 @@
vo.setMemberVerifyCode(order.getMemberVerifyCode());
}
- // 寮傚湴瀵勫瓨缁忕含搴︼紙灏卞湴瀵勫瓨涓嶈繑鍥烇級
- if (Constants.ONE.equals(order.getType())) {
- // status=3(宸叉帴鍗�)锛氳繑鍥炲瓨浠堕棬搴楃粡绾害 + 鍙告満缁忕含搴�
- if (Constants.equalsInteger(status, Constants.OrderStatus.accepted.getStatus())) {
- ShopInfo depositShop = shopInfoMapper.selectById(order.getDepositShopId());
- if (depositShop != null) {
- vo.setDepositShopLng(depositShop.getLongitude());
- vo.setDepositShopLat(depositShop.getLatitude());
- }
- if (order.getAcceptDriver() != null) {
- DriverInfo driver = driverInfoMapper.selectById(order.getAcceptDriver());
- if (driver != null) {
- vo.setDriverLng(driver.getLongitude());
- vo.setDriverLat(driver.getLatitude());
- }
- }
- }
- // status=4(閰嶉�佷腑)锛氳繑鍥炲彇浠剁偣缁忕含搴� + 鍙告満缁忕含搴�
- if (Constants.equalsInteger(status, Constants.OrderStatus.delivering.getStatus())) {
- // 鍙栦欢鐐圭粡绾害锛堜紭鍏堝彇浠堕棬搴楋紝鍚﹀垯璁㈠崟涓婄殑鍙栦欢鍧愭爣锛�
- if (order.getTakeShopId() != null) {
- ShopInfo takeShop = shopInfoMapper.selectById(order.getTakeShopId());
- if (takeShop != null) {
- vo.setTakeLng(takeShop.getLongitude());
- vo.setTakeLat(takeShop.getLatitude());
- }
- } else if (order.getTakeLgt() != null && order.getTakeLat() != null) {
- vo.setTakeLng(order.getTakeLgt().doubleValue());
- vo.setTakeLat(order.getTakeLat().doubleValue());
- }
- if (order.getAcceptDriver() != null) {
- DriverInfo driver = driverInfoMapper.selectById(order.getAcceptDriver());
- if (driver != null) {
- vo.setDriverLng(driver.getLongitude());
- vo.setDriverLat(driver.getLatitude());
- }
- }
- }
+ vo.setDepositShopLng(order.getDepositLgt().doubleValue());
+ vo.setDepositShopLat(order.getDepositLat().doubleValue());
+ // 鍙栦欢鐐圭粡绾害
+ vo.setTakeLng(order.getTakeLgt().doubleValue());
+ vo.setTakeLat(order.getTakeLat().doubleValue());
+ //鍙告満缁忕含搴�
+ DriverInfo driver = driverInfoMapper.selectById(order.getAcceptDriver());
+ if (driver != null) {
+ vo.setDriverLng(driver.getLongitude());
+ vo.setDriverLat(driver.getLatitude());
}
-
// 璇勪环淇℃伅
vo.setCommentStatus(order.getCommentStatus());
if (Constants.equalsInteger(order.getCommentStatus(), Constants.ONE)) {
@@ -2308,6 +2324,7 @@
public PayResponse payShopDeposit(Integer memberId) {
// 1. 鏌ヨ闂ㄥ簵淇℃伅
ShopInfo shopInfo = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
+ .eq(ShopInfo::getDeleted,Constants.ZERO)
.eq(ShopInfo::getRegionMemberId,memberId));
if (shopInfo == null) {
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "闂ㄥ簵涓嶅瓨鍦�");
@@ -2393,14 +2410,13 @@
sendSmsNotify(shopInfo.getTelephone(),
Constants.SmsNotify.SHOP_AUTH_SUCCESS,
"storeName", shopInfo.getName(),
- "phone", shopInfo.getTelephone() != null ? shopInfo.getTelephone() : "",
"password", rawPassword);
// 6. 鎶奸噾鏀粯瀹屾垚鍚庯紝鑻ュ煄甯傛湭寮�閫氬垯鑷姩寮�閫�
if (shopInfo.getAreaId() != null) {
- Areas shopArea = areasBiz.resolveArea(shopInfo.getAreaId());
+ Areas shopArea = areasService.getById(shopInfo.getAreaId());
if (shopArea != null && shopArea.getParentId() != null) {
- Areas cityArea = areasBiz.resolveArea(shopArea.getParentId());
+ Areas cityArea = areasService.getById(shopArea.getParentId());
if (cityArea != null && !Constants.equalsInteger(cityArea.getStatus(), Constants.ONE)) {
cityArea.setStatus(Constants.ONE);
cityArea.setEditDate(now);
@@ -2430,7 +2446,8 @@
.eq(Orders::getDeleted, Constants.ZERO)
.eq(Orders::getStatus, Constants.OrderStatus.finished.getStatus())
.eq(Orders::getSettlementStatus, Constants.ZERO)
- .le(Orders::getFinishTime, deadline));
+ .le(Orders::getFinishTime, deadline)
+ );
if (ordersList == null || ordersList.isEmpty()) {
return;
}
@@ -2475,7 +2492,7 @@
} else if (Constants.equalsInteger(revenue.getMemberType(), Constants.TWO)) {
// 闂ㄥ簵锛氶�氳繃 memberId 鏌� ShopInfo(regionMemberId)锛屾洿鏂� balance / totalBalance
ShopInfo shop = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
- .eq(ShopInfo::getRegionMemberId, revenue.getMemberId())
+ .eq(ShopInfo::getId, revenue.getMemberId())
.eq(ShopInfo::getDeleted, Constants.ZERO)
.last("limit 1"));
if (shop != null) {
@@ -3182,8 +3199,8 @@
// 瀛樹欢闂ㄥ簵鏀剁泭
if (depositShopFee > 0 && order.getDepositShopId() != null) {
ShopInfo depositShop = shopInfoMapper.selectById(order.getDepositShopId());
- if (depositShop != null && depositShop.getRegionMemberId() != null) {
- revenueMapper.insert(buildRevenue(depositShop.getRegionMemberId(), Constants.TWO,
+ if (depositShop != null && depositShop.getId() != null) {
+ revenueMapper.insert(buildRevenue(depositShop.getId(), Constants.TWO,
depositShopFee, orderId, order.getCode()));
}
}
@@ -3191,8 +3208,8 @@
// 鍙栦欢闂ㄥ簵鏀剁泭锛堝紓鍦板瘎瀛樹笖鏈夊彇浠堕棬搴楋級
if (takeShopFee > 0 && order.getTakeShopId() != null) {
ShopInfo takeShop = shopInfoMapper.selectById(order.getTakeShopId());
- if (takeShop != null && takeShop.getRegionMemberId() != null) {
- revenueMapper.insert(buildRevenue(takeShop.getRegionMemberId(), Constants.TWO,
+ if (takeShop != null && takeShop.getId() != null) {
+ revenueMapper.insert(buildRevenue(takeShop.getId(), Constants.TWO,
takeShopFee, orderId, order.getCode()));
}
}
@@ -3729,7 +3746,7 @@
QueryWrapper<Orders> wrapper = new QueryWrapper<>();
wrapper.eq("MEMBER_ID", memberId)
.in("STATUS", 0, 1, 2, 3, 4, 5)
- .orderByDesc("CREATE_TIME")
+ .orderByAsc("CREATE_TIME")
.last("LIMIT 1");
Orders order = ordersMapper.selectOne(wrapper);
if (order == null) {
@@ -4061,31 +4078,28 @@
for (int i = 0; i < paramPairs.length - 1; i += 2) {
templateParam.put(paramPairs[i], paramPairs[i + 1]);
}
- boolean result = AliSmsService.sendSms(phone, smsNotify.getTemplateCode(),
+ String error = AliSmsService.sendSms(phone, smsNotify.getTemplateCode(),
templateParam.toJSONString());
- if (result) {
- log.info("鐭俊鍙戦�佹垚鍔�: phone={}, template={}", phone, smsNotify.name());
- } else {
- log.warn("鐭俊鍙戦�佸け璐�: phone={}, template={}", phone, smsNotify.name());
- }
- // 瀛樺偍鐭俊璁板綍
Smsrecord record = new Smsrecord();
record.setPhone(phone);
record.setContent(content);
- record.setType(Constants.ONE); // 1=璁㈠崟閫氱煡
- record.setStatus(result ? Constants.ONE : Constants.ZERO); // 1=宸插彂閫�, 0=鍙戦�佸け璐�
+ record.setType(Constants.ONE);
+ record.setStatus(error == null ? Constants.ONE : Constants.ZERO);
+ if (error != null) {
+ record.setRemark(error);
+ }
record.setCreateTime(new Date());
record.setDeleted(Constants.ZERO);
smsrecordMapper.insert(record);
} catch (Exception e) {
log.error("鐭俊鍙戦�佸紓甯�: phone={}, template={}, error={}", phone, smsNotify.name(), e.getMessage());
- // 寮傚父涔熻褰�
try {
Smsrecord record = new Smsrecord();
record.setPhone(phone);
record.setContent(content);
record.setType(Constants.ONE);
- record.setStatus(Constants.ZERO); // 鍙戦�佸け璐�
+ record.setStatus(Constants.ZERO);
+ record.setRemark(e.getMessage());
record.setCreateTime(new Date());
record.setDeleted(Constants.ZERO);
smsrecordMapper.insert(record);
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/PrinterInfoServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/PrinterInfoServiceImpl.java
new file mode 100644
index 0000000..05fb6e2
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/impl/PrinterInfoServiceImpl.java
@@ -0,0 +1,118 @@
+package com.doumee.service.business.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.xpyun.XpyunPrintService;
+import com.doumee.core.utils.xpyun.XpyunResponse;
+import com.doumee.dao.business.PrinterInfoMapper;
+import com.doumee.dao.business.model.PrinterInfo;
+import com.doumee.service.business.PrinterInfoService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * 鎵撳嵃鏈轰俊鎭疭ervice瀹炵幇
+ * @author rk
+ * @date 2026/04/28
+ */
+@Service
+public class PrinterInfoServiceImpl implements PrinterInfoService {
+
+ @Autowired
+ private PrinterInfoMapper printerInfoMapper;
+
+ @Autowired
+ private XpyunPrintService xpyunPrintService;
+
+ @Override
+ public Integer create(PrinterInfo printerInfo) {
+ if (StringUtils.isBlank(printerInfo.getSn())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎵撳嵃鏈篠N涓嶈兘涓虹┖");
+ }
+ if (StringUtils.isBlank(printerInfo.getName())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎵撳嵃鏈哄悕绉颁笉鑳戒负绌�");
+ }
+ XpyunResponse response = xpyunPrintService.addPrinter(printerInfo.getSn(), printerInfo.getName());
+ if (response.getCode() != 0) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鑺儴浜戞坊鍔犳墦鍗版満澶辫触锛�" + response.getMsg());
+ }
+ printerInfoMapper.insert(printerInfo);
+ return printerInfo.getId();
+ }
+
+ @Override
+ public void deleteById(Integer id) {
+ printerInfoMapper.deleteById(id);
+ }
+
+ @Override
+ public void delete(PrinterInfo printerInfo) {
+ printerInfoMapper.delete(new QueryWrapper<>(printerInfo));
+ }
+
+ @Override
+ public void deleteByIdInBatch(List<Integer> ids) {
+ if (CollectionUtils.isEmpty(ids)) {
+ return;
+ }
+ printerInfoMapper.deleteBatchIds(ids);
+ }
+
+ @Override
+ public void updateById(PrinterInfo printerInfo) {
+ printerInfoMapper.updateById(printerInfo);
+ }
+
+ @Override
+ public void updateByIdInBatch(List<PrinterInfo> printerInfos) {
+ if (CollectionUtils.isEmpty(printerInfos)) {
+ return;
+ }
+ for (PrinterInfo printerInfo : printerInfos) {
+ this.updateById(printerInfo);
+ }
+ }
+
+ @Override
+ public PrinterInfo findById(Integer id) {
+ return printerInfoMapper.selectById(id);
+ }
+
+ @Override
+ public PrinterInfo findOne(PrinterInfo printerInfo) {
+ return printerInfoMapper.selectOne(new QueryWrapper<>(printerInfo));
+ }
+
+ @Override
+ public List<PrinterInfo> findList(PrinterInfo printerInfo) {
+ return printerInfoMapper.selectList(new QueryWrapper<>(printerInfo));
+ }
+
+ @Override
+ public PageData<PrinterInfo> findPage(PageWrap<PrinterInfo> pageWrap) {
+ IPage<PrinterInfo> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ QueryWrapper<PrinterInfo> wrapper = new QueryWrapper<>(pageWrap.getModel());
+ for (PageWrap.SortData sortData : pageWrap.getSorts()) {
+ if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+ wrapper.orderByDesc(sortData.getProperty());
+ } else {
+ wrapper.orderByAsc(sortData.getProperty());
+ }
+ }
+ return PageData.from(printerInfoMapper.selectPage(page, wrapper));
+ }
+
+ @Override
+ public long count(PrinterInfo printerInfo) {
+ return printerInfoMapper.selectCount(new QueryWrapper<>(printerInfo));
+ }
+}
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 d87fa92..cf7f782 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
@@ -229,13 +229,7 @@
if (pageWrap.getModel().getOpenid() != null) {
queryWrapper.lambda().like(ShopInfo::getOpenid, pageWrap.getModel().getOpenid());
}
- for (PageWrap.SortData sortData : pageWrap.getSorts()) {
- if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
- queryWrapper.orderByDesc(sortData.getProperty());
- } else {
- queryWrapper.orderByAsc(sortData.getProperty());
- }
- }
+ queryWrapper.lambda().orderByDesc(ShopInfo::getId);
return PageData.from(shopInfoMapper.selectPage(page, queryWrapper));
}
@@ -1094,6 +1088,7 @@
// 鍙栦欢闂ㄥ簵
List<Orders> takeSalesOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda()
.eq(Orders::getDeleted, Constants.ZERO)
+ .eq(Orders::getType,Constants.ONE)
.ge(Orders::getCreateTime, startTime)
.lt(Orders::getCreateTime, endTime)
.eq(Orders::getTakeShopId, shopId));
@@ -1124,19 +1119,27 @@
vo.setSettlementProfit(depositFee + takeFee);
// 3. 鍦ㄥ簱璁㈠崟鏁�
- // 3.1 瀛樹欢闂ㄥ簵=鏈棬搴楋紝status in (2宸插瘎瀛�, 5寰呭彇浠�)
- Long depositStorageCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
+ // 3.1 灏卞湴璁㈠崟锛氬瓨浠堕棬搴�=鏈棬搴楋紝type=0锛宻tatus in (2宸插瘎瀛�, 5寰呭彇浠�)
+ Long localStorageCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
.eq(Orders::getDeleted, Constants.ZERO)
.eq(Orders::getDepositShopId, shopId)
+ .eq(Orders::getType, Constants.ZERO)
.in(Orders::getStatus,
Constants.OrderStatus.deposited.getStatus(),
Constants.OrderStatus.arrived.getStatus()));
- // 3.2 鍙栦欢闂ㄥ簵=鏈棬搴楋紝status = 5寰呭彇浠�
+ // 3.2 寮傚湴璁㈠崟锛氬瓨浠堕棬搴�=鏈棬搴楋紝type=1锛宻tatus=2宸插瘎瀛�
+ Long remoteStorageCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getDeleted, Constants.ZERO)
+ .eq(Orders::getDepositShopId, shopId)
+ .eq(Orders::getType, Constants.ONE)
+ .eq(Orders::getStatus, Constants.OrderStatus.deposited.getStatus()));
+ // 3.3 鍙栦欢闂ㄥ簵=鏈棬搴楋紝寮傚湴璁㈠崟锛宻tatus = 5寰呭彇浠�
Long takeStorageCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
.eq(Orders::getDeleted, Constants.ZERO)
+ .eq(Orders::getType,Constants.ONE)
.eq(Orders::getTakeShopId, shopId)
.eq(Orders::getStatus, Constants.OrderStatus.arrived.getStatus()));
- vo.setStorageCount(depositStorageCount.intValue() + takeStorageCount.intValue());
+ vo.setStorageCount(localStorageCount.intValue() + remoteStorageCount.intValue() + takeStorageCount.intValue());
return vo;
}
@@ -1327,10 +1330,12 @@
if (shopInfo.getCompanyType() == null) {
return;
}
+ Areas areas = areasService.findById(shopInfo.getAreaId());
PricingRule pricingRule = pricingRuleMapper.selectOne(new QueryWrapper<PricingRule>().lambda()
.eq(PricingRule::getDeleted, Constants.ZERO)
.eq(PricingRule::getType, Constants.THREE)
- .eq(PricingRule::getFieldA, String.valueOf(shopInfo.getCompanyType()))
+ .eq(PricingRule::getFieldA, String.valueOf(Constants.equalsInteger(shopInfo.getCompanyType(),Constants.ZERO)?Constants.ONE:Constants.ZERO))
+ .eq(PricingRule::getCityId, areas.getParentId())
.last("limit 1"));
if (pricingRule != null && StringUtils.isNotBlank(pricingRule.getFieldB())) {
shopInfo.setDepositAmount(Long.parseLong(pricingRule.getFieldB()));
@@ -1360,19 +1365,16 @@
for (int i = 0; i < paramPairs.length - 1; i += 2) {
templateParam.put(paramPairs[i], paramPairs[i + 1]);
}
- boolean result = AliSmsService.sendSms(phone, smsNotify.getTemplateCode(),
+ String error = AliSmsService.sendSms(phone, smsNotify.getTemplateCode(),
templateParam.toJSONString());
- if (result) {
- log.info("鐭俊鍙戦�佹垚鍔�: phone={}, template={}", phone, smsNotify.name());
- } else {
- log.warn("鐭俊鍙戦�佸け璐�: phone={}, template={}", phone, smsNotify.name());
- }
- // 瀛樺偍鐭俊璁板綍
Smsrecord smsRecord = new Smsrecord();
smsRecord.setPhone(phone);
smsRecord.setContent(content);
smsRecord.setType(Constants.ONE);
- smsRecord.setStatus(result ? Constants.ONE : Constants.ZERO);
+ smsRecord.setStatus(error == null ? Constants.ONE : Constants.ZERO);
+ if (error != null) {
+ smsRecord.setRemark(error);
+ }
smsRecord.setCreateTime(new Date());
smsRecord.setDeleted(Constants.ZERO);
smsrecordMapper.insert(smsRecord);
@@ -1416,4 +1418,56 @@
}
}
+ @Autowired
+ private com.doumee.core.utils.xpyun.XpyunPrintService xpyunPrintService;
+
+ @Override
+ public void bindPrinter(com.doumee.dao.dto.PrinterBindDTO dto) {
+ ShopInfo shop = shopInfoMapper.selectById(dto.getShopId());
+ if (shop == null || Constants.equalsInteger(shop.getDeleted(), Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ // 璋冪敤鑺儴浜戞敞鍐屾墦鍗版満
+ com.doumee.core.utils.xpyun.XpyunResponse resp = xpyunPrintService.addPrinter(
+ dto.getPrinterSn(), shop.getName());
+ if (resp.getCode() != null && resp.getCode() == 0) {
+ log.info("鑺儴浜戞墦鍗版満娉ㄥ唽鎴愬姛: sn={}", dto.getPrinterSn());
+ } else {
+ log.warn("鑺儴浜戞墦鍗版満娉ㄥ唽杩斿洖闈�0: sn={}, code={}, msg={}",
+ dto.getPrinterSn(), resp.getCode(), resp.getMsg());
+ }
+ // 鏃犺浜戠鏄惁鎴愬姛锛岄兘缁戝畾鍒伴棬搴楋紙鍙悗缁噸璇曚簯绔敞鍐岋級
+ ShopInfo update = new ShopInfo();
+ update.setId(dto.getShopId());
+ update.setPrinterSn(dto.getPrinterSn());
+ shopInfoMapper.updateById(update);
+ }
+
+ @Override
+ public void unbindPrinter(Integer shopId) {
+ ShopInfo shop = shopInfoMapper.selectById(shopId);
+ if (shop == null || Constants.equalsInteger(shop.getDeleted(), Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ if (StringUtils.isNotBlank(shop.getPrinterSn())) {
+ xpyunPrintService.deletePrinter(shop.getPrinterSn());
+ }
+ ShopInfo update = new ShopInfo();
+ update.setId(shopId);
+ update.setPrinterSn(null);
+ shopInfoMapper.updateById(update);
+ }
+
+ @Override
+ public Object queryPrinterStatus(Integer shopId) {
+ ShopInfo shop = shopInfoMapper.selectById(shopId);
+ if (shop == null || Constants.equalsInteger(shop.getDeleted(), Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ if (StringUtils.isBlank(shop.getPrinterSn())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇ラ棬搴楁湭缁戝畾鎵撳嵃鏈�");
+ }
+ return xpyunPrintService.queryPrinterStatus(shop.getPrinterSn());
+ }
+
}
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 182169c..018e9df 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
@@ -178,8 +178,8 @@
String digits = Strings.randomNumeric(4);
//鍙戦�侀獙璇佺爜
String templateParam = "{\"code\":\"" + digits + "\"}";
- Boolean result = AliSmsService.sendSms(phone, "SMS_491325122", templateParam);
- if (!result) {
+ String error = AliSmsService.sendSms(phone, Constants.SmsNotify.VERIFY_CODE.getTemplateCode(), templateParam);
+ if (error != null) {
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鐭俊鍙戦�佸け璐ワ紝璇风◢鍚庨噸璇�");
}
//瀛樺偍鐭俊楠岃瘉鐮�
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 cb33c0e..c6e4822 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
@@ -191,13 +191,8 @@
if (StringUtils.isNotBlank(pageWrap.getModel().getMemberName())) {
queryWrapper.like(DriverInfo::getName, pageWrap.getModel().getMemberName());
}
- for (PageWrap.SortData sortData : pageWrap.getSorts()) {
- if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
- queryWrapper.orderByDesc(sortData.getProperty());
- } else {
- queryWrapper.orderByAsc(sortData.getProperty());
- }
- }
+
+ queryWrapper.orderByDesc(WithdrawalOrders::getId);
return PageData.from(withdrawalOrdersMapper.selectJoinPage(page, WithdrawalOrders.class, queryWrapper));
}
@@ -285,7 +280,7 @@
}
} else if (Constants.equalsInteger(order.getMemberType(), Constants.TWO)) {
ShopInfo shop = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
- .eq(ShopInfo::getRegionMemberId, order.getMemberId())
+ .eq(ShopInfo::getId, order.getMemberId())
.eq(ShopInfo::getDeleted, Constants.ZERO)
.last("limit 1"));
if (shop != null) {
@@ -305,7 +300,7 @@
}
} else if (Constants.equalsInteger(order.getMemberType(), Constants.TWO)) {
ShopInfo shop = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
- .eq(ShopInfo::getRegionMemberId, order.getMemberId())
+ .eq(ShopInfo::getId, order.getMemberId())
.eq(ShopInfo::getDeleted, Constants.ZERO)
.last("limit 1"));
if (shop != null) {
@@ -390,7 +385,7 @@
} else if (Constants.equalsInteger(order.getMemberType(), Constants.TWO)) {
// 闂ㄥ簵锛氶�氳繃 memberId 鏌� ShopInfo锛岄��鍥� balance
ShopInfo shop = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
- .eq(ShopInfo::getRegionMemberId, order.getMemberId())
+ .eq(ShopInfo::getId, order.getMemberId())
.eq(ShopInfo::getDeleted, Constants.ZERO)
.last("limit 1"));
if (shop != null) {
@@ -490,12 +485,22 @@
order.setType(Constants.ZERO);
order.setOutBillNo(billNo);
order.setAliAccount(dto.getAliAccount());
- order.setAliName(driver.getAliName());
+ order.setAliName(dto.getAliName());
order.setDeleted(Constants.ZERO);
order.setCreateTime(now);
order.setUpdateTime(now);
order.setCreateUser(memberId);
withdrawalOrdersMapper.insert(order);
+ // 鏀粯瀹濊处鎴锋垨濮撳悕鏈夊彉鍖栨椂鏇存柊鍙告満淇℃伅
+ boolean aliChanged = !dto.getAliAccount().equals(driver.getAliAccount())
+ || (dto.getAliName() != null && !dto.getAliName().equals(driver.getAliName()));
+ if (aliChanged) {
+ DriverInfo update = new DriverInfo();
+ update.setId(driver.getId());
+ update.setAliAccount(dto.getAliAccount());
+ update.setAliName(dto.getAliName());
+ driverInfoMapper.updateById(update);
+ }
// 鍒涘缓鏀嚭 Revenue 璁板綍
Revenue revenue = new Revenue();
revenue.setMemberId(memberId);
@@ -535,22 +540,32 @@
.eq(ShopInfo::getId, shopId));
// 鍒涘缓鎻愮幇璁板綍
WithdrawalOrders order = new WithdrawalOrders();
- order.setMemberId(shop.getRegionMemberId());
+ order.setMemberId(shop.getId());
order.setMemberType(Constants.TWO);
order.setAmount(amountFen);
order.setStatus(Constants.ZERO);
order.setType(Constants.ZERO);
order.setOutBillNo(billNo);
order.setAliAccount(dto.getAliAccount());
- order.setAliName(shop.getAliName());
+ order.setAliName(dto.getAliName());
order.setDeleted(Constants.ZERO);
order.setCreateTime(now);
order.setUpdateTime(now);
order.setCreateUser(shop.getRegionMemberId());
withdrawalOrdersMapper.insert(order);
+ // 鏀粯瀹濊处鎴锋垨濮撳悕鏈夊彉鍖栨椂鏇存柊闂ㄥ簵淇℃伅
+ boolean aliChanged = !dto.getAliAccount().equals(shop.getAliAccount())
+ || (dto.getAliName() != null && !dto.getAliName().equals(shop.getAliName()));
+ if (aliChanged) {
+ ShopInfo update = new ShopInfo();
+ update.setId(shopId);
+ update.setAliAccount(dto.getAliAccount());
+ update.setAliName(dto.getAliName());
+ shopInfoMapper.updateById(update);
+ }
// 鍒涘缓鏀嚭 Revenue 璁板綍
Revenue revenue = new Revenue();
- revenue.setMemberId(shop.getRegionMemberId());
+ revenue.setMemberId(shop.getId());
revenue.setMemberType(Constants.TWO);
revenue.setType(Constants.ONE); // 1=鎻愮幇鏀嚭
revenue.setOptType(-Constants.ONE); // -1=鏀嚭
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 3aef431..cadd02a 100644
--- a/server/web/src/main/java/com/doumee/api/web/ConfigApi.java
+++ b/server/web/src/main/java/com/doumee/api/web/ConfigApi.java
@@ -1,5 +1,6 @@
package com.doumee.api.web;
+import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.annotation.LoginDriverRequired;
import com.doumee.core.annotation.LoginRequired;
import com.doumee.core.annotation.LoginShopRequired;
@@ -12,6 +13,7 @@
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.business.model.AppVersion;
import com.doumee.dao.business.model.Notice;
import com.alibaba.fastjson.JSONObject;
import com.doumee.dao.dto.AreasDto;
@@ -67,6 +69,12 @@
@Autowired
private NoticeService noticeService;
+ @Autowired
+ private AppVersionService appVersionService;
+
+ @Autowired
+ private SystemDictDataBiz systemDictDataBiz;
+
@ApiOperation("鍏ㄩ儴鍖哄垝鏍戝舰鏌ヨ")
@PostMapping("/treeList")
public ApiResponse<List<Areas>> treeList (@RequestBody AreasDto pageWrap) {
@@ -98,6 +106,15 @@
})
public ApiResponse<List<Banner>> getBannerList(@RequestParam Integer position) {
return ApiResponse.success("鎿嶄綔鎴愬姛", bannerService.findListByPosition(position));
+ }
+
+ @ApiOperation(value = "鑾峰彇杞挱鍥捐鎯�", notes = "鏍规嵁ID杩斿洖杞挱鍥捐鎯咃紝鍚浘鐗囧叏璺緞")
+ @GetMapping("/getBannerDetail")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "杞挱鍥句富閿�", required = true)
+ })
+ public ApiResponse<Banner> getBannerDetail(@RequestParam Integer id) {
+ return ApiResponse.success("鏌ヨ鎴愬姛", bannerService.findById(id));
}
@ApiOperation(value = "鑾峰彇鍩庡競宸插紑閫氱墿鍝佸昂瀵�", notes = "鏍规嵁鍩庡競涓婚敭鏌ヨ宸插紑閫氱殑鐗╁搧灏哄(category type=4)")
@@ -168,7 +185,9 @@
}
pageWrap.getModel().setUserId(this.getMemberId());
pageWrap.getModel().setUserType(Constants.ZERO);
- return ApiResponse.success("鏌ヨ鎴愬姛", noticeService.findPage(pageWrap));
+ PageData<Notice> pageData = noticeService.findPage(pageWrap);
+ noticeService.readAllNotice(0, this.getMemberId());
+ return ApiResponse.success("鏌ヨ鎴愬姛", pageData);
}
@@ -184,7 +203,9 @@
}
pageWrap.getModel().setUserId(this.getShopId());
pageWrap.getModel().setUserType(Constants.TWO);
- return ApiResponse.success("鏌ヨ鎴愬姛", noticeService.findPage(pageWrap));
+ PageData<Notice> pageData = noticeService.findPage(pageWrap);
+ noticeService.readAllNotice(Constants.TWO, this.getShopId());
+ return ApiResponse.success("鏌ヨ鎴愬姛", pageData);
}
@LoginShopRequired
@@ -235,7 +256,9 @@
}
pageWrap.getModel().setUserId(this.getDriverId());
pageWrap.getModel().setUserType(Constants.ONE);
- return ApiResponse.success("鏌ヨ鎴愬姛", noticeService.findPage(pageWrap));
+ PageData<Notice> pageData = noticeService.findPage(pageWrap);
+ noticeService.readAllNotice(Constants.ONE, this.getDriverId());
+ return ApiResponse.success("鏌ヨ鎴愬姛", pageData);
}
@LoginDriverRequired
@@ -256,5 +279,16 @@
return ApiResponse.success("鎿嶄綔鎴愬姛");
}
+ @ApiOperation(value = "鑾峰彇鏈�鏂癆PP鐗堟湰")
+ @GetMapping("/getApiVersion")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "type", value = "骞冲彴绫诲瀷 0=Android 1=IOS", required = true)
+ })
+ public ApiResponse<AppVersion> getApiVersion(@RequestParam Integer type) {
+ AppVersion appVersion = appVersionService.getLatestVersion(type);
+ appVersion.setFileUrl("http://llfc.lmpro.cn/apkversion/gtxljc.apk");
+ return ApiResponse.success("鏌ヨ鎴愬姛", appVersion);
+ }
+
}
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 b2ffbf2..77ec3a9 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
@@ -18,6 +18,7 @@
import com.doumee.dao.dto.DriverVerifyRequest;
import com.doumee.dao.vo.AccountResponse;
import com.doumee.dao.dto.CancelOrderDTO;
+import com.doumee.dao.dto.ChangePasswordDTO;
import com.doumee.dao.vo.DriverActiveOrderCountVO;
import com.doumee.dao.vo.DriverCancelLimitVO;
import com.doumee.dao.vo.DriverCenterVO;
@@ -237,10 +238,9 @@
@ApiImplicitParams({
@ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
})
- public ApiResponse changePassword(@RequestParam String oldPassword,
- @RequestParam String newPassword) {
+ public ApiResponse changePassword(@RequestBody @Valid ChangePasswordDTO dto) {
String token = this.getRequest().getHeader(JwtTokenUtil.HEADER_KEY);
- driverInfoService.changePassword(this.getDriverId(), oldPassword, newPassword, token);
+ driverInfoService.changePassword(this.getDriverId(), dto.getOldPassword(), dto.getNewPassword(), token);
return ApiResponse.success("瀵嗙爜淇敼鎴愬姛锛岃閲嶆柊鐧诲綍");
}
diff --git a/server/web/src/main/java/com/doumee/api/web/PaymentCallback.java b/server/web/src/main/java/com/doumee/api/web/PaymentCallback.java
index 54eb454..c26dbaa 100644
--- a/server/web/src/main/java/com/doumee/api/web/PaymentCallback.java
+++ b/server/web/src/main/java/com/doumee/api/web/PaymentCallback.java
@@ -231,10 +231,10 @@
templateParam.put("orderNo", refundOrder.getCode());
templateParam.put("money", String.valueOf(Constants.getFormatMoney(
refundOrder.getRefundAmount() != null ? refundOrder.getRefundAmount() : 0L)));
- boolean smsResult = AliSmsService.sendSms(refundMember.getTelephone(),
+ String smsError = AliSmsService.sendSms(refundMember.getTelephone(),
Constants.SmsNotify.MEMBER_REFUNDED.getTemplateCode(),
templateParam.toJSONString());
- if (smsResult) {
+ if (smsError == null) {
log.info("閫�娆剧煭淇″彂閫佹垚鍔�: phone={}", refundMember.getTelephone());
} else {
log.warn("閫�娆剧煭淇″彂閫佸け璐�: phone={}", refundMember.getTelephone());
@@ -244,7 +244,10 @@
smsRecord.setPhone(refundMember.getTelephone());
smsRecord.setContent(smsContent);
smsRecord.setType(Constants.ONE);
- smsRecord.setStatus(smsResult ? Constants.ONE : Constants.ZERO);
+ smsRecord.setStatus(smsError == null ? Constants.ONE : Constants.ZERO);
+ if (smsError != null) {
+ smsRecord.setRemark(smsError);
+ }
smsRecord.setCreateTime(new java.util.Date());
smsRecord.setDeleted(Constants.ZERO);
smsrecordMapper.insert(smsRecord);
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 061d0bb..6087e89 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
@@ -8,6 +8,7 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.Member;
+import com.doumee.dao.dto.ChangePasswordDTO;
import com.doumee.dao.dto.ShopApplyDTO;
import com.doumee.dao.dto.ShopDetailQueryDTO;
import com.doumee.dao.dto.ShopInfoMaintainDTO;
@@ -25,6 +26,7 @@
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
+import javax.validation.Valid;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -136,10 +138,9 @@
@ApiImplicitParams({
@ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "闂ㄥ簵token鍊�", required = true),
})
- public ApiResponse changePassword(@RequestParam String oldPassword,
- @RequestParam String newPassword) {
+ public ApiResponse changePassword(@RequestBody @Valid ChangePasswordDTO dto) {
String token = this.getRequest().getHeader(JwtTokenUtil.HEADER_KEY);
- shopInfoService.changePassword(this.getShopId(), oldPassword, newPassword, token);
+ shopInfoService.changePassword(this.getShopId(), dto.getOldPassword(), dto.getNewPassword(), token);
return ApiResponse.success("瀵嗙爜淇敼鎴愬姛锛岃閲嶆柊鐧诲綍");
}
--
Gitblit v1.9.3