From dc0b51b8800a31da0701c3f31a0b1460ae3c3ad9 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期五, 10 四月 2026 09:09:38 +0800
Subject: [PATCH] 代码生成
---
server/services/src/main/java/com/doumee/dao/business/model/ShopInfo.java | 124 +
server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java | 585 +++++
server/services/src/main/java/com/doumee/dao/business/ShopInfoMapper.java | 13
server/services/src/main/java/com/doumee/dao/business/SmsrecordMapper.java | 13
server/services/src/main/java/com/doumee/dao/business/model/Banner.java | 74
server/services/src/main/java/com/doumee/service/business/impl/SmsrecordServiceImpl.java | 159 +
server/services/src/main/java/com/doumee/service/business/ShopInfoService.java | 99
server/services/src/main/java/com/doumee/core/utils/PinYinUtil.java | 137 +
server/services/src/main/java/com/doumee/dao/dto/LocalStoragePricingItemDTO.java | 26
server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java | 32
server/admin/src/main/java/com/doumee/api/business/ShopInfoController.java | 93
server/services/src/main/java/com/doumee/service/business/impl/AreasServiceImpl.java | 521 +++++
server/services/src/main/java/com/doumee/dao/business/model/DriverInfo.java | 145 +
server/services/src/main/java/com/doumee/dao/dto/RevenueShareItemDTO.java | 26
server/services/src/main/java/com/doumee/service/business/MemberService.java | 12
server/services/src/main/java/com/doumee/dao/vo/RevenueShareVO.java | 32
server/services/src/main/java/com/doumee/dao/dto/EstimatedDeliverySaveDTO.java | 33
server/services/src/main/java/com/doumee/dao/business/model/Category.java | 23
server/services/src/main/java/com/doumee/service/business/impl/PricingRuleServiceImpl.java | 602 +++++
server/services/src/main/java/com/doumee/dao/dto/AuditDTO.java | 3
server/services/src/main/java/com/doumee/dao/dto/DriverRegisterRequest.java | 27
server/services/src/main/java/com/doumee/dao/dto/RemoteDeliveryPricingSaveDTO.java | 30
server/web/src/main/java/com/doumee/api/web/AccountApi.java | 20
server/services/src/main/java/com/doumee/dao/dto/RemoteDeliveryPricingItemDTO.java | 38
server/services/src/main/java/com/doumee/core/utils/aliyun/ALiYunUtil.java | 553 +++++
server/services/src/main/java/com/doumee/dao/business/PricingRuleMapper.java | 13
server/services/src/main/java/com/doumee/dao/business/model/Smsrecord.java | 71
server/services/src/main/java/com/doumee/service/business/PricingRuleService.java | 187 +
server/admin/src/main/java/com/doumee/api/business/BannerController.java | 92
server/services/src/main/java/com/doumee/dao/dto/StoreDepositItemDTO.java | 26
server/services/src/main/java/com/doumee/dao/business/model/PricingRule.java | 70
server/web/src/main/java/com/doumee/api/web/UserApi.java | 140
server/services/src/main/java/com/doumee/dao/dto/RevenueShareSaveDTO.java | 30
server/services/src/main/java/com/doumee/dao/dto/DriverVerifyRequest.java | 75
server/services/src/main/java/com/doumee/core/utils/FileDigest.java | 69
server/services/src/main/java/com/doumee/dao/business/AreasMapper.java | 12
server/services/src/main/java/com/doumee/dao/business/BannerMapper.java | 13
server/services/src/main/java/com/doumee/service/business/DriverInfoService.java | 149 +
server/services/src/main/java/com/doumee/dao/dto/StoreDepositSaveDTO.java | 30
server/admin/src/main/java/com/doumee/api/business/SmsrecordController.java | 93
server/services/src/main/java/com/doumee/dao/dto/LocalStoragePricingSaveDTO.java | 30
server/services/src/main/java/com/doumee/service/business/SmsrecordService.java | 99
server/admin/src/main/java/com/doumee/api/business/DriverInfoController.java | 103 +
server/services/src/main/java/com/doumee/dao/vo/RemoteDeliveryPricingVO.java | 41
server/services/src/main/java/com/doumee/service/business/BannerService.java | 37
server/services/src/main/java/com/doumee/dao/vo/StoreDepositVO.java | 32
server/services/src/main/java/com/doumee/dao/vo/EstimatedDeliveryVO.java | 29
server/admin/src/main/java/com/doumee/api/business/PricingRuleController.java | 200 +
server/services/src/main/java/com/doumee/config/cache/RedisConfig.java | 36
server/services/src/main/java/com/doumee/dao/business/model/Areas.java | 134 +
server/services/src/main/java/com/doumee/service/business/AreasService.java | 136 +
server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java | 171 +
server/services/src/main/java/com/doumee/dao/business/model/Multifile.java | 5
server/admin/src/main/java/com/doumee/api/business/AreasController.java | 107 +
server/services/db/business.banner.permissions.sql | 5
server/services/src/main/java/com/doumee/service/business/impl/BannerServiceImpl.java | 148 +
server/services/src/main/java/com/doumee/dao/dto/DriverLoginRequest.java | 27
server/web/src/main/java/com/doumee/api/web/DriverInfoApi.java | 82
server/pom.xml | 22
server/services/src/main/java/com/doumee/dao/vo/LocalStoragePricingVO.java | 32
server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java | 127
server/services/src/main/java/com/doumee/dao/business/DriverInfoMapper.java | 13
server/services/src/main/java/com/doumee/dao/dto/AreasDto.java | 25
server/services/src/main/java/com/doumee/dao/business/model/Member.java | 21
64 files changed, 5,993 insertions(+), 159 deletions(-)
diff --git a/server/admin/src/main/java/com/doumee/api/business/AreasController.java b/server/admin/src/main/java/com/doumee/api/business/AreasController.java
new file mode 100644
index 0000000..df0d32e
--- /dev/null
+++ b/server/admin/src/main/java/com/doumee/api/business/AreasController.java
@@ -0,0 +1,107 @@
+package com.doumee.api.business;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.Areas;
+import com.doumee.dao.dto.AreasDto;
+import com.doumee.service.business.AreasService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/02/15 08:55
+ */
+@Api(tags = "鐪佸競鍖轰俊鎭〃")
+@RestController
+@RequestMapping("/business/areas")
+public class AreasController extends BaseController {
+
+ @Autowired
+ private AreasService areasService;
+
+ @PreventRepeat
+ @ApiOperation("鏂板缓")
+ @PostMapping("/create")
+ @RequiresPermissions("business:areas:create")
+ public ApiResponse create(@RequestBody Areas areas) {
+
+ return ApiResponse.success(areasService.create(areas));
+ }
+
+ @ApiOperation("鏍规嵁ID鍒犻櫎")
+ @GetMapping("/delete/{id}")
+ @RequiresPermissions("business:areas:delete")
+ public ApiResponse deleteById(@PathVariable Integer id) {
+ areasService.deleteById(id);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鎵归噺鍒犻櫎")
+ @GetMapping("/delete/batch")
+ @RequiresPermissions("business:areas: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));
+ }
+ areasService.deleteByIdInBatch(idList);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鏍规嵁ID淇敼")
+ @PostMapping("/updateById")
+ @RequiresPermissions("business:areas:update")
+ public ApiResponse updateById(@RequestBody Areas areas) {
+ areasService.updateById(areas);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鍒嗛〉鏌ヨ")
+ @PostMapping("/page")
+// @RequiresPermissions("business:areas:query")
+ public ApiResponse<PageData<Areas>> findPage (@RequestBody PageWrap<Areas> pageWrap) {
+ return ApiResponse.success(areasService.findPage(pageWrap));
+ }
+
+ @ApiOperation("鍏ㄩ儴鏍戝舰鏌ヨ")
+ @PostMapping("/treeList")
+// @RequiresPermissions("business:areas:query")
+ public ApiResponse<List<Areas>> treeList (@RequestBody AreasDto pageWrap) {
+ Areas a = new Areas();
+ BeanUtils.copyProperties(pageWrap,a);
+ return ApiResponse.success(areasService.findList(a));
+ }
+ @ApiOperation("鏍规嵁鐖惰妭鐐瑰拰绫诲瀷鏌ヨ")
+ @PostMapping("/listByParentId")
+// @RequiresPermissions("business:areas:query")
+ public ApiResponse<List<Areas>> listByParentId (@RequestBody AreasDto pageWrap) {
+ return ApiResponse.success(areasService.findByParentId(pageWrap.getParentId(),pageWrap.getType(),pageWrap.getFlag()) );
+ }
+ @ApiOperation("瀵煎嚭Excel")
+ @PostMapping("/exportExcel")
+ @RequiresPermissions("business:areas:exportExcel")
+ public void exportExcel (@RequestBody PageWrap<Areas> pageWrap, HttpServletResponse response) {
+ ExcelExporter.build(Areas.class).export(areasService.findPage(pageWrap).getRecords(), "鐪佸競鍖轰俊鎭〃", response);
+ }
+
+ @ApiOperation("鏍规嵁ID鏌ヨ")
+ @GetMapping("/{id}")
+ @RequiresPermissions("business:areas:query")
+ public ApiResponse findById(@PathVariable Integer id) {
+ return ApiResponse.success(areasService.findById(id));
+ }
+}
diff --git a/server/admin/src/main/java/com/doumee/api/business/BannerController.java b/server/admin/src/main/java/com/doumee/api/business/BannerController.java
new file mode 100644
index 0000000..b3a59aa
--- /dev/null
+++ b/server/admin/src/main/java/com/doumee/api/business/BannerController.java
@@ -0,0 +1,92 @@
+package com.doumee.api.business;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.Banner;
+import com.doumee.service.business.BannerService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 杞挱鍥�
+ * @author rk
+ * @date 2026/04/08
+ */
+@Api(tags = "杞挱鍥�")
+@RestController
+@RequestMapping("/business/banner")
+public class BannerController extends BaseController {
+
+ @Autowired
+ private BannerService bannerService;
+
+ @PreventRepeat
+ @ApiOperation("鏂板缓")
+ @PostMapping("/create")
+ @RequiresPermissions("business:banner:create")
+ public ApiResponse create(@RequestBody Banner banner) {
+ return ApiResponse.success(bannerService.create(banner));
+ }
+
+ @ApiOperation("鏍规嵁ID鍒犻櫎")
+ @GetMapping("/delete/{id}")
+ @RequiresPermissions("business:banner:delete")
+ public ApiResponse deleteById(@PathVariable Integer id) {
+ bannerService.deleteById(id);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鎵归噺鍒犻櫎")
+ @GetMapping("/delete/batch")
+ @RequiresPermissions("business:banner: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));
+ }
+ bannerService.deleteByIdInBatch(idList);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鏍规嵁ID淇敼")
+ @PostMapping("/updateById")
+ @RequiresPermissions("business:banner:update")
+ public ApiResponse updateById(@RequestBody Banner banner) {
+ bannerService.updateById(banner);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鍒嗛〉鏌ヨ")
+ @PostMapping("/page")
+ @RequiresPermissions("business:banner:query")
+ public ApiResponse<PageData<Banner>> findPage(@RequestBody PageWrap<Banner> pageWrap) {
+ return ApiResponse.success(bannerService.findPage(pageWrap));
+ }
+
+ @ApiOperation("瀵煎嚭Excel")
+ @PostMapping("/exportExcel")
+ @RequiresPermissions("business:banner:exportExcel")
+ public void exportExcel(@RequestBody PageWrap<Banner> pageWrap, HttpServletResponse response) {
+ List<Banner> bannerList = bannerService.findPage(pageWrap).getRecords();
+ ExcelExporter.build(Banner.class).export(bannerList, "杞挱鍥�", response);
+ }
+
+ @ApiOperation("鏍规嵁ID鏌ヨ")
+ @GetMapping("/{id}")
+ @RequiresPermissions("business:banner:query")
+ public ApiResponse findById(@PathVariable Integer id) {
+ return ApiResponse.success(bannerService.findById(id));
+ }
+}
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
new file mode 100644
index 0000000..65b80b1
--- /dev/null
+++ b/server/admin/src/main/java/com/doumee/api/business/DriverInfoController.java
@@ -0,0 +1,103 @@
+package com.doumee.api.business;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.DriverInfo;
+import com.doumee.dao.dto.AuditDTO;
+import com.doumee.service.business.DriverInfoService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 鍙告満娉ㄥ唽淇℃伅
+ * @author rk
+ * @date 2026/04/08
+ */
+@Api(tags = "鍙告満娉ㄥ唽淇℃伅")
+@RestController
+@RequestMapping("/business/driverInfo")
+public class DriverInfoController extends BaseController {
+
+ @Autowired
+ private DriverInfoService driverInfoService;
+
+ @PreventRepeat
+ @ApiOperation("鏂板缓")
+ @PostMapping("/create")
+ @RequiresPermissions("business:driverInfo:create")
+ public ApiResponse create(@RequestBody DriverInfo driverInfo) {
+ return ApiResponse.success(driverInfoService.create(driverInfo));
+ }
+
+ @ApiOperation("鏍规嵁ID鍒犻櫎")
+ @GetMapping("/delete/{id}")
+ @RequiresPermissions("business:driverInfo:delete")
+ public ApiResponse deleteById(@PathVariable Integer id) {
+ driverInfoService.deleteById(id);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鎵归噺鍒犻櫎")
+ @GetMapping("/delete/batch")
+ @RequiresPermissions("business:driverInfo: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));
+ }
+ driverInfoService.deleteByIdInBatch(idList);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鏍规嵁ID淇敼")
+ @PostMapping("/updateById")
+ @RequiresPermissions("business:driverInfo:update")
+ public ApiResponse updateById(@RequestBody DriverInfo driverInfo) {
+ driverInfoService.updateById(driverInfo);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鍒嗛〉鏌ヨ")
+ @PostMapping("/page")
+ @RequiresPermissions("business:driverInfo:query")
+ public ApiResponse<PageData<DriverInfo>> findPage(@RequestBody PageWrap<DriverInfo> pageWrap) {
+ return ApiResponse.success(driverInfoService.findPage(pageWrap));
+ }
+
+ @ApiOperation("瀵煎嚭Excel")
+ @PostMapping("/exportExcel")
+ @RequiresPermissions("business:driverInfo:exportExcel")
+ public void exportExcel(@RequestBody PageWrap<DriverInfo> pageWrap, HttpServletResponse response) {
+ List<DriverInfo> driverInfoList = driverInfoService.findPage(pageWrap).getRecords();
+ ExcelExporter.build(DriverInfo.class).export(driverInfoList, "鍙告満娉ㄥ唽淇℃伅", response);
+ }
+
+ @ApiOperation("鏍规嵁ID鏌ヨ")
+ @GetMapping("/{id}")
+ @RequiresPermissions("business:driverInfo:query")
+ public ApiResponse findById(@PathVariable Integer id) {
+ return ApiResponse.success(driverInfoService.findById(id));
+ }
+
+ @ApiOperation("瀹℃壒鍙告満瀹炲悕璁よ瘉")
+ @PostMapping("/audit")
+ @RequiresPermissions("business:driverInfo:audit")
+ public ApiResponse audit(@RequestBody AuditDTO auditDTO) {
+ auditDTO.setAuditUser(this.getLoginUser().getId());
+ driverInfoService.auditVerify(auditDTO);
+ return ApiResponse.success("瀹℃壒鎴愬姛");
+ }
+
+}
diff --git a/server/admin/src/main/java/com/doumee/api/business/PricingRuleController.java b/server/admin/src/main/java/com/doumee/api/business/PricingRuleController.java
new file mode 100644
index 0000000..b6d5d4c
--- /dev/null
+++ b/server/admin/src/main/java/com/doumee/api/business/PricingRuleController.java
@@ -0,0 +1,200 @@
+package com.doumee.api.business;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.PricingRule;
+import com.doumee.dao.dto.LocalStoragePricingSaveDTO;
+import com.doumee.dao.dto.RemoteDeliveryPricingSaveDTO;
+import com.doumee.dao.dto.EstimatedDeliverySaveDTO;
+import com.doumee.dao.dto.StoreDepositSaveDTO;
+import com.doumee.dao.dto.RevenueShareSaveDTO;
+import com.doumee.dao.vo.LocalStoragePricingVO;
+import com.doumee.dao.vo.RemoteDeliveryPricingVO;
+import com.doumee.dao.vo.EstimatedDeliveryVO;
+import com.doumee.dao.vo.StoreDepositVO;
+import com.doumee.dao.vo.RevenueShareVO;
+import com.doumee.service.business.PricingRuleService;
+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.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 璁′环瑙勫垯閰嶇疆
+ * @author rk
+ * @date 2026/04/08
+ */
+@Api(tags = "璁′环瑙勫垯閰嶇疆")
+@RestController
+@RequestMapping("/business/pricingRule")
+public class PricingRuleController extends BaseController {
+
+ @Autowired
+ private PricingRuleService pricingRuleService;
+
+ @PreventRepeat
+ @ApiOperation("鏂板缓")
+ @PostMapping("/create")
+ @RequiresPermissions("business:pricingRule:create")
+ public ApiResponse create(@RequestBody PricingRule pricingRule) {
+ return ApiResponse.success(pricingRuleService.create(pricingRule));
+ }
+
+ @ApiOperation("鏍规嵁ID鍒犻櫎")
+ @GetMapping("/delete/{id}")
+ @RequiresPermissions("business:pricingRule:delete")
+ public ApiResponse deleteById(@PathVariable Integer id) {
+ pricingRuleService.deleteById(id);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鎵归噺鍒犻櫎")
+ @GetMapping("/delete/batch")
+ @RequiresPermissions("business:pricingRule: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));
+ }
+ pricingRuleService.deleteByIdInBatch(idList);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鏍规嵁ID淇敼")
+ @PostMapping("/updateById")
+ @RequiresPermissions("business:pricingRule:update")
+ public ApiResponse updateById(@RequestBody PricingRule pricingRule) {
+ pricingRuleService.updateById(pricingRule);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鍒嗛〉鏌ヨ")
+ @PostMapping("/page")
+ @RequiresPermissions("business:pricingRule:query")
+ public ApiResponse<PageData<PricingRule>> findPage(@RequestBody PageWrap<PricingRule> pageWrap) {
+ return ApiResponse.success(pricingRuleService.findPage(pageWrap));
+ }
+
+ @ApiOperation("瀵煎嚭Excel")
+ @PostMapping("/exportExcel")
+ @RequiresPermissions("business:pricingRule:exportExcel")
+ public void exportExcel(@RequestBody PageWrap<PricingRule> pageWrap, HttpServletResponse response) {
+ List<PricingRule> pricingRuleList = pricingRuleService.findPage(pageWrap).getRecords();
+ ExcelExporter.build(PricingRule.class).export(pricingRuleList, "璁′环瑙勫垯閰嶇疆", response);
+ }
+
+ @ApiOperation("鏍规嵁ID鏌ヨ")
+ @GetMapping("/{id}")
+ @RequiresPermissions("business:pricingRule:query")
+ public ApiResponse findById(@PathVariable Integer id) {
+ return ApiResponse.success(pricingRuleService.findById(id));
+ }
+
+ @PreventRepeat
+ @ApiOperation("鎵归噺淇濆瓨灏卞湴瀛樺彇瑙勫垯")
+ @PostMapping("/localStorage/batchSave")
+ @RequiresPermissions("business:pricingRule:create")
+ public ApiResponse batchSaveLocalStoragePricing(@RequestBody @Validated LocalStoragePricingSaveDTO request) {
+ pricingRuleService.batchSaveLocalStoragePricing(request);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鏌ヨ灏卞湴瀛樺彇瑙勫垯鍒楄〃")
+ @GetMapping("/localStorage/list")
+ @RequiresPermissions("business:pricingRule:query")
+ public ApiResponse<List<LocalStoragePricingVO>> listLocalStoragePricing(@RequestParam Integer cityId) {
+ return ApiResponse.success(pricingRuleService.listLocalStoragePricing(cityId));
+ }
+
+ @PreventRepeat
+ @ApiOperation("鎵归噺淇濆瓨寮傚湴瀵勯�佽鍒�")
+ @PostMapping("/remoteDelivery/batchSave")
+ @RequiresPermissions("business:pricingRule:create")
+ public ApiResponse batchSaveRemoteDeliveryPricing(@RequestBody @Validated RemoteDeliveryPricingSaveDTO request) {
+ pricingRuleService.batchSaveRemoteDeliveryPricing(request);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鏌ヨ寮傚湴瀵勯�佽鍒欏垪琛�")
+ @GetMapping("/remoteDelivery/list")
+ @RequiresPermissions("business:pricingRule:query")
+ public ApiResponse<List<RemoteDeliveryPricingVO>> listRemoteDeliveryPricing(@RequestParam Integer cityId) {
+ return ApiResponse.success(pricingRuleService.listRemoteDeliveryPricing(cityId));
+ }
+
+ @PreventRepeat
+ @ApiOperation("鏂板棰勮鏃舵晥閰嶇疆")
+ @PostMapping("/estimatedDelivery/create")
+ @RequiresPermissions("business:pricingRule:create")
+ public ApiResponse createEstimatedDelivery(@RequestBody @Validated EstimatedDeliverySaveDTO request) {
+ return ApiResponse.success(pricingRuleService.createEstimatedDelivery(request));
+ }
+
+ @PreventRepeat
+ @ApiOperation("淇敼棰勮鏃舵晥閰嶇疆")
+ @PostMapping("/estimatedDelivery/update")
+ @RequiresPermissions("business:pricingRule:update")
+ public ApiResponse updateEstimatedDelivery(@RequestBody @Validated EstimatedDeliverySaveDTO request) {
+ pricingRuleService.updateEstimatedDelivery(request);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鍒犻櫎棰勮鏃舵晥閰嶇疆")
+ @GetMapping("/estimatedDelivery/delete/{id}")
+ @RequiresPermissions("business:pricingRule:delete")
+ public ApiResponse deleteEstimatedDelivery(@PathVariable Integer id) {
+ pricingRuleService.deleteEstimatedDelivery(id);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鏌ヨ棰勮鏃舵晥閰嶇疆鍒楄〃")
+ @GetMapping("/estimatedDelivery/list")
+ @RequiresPermissions("business:pricingRule:query")
+ public ApiResponse<List<EstimatedDeliveryVO>> listEstimatedDelivery(@RequestParam Integer cityId) {
+ return ApiResponse.success(pricingRuleService.listEstimatedDelivery(cityId));
+ }
+
+ @PreventRepeat
+ @ApiOperation("鎵归噺淇濆瓨闂ㄥ簵娉ㄥ唽鎶奸噾")
+ @PostMapping("/storeDeposit/batchSave")
+ @RequiresPermissions("business:pricingRule:create")
+ public ApiResponse batchSaveStoreDeposit(@RequestBody @Validated StoreDepositSaveDTO request) {
+ pricingRuleService.batchSaveStoreDeposit(request);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鏌ヨ闂ㄥ簵娉ㄥ唽鎶奸噾鍒楄〃")
+ @GetMapping("/storeDeposit/list")
+ @RequiresPermissions("business:pricingRule:query")
+ public ApiResponse<List<StoreDepositVO>> listStoreDeposit(@RequestParam Integer cityId) {
+ return ApiResponse.success(pricingRuleService.listStoreDeposit(cityId));
+ }
+
+ @PreventRepeat
+ @ApiOperation("鎵归噺淇濆瓨鍒嗘垚姣斾緥")
+ @PostMapping("/revenueShare/batchSave")
+ @RequiresPermissions("business:pricingRule:create")
+ public ApiResponse batchSaveRevenueShare(@RequestBody @Validated RevenueShareSaveDTO request) {
+ pricingRuleService.batchSaveRevenueShare(request);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鏌ヨ鍒嗘垚姣斾緥鍒楄〃")
+ @GetMapping("/revenueShare/list")
+ @RequiresPermissions("business:pricingRule:query")
+ public ApiResponse<List<RevenueShareVO>> listRevenueShare(@RequestParam Integer cityId) {
+ return ApiResponse.success(pricingRuleService.listRevenueShare(cityId));
+ }
+
+}
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
new file mode 100644
index 0000000..bf72c43
--- /dev/null
+++ b/server/admin/src/main/java/com/doumee/api/business/ShopInfoController.java
@@ -0,0 +1,93 @@
+package com.doumee.api.business;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.ShopInfo;
+import com.doumee.service.business.ShopInfoService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 闂ㄥ簵淇℃伅
+ * @author rk
+ * @date 2026/04/08
+ */
+@Api(tags = "闂ㄥ簵淇℃伅")
+@RestController
+@RequestMapping("/business/shopInfo")
+public class ShopInfoController extends BaseController {
+
+ @Autowired
+ private ShopInfoService shopInfoService;
+
+ @PreventRepeat
+ @ApiOperation("鏂板缓")
+ @PostMapping("/create")
+ @RequiresPermissions("business:shopInfo:create")
+ public ApiResponse create(@RequestBody ShopInfo shopInfo) {
+ return ApiResponse.success(shopInfoService.create(shopInfo));
+ }
+
+ @ApiOperation("鏍规嵁ID鍒犻櫎")
+ @GetMapping("/delete/{id}")
+ @RequiresPermissions("business:shopInfo:delete")
+ public ApiResponse deleteById(@PathVariable Integer id) {
+ shopInfoService.deleteById(id);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鎵归噺鍒犻櫎")
+ @GetMapping("/delete/batch")
+ @RequiresPermissions("business:shopInfo: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));
+ }
+ shopInfoService.deleteByIdInBatch(idList);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鏍规嵁ID淇敼")
+ @PostMapping("/updateById")
+ @RequiresPermissions("business:shopInfo:update")
+ public ApiResponse updateById(@RequestBody ShopInfo shopInfo) {
+ shopInfoService.updateById(shopInfo);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鍒嗛〉鏌ヨ")
+ @PostMapping("/page")
+ @RequiresPermissions("business:shopInfo:query")
+ public ApiResponse<PageData<ShopInfo>> findPage(@RequestBody PageWrap<ShopInfo> pageWrap) {
+ return ApiResponse.success(shopInfoService.findPage(pageWrap));
+ }
+
+ @ApiOperation("瀵煎嚭Excel")
+ @PostMapping("/exportExcel")
+ @RequiresPermissions("business:shopInfo:exportExcel")
+ public void exportExcel(@RequestBody PageWrap<ShopInfo> pageWrap, HttpServletResponse response) {
+ List<ShopInfo> shopInfoList = shopInfoService.findPage(pageWrap).getRecords();
+ ExcelExporter.build(ShopInfo.class).export(shopInfoList, "闂ㄥ簵淇℃伅", response);
+ }
+
+ @ApiOperation("鏍规嵁ID鏌ヨ")
+ @GetMapping("/{id}")
+ @RequiresPermissions("business:shopInfo:query")
+ public ApiResponse findById(@PathVariable Integer id) {
+ return ApiResponse.success(shopInfoService.findById(id));
+ }
+
+}
diff --git a/server/admin/src/main/java/com/doumee/api/business/SmsrecordController.java b/server/admin/src/main/java/com/doumee/api/business/SmsrecordController.java
new file mode 100644
index 0000000..8e92079
--- /dev/null
+++ b/server/admin/src/main/java/com/doumee/api/business/SmsrecordController.java
@@ -0,0 +1,93 @@
+package com.doumee.api.business;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.Smsrecord;
+import com.doumee.service.business.SmsrecordService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 鐭俊楠岃瘉鐮�
+ * @author rk
+ * @date 2026/04/08
+ */
+@Api(tags = "鐭俊楠岃瘉鐮�")
+@RestController
+@RequestMapping("/business/smsrecord")
+public class SmsrecordController extends BaseController {
+
+ @Autowired
+ private SmsrecordService smsrecordService;
+
+ @PreventRepeat
+ @ApiOperation("鏂板缓")
+ @PostMapping("/create")
+ @RequiresPermissions("business:smsrecord:create")
+ public ApiResponse create(@RequestBody Smsrecord smsrecord) {
+ return ApiResponse.success(smsrecordService.create(smsrecord));
+ }
+
+ @ApiOperation("鏍规嵁ID鍒犻櫎")
+ @GetMapping("/delete/{id}")
+ @RequiresPermissions("business:smsrecord:delete")
+ public ApiResponse deleteById(@PathVariable Integer id) {
+ smsrecordService.deleteById(id);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鎵归噺鍒犻櫎")
+ @GetMapping("/delete/batch")
+ @RequiresPermissions("business:smsrecord: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));
+ }
+ smsrecordService.deleteByIdInBatch(idList);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鏍规嵁ID淇敼")
+ @PostMapping("/updateById")
+ @RequiresPermissions("business:smsrecord:update")
+ public ApiResponse updateById(@RequestBody Smsrecord smsrecord) {
+ smsrecordService.updateById(smsrecord);
+ return ApiResponse.success(null);
+ }
+
+ @ApiOperation("鍒嗛〉鏌ヨ")
+ @PostMapping("/page")
+ @RequiresPermissions("business:smsrecord:query")
+ public ApiResponse<PageData<Smsrecord>> findPage(@RequestBody PageWrap<Smsrecord> pageWrap) {
+ return ApiResponse.success(smsrecordService.findPage(pageWrap));
+ }
+
+ @ApiOperation("瀵煎嚭Excel")
+ @PostMapping("/exportExcel")
+ @RequiresPermissions("business:smsrecord:exportExcel")
+ public void exportExcel(@RequestBody PageWrap<Smsrecord> pageWrap, HttpServletResponse response) {
+ List<Smsrecord> smsrecordList = smsrecordService.findPage(pageWrap).getRecords();
+ ExcelExporter.build(Smsrecord.class).export(smsrecordList, "鐭俊楠岃瘉鐮�", response);
+ }
+
+ @ApiOperation("鏍规嵁ID鏌ヨ")
+ @GetMapping("/{id}")
+ @RequiresPermissions("business:smsrecord:query")
+ public ApiResponse findById(@PathVariable Integer id) {
+ return ApiResponse.success(smsrecordService.findById(id));
+ }
+
+}
diff --git a/server/pom.xml b/server/pom.xml
index 8f1190d..cfe91fc 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -35,6 +35,8 @@
<poi.version>5.0.0</poi.version>
<jjwt.version>0.9.1</jjwt.version>
<weixin-java-pay.version>4.1.0</weixin-java-pay.version>
+ <!-- 闃块噷浜慜SS瀛樺偍 -->
+ <aliyun-oss.version>3.8.0</aliyun-oss.version>
</properties>
<dependencies>
<!-- Spring Boot -->
@@ -238,10 +240,11 @@
<version>0.2.15</version>
</dependency>
+ <!-- 闃块噷浜慜SS-->
<dependency>
- <groupId>com.aliyun</groupId>
- <artifactId>aliyun-java-sdk-core</artifactId>
- <version>3.5.0</version>
+ <groupId>com.aliyun.oss</groupId>
+ <artifactId>aliyun-sdk-oss</artifactId>
+ <version>${aliyun-oss.version}</version>
</dependency>
<dependency>
@@ -249,7 +252,18 @@
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.1.0</version>
</dependency>
-
+ <!-- aliyun sms SDK -->
+ <dependency>
+ <groupId>com.aliyun</groupId>
+ <artifactId>aliyun-java-sdk-core</artifactId>
+ <version>4.5.3</version>
+ </dependency>
+ <!-- 鎷奸煶杞崲 -->
+ <dependency>
+ <groupId>com.belerweb</groupId>
+ <artifactId>pinyin4j</artifactId>
+ <version>2.5.1</version>
+ </dependency>
<!-- <dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-storage-blob</artifactId>
diff --git a/server/services/db/business.banner.permissions.sql b/server/services/db/business.banner.permissions.sql
new file mode 100644
index 0000000..b200283
--- /dev/null
+++ b/server/services/db/business.banner.permissions.sql
@@ -0,0 +1,5 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:banner: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:banner: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:banner: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:banner:query', '鏌ヨ杞挱鍥�', '杞挱鍥�', '', 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:banner:exportExcel', '瀵煎嚭杞挱鍥�(Excel)', '杞挱鍥�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
diff --git a/server/services/src/main/java/com/doumee/config/cache/RedisConfig.java b/server/services/src/main/java/com/doumee/config/cache/RedisConfig.java
index de523ca..47353ea 100644
--- a/server/services/src/main/java/com/doumee/config/cache/RedisConfig.java
+++ b/server/services/src/main/java/com/doumee/config/cache/RedisConfig.java
@@ -1,9 +1,14 @@
package com.doumee.config.cache;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.io.Serializable;
@@ -17,16 +22,25 @@
public class RedisConfig {
@Bean
- public RedisTemplate<Serializable, Serializable> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
- RedisTemplate<Serializable, Serializable> redisTemplate = new RedisTemplate<>();
- redisTemplate.setConnectionFactory(redisConnectionFactory);
- // 榛樿搴忓垪鍖栨柟寮�
- redisTemplate.setDefaultSerializer(new StringRedisSerializer());
- // 鍊煎簭鍒楀寲鏂瑰紡
- RedisValueDefaultSerializer<Object> serializer = new RedisValueDefaultSerializer<>(Object.class);
- redisTemplate.setValueSerializer(serializer);
- redisTemplate.setHashValueSerializer(serializer);
- redisTemplate.afterPropertiesSet();
- return redisTemplate;
+ @SuppressWarnings("all")
+ public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
+ RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
+ template.setConnectionFactory(factory);
+ Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
+ ObjectMapper om = new ObjectMapper();
+ om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+ om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
+ jackson2JsonRedisSerializer.setObjectMapper(om);
+ StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
+ // key閲囩敤String鐨勫簭鍒楀寲鏂瑰紡
+ template.setKeySerializer(stringRedisSerializer);
+ // hash鐨刱ey涔熼噰鐢⊿tring鐨勫簭鍒楀寲鏂瑰紡
+ template.setHashKeySerializer(stringRedisSerializer);
+ // value搴忓垪鍖栨柟寮忛噰鐢╦ackson
+ template.setValueSerializer(jackson2JsonRedisSerializer);
+ // hash鐨剉alue搴忓垪鍖栨柟寮忛噰鐢╦ackson
+ template.setHashValueSerializer(jackson2JsonRedisSerializer);
+ template.afterPropertiesSet();
+ return template;
}
}
diff --git a/server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java b/server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
index 8e361d5..54bdf66 100644
--- a/server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
+++ b/server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
@@ -18,10 +18,7 @@
import javax.annotation.Resource;
import java.io.IOException;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
import java.util.concurrent.TimeUnit;
@Component
@@ -40,6 +37,8 @@
@Resource
private JwtProperties jwtProperties;
+ //redis杩囨湡鏃堕棿
+ private static final Integer redisExpire = 365;
/**
* 鐢熸垚token浠ょ墝
*
@@ -67,6 +66,31 @@
}
+
+ /**
+ * 鐢熸垚token淇℃伅锛堝悓涓�鐢ㄦ埛浠呬繚鐣欎竴涓湁鏁坱oken锛�
+ * @param userId
+ * @param userType 鐢ㄦ埛绫诲瀷 0=浼氬憳锛�1=鍙告満锛�2=搴楅摵
+ * @param userInfo
+ * @param redisTemplate
+ * @return
+ */
+ public static String generateTokenForRedis(Integer userId, Integer userType, String userInfo, RedisTemplate<String,Object> redisTemplate) {
+ // 鍒犻櫎璇ョ敤鎴蜂箣鍓嶇櫥褰曠殑token
+ String userTokenMappingKey = Constants.REDIS_TOKEN_KEY + "user_" + userType + "_" + userId;
+ String oldToken = (String) redisTemplate.opsForValue().get(userTokenMappingKey);
+ if (StringUtils.isNotBlank(oldToken)) {
+ redisTemplate.delete(Constants.REDIS_TOKEN_KEY + oldToken);
+ }
+ // 鐢熸垚鏂皌oken
+ String tokenKey = userType +""+ UUID.randomUUID() + "_" + userId;
+ redisTemplate.opsForValue().set(Constants.REDIS_TOKEN_KEY + tokenKey, userInfo, redisExpire, TimeUnit.DAYS);
+ // 璁板綍鐢ㄦ埛涓巘oken鐨勬槧灏勫叧绯�
+ redisTemplate.opsForValue().set(userTokenMappingKey, tokenKey, redisExpire, TimeUnit.DAYS);
+ return tokenKey;
+ }
+
+
/**
* 鍒锋柊浠ょ墝
*
diff --git a/server/services/src/main/java/com/doumee/core/utils/FileDigest.java b/server/services/src/main/java/com/doumee/core/utils/FileDigest.java
new file mode 100644
index 0000000..de599da
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/core/utils/FileDigest.java
@@ -0,0 +1,69 @@
+package com.doumee.core.utils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.math.BigInteger;
+import java.security.MessageDigest;
+import java.util.HashMap;
+import java.util.Map;
+
+public class FileDigest {
+ /**
+ * 璁$畻鏂囦欢鐨凪D5鍊�
+ *
+ * @param file
+ * @return
+ */
+ public static String getFileMD5(File file) {
+ if (!file.isFile()) {
+ return null;
+ }
+ MessageDigest digest = null;
+ FileInputStream in = null;
+ byte buffer[] = new byte[1024];
+ int len;
+ try {
+ digest = MessageDigest.getInstance("MD5");
+ in = new FileInputStream(file);
+ while ((len = in.read(buffer, 0, 1024)) != -1) {
+ digest.update(buffer, 0, len);
+ }
+ in.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ BigInteger bigInt = new BigInteger(1, digest.digest());
+ return bigInt.toString(16);
+ }
+
+ /**
+ * 璁$畻鏂囦欢澶圭殑MD5鍊�
+ *
+ * @param file
+ * @param listChild
+ * @return
+ */
+ public static Map<String, String> getDirMD5(File file, boolean listChild) {
+ if (!file.isDirectory()) {
+ return null;
+ }
+ // <filepath,md5>
+ Map<String, String> map = new HashMap<String, String>();
+ String md5;
+ File files[] = file.listFiles();
+ for (int i = 0; i < files.length; i++) {
+ File f = files[i];
+ if (f.isDirectory() && listChild) {
+ map.putAll(getDirMD5(f, listChild));
+ } else {
+ md5 = getFileMD5(f);
+ if (md5 != null) {
+ map.put(f.getPath(), md5);
+ }
+ }
+ }
+ return map;
+ }
+
+}
diff --git a/server/services/src/main/java/com/doumee/core/utils/PinYinUtil.java b/server/services/src/main/java/com/doumee/core/utils/PinYinUtil.java
new file mode 100644
index 0000000..2e460a6
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/core/utils/PinYinUtil.java
@@ -0,0 +1,137 @@
+package com.doumee.core.utils;
+
+import net.sourceforge.pinyin4j.PinyinHelper;
+import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
+import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
+import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
+import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
+import org.apache.commons.lang3.StringUtils;
+
+import java.text.Collator;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * 姹夎鎷奸煶甯姪绫�
+ *
+ * @author yanglong
+ *
+ */
+public class PinYinUtil {
+
+ /**
+ * 姣旇緝涓や釜姹夊瓧鐨勯瀛楁瘝 <br>
+ *
+ * @param ch1
+ * @param ch2
+ * @return
+ */
+ public static int comparatorWord(String ch1, String ch2) {
+ return getFirstSpell(ch2).compareTo(getFirstSpell(ch1));
+ }
+
+ public static void main(String[] args) {
+ Comparator<Object> com=Collator.getInstance(java.util.Locale.CHINA);
+ String[] newArray={"涓北","姹曞ご","骞垮窞","瀹夊簡","闃虫睙","鍗椾含","姝︽眽","鍖椾含","瀹夐槼","鍖楁柟"};
+ List<String> list = Arrays.asList(newArray);
+ Collections.sort(list, com);
+ for(String i:list){
+ System.out.print(i+" ");
+ }
+ //System.err.println(getFirstFirstSpell("寰堝悎閫傜殑绉垎寰堝皯鐪嬭"));
+ }
+ /**
+ * 鑾峰彇姹夊瓧涓叉嫾闊抽瀛楁瘝锛岃嫳鏂囧瓧绗︿笉鍙�
+ *
+ * @param chinese
+ * 姹夊瓧涓�
+ * @return 姹夎鎷奸煶棣栧瓧姣�
+ */
+ public static String getFirstSpell(String chinese) {
+ StringBuffer pybf = new StringBuffer();
+ char[] arr = chinese.toCharArray();
+ HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
+ defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
+ defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
+ for (int i = 0; i < arr.length; i++) {
+ if (arr[i] > 128) {
+ try {
+ String[] temp = PinyinHelper.toHanyuPinyinStringArray(
+ arr[i], defaultFormat);
+ if (temp != null) {
+ pybf.append(temp[0].charAt(0));
+ }
+ } catch (BadHanyuPinyinOutputFormatCombination e) {
+ e.printStackTrace();
+ }
+ } else {
+ pybf.append(arr[i]);
+ }
+ }
+ return pybf.toString().replaceAll("\\W", "").trim();
+ }
+ /**
+ * 鑾峰彇姹夊瓧涓叉嫾闊抽瀛楁瘝锛岃嫳鏂囧瓧绗︿笉鍙�
+ *
+ * @param chinese
+ * 姹夊瓧涓�
+ * @return 姹夎鎷奸煶棣栧瓧姣�
+ */
+ public static String getFirstFirstSpell(String chinese) {
+ if(StringUtils.isBlank(chinese)){
+ return null;
+ }
+ StringBuffer pybf = new StringBuffer();
+ chinese = chinese.substring(0,1);
+ char[] arr = chinese.toCharArray();
+ HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
+ defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
+ defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
+ for (int i = 0; i < arr.length; i++) {
+ if (arr[i] > 128) {
+ try {
+ String[] temp = PinyinHelper.toHanyuPinyinStringArray(
+ arr[i], defaultFormat);
+ if (temp != null) {
+ pybf.append(temp[0].charAt(0));
+ }
+ } catch (BadHanyuPinyinOutputFormatCombination e) {
+ e.printStackTrace();
+ }
+ } else {
+ pybf.append(arr[i]);
+ }
+ }
+ return pybf.toString().replaceAll("\\W", "").trim().toUpperCase();
+ }
+
+ /**
+ * 鑾峰彇姹夊瓧涓叉嫾闊筹紝鑻辨枃瀛楃涓嶅彉
+ *
+ * @param chinese
+ * 姹夊瓧涓�
+ * @return 姹夎鎷奸煶
+ */
+ public static String getFullSpell(String chinese) {
+ StringBuffer pybf = new StringBuffer();
+ char[] arr = chinese.toCharArray();
+ HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
+ defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
+ defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
+ for (int i = 0; i < arr.length; i++) {
+ if (arr[i] > 128) {
+ try {
+ pybf.append(PinyinHelper.toHanyuPinyinStringArray(arr[i],
+ defaultFormat)[0]);
+ } catch (BadHanyuPinyinOutputFormatCombination e) {
+ e.printStackTrace();
+ }
+ } else {
+ pybf.append(arr[i]);
+ }
+ }
+ return pybf.toString();
+ }
+}
diff --git a/server/services/src/main/java/com/doumee/core/utils/aliyun/ALiYunUtil.java b/server/services/src/main/java/com/doumee/core/utils/aliyun/ALiYunUtil.java
new file mode 100644
index 0000000..4d3ebef
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/core/utils/aliyun/ALiYunUtil.java
@@ -0,0 +1,553 @@
+package com.doumee.core.utils.aliyun;
+
+import com.aliyun.oss.ClientException;
+import com.aliyun.oss.OSSClient;
+import com.aliyun.oss.OSSException;
+import com.aliyun.oss.model.*;
+import com.doumee.core.utils.FileDigest;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.*;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class ALiYunUtil {
+ private OSSClient client;
+
+ // public static final String ENDPOINT = "oss-cn-shanghai.aliyuncs.com";
+
+ public ALiYunUtil(String endpoint, String ACCESS_ID, String ACCESS_KEY) {
+ client = new OSSClient(endpoint, ACCESS_ID, ACCESS_KEY);
+ }
+
+ /**
+ * 涓婁紶鏂囦欢
+ *
+ * @param bucketName 浜戠瀛樻斁bucket鍚嶇О
+ * @param key 閲嶆柊鍛藉悕鐨勬枃浠跺悕
+ * @param filename 灏嗚涓婁紶鐨勬枃浠跺悕绉�
+ * @param mime 瓒呮枃鏈爣璁拌瑷�鏂囨湰 .html,.html text/html 鏅�氭枃鏈� .txt text/plain RTF鏂囨湰
+ * .rtf application/rtf GIF鍥惧舰 .gif image/gif JPEG鍥惧舰 .ipeg,.jpg
+ * image/jpeg au澹伴煶鏂囦欢 .au audio/basic MIDI闊充箰鏂囦欢 mid,.midi
+ * audio/midi,audio/x-midi RealAudio闊充箰鏂囦欢 .ra, .ram
+ * audio/x-pn-realaudio MPEG鏂囦欢 .mpg,.mpeg video/mpeg AVI鏂囦欢 .avi
+ * video/x-msvideo GZIP鏂囦欢 .gz application/x-gzip TAR鏂囦欢 .tar
+ * application/x-tar
+ * @throws OSSException
+ * @throws ClientException
+ * @throws FileNotFoundException
+ */
+
+ public void uploadObject(String bucketName, String key, String filename,
+ String mime) throws OSSException, ClientException,
+ FileNotFoundException {
+ File file = new File(filename);
+ // 鍒ゆ柇鏄惁瀛樺湪锛屼笉瀛樺湪鍒涘缓
+ isExistBucket(bucketName);
+
+ ObjectMetadata objectMeta = new ObjectMetadata();
+ objectMeta.setContentLength(file.length());
+ // 鍙互鍦╩etadata涓爣璁版枃浠剁被鍨�
+ if (StringUtils.isNotBlank(mime)) {
+ objectMeta.setContentType(mime);
+ }
+
+ InputStream input = new FileInputStream(file);
+ client.putObject(bucketName, key, input, objectMeta);
+
+ }
+
+
+ /**
+ * 鍏抽棴
+ *
+ * @throws OSSException
+ * @throws ClientException
+ * @throws FileNotFoundException
+ */
+
+ public void shutDown()
+ throws OSSException, ClientException, FileNotFoundException {
+ if (client != null) {
+ // 鍏抽棴client
+ client.shutdown();
+ }
+ }
+
+ /**
+ * 鎵归噺鍒犻櫎鏂囦欢
+ *
+ * @param bucketName
+ * @param keys
+ * @throws OSSException
+ * @throws ClientException
+ * @throws FileNotFoundException
+ */
+
+ public void deleteObjects(String bucketName, List<String> keys)
+ throws OSSException, ClientException, FileNotFoundException {
+ if (keys == null || keys.size() > 0) {
+ return;
+ }
+ DeleteObjectsResult deleteObjectsResult = client
+ .deleteObjects(new DeleteObjectsRequest(bucketName)
+ .withKeys(keys));
+ List<String> deletedObjects = deleteObjectsResult.getDeletedObjects();
+ // 鍏抽棴client
+ client.shutdown();
+ }
+
+ /**
+ * 涓婁紶鏂囦欢
+ *
+ * @param bucketName 浜戠瀛樻斁bucket鍚嶇О
+ * 灏嗚涓婁紶鐨勬枃浠跺悕绉�
+ * @param mime 瓒呮枃鏈爣璁拌瑷�鏂囨湰 .html,.html text/html 鏅�氭枃鏈� .txt text/plain RTF鏂囨湰
+ * .rtf application/rtf GIF鍥惧舰 .gif image/gif JPEG鍥惧舰 .ipeg,.jpg
+ * image/jpeg au澹伴煶鏂囦欢 .au audio/basic MIDI闊充箰鏂囦欢 mid,.midi
+ * audio/midi,audio/x-midi RealAudio闊充箰鏂囦欢 .ra, .ram
+ * audio/x-pn-realaudio MPEG鏂囦欢 .mpg,.mpeg video/mpeg AVI鏂囦欢 .avi
+ * video/x-msvideo GZIP鏂囦欢 .gz application/x-gzip TAR鏂囦欢 .tar
+ * application/x-tar
+ * @throws OSSException
+ * @throws ClientException
+ * @throws FileNotFoundException
+ */
+
+ public void uploadFiles(String bucketName, Map<String, File> ossFiles,
+ String mime) throws OSSException, ClientException,
+ FileNotFoundException {
+ // 鍒ゆ柇鏄惁瀛樺湪锛屼笉瀛樺湪鍒涘缓
+ isExistBucket(bucketName);
+
+ // 鍙互鍦╩etadata涓爣璁版枃浠剁被鍨�
+ if (ossFiles != null && ossFiles.size() > 0) {
+ for (Map.Entry<String, File> entry : ossFiles.entrySet()) {
+ ObjectMetadata objectMeta = new ObjectMetadata();
+ objectMeta.setContentLength(entry.getValue().length());
+ if (StringUtils.isNotBlank(mime)) {
+ objectMeta.setContentType(mime);
+ }
+ InputStream input = new FileInputStream(entry.getValue());
+ client.putObject(bucketName, entry.getKey(), input, objectMeta);
+ // 涓婁紶鍥剧墖
+ }
+ }
+
+ client.shutdown();
+ }
+
+ /**
+ * 涓婁紶鏂囦欢
+ *
+ * @param bucketName 浜戠瀛樻斁bucket鍚嶇О
+ * @param key 灏嗚涓婁紶鐨勬枃浠跺悕绉�
+ * @param mime 瓒呮枃鏈爣璁拌瑷�鏂囨湰 .html,.html text/html 鏅�氭枃鏈� .txt text/plain RTF鏂囨湰
+ * .rtf application/rtf GIF鍥惧舰 .gif image/gif JPEG鍥惧舰 .ipeg,.jpg
+ * image/jpeg au澹伴煶鏂囦欢 .au audio/basic MIDI闊充箰鏂囦欢 mid,.midi
+ * audio/midi,audio/x-midi RealAudio闊充箰鏂囦欢 .ra, .ram
+ * audio/x-pn-realaudio MPEG鏂囦欢 .mpg,.mpeg video/mpeg AVI鏂囦欢 .avi
+ * video/x-msvideo GZIP鏂囦欢 .gz application/x-gzip TAR鏂囦欢 .tar
+ * application/x-tar
+ * @throws OSSException
+ * @throws ClientException
+ * @throws FileNotFoundException
+ */
+
+ public void uploadFile(String bucketName, String key, File file, String mime)
+ throws OSSException, ClientException, FileNotFoundException {
+ // 鍒ゆ柇鏄惁瀛樺湪锛屼笉瀛樺湪鍒涘缓
+ isExistBucket(bucketName);
+
+ ObjectMetadata objectMeta = new ObjectMetadata();
+ objectMeta.setContentLength(file.length());
+ // 鍙互鍦╩etadata涓爣璁版枃浠剁被鍨�
+ if (StringUtils.isNotBlank(mime)) {
+ objectMeta.setContentType(mime);
+ }
+
+ InputStream input = new FileInputStream(file);
+ client.putObject(bucketName, key, input, objectMeta);
+
+ }
+
+ /**
+ * 涓婁紶鏂囦欢
+ *
+ * @param bucketName 浜戠瀛樻斁bucket鍚嶇О
+ * @param key 灏嗚涓婁紶鐨勬枃浠跺悕绉�
+ * @param mime 瓒呮枃鏈爣璁拌瑷�鏂囨湰 .html,.html text/html 鏅�氭枃鏈� .txt text/plain RTF鏂囨湰
+ * .rtf application/rtf GIF鍥惧舰 .gif image/gif JPEG鍥惧舰 .ipeg,.jpg
+ * image/jpeg au澹伴煶鏂囦欢 .au audio/basic MIDI闊充箰鏂囦欢 mid,.midi
+ * audio/midi,audio/x-midi RealAudio闊充箰鏂囦欢 .ra, .ram
+ * audio/x-pn-realaudio MPEG鏂囦欢 .mpg,.mpeg video/mpeg AVI鏂囦欢 .avi
+ * video/x-msvideo GZIP鏂囦欢 .gz application/x-gzip TAR鏂囦欢 .tar
+ * application/x-tar
+ * @throws OSSException
+ * @throws ClientException
+ * @throws IOException
+ */
+
+ public boolean uploadObject(MultipartFile file, String bucketName,
+ String key, String mime) throws OSSException, ClientException,
+ IOException {
+ if (file != null) {
+ // 鍒ゆ柇鏄惁瀛樺湪锛屼笉瀛樺湪鍒涘缓
+ isExistBucket(bucketName);
+
+ ObjectMetadata objectMeta = new ObjectMetadata();
+ objectMeta.setContentLength(file.getSize());
+ // 鍙互鍦╩etadata涓爣璁版枃浠剁被鍨�
+ if (StringUtils.isNotBlank(mime)) {
+ objectMeta.setContentType(mime);
+ }
+ PutObjectRequest putObjectRequest = new PutObjectRequest(
+ bucketName, key, file.getInputStream());
+ // 涓婁紶鍥炶皟鍙傛暟
+ /*
+ * Callback callback = new Callback();
+ * callback.setCallbackUrl("http://www.doumee.com");
+ * callback.setCallbackHost("oss-cn-hangzhou.aliyuncs.com");
+ * callback.setCallbackBody(
+ * "{\\\"mimeType\\\":${mimeType},\\\"size\\\":${size}}"); //
+ * callback.setCallbackBodyType(CallbackBodyType.JSON);
+ * callback.addCallbackVar("x:var1", "value1");
+ * callback.addCallbackVar("x:var2", "value2");
+ * putObjectRequest.setCallback(callback);
+ */
+ try {
+ PutObjectResult putObjectResult = client
+ .putObject(putObjectRequest);
+ return true;
+ } catch (Exception e) {
+ // TODO: handle exception
+ System.err.println(e.getMessage());
+ }
+ /*
+ * // 璇诲彇涓婁紶鍥炶皟杩斿洖鐨勬秷鎭唴瀹� byte[] buffer = new byte[1024];
+ * putObjectResult.getCallbackResponseBody().read(buffer);
+ *
+ * // 涓�瀹氳close锛屽惁鍒欎細閫犳垚杩炴帴璧勬簮娉勬紡
+ * putObjectResult.getCallbackResponseBody().close();
+ */
+
+ file.getInputStream().close();
+ client.shutdown();
+
+ }
+
+ return false;
+
+ }
+
+ /**
+ * 鍒嗗潡涓婁紶鏂囦欢
+ *
+ * @param bucketName
+ * @param key
+ * @param filename
+ * @param mime
+ * @throws IOException
+ */
+ public String partUploadObject(String bucketName, String key,
+ String filename, String mime) throws IOException {
+ // 寮�濮婱ultipart Upload
+ InitiateMultipartUploadRequest initiateMultipartUploadRequest = new InitiateMultipartUploadRequest(
+ bucketName, key);
+ InitiateMultipartUploadResult initiateMultipartUploadResult = client
+ .initiateMultipartUpload(initiateMultipartUploadRequest);
+
+ // 璁剧疆姣忓潡涓� 5M
+ final int partSize = 1024 * 1024 * 5;
+
+ File partFile = new File(filename);
+
+ // 璁$畻鍒嗗潡鏁扮洰
+ int partCount = (int) (partFile.length() / partSize);
+ if (partFile.length() % partSize != 0) {
+ partCount++;
+ }
+
+ // 鏂板缓涓�涓狶ist淇濆瓨姣忎釜鍒嗗潡涓婁紶鍚庣殑ETag鍜孭artNumber
+ List<PartETag> partETags = new ArrayList<PartETag>();
+
+ for (int i = 0; i < partCount; i++) {
+ // 鑾峰彇鏂囦欢娴�
+ FileInputStream fis = new FileInputStream(partFile);
+
+ // 璺冲埌姣忎釜鍒嗗潡鐨勫紑澶�
+ long skipBytes = partSize * i;
+ fis.skip(skipBytes);
+
+ // 璁$畻姣忎釜鍒嗗潡鐨勫ぇ灏�
+ long size = partSize < partFile.length() - skipBytes ? partSize
+ : partFile.length() - skipBytes;
+
+ // 鍒涘缓UploadPartRequest锛屼笂浼犲垎鍧�
+ UploadPartRequest uploadPartRequest = new UploadPartRequest();
+ uploadPartRequest.setBucketName(bucketName);
+ uploadPartRequest.setKey(key);
+ uploadPartRequest.setUploadId(initiateMultipartUploadResult
+ .getUploadId());
+ uploadPartRequest.setInputStream(fis);
+ uploadPartRequest.setPartSize(size);
+ uploadPartRequest.setPartNumber(i + 1);
+ UploadPartResult uploadPartResult = client
+ .uploadPart(uploadPartRequest);
+
+ // 灏嗚繑鍥炵殑PartETag淇濆瓨鍒癓ist涓��
+ partETags.add(uploadPartResult.getPartETag());
+
+ // 鍏抽棴鏂囦欢
+ fis.close();
+ }
+
+ CompleteMultipartUploadRequest completeMultipartUploadRequest = new CompleteMultipartUploadRequest(
+ bucketName, key, initiateMultipartUploadResult.getUploadId(),
+ partETags);
+
+ // 瀹屾垚鍒嗗潡涓婁紶
+ CompleteMultipartUploadResult completeMultipartUploadResult = client
+ .completeMultipartUpload(completeMultipartUploadRequest);
+
+ // 鏍¢獙MD5
+ if (StringUtils.equals(FileDigest.getFileMD5(new File(filename)),
+ completeMultipartUploadResult.getETag())) {
+ // 濡傛灉涓�鑷�
+ return "涓婁紶鎴愬姛";
+ }
+ return "涓婁紶澶辫触";
+
+ }
+
+ /**
+ * 鍒ゆ柇鏄惁瀛樺湪bucket锛屽鏋滀笉瀛樺湪鍒涘缓
+ */
+ @SuppressWarnings("deprecation")
+ public void isExistBucket(String bucketName) {
+ // 鑾峰彇Bucket鐨勫瓨鍦ㄤ俊鎭�
+ boolean exists = client.doesBucketExist(bucketName);
+ // 杈撳嚭缁撴灉
+ if (!exists) {
+ // 涓嶅瓨鍦ㄥ垱寤哄畠
+ client.createBucket(bucketName);
+ // 淇敼鏉冮檺
+ client.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
+ }
+
+ // 鍒椾妇bucket
+ // List<Bucket> buckets = client.listBuckets();
+ // for (Bucket bucket : buckets) {
+ // System.out.println(" - " + bucket.getName());
+ // }
+ }
+
+ /**
+ * 鍒犻櫎bucket
+ *
+ * @param bucketName
+ * @return
+ */
+ @SuppressWarnings("deprecation")
+ public boolean deleteBucket(String bucketName) {
+ // 鍒ゆ柇鏈夋病鏈�
+ if (client.doesBucketExist(bucketName)) {
+ // 鍒ゆ柇bucket鏄惁涓虹┖
+ ObjectListing listObjects = client.listObjects(bucketName);
+ // 閬嶅巻鎵�鏈塐bject
+ for (OSSObjectSummary objectSummary : listObjects
+ .getObjectSummaries()) {
+ // 鍒犻櫎object
+ client.deleteObject(bucketName, objectSummary.getKey());
+ }
+ // 鍒犻櫎Bucket
+ client.deleteBucket(bucketName);
+ }
+ return true;
+ }
+
+ /**
+ * 閫掑綊鍒楀嚭鐩綍涓嬫墍鏈夋枃浠�
+ *
+ * @param bucketName
+ * @return
+ */
+ public long getAllBuckets(String bucketName, String prefix) {
+ long totalSize = 0;
+ // 鏋勯�燣istObjectsRequest璇锋眰
+
+ ListObjectsRequest listObjectsRequest = new ListObjectsRequest(
+ bucketName);
+ listObjectsRequest.setPrefix(prefix);
+ listObjectsRequest.withMaxKeys(1000);
+ // 閫掑綊鍒楀嚭fun鐩綍涓嬬殑鎵�鏈夋枃浠�
+ ObjectListing listing = null;
+ String nextMarker = null;
+ do {
+ listObjectsRequest.withMarker(nextMarker);
+ listing = client.listObjects(listObjectsRequest);
+
+ for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
+ totalSize += objectSummary.getSize();
+ System.out.println(objectSummary.getKey() + ":"
+ + objectSummary.getSize());
+ }
+ nextMarker = listing.getNextMarker();
+ } while (listing.isTruncated());
+ // 閬嶅巻鎵�鏈塐bject
+ System.out.println("Objects:");
+
+ return totalSize;
+ }
+
+ /**
+ * 涓嬭浇鏂囦欢
+ *
+ * @param bucketName 浜戠瀛樻斁bucket鍚嶇О
+ * @param key 浜戠宸插瓨鍦ㄦ枃浠�
+ * @param filename 鏈湴寰呭啓鍏ユ枃浠�
+ * @throws OSSException
+ * @throws ClientException
+ * @throws IOException
+ */
+ public String downloadFile(String bucketName, String key, String filename)
+ throws OSSException, ClientException, IOException {
+
+ // 棣栧厛妫�鏌ユ槸鍚﹀瓨鍦ㄧ洰褰�
+ if (StringUtils.isBlank(filename)) {
+ // 寰呭啓鍏ユ枃浠朵负绌�
+ return "ERROR_FILENAME_IS_NULL";
+ }
+
+ File file = new File(filename);
+ if (!file.exists()) {
+ file.createNewFile();
+ }
+
+ client.getObject(new GetObjectRequest(bucketName, key), file);
+ return filename;
+ }
+
+ public static void main(String[] args) throws OSSException,
+ ClientException, IOException {
+ ALiYunUtil aLiYunUtil = new ALiYunUtil("", "uc4nnpsqep1i9fijqr37nokh",
+ "/rp41xCx/XdGEVCptdH6v7xpc9w=");
+ // aLiYunUtil.uploadObject("pongto", "work/li2.txt", "D://鍝�.txt",
+ // ".html,.html text/html");D://瑁呮満杞欢/鍔炲叕瀛︿範
+ // aLiYunUtil.partUploadObject("pongto", "work/ps.exe",
+ // "D://瑁呮満杞欢/鍔炲叕瀛︿範/Adobe_Illustrator_CS6_XiaZaiBa.exe",
+ // ".html,.html text/html");
+ // aLiYunUtil.deleteBucket("pongto");
+ }
+
+ /**
+ * 涓婁紶缃戠粶鏂囦欢
+ *
+ * @param bucketName 浜戠瀛樻斁bucket鍚嶇О
+ * @param key 閲嶆柊鍛藉悕鐨勬枃浠跺悕
+ * 灏嗚涓婁紶鐨勬枃浠跺悕绉�
+ * @param mime 瓒呮枃鏈爣璁拌瑷�鏂囨湰 .html,.html text/html 鏅�氭枃鏈� .txt text/plain RTF鏂囨湰
+ * .rtf application/rtf GIF鍥惧舰 .gif image/gif JPEG鍥惧舰 .ipeg,.jpg
+ * image/jpeg au澹伴煶鏂囦欢 .au audio/basic MIDI闊充箰鏂囦欢 mid,.midi
+ * audio/midi,audio/x-midi RealAudio闊充箰鏂囦欢 .ra, .ram
+ * audio/x-pn-realaudio MPEG鏂囦欢 .mpg,.mpeg video/mpeg AVI鏂囦欢 .avi
+ * video/x-msvideo GZIP鏂囦欢 .gz application/x-gzip TAR鏂囦欢 .tar
+ * application/x-tar
+ * @throws OSSException
+ * @throws ClientException
+ * @throws IOException
+ */
+
+ public boolean uploadOnlineObject(String url, String bucketName, String key,
+ String mime) throws OSSException, ClientException, IOException {
+ InputStream inputStream = new URL(url).openStream();
+ if (inputStream != null) {
+ // 鍒ゆ柇鏄惁瀛樺湪锛屼笉瀛樺湪鍒涘缓
+ isExistBucket(bucketName);
+
+ ObjectMetadata objectMeta = new ObjectMetadata();
+ objectMeta.setContentLength(inputStream.available());
+ // 鍙互鍦╩etadata涓爣璁版枃浠剁被鍨�
+ if (StringUtils.isNotBlank(mime)) {
+ objectMeta.setContentType(mime);
+ }
+ PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key,
+ inputStream);
+ // 涓婁紶鍥炶皟鍙傛暟
+ /* Callback callback = new Callback();
+ callback.setCallbackUrl("http://www.doumee.com");
+ callback.setCallbackHost("oss-cn-hangzhou.aliyuncs.com");
+ callback.setCallbackBody("{\\\"mimeType\\\":${mimeType},\\\"size\\\":${size}}");
+// callback.setCallbackBodyType(CallbackBodyType.JSON);
+ callback.addCallbackVar("x:var1", "value1");
+ callback.addCallbackVar("x:var2", "value2");
+ putObjectRequest.setCallback(callback);*/
+ try {
+ PutObjectResult putObjectResult = client.putObject(putObjectRequest);
+ return true;
+ } catch (Exception e) {
+ // TODO: handle exception
+ }
+ /*// 璇诲彇涓婁紶鍥炶皟杩斿洖鐨勬秷鎭唴瀹�
+ byte[] buffer = new byte[1024];
+ putObjectResult.getCallbackResponseBody().read(buffer);
+
+ // 涓�瀹氳close锛屽惁鍒欎細閫犳垚杩炴帴璧勬簮娉勬紡
+ putObjectResult.getCallbackResponseBody().close();*/
+
+ inputStream.close();
+ client.shutdown();
+
+ }
+
+ return false;
+
+ }
+
+ public boolean uploadOnlineObject(InputStream inputStream, String bucketName, String key,
+ String mime) throws OSSException, ClientException, IOException {
+ if (inputStream != null) {
+ // 鍒ゆ柇鏄惁瀛樺湪锛屼笉瀛樺湪鍒涘缓
+ isExistBucket(bucketName);
+
+ ObjectMetadata objectMeta = new ObjectMetadata();
+ objectMeta.setContentLength(inputStream.available());
+ // 鍙互鍦╩etadata涓爣璁版枃浠剁被鍨�
+ if (StringUtils.isNotBlank(mime)) {
+ objectMeta.setContentType(mime);
+ }
+ PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key,
+ inputStream);
+ // 涓婁紶鍥炶皟鍙傛暟
+ /* Callback callback = new Callback();
+ callback.setCallbackUrl("http://www.doumee.com");
+ callback.setCallbackHost("oss-cn-hangzhou.aliyuncs.com");
+ callback.setCallbackBody("{\\\"mimeType\\\":${mimeType},\\\"size\\\":${size}}");
+// callback.setCallbackBodyType(CallbackBodyType.JSON);
+ callback.addCallbackVar("x:var1", "value1");
+ callback.addCallbackVar("x:var2", "value2");
+ putObjectRequest.setCallback(callback);*/
+ try {
+ PutObjectResult putObjectResult = client.putObject(putObjectRequest);
+ return true;
+ } catch (Exception e) {
+ // TODO: handle exception
+ }
+ /*// 璇诲彇涓婁紶鍥炶皟杩斿洖鐨勬秷鎭唴瀹�
+ byte[] buffer = new byte[1024];
+ putObjectResult.getCallbackResponseBody().read(buffer);
+
+ // 涓�瀹氳close锛屽惁鍒欎細閫犳垚杩炴帴璧勬簮娉勬紡
+ putObjectResult.getCallbackResponseBody().close();*/
+
+ inputStream.close();
+ client.shutdown();
+
+ }
+ return false;
+ }
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/AreasMapper.java b/server/services/src/main/java/com/doumee/dao/business/AreasMapper.java
new file mode 100644
index 0000000..d1b7e4a
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/AreasMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.doumee.dao.business.model.Areas;
+import com.github.yulichang.base.MPJBaseMapper;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/02/15 08:55
+ */
+public interface AreasMapper extends MPJBaseMapper<Areas> {
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/BannerMapper.java b/server/services/src/main/java/com/doumee/dao/business/BannerMapper.java
new file mode 100644
index 0000000..9205736
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/BannerMapper.java
@@ -0,0 +1,13 @@
+package com.doumee.dao.business;
+
+import com.doumee.dao.business.model.Banner;
+import com.github.yulichang.base.MPJBaseMapper;
+
+/**
+ * 杞挱鍥綧apper
+ * @author rk
+ * @date 2026/04/08
+ */
+public interface BannerMapper extends MPJBaseMapper<Banner> {
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/DriverInfoMapper.java b/server/services/src/main/java/com/doumee/dao/business/DriverInfoMapper.java
new file mode 100644
index 0000000..b35f4db
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/DriverInfoMapper.java
@@ -0,0 +1,13 @@
+package com.doumee.dao.business;
+
+import com.doumee.dao.business.model.DriverInfo;
+import com.github.yulichang.base.MPJBaseMapper;
+
+/**
+ * 鍙告満娉ㄥ唽淇℃伅Mapper
+ * @author rk
+ * @date 2026/04/08
+ */
+public interface DriverInfoMapper extends MPJBaseMapper<DriverInfo> {
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/PricingRuleMapper.java b/server/services/src/main/java/com/doumee/dao/business/PricingRuleMapper.java
new file mode 100644
index 0000000..0337d98
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/PricingRuleMapper.java
@@ -0,0 +1,13 @@
+package com.doumee.dao.business;
+
+import com.doumee.dao.business.model.PricingRule;
+import com.github.yulichang.base.MPJBaseMapper;
+
+/**
+ * 璁′环瑙勫垯閰嶇疆Mapper
+ * @author rk
+ * @date 2026/04/08
+ */
+public interface PricingRuleMapper extends MPJBaseMapper<PricingRule> {
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/ShopInfoMapper.java b/server/services/src/main/java/com/doumee/dao/business/ShopInfoMapper.java
new file mode 100644
index 0000000..cdcfd4f
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/ShopInfoMapper.java
@@ -0,0 +1,13 @@
+package com.doumee.dao.business;
+
+import com.doumee.dao.business.model.ShopInfo;
+import com.github.yulichang.base.MPJBaseMapper;
+
+/**
+ * 闂ㄥ簵淇℃伅Mapper
+ * @author rk
+ * @date 2026/04/08
+ */
+public interface ShopInfoMapper extends MPJBaseMapper<ShopInfo> {
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/SmsrecordMapper.java b/server/services/src/main/java/com/doumee/dao/business/SmsrecordMapper.java
new file mode 100644
index 0000000..ad064bc
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/SmsrecordMapper.java
@@ -0,0 +1,13 @@
+package com.doumee.dao.business;
+
+import com.doumee.dao.business.model.Smsrecord;
+import com.github.yulichang.base.MPJBaseMapper;
+
+/**
+ * 鐭俊楠岃瘉鐮丮apper
+ * @author rk
+ * @date 2026/04/08
+ */
+public interface SmsrecordMapper extends MPJBaseMapper<Smsrecord> {
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Areas.java b/server/services/src/main/java/com/doumee/dao/business/model/Areas.java
new file mode 100644
index 0000000..70916f6
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Areas.java
@@ -0,0 +1,134 @@
+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;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 鐪佸競鍖轰俊鎭〃
+ * @author 姹熻箘韫�
+ * @date 2023/02/15 08:55
+ */
+@Data
+@ApiModel("鐪佸競鍖轰俊鎭〃")
+@TableName("`areas`")
+public class Areas implements Cloneable,Comparable<Object>{
+
+ @ApiModelProperty(value = "涓婚敭", example = "1")
+ @ExcelColumn(name="涓婚敭")
+ @TableId(value = "id",type = IdType.AUTO)
+ private Integer id;
+
+
+ @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+ @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+ private Integer creator;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ @ExcelColumn(name="鍒涘缓鏃堕棿")
+ private Date createDate;
+
+ @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+ @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+ private Integer editor;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ @ExcelColumn(name="鏇存柊鏃堕棿")
+ private Date editDate;
+
+ @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
+ @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+ private Integer isdeleted;
+
+ @ApiModelProperty(value = "鍚嶇О")
+ @ExcelColumn(name="鍚嶇О")
+ private String name;
+
+ @ApiModelProperty(value = "澶囨敞")
+ @ExcelColumn(name="澶囨敞")
+ private String info;
+
+ @ApiModelProperty(value = "琛屾斂鍖轰唬鐮�")
+ @ExcelColumn(name="琛屾斂鍖轰唬鐮�")
+ private String code;
+
+ @ApiModelProperty(value = "鐖剁骇缂栫爜锛堝叧鑱攁reas琛級", example = "1")
+ @ExcelColumn(name="鐖剁骇缂栫爜锛堝叧鑱攁reas琛級")
+ private Integer parentId;
+
+ @ApiModelProperty(value = "绫诲瀷 0鐪� 1甯� 2鍖哄幙", example = "1")
+ @ExcelColumn(name="绫诲瀷 0鐪� 1甯� 2鍖哄幙")
+ private Integer type;
+
+ @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
+ @ExcelColumn(name="鎺掑簭鐮�")
+ private Integer sortnum;
+
+ @ApiModelProperty(value = "鏄惁寮�鍚娇鐢細0=鍚︼紱1=鏄紱", example = "1")
+ @ExcelColumn(name="鏄惁寮�鍚娇鐢細0=鍚︼紱1=鏄紱")
+ private Integer status;
+
+ @TableField(exist = false)
+ private List<Areas> childList;
+ @TableField(exist = false)
+ private Integer provinceId;
+ @TableField(exist = false)
+ private String provinceName;
+ @TableField(exist = false)
+ private Integer cityId;
+ @TableField(exist = false)
+ private String cityName;
+ @TableField(exist = false)
+ private String fullspell;//鍏ㄦ嫾闊�;
+ @TableField(exist = false)
+ private String firstSpell;//棣栧瓧姣�;
+ //瀹炵幇Cloneable鐨刢lone鏂规硶锛屽皢clone瀹氫箟涓簆ublic
+ public Areas clone() {
+ try {
+ return (Areas) super.clone();
+ } catch (CloneNotSupportedException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+ @Override
+ public String toString() {
+ return "Areas{" +
+ "id=" + id +
+ ", creator=" + creator +
+ ", createDate=" + createDate +
+ ", editor=" + editor +
+ ", editDate=" + editDate +
+ ", isdeleted=" + isdeleted +
+ ", name='" + name + '\'' +
+ ", info='" + info + '\'' +
+ ", code='" + code + '\'' +
+ ", parentId=" + parentId +
+ ", type=" + type +
+ '}';
+ }
+
+ @Override
+ public int compareTo(Object o) {
+ if (this == o) {
+ return 0;
+ } else if (o != null && o instanceof Areas) {
+ Areas u = (Areas) o;
+ if (fullspell.compareTo(u.fullspell) < 0) {
+ return -1;
+ } else {
+ return 1;
+ }
+ } else {
+ return -1;
+ }
+ }
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Banner.java b/server/services/src/main/java/com/doumee/dao/business/model/Banner.java
new file mode 100644
index 0000000..27e85d7
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Banner.java
@@ -0,0 +1,74 @@
+package com.doumee.dao.business.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 杞挱鍥�
+ * @author rk
+ * @date 2026/04/08
+ */
+@Data
+@ApiModel("杞挱鍥�")
+@TableName("`banner`")
+public class Banner {
+
+ @TableId(type = IdType.AUTO)
+ @ApiModelProperty(value = "涓婚敭", example = "1")
+ private Integer id;
+
+ @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�", example = "0")
+ private Integer deleted;
+
+ @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+ private Integer createUser;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ @ExcelColumn(name = "鍒涘缓鏃堕棿", index = 1, width = 16, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+ private Integer updateUser;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date updateTime;
+
+ @ApiModelProperty(value = "澶囨敞")
+ private String remark;
+
+ @ApiModelProperty(value = "娲诲姩涓婚敭")
+ private Integer title;
+
+ @ApiModelProperty(value = "鎺掑簭鍙�")
+ private Integer sortnum;
+
+ @ApiModelProperty(value = "鐘舵�� 0姝e父 1鍋滅敤", example = "0")
+ @ExcelColumn(name = "鐘舵��", index = 2, width = 10, valueMapping = "0=姝e父;1=鍋滅敤;")
+ private Integer status;
+
+ @ApiModelProperty(value = "鍒楄〃鍥�")
+ private String imgurl;
+
+ @ApiModelProperty(value = "璺宠浆绫诲瀷 0瀵屾枃鏈� 1澶栭摼", example = "0")
+ @ExcelColumn(name = "璺宠浆绫诲瀷", index = 3, width = 10, valueMapping = "0=瀵屾枃鏈�;1=澶栭摼;")
+ private Integer type;
+
+ @ApiModelProperty(value = "浣嶇疆 0棣栭〉 1搴楅摵棣栭〉", example = "0")
+ @ExcelColumn(name = "浣嶇疆", index = 4, width = 10, valueMapping = "0=棣栭〉;1=搴楅摵棣栭〉;")
+ private Integer position;
+
+ @ApiModelProperty(value = "搴楅摵涓婚敭")
+ private Integer shopId;
+
+ @ApiModelProperty(value = "鍐呭")
+ private String content;
+}
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 06048b0..ffbc6d3 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
@@ -63,30 +63,39 @@
@ExcelColumn(name="鍗曚綅鍚嶇О")
private String name;
- @ApiModelProperty(value = "绫诲瀷:0=鍝佺閰嶇疆锛�1=杞﹁締绫诲瀷閰嶇疆锛�2=椁愭爣閰嶇疆锛�3=鎵嬬画璐归厤缃紱", example = "1")
- @ExcelColumn(name="绫诲瀷:0=鍝佺閰嶇疆锛�1=杞﹁締绫诲瀷閰嶇疆锛�2=椁愭爣閰嶇疆锛�3=鎵嬬画璐归厤缃紱")
+ @ApiModelProperty(value = "绫诲瀷:1=杞﹁締绫诲瀷;2=鐗╁搧鍒嗙被;3=鐗╁搧绛夌骇;4=鐗╁搧灏哄;", example = "1")
+ @ExcelColumn(name="绫诲瀷:1=杞﹁締绫诲瀷;2=鐗╁搧鍒嗙被;3=鐗╁搧绛夌骇;4=鐗╁搧灏哄;")
private Integer type;
- @ApiModelProperty(value = "鍐呭锛堣溅杈嗚鏍笺�侀鏍囥�佹墜缁垂姣斾緥锛�")
- @ExcelColumn(name="鍐呭锛堣溅杈嗚鏍笺�侀鏍囥�佹墜缁垂姣斾緥锛�")
+ @ApiModelProperty(value = "鍐呭 锛坱ype=1锛氶�氳鏂瑰紡; type=2锛氬徃鏈鸿瘎绾э級;")
+ @ExcelColumn(name="鍐呭")
private String detail;
@ApiModelProperty(value = "鍥炬爣锛堣溅杈嗙被鍨嬩娇鐢級")
@ExcelColumn(name="鍥炬爣锛堣溅杈嗙被鍨嬩娇鐢級")
private String icon;
+
@ApiModelProperty(value = "鎺掑簭鐮侊紙鍗囧簭锛�")
@ExcelColumn(name="鎺掑簭鐮侊紙鍗囧簭锛�")
private Integer sortnum;
- @ApiModelProperty(value = "鏄惁鍥哄畾杞﹁締锛堣溅杈嗙被鍨嬩娇鐢級:0=鍚︼紱1=鏄紱", example = "1")
- @ExcelColumn(name="鏄惁鍥哄畾杞﹁締锛堣溅杈嗙被鍨嬩娇鐢級:0=鍚︼紱1=鏄紱")
- private Integer isFixed;
+ @ApiModelProperty(value = "闄勫睘瀛楁1 (type=1:鏄惁闇�瑕佷笂浼犻┚椹惰瘉锛�0=涓嶉渶瑕侊紱1=闇�瑕侊紱) ")
+ @ExcelColumn(name="鍐呭")
+ private String otherField;
+
+ @ApiModelProperty(value = "鏄惁鍥哄畾杞﹁締", example = "1")
+ @ExcelColumn(name="鏄惁鍥哄畾杞﹁締")
+ private Integer isFixed; // 寮冪敤
+
+
@ApiModelProperty(value = "鏄惁鍥哄畾杞﹁締锛堣溅杈嗙被鍨嬩娇鐢級:0=鍚︼紱1=鏄紱", example = "1")
@TableField(exist = false)
private String updateUserName;
+
@ApiModelProperty(value = "椁愭爣绛夐厤缃」闆嗗悎", example = "1")
@TableField(exist = false)
private JSONArray detailList;
+
@ApiModelProperty(value = "鍥炬爣鍏ㄨ矾寰�")
@TableField(exist = false)
private String iconFull;
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
new file mode 100644
index 0000000..7e3a6aa
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/model/DriverInfo.java
@@ -0,0 +1,145 @@
+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;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 鍙告満娉ㄥ唽淇℃伅
+ * @author rk
+ * @date 2026/04/08
+ */
+@Data
+@ApiModel("鍙告満娉ㄥ唽淇℃伅")
+@TableName("`driver_info`")
+public class DriverInfo {
+
+ @TableId(type = IdType.AUTO)
+ @ApiModelProperty(value = "涓婚敭", example = "1")
+ private Integer id;
+
+ @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�", example = "0")
+ private Integer deleted;
+
+ @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+ private Integer createUser;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ @ExcelColumn(name = "鍒涘缓鏃堕棿", index = 1, width = 16, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+ private Integer updateUser;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date updateTime;
+
+ @ApiModelProperty(value = "澶囨敞")
+ private String remark;
+
+ @ApiModelProperty(value = "濮撳悕")
+ @ExcelColumn(name = "濮撳悕", index = 2, width = 10)
+ private String name;
+
+ @ApiModelProperty(value = "鎵嬫満鍙�")
+ @ExcelColumn(name = "鎵嬫満鍙�", index = 3, width = 12)
+ private String telephone;
+
+ @ApiModelProperty(value = "韬唤璇佸彿鐮�")
+ @ExcelColumn(name = "韬唤璇佸彿鐮�", index = 4, width = 18)
+ private String idcard;
+
+ @ApiModelProperty(value = "濠氬Щ鐘舵�侊細0=鏈锛�1=宸插锛�2=绂诲紓锛�3=涓у伓", example = "0")
+ @ExcelColumn(name = "濠氬Щ鐘舵��", index = 5, width = 10, valueMapping = "0=鏈;1=宸插;2=绂诲紓;3=涓у伓;")
+ private Integer maritalStatus;
+
+ @ApiModelProperty(value = "鍖哄垝涓婚敭", example = "1")
+ private Integer areaId;
+
+ @ApiModelProperty(value = "灞呬綇鍦板潃")
+ private String livePlace;
+
+ @ApiModelProperty(value = "澶村儚鍥剧墖")
+ private String imgurl;
+
+ @ApiModelProperty(value = "杞﹁締绫诲瀷", example = "1")
+ private Integer carType;
+
+ @ApiModelProperty(value = "杞︾墝鍙�")
+ @ExcelColumn(name = "杞︾墝鍙�", index = 6, width = 10)
+ private String carCode;
+
+ @ApiModelProperty(value = "杞﹁締棰滆壊")
+ private String carColor;
+
+ @ApiModelProperty(value = "椹鹃┒璇佹湁鏁堟湡寮�濮嬫椂闂�")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date cardStartDate;
+
+ @ApiModelProperty(value = "椹鹃┒璇佹湁鏁堟湡缁撴潫鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date cardEndDate;
+
+ @ApiModelProperty(value = "鍙告満鐘舵�侊細0=娉ㄥ唽锛�1=寰呭鎵癸紱2=瀹℃壒閫氳繃锛�3=瀹℃壒椹冲洖", example = "0")
+ @ExcelColumn(name = "鐘舵��", index = 7, width = 10, valueMapping = "0=娉ㄥ唽;1=寰呭鎵�;2=瀹℃壒閫氳繃;3=瀹℃壒椹冲洖;")
+ private Integer status;
+
+ @ApiModelProperty(value = "OPENID(APP)")
+ private String openid;
+
+ @ApiModelProperty(value = "UNIONID")
+ private String unionid;
+
+ @ApiModelProperty(value = "瀹℃壒鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date auditTime;
+
+ @ApiModelProperty(value = "瀹℃壒浜�", example = "1")
+ private Integer auditUser;
+
+ @ApiModelProperty(value = "瀹℃壒澶囨敞")
+ private String auditRemark;
+
+ @ApiModelProperty(value = "浼氬憳涓婚敭", example = "1")
+ private Integer memberId;
+
+ @ApiModelProperty(value = "韬唤璇佹闈㈢収")
+ private String idcardImg;
+
+ @ApiModelProperty(value = "韬唤璇佸弽闈㈢収")
+ private String idcardImgBack;
+
+ @ApiModelProperty(value = "杞﹁締鐓х墖鍒楄〃")
+ @TableField(exist = false)
+ private List<Multifile> carImgList = new ArrayList<>();
+
+ @ApiModelProperty(value = "椹鹃┒璇佺収鐗囧垪琛�")
+ @TableField(exist = false)
+ private List<Multifile> licenseImgList = new ArrayList<>();
+
+ @ApiModelProperty(value = "鍏朵粬璧勬枡鐓х墖鍒楄〃")
+ @TableField(exist = false)
+ private List<Multifile> otherImgList = new ArrayList<>();
+
+ @ApiModelProperty(value = "鏄惁闇�瑕佷笂浼犻┚椹惰瘉锛�0=涓嶉渶瑕侊紱1=闇�瑕�")
+ @TableField(exist = false)
+ private Integer needLicense;
+
+ @ApiModelProperty(value = "杞﹁締绫诲瀷鍚嶇О")
+ @TableField(exist = false)
+ private String carTypeName;
+
+
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Member.java b/server/services/src/main/java/com/doumee/dao/business/model/Member.java
index 03ff91f..b52946e 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Member.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Member.java
@@ -67,13 +67,13 @@
@ExcelColumn(name="鐪熷疄濮撳悕",index = 4,width = 10)
private String name;
- @ApiModelProperty(value = "鐢ㄥ伐韬唤:0=鏈敵璇凤紱1=鐢宠涓紱2=宸查�氳繃锛�3=鏈�氳繃锛�", example = "1")
+ @ApiModelProperty(value = "鐢ㄥ伐韬唤:0=鏈敵璇凤紱1=鐢宠涓紱2=宸查�氳繃锛�3=鏈�氳繃锛�", example = "1") //寮冪敤
private Integer workerIdentity;
- @ApiModelProperty(value = "璐ц繍韬唤:0=鏈敵璇凤紱1=鐢宠涓紱2=宸查�氳繃锛�3=鏈�氳繃锛�", example = "1")
+ @ApiModelProperty(value = "璐ц繍韬唤:0=鏈敵璇凤紱1=鐢宠涓紱2=宸查�氳繃锛�3=鏈�氳繃锛�", example = "1") //寮冪敤
private Integer driverIdentity;
- @ApiModelProperty(value = "渚涢韬唤:0=鏈敵璇凤紱1=鐢宠涓紱2=宸查�氳繃锛�3=鏈�氳繃锛�", example = "1")
+ @ApiModelProperty(value = "渚涢韬唤:0=鏈敵璇凤紱1=鐢宠涓紱2=宸查�氳繃锛�3=鏈�氳繃锛�", example = "1") //寮冪敤
private Integer chefIdentity;
@ApiModelProperty(value = "褰撳墠浣欓(鍗曚綅:鍒�)", example = "1")
@@ -82,7 +82,7 @@
@ApiModelProperty(value = "鍘嗗彶鎬婚噾棰�(鍗曚綅:鍒�)", example = "1")
private Long totalAmount;
- @ApiModelProperty(value = "鐘舵��", example = "1")
+ @ApiModelProperty(value = "鐘舵�� 0=姝e父锛�1=鍋滅敤锛�2=宸叉敞閿�", example = "1")
private Integer status;
@ApiModelProperty(value = "鏈�鍚庣櫥褰曟椂闂�")
@@ -134,6 +134,19 @@
@ApiModelProperty(value = "褰撳墠浣跨敤韬唤:0=鐢ㄥ伐鍙戝竷鏂�;1=鐢ㄥ伐鎺ュ崟鏂�;", example = "1")
private Integer useIdentity;
+ @ApiModelProperty(value = "鐢ㄦ埛绫诲瀷锛�0=浼氬憳鐢ㄦ埛锛�1=鍙告満锛�2=搴楅摵浜哄憳锛�(鍙告満涓庡簵閾哄潎鍜屼細鍛樿〃浣跨敤鍚屼富閿��)", example = "1")
+ private Integer userType;
+
+ @ApiModelProperty(value = "涓氬姟鐘舵�侊細0=鏈璇侊紱1=璁よ瘉閫氳繃锛�2=璁よ瘉鏈�氳繃 锛�3=宸叉敮浠樻娂閲�", example = "1")
+ private Integer businessStatus;
+
+ @ApiModelProperty(value = "鐧诲綍瀵嗙爜", example = "1")
+ private String password;
+
+ @ApiModelProperty(value = "瀵嗙爜鐩�", example = "1")
+ private String salt;
+
+
@ApiModelProperty(value = "鎴戠殑 - 鏁版嵁淇℃伅", example = "1")
@TableField(exist = false)
private UserCenterVO userCenterVO;
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Multifile.java b/server/services/src/main/java/com/doumee/dao/business/model/Multifile.java
index f09837d..11bc06d 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Multifile.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Multifile.java
@@ -53,9 +53,8 @@
@ApiModelProperty(value = "绫诲瀷0鍥剧墖 1瑙嗛 2鍏朵粬", example = "1")
private Integer type;
-// @ApiModelProperty(value = "鍏宠仈瀵硅薄绫诲瀷 0SHE涓婃姤 1璺岀粖婊戜笂鎶� 2璺岀粖婊戝鐞� 3璺岀粖婊戝垎閰嶇墿涓氫富绠� 4璺岀粖婊戝垎閰嶅鐞嗕汉 5DCA椋庨櫓涓婃姤 6DCA椋庨櫓澶勭悊 7DCA宸ュ崟鍥剧墖", example = "1")
-// @ExcelExportColumn(name="鍏宠仈瀵硅薄绫诲瀷 0SHE涓婃姤 1璺岀粖婊戜笂鎶� 2璺岀粖婊戝鐞� 3璺岀粖婊戝垎閰嶇墿涓氫富绠� 4璺岀粖婊戝垎閰嶅鐞嗕汉 5DCA椋庨櫓涓婃姤 6DCA椋庨櫓澶勭悊 7DCA宸ュ崟鍥剧墖")
- @ApiModelProperty(value = "鍏宠仈瀵硅薄绫诲瀷 0韬唤鐢宠璧勬枡 1璁㈠崟闄勪欢", example = "1")
+ @ApiModelProperty(value = "鍏宠仈瀵硅薄绫诲瀷锛�0=闂ㄥ簵鍏朵粬鏉愭枡锛�1=闂ㄥ簵鍐呴儴鐓х墖锛�2=璁㈠崟瀵勫瓨鍥剧墖锛�3=璁㈠崟鍙栦欢鍥剧墖锛�4=鍙告満鍙栦欢鍥剧墖锛�5=鍙告満瀹屾垚鍥剧墖锛�6=鍙告満瀹炲悕璁よ瘉杞﹁締鐓х墖锛�7=鍙告満瀹炲悕璁よ瘉椹鹃┒璇佺収鐗囷紱8=鍙告満瀹炲悕璁よ瘉鍏朵粬鍥剧墖锛�" +
+ "9=闂ㄥ簵闂ㄥご鐓э紱10=绀句繚缂寸撼璇佹槑锛�11=鏈夋晥鍔冲姩鍚堝悓锛�", example = "1")
private Integer objType;
@ApiModelProperty(value = "鏂囦欢鍦板潃")
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/PricingRule.java b/server/services/src/main/java/com/doumee/dao/business/model/PricingRule.java
new file mode 100644
index 0000000..ccdfe7d
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/model/PricingRule.java
@@ -0,0 +1,70 @@
+package com.doumee.dao.business.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 璁′环瑙勫垯閰嶇疆
+ * @author rk
+ * @date 2026/04/08
+ */
+@Data
+@ApiModel("璁′环瑙勫垯閰嶇疆")
+@TableName("`pricing_rule`")
+public class PricingRule {
+
+ @TableId(type = IdType.AUTO)
+ @ApiModelProperty(value = "涓婚敭", example = "1")
+ private Integer id;
+
+ @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�", example = "0")
+ private Integer deleted;
+
+ @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+ private Integer createUser;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ @ExcelColumn(name = "鍒涘缓鏃堕棿", index = 1, width = 16, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+ private Integer updateUser;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date updateTime;
+
+ @ApiModelProperty(value = "澶囨敞")
+ private String remark;
+
+ @ApiModelProperty(value = "鍩庡競涓婚敭锛坅rea_id锛�", example = "1")
+ private Integer cityId;
+
+ @ApiModelProperty(value = "绫诲瀷锛�0=灏卞湴瀛樺彇瑙勫垯锛�1=寮傚湴瀛樺彇瑙勫垯锛�2=棰勮澶辨晥锛�3=闂ㄥ簵娉ㄥ唽鎶奸噾锛�4=鍒嗘垚姣斾緥", example = "0")
+ @ExcelColumn(name = "绫诲瀷", index = 2, width = 10, valueMapping = "0=灏卞湴瀛樺彇瑙勫垯;1=寮傚湴瀛樺彇瑙勫垯;2=棰勮澶辨晥;3=闂ㄥ簵娉ㄥ唽鎶奸噾;4=鍒嗘垚姣斾緥;")
+ private Integer type;
+
+ @ApiModelProperty(value = "鍙傛暟1锛歵ype 锛�0/1锛�= 鍏宠仈 鐗╁搧灏哄锛坈ategory type =4锛�;type 锛�2锛�= 閰嶉�侀噷绋� 锛� type (3) = 浼佷笟绫诲瀷锛�0=浼佷笟锛�1=涓汉锛夛紱type (4) = 绫诲瀷锛�0-4 浼佷笟瀵�/涓汉瀵�/浼佷笟鍙�/涓汉鍙�/閰嶉�佸憳锛�")
+ private String fieldA;
+
+ @ApiModelProperty(value = "鍙傛暟2锛歵ype 锛�0锛�= 鏀惰垂鍗曚环 ;type 锛�1锛�= 閰嶉�佽捣姝ラ噷绋嬪叕閲屾暟 锛泃ype 锛�2锛�= 閰嶉�佹椂闀� 锛� type (3) = 鎶奸噾锛泃ype (4) = 鍒嗘垚姣斾緥")
+ private String fieldB;
+
+ @ApiModelProperty(value = "鍙傛暟3锛歵ype 锛�1锛�= 閰嶉�佽捣姝ラ噷绋嬫瘡鍏噷鍗曚环 锛�")
+ private String fieldC;
+
+ @ApiModelProperty(value = "鍙傛暟4锛歵ype=1 瓒呭嚭棣栧崟閲岀▼鍏噷鏁�")
+ private String fieldD;
+
+ @ApiModelProperty(value = "鍙傛暟5锛歵ype=1 瓒呭嚭棣栧崟閲岀▼姣忓叕閲� 鍗曚环")
+ private String fieldE;
+
+}
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
new file mode 100644
index 0000000..deb42ac
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/model/ShopInfo.java
@@ -0,0 +1,124 @@
+package com.doumee.dao.business.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 闂ㄥ簵淇℃伅
+ * @author rk
+ * @date 2026/04/08
+ */
+@Data
+@ApiModel("闂ㄥ簵淇℃伅")
+@TableName("`shop_info`")
+public class ShopInfo {
+
+ @TableId(type = IdType.AUTO)
+ @ApiModelProperty(value = "涓婚敭", example = "1")
+ private Integer id;
+
+ @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�", example = "0")
+ private Integer deleted;
+
+ @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+ private Integer createUser;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ @ExcelColumn(name = "鍒涘缓鏃堕棿", index = 1, width = 16, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+ private Integer updateUser;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date updateTime;
+
+ @ApiModelProperty(value = "澶囨敞")
+ private String remark;
+
+ @ApiModelProperty(value = "浼佷笟绫诲瀷锛�0=涓汉锛�1=浼佷笟", example = "0")
+ @ExcelColumn(name = "浼佷笟绫诲瀷", index = 2, width = 10, valueMapping = "0=涓汉;1=浼佷笟;")
+ private Integer companyType;
+
+ @ApiModelProperty(value = "鍚嶇О/搴楅摵鍚嶇О")
+ @ExcelColumn(name = "搴楅摵鍚嶇О", index = 3, width = 15)
+ private String name;
+
+ @ApiModelProperty(value = "娉ㄥ唽鎵嬫満鍙�")
+ @ExcelColumn(name = "娉ㄥ唽鎵嬫満鍙�", index = 4, width = 12)
+ private String telephone;
+
+ @ApiModelProperty(value = "鐧诲綍瀵嗙爜")
+ private String password;
+
+ @ApiModelProperty(value = "瀵嗙爜鐩�")
+ private String salt;
+
+ @ApiModelProperty(value = "鑱旂郴浜哄悕绉�")
+ @ExcelColumn(name = "鑱旂郴浜�", index = 5, width = 10)
+ private String linkName;
+
+ @ApiModelProperty(value = "鑱旂郴浜虹數璇�")
+ @ExcelColumn(name = "鑱旂郴鐢佃瘽", index = 6, width = 12)
+ private String linkPhone;
+
+ @ApiModelProperty(value = "鑱旂郴浜鸿韩浠借瘉鍙风爜")
+ private String idcard;
+
+ @ApiModelProperty(value = "鍖哄垝涓婚敭", example = "1")
+ private Integer areaId;
+
+ @ApiModelProperty(value = "瀹氫綅缁忓害", example = "116.404")
+ private Double longitude;
+
+ @ApiModelProperty(value = "瀹氫綅绾害", example = "39.915")
+ private Double latitude;
+
+ @ApiModelProperty(value = "璇︾粏鍦板潃")
+ private String address;
+
+ @ApiModelProperty(value = "娉曚汉濮撳悕锛堜紒涓氱被鍨嬩娇鐢級")
+ private String legalPersonName;
+
+ @ApiModelProperty(value = "娉曚汉鐢佃瘽锛堜紒涓氱被鍨嬩娇鐢級")
+ private String legalPersonPhone;
+
+ @ApiModelProperty(value = "娉曚汉韬唤璇佸彿鐮侊紙浼佷笟绫诲瀷浣跨敤锛�")
+ private String legalPersonCard;
+
+ @ApiModelProperty(value = "韬唤璇佹闈㈢収")
+ private String idcardImg;
+
+ @ApiModelProperty(value = "韬唤璇佸弽闈㈢収")
+ private String idcardImgBack;
+
+ @ApiModelProperty(value = "钀ヤ笟鎵х収")
+ private String businessImg;
+
+ @ApiModelProperty(value = "鐘舵�侊細0=寰呭鎵癸紱1=瀹℃壒閫氳繃锛�2=瀹℃壒鏈�氳繃", example = "0")
+ @ExcelColumn(name = "鐘舵��", index = 7, width = 10, valueMapping = "0=寰呭鎵�;1=瀹℃壒閫氳繃;2=瀹℃壒鏈�氳繃;")
+ private Integer status;
+
+ @ApiModelProperty(value = "瀹℃壒鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date auditTime;
+
+ @ApiModelProperty(value = "瀹℃壒浜�", example = "1")
+ private Integer auditUserId;
+
+ @ApiModelProperty(value = "瀹℃壒澶囨敞")
+ private String auditRemark;
+
+ @ApiModelProperty(value = "OPENID")
+ private String openid;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Smsrecord.java b/server/services/src/main/java/com/doumee/dao/business/model/Smsrecord.java
new file mode 100644
index 0000000..c1897aa
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Smsrecord.java
@@ -0,0 +1,71 @@
+package com.doumee.dao.business.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 鐭俊楠岃瘉鐮�
+ * @author rk
+ * @date 2026/04/08
+ */
+@Data
+@ApiModel("鐭俊楠岃瘉鐮�")
+@TableName("`smsrecord`")
+public class Smsrecord {
+
+ @TableId(type = IdType.AUTO)
+ @ApiModelProperty(value = "涓婚敭", example = "1")
+ private Integer id;
+
+ @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�", example = "0")
+ private Integer deleted;
+
+ @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+ private Integer createUser;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ @ExcelColumn(name = "鍒涘缓鏃堕棿", index = 1, width = 16, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+ private Integer updateUser;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date updateTime;
+
+ @ApiModelProperty(value = "澶囨敞")
+ private String remark;
+
+ @ApiModelProperty(value = "鎵嬫満鍙�")
+ @ExcelColumn(name = "鎵嬫満鍙�", index = 2, width = 12)
+ private String phone;
+
+ @ApiModelProperty(value = "鐭俊鍐呭")
+ @ExcelColumn(name = "鐭俊鍐呭", index = 3, width = 20)
+ private String content;
+
+ @ApiModelProperty(value = "鐭俊绫诲瀷锛�0=楠岃瘉鐮�", example = "0")
+ @ExcelColumn(name = "鐭俊绫诲瀷", index = 4, width = 10, valueMapping = "0=楠岃瘉鐮�;")
+ private Integer type;
+
+ @ApiModelProperty(value = "鏈夋晥鏈�")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date validDate;
+
+ @ApiModelProperty(value = "鍏抽敭瀛楋紙楠岃瘉鐮佺瓑锛�")
+ private String code;
+
+ @ApiModelProperty(value = "鐘舵�� 0鏈娇鐢� 1宸蹭娇鐢� 2宸茶繃鏈�", example = "0")
+ @ExcelColumn(name = "鐘舵��", index = 5, width = 10, valueMapping = "0=鏈娇鐢�;1=宸蹭娇鐢�;2=宸茶繃鏈�;")
+ private Integer status;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/AreasDto.java b/server/services/src/main/java/com/doumee/dao/dto/AreasDto.java
new file mode 100644
index 0000000..5072a5a
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/AreasDto.java
@@ -0,0 +1,25 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author Eva.Caesar Liu
+ * @date 2023/02/14 11:14
+ */
+@Data
+@ApiModel("鐪佸競鍖烘煡璇㈠弬鏁�")
+public class AreasDto implements Serializable {
+
+ @ApiModelProperty(value = "鍚嶇О" )
+ private String name;
+ @ApiModelProperty(value = "绫诲瀷 0鐪� 1甯� 2鍖哄幙", example = "1")
+ private Integer type;
+ @ApiModelProperty(value = "鏄惁鍖呭惈瀛愯妭鐐� 0涓嶅寘鍚� 1鍖呭惈", example = "1")
+ private int flag;
+ @ApiModelProperty(value = "鐖惰妭鐐圭紪鐮�", example = "1")
+ private Integer parentId;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/AuditDTO.java b/server/services/src/main/java/com/doumee/dao/dto/AuditDTO.java
index 0e813b1..93ea87d 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/AuditDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/AuditDTO.java
@@ -23,4 +23,7 @@
@ApiModelProperty(value = "瀹℃壒鎻忚堪")
private String auditRemark;
+ @ApiModelProperty(value = "瀹℃壒浜虹紪鐮侊紙鏈嶅姟绔~鍏咃級", hidden = true)
+ private Integer auditUser;
+
}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/DriverLoginRequest.java b/server/services/src/main/java/com/doumee/dao/dto/DriverLoginRequest.java
new file mode 100644
index 0000000..fcf2cd1
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/DriverLoginRequest.java
@@ -0,0 +1,27 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import java.io.Serializable;
+
+/**
+ * 鍙告満鐧诲綍璇锋眰绫�
+ * @author rk
+ * @date 2026/04/08
+ */
+@Data
+@ApiModel("鍙告満鐧诲綍璇锋眰绫�")
+public class DriverLoginRequest implements Serializable {
+
+ @NotEmpty(message = "鎵嬫満鍙蜂笉鑳戒负绌�")
+ @ApiModelProperty(value = "鎵嬫満鍙�", required = true)
+ private String telephone;
+
+ @NotEmpty(message = "瀵嗙爜涓嶈兘涓虹┖")
+ @ApiModelProperty(value = "鐧诲綍瀵嗙爜", required = true)
+ private String password;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/DriverRegisterRequest.java b/server/services/src/main/java/com/doumee/dao/dto/DriverRegisterRequest.java
new file mode 100644
index 0000000..d4af685
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/DriverRegisterRequest.java
@@ -0,0 +1,27 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import java.io.Serializable;
+
+/**
+ * 鍙告満楠岃瘉鐮佺櫥褰曡姹傜被
+ * @author rk
+ * @date 2026/04/08
+ */
+@Data
+@ApiModel("鍙告満楠岃瘉鐮佺櫥褰曡姹傜被")
+public class DriverRegisterRequest implements Serializable {
+
+ @NotEmpty(message = "鎵嬫満鍙蜂笉鑳戒负绌�")
+ @ApiModelProperty(value = "鎵嬫満鍙�", required = true)
+ private String telephone;
+
+ @NotEmpty(message = "楠岃瘉鐮佷笉鑳戒负绌�")
+ @ApiModelProperty(value = "楠岃瘉鐮�", required = true)
+ private String code;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/DriverVerifyRequest.java b/server/services/src/main/java/com/doumee/dao/dto/DriverVerifyRequest.java
new file mode 100644
index 0000000..a9fdee4
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/DriverVerifyRequest.java
@@ -0,0 +1,75 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 鍙告満瀹炲悕璁よ瘉璇锋眰绫�
+ * @author rk
+ * @date 2026/04/08
+ */
+@Data
+@ApiModel("鍙告満瀹炲悕璁よ瘉璇锋眰绫�")
+public class DriverVerifyRequest implements Serializable {
+
+ @NotEmpty(message = "濮撳悕涓嶈兘涓虹┖")
+ @ApiModelProperty(value = "濮撳悕", required = true)
+ private String name;
+
+ @NotEmpty(message = "韬唤璇佸彿涓嶈兘涓虹┖")
+ @ApiModelProperty(value = "韬唤璇佸彿鐮�", required = true)
+ private String idcard;
+
+ @NotNull(message = "濠氬Щ鐘舵�佷笉鑳戒负绌�")
+ @ApiModelProperty(value = "濠氬Щ鐘舵�侊細0=鏈锛�1=宸插锛�2=绂诲紓锛�3=涓у伓", required = true, example = "0")
+ private Integer maritalStatus;
+
+ @ApiModelProperty(value = "鍖哄垝涓婚敭", example = "1")
+ private Integer areaId;
+
+ @NotEmpty(message = "灞呬綇鍦板潃涓嶈兘涓虹┖")
+ @ApiModelProperty(value = "灞呬綇鍦板潃", required = true)
+ private String livePlace;
+
+ @NotEmpty(message = "杞︾墝鍙蜂笉鑳戒负绌�")
+ @ApiModelProperty(value = "杞︾墝鍙�", required = true)
+ private String carCode;
+
+ @NotNull(message = "杞﹁締绫诲瀷涓嶈兘涓虹┖")
+ @ApiModelProperty(value = "杞﹁締绫诲瀷锛堝叧鑱攃ategory type=1锛�", required = true, example = "1")
+ private Integer carType;
+
+ @ApiModelProperty(value = "杞﹁締棰滆壊")
+ private String carColor;
+
+ @ApiModelProperty(value = "椹鹃┒璇佹湁鏁堟湡寮�濮嬫椂闂�")
+ private Date cardStartDate;
+
+ @ApiModelProperty(value = "椹鹃┒璇佹湁鏁堟湡缁撴潫鏃堕棿")
+ private Date cardEndDate;
+
+ @NotEmpty(message = "韬唤璇佹闈㈢収涓嶈兘涓虹┖")
+ @ApiModelProperty(value = "韬唤璇佹闈㈢収", required = true)
+ private String idcardImg;
+
+ @NotEmpty(message = "韬唤璇佸弽闈㈢収涓嶈兘涓虹┖")
+ @ApiModelProperty(value = "韬唤璇佸弽闈㈢収", required = true)
+ private String idcardImgBack;
+
+ @ApiModelProperty(value = "杞﹁締鐓х墖锛堟渶澶�3寮狅紝mutifile objType=6锛�")
+ private List<String> carImgUrls;
+
+ @ApiModelProperty(value = "椹鹃┒璇佺収鐗囷紙鏈�澶�3寮狅紝mutifile objType=7锛�")
+ private List<String> licenseImgUrls;
+
+ @ApiModelProperty(value = "鍏朵粬璧勬枡鐓х墖锛堟渶澶�3寮狅紝mutifile objType=8锛�")
+ private List<String> otherImgUrls;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/EstimatedDeliverySaveDTO.java b/server/services/src/main/java/com/doumee/dao/dto/EstimatedDeliverySaveDTO.java
new file mode 100644
index 0000000..36b97a9
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/EstimatedDeliverySaveDTO.java
@@ -0,0 +1,33 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * 棰勮鏃舵晥閰嶇疆淇濆瓨璇锋眰
+ * @author rk
+ * @date 2026/04/08
+ */
+@Data
+@ApiModel("棰勮鏃舵晥閰嶇疆淇濆瓨璇锋眰")
+public class EstimatedDeliverySaveDTO implements Serializable {
+
+ @ApiModelProperty(value = "瑙勫垯涓婚敭(淇敼鏃跺繀浼�)")
+ private Integer id;
+
+ @ApiModelProperty(value = "鍩庡競涓婚敭", required = true, example = "1")
+ @NotNull(message = "鍩庡競涓婚敭涓嶈兘涓虹┖")
+ private Integer cityId;
+
+ @ApiModelProperty(value = "閰嶉�侀噷绋�(鍏噷)", required = true, example = "10")
+ @NotNull(message = "閰嶉�侀噷绋嬩笉鑳戒负绌�")
+ private String distance;
+
+ @ApiModelProperty(value = "閰嶉�佹椂闀�(灏忔椂)", required = true, example = "2")
+ @NotNull(message = "閰嶉�佹椂闀夸笉鑳戒负绌�")
+ private String duration;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/LocalStoragePricingItemDTO.java b/server/services/src/main/java/com/doumee/dao/dto/LocalStoragePricingItemDTO.java
new file mode 100644
index 0000000..b61ba87
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/LocalStoragePricingItemDTO.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.NotNull;
+import java.io.Serializable;
+
+/**
+ * 灏卞湴瀛樺彇瑙勫垯椤�
+ * @author rk
+ * @date 2026/04/08
+ */
+@Data
+@ApiModel("灏卞湴瀛樺彇瑙勫垯椤�")
+public class LocalStoragePricingItemDTO implements Serializable {
+
+ @ApiModelProperty(value = "鐗╁搧瑙勬牸涓婚敭(category.id, type=4)", required = true, example = "1")
+ @NotNull(message = "鐗╁搧瑙勬牸涓婚敭涓嶈兘涓虹┖")
+ private Integer categoryId;
+
+ @ApiModelProperty(value = "鏀惰垂鍗曚环", required = true, example = "10.50")
+ @NotNull(message = "鏀惰垂鍗曚环涓嶈兘涓虹┖")
+ private String unitPrice;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/LocalStoragePricingSaveDTO.java b/server/services/src/main/java/com/doumee/dao/dto/LocalStoragePricingSaveDTO.java
new file mode 100644
index 0000000..3ab3a86
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/LocalStoragePricingSaveDTO.java
@@ -0,0 +1,30 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 灏卞湴瀛樺彇瑙勫垯鎵归噺淇濆瓨璇锋眰
+ * @author rk
+ * @date 2026/04/08
+ */
+@Data
+@ApiModel("灏卞湴瀛樺彇瑙勫垯鎵归噺淇濆瓨璇锋眰")
+public class LocalStoragePricingSaveDTO implements Serializable {
+
+ @ApiModelProperty(value = "鍩庡競涓婚敭", required = true, example = "1")
+ @NotNull(message = "鍩庡競涓婚敭涓嶈兘涓虹┖")
+ private Integer cityId;
+
+ @ApiModelProperty(value = "瑙勫垯鏄庣粏鍒楄〃", required = true)
+ @NotEmpty(message = "瑙勫垯鏄庣粏涓嶈兘涓虹┖")
+ @Valid
+ private List<LocalStoragePricingItemDTO> items;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/RemoteDeliveryPricingItemDTO.java b/server/services/src/main/java/com/doumee/dao/dto/RemoteDeliveryPricingItemDTO.java
new file mode 100644
index 0000000..4d38cdc
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/RemoteDeliveryPricingItemDTO.java
@@ -0,0 +1,38 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * 寮傚湴瀵勯�佽鍒欓」
+ * @author rk
+ * @date 2026/04/08
+ */
+@Data
+@ApiModel("寮傚湴瀵勯�佽鍒欓」")
+public class RemoteDeliveryPricingItemDTO implements Serializable {
+
+ @ApiModelProperty(value = "鐗╁搧瑙勬牸涓婚敭(category.id, type=4)", required = true, example = "1")
+ @NotNull(message = "鐗╁搧瑙勬牸涓婚敭涓嶈兘涓虹┖")
+ private Integer categoryId;
+
+ @ApiModelProperty(value = "閰嶉�佽捣姝ラ噷绋嬪叕閲屾暟", required = true, example = "5")
+ @NotNull(message = "閰嶉�佽捣姝ラ噷绋嬩笉鑳戒负绌�")
+ private String startDistance;
+
+ @ApiModelProperty(value = "閰嶉�佽捣姝ラ噷绋嬫瘡鍏噷鍗曚环", required = true, example = "3.00")
+ @NotNull(message = "閰嶉�佽捣姝ラ噷绋嬫瘡鍏噷鍗曚环涓嶈兘涓虹┖")
+ private String startPrice;
+
+ @ApiModelProperty(value = "瓒呭嚭棣栧崟閲岀▼鍏噷鏁�", required = true, example = "10")
+ @NotNull(message = "瓒呭嚭棣栧崟閲岀▼涓嶈兘涓虹┖")
+ private String extraDistance;
+
+ @ApiModelProperty(value = "瓒呭嚭棣栧崟閲岀▼姣忓叕閲屽崟浠�", required = true, example = "2.00")
+ @NotNull(message = "瓒呭嚭棣栧崟閲岀▼姣忓叕閲屽崟浠蜂笉鑳戒负绌�")
+ private String extraPrice;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/RemoteDeliveryPricingSaveDTO.java b/server/services/src/main/java/com/doumee/dao/dto/RemoteDeliveryPricingSaveDTO.java
new file mode 100644
index 0000000..3a7d61f
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/RemoteDeliveryPricingSaveDTO.java
@@ -0,0 +1,30 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 寮傚湴瀵勯�佽鍒欐壒閲忎繚瀛樿姹�
+ * @author rk
+ * @date 2026/04/08
+ */
+@Data
+@ApiModel("寮傚湴瀵勯�佽鍒欐壒閲忎繚瀛樿姹�")
+public class RemoteDeliveryPricingSaveDTO implements Serializable {
+
+ @ApiModelProperty(value = "鍩庡競涓婚敭", required = true, example = "1")
+ @NotNull(message = "鍩庡競涓婚敭涓嶈兘涓虹┖")
+ private Integer cityId;
+
+ @ApiModelProperty(value = "瑙勫垯鏄庣粏鍒楄〃", required = true)
+ @NotEmpty(message = "瑙勫垯鏄庣粏涓嶈兘涓虹┖")
+ @Valid
+ private List<RemoteDeliveryPricingItemDTO> items;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/RevenueShareItemDTO.java b/server/services/src/main/java/com/doumee/dao/dto/RevenueShareItemDTO.java
new file mode 100644
index 0000000..a06536b
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/RevenueShareItemDTO.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.NotNull;
+import java.io.Serializable;
+
+/**
+ * 鍒嗘垚姣斾緥瑙勫垯椤�
+ * @author rk
+ * @date 2026/04/08
+ */
+@Data
+@ApiModel("鍒嗘垚姣斾緥瑙勫垯椤�")
+public class RevenueShareItemDTO implements Serializable {
+
+ @ApiModelProperty(value = "绫诲瀷(0=浼佷笟瀵�, 1=涓汉瀵�, 2=浼佷笟鍙�, 3=涓汉鍙�, 4=閰嶉�佸憳)", required = true, example = "0")
+ @NotNull(message = "绫诲瀷涓嶈兘涓虹┖")
+ private Integer fieldType;
+
+ @ApiModelProperty(value = "鍒嗘垚姣斾緥", required = true, example = "0.15")
+ @NotNull(message = "鍒嗘垚姣斾緥涓嶈兘涓虹┖")
+ private String ratio;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/RevenueShareSaveDTO.java b/server/services/src/main/java/com/doumee/dao/dto/RevenueShareSaveDTO.java
new file mode 100644
index 0000000..b34bfb2
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/RevenueShareSaveDTO.java
@@ -0,0 +1,30 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 鍒嗘垚姣斾緥鎵归噺淇濆瓨璇锋眰
+ * @author rk
+ * @date 2026/04/08
+ */
+@Data
+@ApiModel("鍒嗘垚姣斾緥鎵归噺淇濆瓨璇锋眰")
+public class RevenueShareSaveDTO implements Serializable {
+
+ @ApiModelProperty(value = "鍩庡競涓婚敭", required = true, example = "1")
+ @NotNull(message = "鍩庡競涓婚敭涓嶈兘涓虹┖")
+ private Integer cityId;
+
+ @ApiModelProperty(value = "瑙勫垯鏄庣粏鍒楄〃(浼佷笟瀵�/涓汉瀵�/浼佷笟鍙�/涓汉鍙�/閰嶉�佸憳鍏�5鏉�)", required = true)
+ @NotEmpty(message = "瑙勫垯鏄庣粏涓嶈兘涓虹┖")
+ @Valid
+ private List<RevenueShareItemDTO> items;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/StoreDepositItemDTO.java b/server/services/src/main/java/com/doumee/dao/dto/StoreDepositItemDTO.java
new file mode 100644
index 0000000..8d389aa
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/StoreDepositItemDTO.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.NotNull;
+import java.io.Serializable;
+
+/**
+ * 闂ㄥ簵娉ㄥ唽鎶奸噾瑙勫垯椤�
+ * @author rk
+ * @date 2026/04/08
+ */
+@Data
+@ApiModel("闂ㄥ簵娉ㄥ唽鎶奸噾瑙勫垯椤�")
+public class StoreDepositItemDTO implements Serializable {
+
+ @ApiModelProperty(value = "浼佷笟绫诲瀷(0=浼佷笟, 1=涓汉)", required = true, example = "0")
+ @NotNull(message = "浼佷笟绫诲瀷涓嶈兘涓虹┖")
+ private Integer fieldType;
+
+ @ApiModelProperty(value = "鎶奸噾閲戦", required = true, example = "5000.00")
+ @NotNull(message = "鎶奸噾閲戦涓嶈兘涓虹┖")
+ private String depositAmount;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/StoreDepositSaveDTO.java b/server/services/src/main/java/com/doumee/dao/dto/StoreDepositSaveDTO.java
new file mode 100644
index 0000000..e1162d9
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/StoreDepositSaveDTO.java
@@ -0,0 +1,30 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 闂ㄥ簵娉ㄥ唽鎶奸噾鎵归噺淇濆瓨璇锋眰
+ * @author rk
+ * @date 2026/04/08
+ */
+@Data
+@ApiModel("闂ㄥ簵娉ㄥ唽鎶奸噾鎵归噺淇濆瓨璇锋眰")
+public class StoreDepositSaveDTO implements Serializable {
+
+ @ApiModelProperty(value = "鍩庡競涓婚敭", required = true, example = "1")
+ @NotNull(message = "鍩庡競涓婚敭涓嶈兘涓虹┖")
+ private Integer cityId;
+
+ @ApiModelProperty(value = "瑙勫垯鏄庣粏鍒楄〃(浼佷笟+涓汉鍏�2鏉�)", required = true)
+ @NotEmpty(message = "瑙勫垯鏄庣粏涓嶈兘涓虹┖")
+ @Valid
+ private List<StoreDepositItemDTO> items;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/EstimatedDeliveryVO.java b/server/services/src/main/java/com/doumee/dao/vo/EstimatedDeliveryVO.java
new file mode 100644
index 0000000..0931d6a
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/EstimatedDeliveryVO.java
@@ -0,0 +1,29 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 棰勮鏃舵晥閰嶇疆鍒楄〃杩斿洖
+ * @author rk
+ * @date 2026/04/08
+ */
+@Data
+@ApiModel("棰勮鏃舵晥閰嶇疆(鍒楄〃杩斿洖)")
+public class EstimatedDeliveryVO implements Serializable {
+
+ @ApiModelProperty(value = "瑙勫垯涓婚敭")
+ private Integer pricingRuleId;
+
+ @ApiModelProperty(value = "鍩庡競涓婚敭")
+ private Integer cityId;
+
+ @ApiModelProperty(value = "閰嶉�侀噷绋�(鍏噷)")
+ private String distance;
+
+ @ApiModelProperty(value = "閰嶉�佹椂闀�(灏忔椂)")
+ private String duration;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/LocalStoragePricingVO.java b/server/services/src/main/java/com/doumee/dao/vo/LocalStoragePricingVO.java
new file mode 100644
index 0000000..22b2e71
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/LocalStoragePricingVO.java
@@ -0,0 +1,32 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 灏卞湴瀛樺彇瑙勫垯鍒楄〃杩斿洖
+ * @author rk
+ * @date 2026/04/08
+ */
+@Data
+@ApiModel("灏卞湴瀛樺彇瑙勫垯椤�(鍒楄〃杩斿洖)")
+public class LocalStoragePricingVO implements Serializable {
+
+ @ApiModelProperty(value = "瑙勫垯涓婚敭")
+ private Integer pricingRuleId;
+
+ @ApiModelProperty(value = "鐗╁搧灏哄涓婚敭")
+ private Integer categoryId;
+
+ @ApiModelProperty(value = "鐗╁搧灏哄鍚嶇О")
+ private String categoryName;
+
+ @ApiModelProperty(value = "鏀惰垂鍗曚环")
+ private String unitPrice;
+
+ @ApiModelProperty(value = "鍩庡競涓婚敭")
+ private Integer cityId;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/RemoteDeliveryPricingVO.java b/server/services/src/main/java/com/doumee/dao/vo/RemoteDeliveryPricingVO.java
new file mode 100644
index 0000000..77504e8
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/RemoteDeliveryPricingVO.java
@@ -0,0 +1,41 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 寮傚湴瀵勯�佽鍒欏垪琛ㄨ繑鍥�
+ * @author rk
+ * @date 2026/04/08
+ */
+@Data
+@ApiModel("寮傚湴瀵勯�佽鍒欓」(鍒楄〃杩斿洖)")
+public class RemoteDeliveryPricingVO implements Serializable {
+
+ @ApiModelProperty(value = "瑙勫垯涓婚敭")
+ private Integer pricingRuleId;
+
+ @ApiModelProperty(value = "鐗╁搧灏哄涓婚敭")
+ private Integer categoryId;
+
+ @ApiModelProperty(value = "鐗╁搧灏哄鍚嶇О")
+ private String categoryName;
+
+ @ApiModelProperty(value = "閰嶉�佽捣姝ラ噷绋嬪叕閲屾暟")
+ private String startDistance;
+
+ @ApiModelProperty(value = "閰嶉�佽捣姝ラ噷绋嬫瘡鍏噷鍗曚环")
+ private String startPrice;
+
+ @ApiModelProperty(value = "瓒呭嚭棣栧崟閲岀▼鍏噷鏁�")
+ private String extraDistance;
+
+ @ApiModelProperty(value = "瓒呭嚭棣栧崟閲岀▼姣忓叕閲屽崟浠�")
+ private String extraPrice;
+
+ @ApiModelProperty(value = "鍩庡競涓婚敭")
+ private Integer cityId;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/RevenueShareVO.java b/server/services/src/main/java/com/doumee/dao/vo/RevenueShareVO.java
new file mode 100644
index 0000000..e97a584
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/RevenueShareVO.java
@@ -0,0 +1,32 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 鍒嗘垚姣斾緥鍒楄〃杩斿洖
+ * @author rk
+ * @date 2026/04/08
+ */
+@Data
+@ApiModel("鍒嗘垚姣斾緥(鍒楄〃杩斿洖)")
+public class RevenueShareVO implements Serializable {
+
+ @ApiModelProperty(value = "瑙勫垯涓婚敭")
+ private Integer pricingRuleId;
+
+ @ApiModelProperty(value = "鍩庡競涓婚敭")
+ private Integer cityId;
+
+ @ApiModelProperty(value = "绫诲瀷(0=浼佷笟瀵�, 1=涓汉瀵�, 2=浼佷笟鍙�, 3=涓汉鍙�, 4=閰嶉�佸憳)")
+ private Integer fieldType;
+
+ @ApiModelProperty(value = "绫诲瀷鍚嶇О")
+ private String fieldTypeName;
+
+ @ApiModelProperty(value = "鍒嗘垚姣斾緥")
+ private String ratio;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/StoreDepositVO.java b/server/services/src/main/java/com/doumee/dao/vo/StoreDepositVO.java
new file mode 100644
index 0000000..858de21
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/StoreDepositVO.java
@@ -0,0 +1,32 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 闂ㄥ簵娉ㄥ唽鎶奸噾鍒楄〃杩斿洖
+ * @author rk
+ * @date 2026/04/08
+ */
+@Data
+@ApiModel("闂ㄥ簵娉ㄥ唽鎶奸噾(鍒楄〃杩斿洖)")
+public class StoreDepositVO implements Serializable {
+
+ @ApiModelProperty(value = "瑙勫垯涓婚敭")
+ private Integer pricingRuleId;
+
+ @ApiModelProperty(value = "鍩庡競涓婚敭")
+ private Integer cityId;
+
+ @ApiModelProperty(value = "浼佷笟绫诲瀷(0=浼佷笟, 1=涓汉)")
+ private Integer fieldType;
+
+ @ApiModelProperty(value = "浼佷笟绫诲瀷鍚嶇О")
+ private String fieldTypeName;
+
+ @ApiModelProperty(value = "鎶奸噾閲戦")
+ private String depositAmount;
+}
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
new file mode 100644
index 0000000..6880174
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/AreasService.java
@@ -0,0 +1,136 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.Areas;
+
+import java.util.List;
+
+/**
+ * 鐪佸競鍖轰俊鎭〃Service瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2023/02/15 08:55
+ */
+public interface AreasService {
+
+ /**
+ * 鍒涘缓
+ *
+ * @param areas 瀹炰綋瀵硅薄
+ * @return Integer
+ */
+ Integer create(Areas areas);
+
+ /**
+ * 涓婚敭鍒犻櫎
+ *
+ * @param id 涓婚敭
+ */
+ void deleteById(Integer id);
+
+ /**
+ * 鍒犻櫎
+ *
+ * @param areas 瀹炰綋瀵硅薄
+ */
+ void delete(Areas areas);
+
+ /**
+ * 鎵归噺涓婚敭鍒犻櫎
+ *
+ * @param ids 涓婚敭闆�
+ */
+ void deleteByIdInBatch(List<Integer> ids);
+
+ /**
+ * 涓婚敭鏇存柊
+ *
+ * @param areas 瀹炰綋瀵硅薄
+ */
+ void updateById(Areas areas);
+
+ /**
+ * 鎵归噺涓婚敭鏇存柊
+ *
+ * @param areass 瀹炰綋闆�
+ */
+ void updateByIdInBatch(List<Areas> areass);
+
+ /**
+ * 涓婚敭鏌ヨ
+ *
+ * @param id 涓婚敭
+ * @return Areas
+ */
+ Areas findById(Integer id);
+
+ /**
+ * 鏍规嵁id鍜宼ype鏌ヨ瀵硅薄淇℃伅
+ * @param id
+ * @param type null 鏌ヨ鍏ㄩ儴 0鐪佷唤 1鍩庡競 2鍖哄煙
+ * @return
+ */
+ Areas findById(Integer id,Integer type);
+
+
+ Areas findByName(String name,Integer type);
+ Areas findByNameAndParentId(String name,Integer type,Integer parentId);
+
+ List<Areas> findByParentId(Integer parentId ,Integer type,int flag);
+
+ List<Areas> findChildByParentId(Integer id,List<Areas> list);
+
+ boolean isAreaValid(String proName,String cityName,String areaName);
+
+ /**
+ * 鏉′欢鏌ヨ鍗曟潯璁板綍
+ *
+ * @param areas 瀹炰綋瀵硅薄
+ * @return Areas
+ */
+ Areas findOne(Areas areas);
+
+ /**
+ * 鏉′欢鏌ヨ
+ *
+ * @param areas 瀹炰綋瀵硅薄
+ * @return List<Areas>
+ */
+ List<Areas> findList(Areas areas);
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ *
+ * @param pageWrap 鍒嗛〉瀵硅薄
+ * @return PageData<Areas>
+ */
+ PageData<Areas> findPage(PageWrap<Areas> pageWrap);
+
+ /**
+ * 鏉′欢缁熻
+ *
+ * @param areas 瀹炰綋瀵硅薄
+ * @return long
+ */
+ long count(Areas areas);
+
+ void cacheData();
+
+ Areas findByCityAndArea(String cityName, String areasName);
+
+ String getAddress(Integer cityId,Integer areaId);
+
+ String getAddress(Integer areaId);
+
+ List<Areas> listByParentId(Areas model);
+
+
+ /**
+ * 鑾峰彇鍩庡競淇℃伅
+ * @param areas
+ * @return
+ */
+
+ List<Areas> getCityList(Areas areas);
+
+}
diff --git a/server/services/src/main/java/com/doumee/service/business/BannerService.java b/server/services/src/main/java/com/doumee/service/business/BannerService.java
new file mode 100644
index 0000000..b3bf4d9
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/BannerService.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.Banner;
+
+import java.util.List;
+
+/**
+ * 杞挱鍥維ervice瀹氫箟
+ * @author rk
+ * @date 2026/04/08
+ */
+public interface BannerService {
+
+ Integer create(Banner banner);
+
+ void deleteById(Integer id);
+
+ void delete(Banner banner);
+
+ void deleteByIdInBatch(List<Integer> ids);
+
+ void updateById(Banner banner);
+
+ void updateByIdInBatch(List<Banner> banners);
+
+ Banner findById(Integer id);
+
+ Banner findOne(Banner banner);
+
+ List<Banner> findList(Banner banner);
+
+ PageData<Banner> findPage(PageWrap<Banner> pageWrap);
+
+ long count(Banner banner);
+}
diff --git a/server/services/src/main/java/com/doumee/service/business/DriverInfoService.java b/server/services/src/main/java/com/doumee/service/business/DriverInfoService.java
new file mode 100644
index 0000000..ba4fe34
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/DriverInfoService.java
@@ -0,0 +1,149 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.DriverInfo;
+import com.doumee.dao.dto.DriverLoginRequest;
+import com.doumee.dao.dto.DriverRegisterRequest;
+import com.doumee.dao.dto.DriverVerifyRequest;
+import com.doumee.dao.vo.AccountResponse;
+
+import java.util.List;
+
+/**
+ * 鍙告満娉ㄥ唽淇℃伅Service瀹氫箟
+ * @author rk
+ * @date 2026/04/08
+ */
+public interface DriverInfoService {
+
+ /**
+ * 鍒涘缓
+ *
+ * @param driverInfo 瀹炰綋瀵硅薄
+ * @return Integer
+ */
+ Integer create(DriverInfo driverInfo);
+
+ /**
+ * 涓婚敭鍒犻櫎
+ *
+ * @param id 涓婚敭
+ */
+ void deleteById(Integer id);
+
+ /**
+ * 鍒犻櫎
+ *
+ * @param driverInfo 瀹炰綋瀵硅薄
+ */
+ void delete(DriverInfo driverInfo);
+
+ /**
+ * 鎵归噺涓婚敭鍒犻櫎
+ *
+ * @param ids 涓婚敭闆�
+ */
+ void deleteByIdInBatch(List<Integer> ids);
+
+ /**
+ * 涓婚敭鏇存柊
+ *
+ * @param driverInfo 瀹炰綋瀵硅薄
+ */
+ void updateById(DriverInfo driverInfo);
+
+ /**
+ * 鎵归噺涓婚敭鏇存柊
+ *
+ * @param driverInfos 瀹炰綋闆�
+ */
+ void updateByIdInBatch(List<DriverInfo> driverInfos);
+
+ /**
+ * 涓婚敭鏌ヨ
+ *
+ * @param id 涓婚敭
+ * @return DriverInfo
+ */
+ DriverInfo findById(Integer id);
+
+ /**
+ * 鏉′欢鏌ヨ鍗曟潯璁板綍
+ *
+ * @param driverInfo 瀹炰綋瀵硅薄
+ * @return DriverInfo
+ */
+ DriverInfo findOne(DriverInfo driverInfo);
+
+ /**
+ * 鏉′欢鏌ヨ
+ *
+ * @param driverInfo 瀹炰綋瀵硅薄
+ * @return List<DriverInfo>
+ */
+ List<DriverInfo> findList(DriverInfo driverInfo);
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ *
+ * @param pageWrap 鍒嗛〉瀵硅薄
+ * @return PageData<DriverInfo>
+ */
+ PageData<DriverInfo> findPage(PageWrap<DriverInfo> pageWrap);
+
+ /**
+ * 鏉′欢缁熻
+ *
+ * @param driverInfo 瀹炰綋瀵硅薄
+ * @return long
+ */
+ long count(DriverInfo driverInfo);
+
+ /**
+ * 鍙告満楠岃瘉鐮佺櫥褰曪紙鎵嬫満鍙�+鐭俊楠岃瘉鐮侊紝鏃犺处鍙疯嚜鍔ㄦ敞鍐岋級
+ *
+ * @param request 楠岃瘉鐮佺櫥褰曡姹�
+ * @return AccountResponse
+ */
+ AccountResponse register(DriverRegisterRequest request);
+
+ /**
+ * 鍙戦�佸徃鏈洪獙璇佺爜鐧诲綍楠岃瘉鐮�
+ *
+ * @param telephone 鎵嬫満鍙�
+ */
+ void sendRegisterCode(String telephone);
+
+ /**
+ * 鍙告満鎵嬫満鍙�+瀵嗙爜鐧诲綍
+ *
+ * @param request 鐧诲綍璇锋眰
+ * @return AccountResponse
+ */
+ AccountResponse login(DriverLoginRequest request);
+
+ /**
+ * 鎻愪氦瀹炲悕璁よ瘉锛堝垵娆℃彁浜ゆ垨椹冲洖鍚庝慨鏀癸級
+ *
+ * @param memberId 浼氬憳涓婚敭
+ * @param request 璁よ瘉璇锋眰
+ */
+ void submitVerify(Integer memberId, DriverVerifyRequest request);
+
+ /**
+ * 鏌ヨ鍙告満瀹炲悕璁よ瘉璇︽儏
+ *
+ * @param memberId 浼氬憳涓婚敭
+ * @return DriverInfo
+ */
+ DriverInfo getVerifyDetail(Integer memberId);
+
+ /**
+ * 瀹℃壒鍙告満瀹炲悕璁よ瘉锛堢鐞嗙锛�
+ *
+ * @param auditDTO 瀹℃壒鍙傛暟
+ */
+ void auditVerify(com.doumee.dao.dto.AuditDTO auditDTO);
+
+}
diff --git a/server/services/src/main/java/com/doumee/service/business/MemberService.java b/server/services/src/main/java/com/doumee/service/business/MemberService.java
index c09bdf0..a8f8af6 100644
--- a/server/services/src/main/java/com/doumee/service/business/MemberService.java
+++ b/server/services/src/main/java/com/doumee/service/business/MemberService.java
@@ -135,11 +135,11 @@
*/
void editMemberInfo(Member member);
- /**
- * 鍒囨崲鐢ㄥ伐韬唤
- * @param member
- */
- void editUseIdentity(Member member);
+// /**
+// * 鍒囨崲鐢ㄥ伐韬唤
+// * @param member
+// */
+// void editUseIdentity(Member member);
/**
* 涓汉淇℃伅
@@ -150,5 +150,7 @@
UserCenterVO getPlatformAboutUs();
+ void logOut(String token,Integer memberId);
+
void logOff(String token,Integer memberId);
}
diff --git a/server/services/src/main/java/com/doumee/service/business/PricingRuleService.java b/server/services/src/main/java/com/doumee/service/business/PricingRuleService.java
new file mode 100644
index 0000000..20dcb95
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/PricingRuleService.java
@@ -0,0 +1,187 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.PricingRule;
+import com.doumee.dao.dto.LocalStoragePricingSaveDTO;
+import com.doumee.dao.dto.RemoteDeliveryPricingSaveDTO;
+import com.doumee.dao.dto.EstimatedDeliverySaveDTO;
+import com.doumee.dao.dto.StoreDepositSaveDTO;
+import com.doumee.dao.dto.RevenueShareSaveDTO;
+import com.doumee.dao.vo.LocalStoragePricingVO;
+import com.doumee.dao.vo.RemoteDeliveryPricingVO;
+import com.doumee.dao.vo.EstimatedDeliveryVO;
+import com.doumee.dao.vo.StoreDepositVO;
+import com.doumee.dao.vo.RevenueShareVO;
+
+import java.util.List;
+
+/**
+ * 璁′环瑙勫垯閰嶇疆Service瀹氫箟
+ * @author rk
+ * @date 2026/04/08
+ */
+public interface PricingRuleService {
+
+ /**
+ * 鍒涘缓
+ *
+ * @param pricingRule 瀹炰綋瀵硅薄
+ * @return Integer
+ */
+ Integer create(PricingRule pricingRule);
+
+ /**
+ * 涓婚敭鍒犻櫎
+ *
+ * @param id 涓婚敭
+ */
+ void deleteById(Integer id);
+
+ /**
+ * 鍒犻櫎
+ *
+ * @param pricingRule 瀹炰綋瀵硅薄
+ */
+ void delete(PricingRule pricingRule);
+
+ /**
+ * 鎵归噺涓婚敭鍒犻櫎
+ *
+ * @param ids 涓婚敭闆�
+ */
+ void deleteByIdInBatch(List<Integer> ids);
+
+ /**
+ * 涓婚敭鏇存柊
+ *
+ * @param pricingRule 瀹炰綋瀵硅薄
+ */
+ void updateById(PricingRule pricingRule);
+
+ /**
+ * 鎵归噺涓婚敭鏇存柊
+ *
+ * @param pricingRules 瀹炰綋闆�
+ */
+ void updateByIdInBatch(List<PricingRule> pricingRules);
+
+ /**
+ * 涓婚敭鏌ヨ
+ *
+ * @param id 涓婚敭
+ * @return PricingRule
+ */
+ PricingRule findById(Integer id);
+
+ /**
+ * 鏉′欢鏌ヨ鍗曟潯璁板綍
+ *
+ * @param pricingRule 瀹炰綋瀵硅薄
+ * @return PricingRule
+ */
+ PricingRule findOne(PricingRule pricingRule);
+
+ /**
+ * 鏉′欢鏌ヨ
+ *
+ * @param pricingRule 瀹炰綋瀵硅薄
+ * @return List<PricingRule>
+ */
+ List<PricingRule> findList(PricingRule pricingRule);
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ *
+ * @param pageWrap 鍒嗛〉瀵硅薄
+ * @return PageData<PricingRule>
+ */
+ PageData<PricingRule> findPage(PageWrap<PricingRule> pageWrap);
+
+ /**
+ * 鏉′欢缁熻
+ *
+ * @param pricingRule 瀹炰綋瀵硅薄
+ * @return long
+ */
+ long count(PricingRule pricingRule);
+
+ /**
+ * 鎵归噺淇濆瓨灏卞湴瀛樺彇瑙勫垯
+ * @param request 鎵归噺淇濆瓨璇锋眰
+ */
+ void batchSaveLocalStoragePricing(LocalStoragePricingSaveDTO request);
+
+ /**
+ * 鏌ヨ灏卞湴瀛樺彇瑙勫垯鍒楄〃
+ * @param cityId 鍩庡競涓婚敭
+ * @return 灏卞湴瀛樺彇瑙勫垯鍒楄〃
+ */
+ List<LocalStoragePricingVO> listLocalStoragePricing(Integer cityId);
+
+ /**
+ * 鎵归噺淇濆瓨寮傚湴瀵勯�佽鍒�
+ * @param request 鎵归噺淇濆瓨璇锋眰
+ */
+ void batchSaveRemoteDeliveryPricing(RemoteDeliveryPricingSaveDTO request);
+
+ /**
+ * 鏌ヨ寮傚湴瀵勯�佽鍒欏垪琛�
+ * @param cityId 鍩庡競涓婚敭
+ * @return 寮傚湴瀵勯�佽鍒欏垪琛�
+ */
+ List<RemoteDeliveryPricingVO> listRemoteDeliveryPricing(Integer cityId);
+
+ /**
+ * 鏂板棰勮鏃舵晥閰嶇疆
+ * @param request 淇濆瓨璇锋眰
+ * @return 瑙勫垯涓婚敭
+ */
+ Integer createEstimatedDelivery(EstimatedDeliverySaveDTO request);
+
+ /**
+ * 淇敼棰勮鏃舵晥閰嶇疆
+ * @param request 淇濆瓨璇锋眰
+ */
+ void updateEstimatedDelivery(EstimatedDeliverySaveDTO request);
+
+ /**
+ * 鍒犻櫎棰勮鏃舵晥閰嶇疆
+ * @param id 瑙勫垯涓婚敭
+ */
+ void deleteEstimatedDelivery(Integer id);
+
+ /**
+ * 鏌ヨ棰勮鏃舵晥閰嶇疆鍒楄〃
+ * @param cityId 鍩庡競涓婚敭
+ * @return 棰勮鏃舵晥閰嶇疆鍒楄〃
+ */
+ List<EstimatedDeliveryVO> listEstimatedDelivery(Integer cityId);
+
+ /**
+ * 鎵归噺淇濆瓨闂ㄥ簵娉ㄥ唽鎶奸噾
+ * @param request 鎵归噺淇濆瓨璇锋眰
+ */
+ void batchSaveStoreDeposit(StoreDepositSaveDTO request);
+
+ /**
+ * 鏌ヨ闂ㄥ簵娉ㄥ唽鎶奸噾鍒楄〃(鍥哄畾杩斿洖2鏉�)
+ * @param cityId 鍩庡競涓婚敭
+ * @return 闂ㄥ簵娉ㄥ唽鎶奸噾鍒楄〃
+ */
+ List<StoreDepositVO> listStoreDeposit(Integer cityId);
+
+ /**
+ * 鎵归噺淇濆瓨鍒嗘垚姣斾緥
+ * @param request 鎵归噺淇濆瓨璇锋眰
+ */
+ void batchSaveRevenueShare(RevenueShareSaveDTO request);
+
+ /**
+ * 鏌ヨ鍒嗘垚姣斾緥鍒楄〃(鍥哄畾杩斿洖5鏉�)
+ * @param cityId 鍩庡競涓婚敭
+ * @return 鍒嗘垚姣斾緥鍒楄〃
+ */
+ List<RevenueShareVO> listRevenueShare(Integer cityId);
+
+}
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
new file mode 100644
index 0000000..8114534
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/ShopInfoService.java
@@ -0,0 +1,99 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.ShopInfo;
+
+import java.util.List;
+
+/**
+ * 闂ㄥ簵淇℃伅Service瀹氫箟
+ * @author rk
+ * @date 2026/04/08
+ */
+public interface ShopInfoService {
+
+ /**
+ * 鍒涘缓
+ *
+ * @param shopInfo 瀹炰綋瀵硅薄
+ * @return Integer
+ */
+ Integer create(ShopInfo shopInfo);
+
+ /**
+ * 涓婚敭鍒犻櫎
+ *
+ * @param id 涓婚敭
+ */
+ void deleteById(Integer id);
+
+ /**
+ * 鍒犻櫎
+ *
+ * @param shopInfo 瀹炰綋瀵硅薄
+ */
+ void delete(ShopInfo shopInfo);
+
+ /**
+ * 鎵归噺涓婚敭鍒犻櫎
+ *
+ * @param ids 涓婚敭闆�
+ */
+ void deleteByIdInBatch(List<Integer> ids);
+
+ /**
+ * 涓婚敭鏇存柊
+ *
+ * @param shopInfo 瀹炰綋瀵硅薄
+ */
+ void updateById(ShopInfo shopInfo);
+
+ /**
+ * 鎵归噺涓婚敭鏇存柊
+ *
+ * @param shopInfos 瀹炰綋闆�
+ */
+ void updateByIdInBatch(List<ShopInfo> shopInfos);
+
+ /**
+ * 涓婚敭鏌ヨ
+ *
+ * @param id 涓婚敭
+ * @return ShopInfo
+ */
+ ShopInfo findById(Integer id);
+
+ /**
+ * 鏉′欢鏌ヨ鍗曟潯璁板綍
+ *
+ * @param shopInfo 瀹炰綋瀵硅薄
+ * @return ShopInfo
+ */
+ ShopInfo findOne(ShopInfo shopInfo);
+
+ /**
+ * 鏉′欢鏌ヨ
+ *
+ * @param shopInfo 瀹炰綋瀵硅薄
+ * @return List<ShopInfo>
+ */
+ List<ShopInfo> findList(ShopInfo shopInfo);
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ *
+ * @param pageWrap 鍒嗛〉瀵硅薄
+ * @return PageData<ShopInfo>
+ */
+ PageData<ShopInfo> findPage(PageWrap<ShopInfo> pageWrap);
+
+ /**
+ * 鏉′欢缁熻
+ *
+ * @param shopInfo 瀹炰綋瀵硅薄
+ * @return long
+ */
+ long count(ShopInfo shopInfo);
+
+}
diff --git a/server/services/src/main/java/com/doumee/service/business/SmsrecordService.java b/server/services/src/main/java/com/doumee/service/business/SmsrecordService.java
new file mode 100644
index 0000000..8de2019
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/SmsrecordService.java
@@ -0,0 +1,99 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.Smsrecord;
+
+import java.util.List;
+
+/**
+ * 鐭俊楠岃瘉鐮丼ervice瀹氫箟
+ * @author rk
+ * @date 2026/04/08
+ */
+public interface SmsrecordService {
+
+ /**
+ * 鍒涘缓
+ *
+ * @param smsrecord 瀹炰綋瀵硅薄
+ * @return Integer
+ */
+ Integer create(Smsrecord smsrecord);
+
+ /**
+ * 涓婚敭鍒犻櫎
+ *
+ * @param id 涓婚敭
+ */
+ void deleteById(Integer id);
+
+ /**
+ * 鍒犻櫎
+ *
+ * @param smsrecord 瀹炰綋瀵硅薄
+ */
+ void delete(Smsrecord smsrecord);
+
+ /**
+ * 鎵归噺涓婚敭鍒犻櫎
+ *
+ * @param ids 涓婚敭闆�
+ */
+ void deleteByIdInBatch(List<Integer> ids);
+
+ /**
+ * 涓婚敭鏇存柊
+ *
+ * @param smsrecord 瀹炰綋瀵硅薄
+ */
+ void updateById(Smsrecord smsrecord);
+
+ /**
+ * 鎵归噺涓婚敭鏇存柊
+ *
+ * @param smsrecords 瀹炰綋闆�
+ */
+ void updateByIdInBatch(List<Smsrecord> smsrecords);
+
+ /**
+ * 涓婚敭鏌ヨ
+ *
+ * @param id 涓婚敭
+ * @return Smsrecord
+ */
+ Smsrecord findById(Integer id);
+
+ /**
+ * 鏉′欢鏌ヨ鍗曟潯璁板綍
+ *
+ * @param smsrecord 瀹炰綋瀵硅薄
+ * @return Smsrecord
+ */
+ Smsrecord findOne(Smsrecord smsrecord);
+
+ /**
+ * 鏉′欢鏌ヨ
+ *
+ * @param smsrecord 瀹炰綋瀵硅薄
+ * @return List<Smsrecord>
+ */
+ List<Smsrecord> findList(Smsrecord smsrecord);
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ *
+ * @param pageWrap 鍒嗛〉瀵硅薄
+ * @return PageData<Smsrecord>
+ */
+ PageData<Smsrecord> findPage(PageWrap<Smsrecord> pageWrap);
+
+ /**
+ * 鏉′欢缁熻
+ *
+ * @param smsrecord 瀹炰綋瀵硅薄
+ * @return long
+ */
+ long count(Smsrecord smsrecord);
+
+}
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
new file mode 100644
index 0000000..93c32f3
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/impl/AreasServiceImpl.java
@@ -0,0 +1,521 @@
+package com.doumee.service.business.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.core.constants.Constants;
+import com.doumee.core.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.PinYinUtil;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.AreasMapper;
+import com.doumee.dao.business.model.Areas;
+import com.doumee.service.business.AreasService;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 鐪佸競鍖轰俊鎭〃Service瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2023/02/15 08:55
+ */
+@Service
+public class AreasServiceImpl implements AreasService {
+ public static List<Areas> ALL_AREA_LIST;
+ public static List<Areas> PROVINCE_LIST;
+ public static List<Areas> CITY_LIST;
+ public static List<Areas> AREA_LIST;
+ public static List<Areas> ALL_AREA_TREE;
+
+ @Autowired
+ private AreasMapper areasMapper;
+
+ @Autowired
+ RestTemplate restTemplate ;
+
+
+ @Override
+ public Integer create(Areas areas) {
+/*
+
+ if (Objects.isNull(areas.getParentId())){
+ areas.setType(Constants.ZERO);
+ }else {
+ Areas parentArea = areasMapper.selectById(areas.getParentId());
+ if (Objects.isNull(parentArea)){
+ areas.setType(Constants.ZERO);
+ }else {
+ areas.setType(parentArea.getType()+Constants.ONE);
+ }
+ }*/
+ areas.setIsdeleted(Constants.ZERO);
+ areasMapper.insert(areas);
+ areas.setCode(areas.getId().toString());
+ areasMapper.updateById(areas);
+ //鍒锋柊缂撳瓨鏁版嵁
+ cacheData();
+ return areas.getId();
+ }
+
+ @Override
+ public void deleteById(Integer id) {
+ areasMapper.deleteById(id);
+ //鍒锋柊缂撳瓨鏁版嵁
+ cacheData();
+ }
+
+ @Override
+ public void delete(Areas areas) {
+ UpdateWrapper<Areas> deleteWrapper = new UpdateWrapper<>(areas);
+ areasMapper.delete(deleteWrapper);
+ //鍒锋柊缂撳瓨鏁版嵁
+ cacheData();
+ }
+
+ @Override
+ public void deleteByIdInBatch(List<Integer> ids) {
+ if (CollectionUtils.isEmpty(ids)) {
+ return;
+ }
+ areasMapper.deleteBatchIds(ids);
+ //鍒锋柊缂撳瓨鏁版嵁
+ cacheData();
+ }
+
+ @Override
+ public void updateById(Areas areas) {
+
+ UpdateWrapper<Areas> wrapper = new UpdateWrapper<>();
+ wrapper.lambda().eq(Areas::getId,areas.getId());
+ Areas update = new Areas();
+ update.setName(areas.getName());
+ update.setSortnum(areas.getSortnum());
+ areasMapper.update(update,wrapper);
+ //鍒锋柊缂撳瓨鏁版嵁
+ cacheData();
+ }
+
+ @Override
+ public void updateByIdInBatch(List<Areas> areass) {
+ if (CollectionUtils.isEmpty(areass)) {
+ return;
+ }
+ for (Areas areas: areass) {
+ this.updateById(areas);
+ }
+ //鍒锋柊缂撳瓨鏁版嵁
+ cacheData();
+ }
+
+ @Override
+ public Areas findById(Integer id) {
+ if(ALL_AREA_LIST!=null){
+ for(Areas a : ALL_AREA_LIST){
+ if(Constants.equalsInteger(a.getId(),id)){
+ return a;
+ }
+ }
+ }
+ // return areasMapper.selectById(id);
+ return null;
+ }
+ @Override
+ public Areas findById(Integer id,Integer type) {
+ List<Areas> list = null;
+ if(type == null){
+ list = ALL_AREA_LIST;
+ }else if(Constants.equalsInteger(type,Constants.ZERO)){
+ list = PROVINCE_LIST;
+ }else if(Constants.equalsInteger(type,Constants.ONE)){
+ list = CITY_LIST;
+ } else if (Constants.equalsInteger(type,Constants.TWO)){
+ list = AREA_LIST;
+ }
+ if(list!=null){
+ for(Areas a : list){
+ if(Constants.equalsInteger(a.getId(),id)){
+ return a;
+ }
+ }
+ }
+ return null;
+ }
+
+
+ @Override
+ public Areas findByName(String name,Integer type){
+ List<Areas> list = null;
+ if(type == null){
+ list = ALL_AREA_LIST;
+ }else if(Constants.equalsInteger(type,Constants.ZERO)){
+ list = PROVINCE_LIST;
+ }else if(Constants.equalsInteger(type,Constants.ONE)){
+ list = CITY_LIST;
+ } else if (Constants.equalsInteger(type,Constants.TWO)){
+ list = AREA_LIST;
+ }
+ if(list!=null){
+ for(Areas a : list){
+ if(StringUtils.equals(name,a.getName())){
+ return a;
+ }
+ }
+ }
+ return null;
+ }
+ @Override
+ public Areas findByNameAndParentId(String name,Integer type,Integer parentId){
+ List<Areas> list = null;
+ if(type == null){
+ list = ALL_AREA_LIST;
+ }else if(Constants.equalsInteger(type,Constants.ZERO)){
+ list = PROVINCE_LIST;
+ }else if(Constants.equalsInteger(type,Constants.ONE)){
+ list = CITY_LIST;
+ } else if (Constants.equalsInteger(type,Constants.TWO)){
+ list = AREA_LIST;
+ }
+ if(list!=null){
+ for(Areas a : list){
+ if(StringUtils.equals(name,a.getName()) && Constants.equalsInteger(parentId,a.getParentId())){
+ return a;
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ *
+ * @param type
+ * @param parentId
+ * @param flag 0鏃犲瓙闆� 1鍖呭惈瀛愰泦鍘垮尯
+ * @return
+ */
+ @Override
+ public List<Areas> findByParentId(Integer parentId,Integer type ,int flag) {
+
+ List<Areas> list = null;
+ if(type == null){
+ list = ALL_AREA_LIST;
+ }else if(Constants.equalsInteger(type,Constants.ZERO)){
+ list = PROVINCE_LIST;
+ }else if(Constants.equalsInteger(type,Constants.ONE)){
+ list = CITY_LIST;
+ } else if (Constants.equalsInteger(type,Constants.TWO)){
+ list = AREA_LIST;
+ }
+ if(list!=null && Objects.nonNull(parentId)){
+ list = list.stream().filter(s->Constants.equalsInteger(s.getParentId(),parentId))
+ .collect(Collectors.toList());
+ }
+ if(flag == 0){
+ List<Areas> result = new ArrayList<>();
+ for(Areas a : list){
+ Areas r = new Areas();
+ BeanUtils.copyProperties(a,r);
+ r.setChildList(null);
+ result.add(r);
+ }
+ return result;
+ }
+ return list;
+ }
+
+ @Override
+ public List<Areas> findChildByParentId(Integer id,List<Areas> list){
+ List<Areas> result =null;
+ if(list == null){
+ list = ALL_AREA_LIST;
+ }
+ if(list!=null && list.size()>0){
+ for(Areas model :list){
+ if(Constants.equalsInteger(id,model.getParentId())){
+ if(result == null){
+ result = new ArrayList<>();
+ }
+ result.add(model );
+ }
+ }
+ }
+ return result;
+ }
+
+ @Override
+ public boolean isAreaValid(String proName,String cityName,String areaName){
+ Areas pro = findByName(proName,Constants.ZERO);
+ if(pro == null){
+ return false;
+ }
+ Areas city = findByName(proName,Constants.ONE);
+ if(city == null && !Constants.equalsInteger(city.getParentId(),pro.getId())){
+ return false;
+ }
+ Areas area = findByName(proName,Constants.TWO);
+ if(area == null && !Constants.equalsInteger(area.getParentId(),city.getId())){
+ return false;
+ }
+ return false;
+ }
+ @Override
+ public Areas findOne(Areas areas) {
+ QueryWrapper<Areas> wrapper = new QueryWrapper<>(areas);
+ return areasMapper.selectOne(wrapper);
+ }
+
+ @Override
+ public List<Areas> findList(Areas areas) {
+ List<Areas> list = null;
+ Integer type =areas.getType();
+ if(type == null){
+ list = ALL_AREA_LIST;
+ }else if(Constants.equalsInteger(type,Constants.ZERO)){
+ list = PROVINCE_LIST;
+ }else if(Constants.equalsInteger(type,Constants.ONE)){
+ list = CITY_LIST;
+ } else if (Constants.equalsInteger(type,Constants.TWO)){
+ list = AREA_LIST;
+ }
+ List<Areas> result = null;
+ if(StringUtils.isNotBlank(areas.getName())){
+ for(Areas a : list){
+ if(StringUtils.contains(a.getName(),areas.getName())){
+ if(result == null){
+ result = new ArrayList<>();
+ }
+ result.add(a);
+ }
+ }
+ return result;
+ }
+ return list;
+ }
+
+ @Override
+ public List<Areas> listByParentId(Areas areas) {
+ List<Areas> list = null;
+ Integer type =areas.getType();
+ if(type == null){
+ list = ALL_AREA_LIST;
+ }else if(Constants.equalsInteger(type,Constants.ZERO)){
+ list = PROVINCE_LIST;
+ }else if(Constants.equalsInteger(type,Constants.ONE)){
+ list = CITY_LIST;
+ } else if (Constants.equalsInteger(type,Constants.TWO)){
+ list = AREA_LIST;
+ }
+ List<Areas> result = null;
+ if( areas.getParentId() !=null){
+ for(Areas a : list){
+ if(Constants.equalsInteger(a.getParentId(),areas.getParentId())){
+ if(result == null){
+ result = new ArrayList<>();
+ }
+ result.add(a);
+ }
+ }
+ return result;
+ }
+ return list;
+ }
+ @Override
+ public void cacheData() {
+ Areas a = new Areas();
+ a.setIsdeleted(Constants.ZERO);
+ ALL_AREA_LIST = null;
+ PROVINCE_LIST =null;
+ CITY_LIST=null;
+ AREA_LIST = null;
+ ALL_AREA_TREE = null;
+ ALL_AREA_LIST = areasMapper.selectJoinList(Areas.class,new MPJLambdaWrapper<Areas>()
+ .selectAll(Areas.class)
+ .eq(Areas::getIsdeleted,Constants.ZERO)
+ .orderByDesc(Areas::getSortnum));
+ if(ALL_AREA_LIST!=null){
+ for(Areas model : ALL_AREA_LIST){
+ if(Constants.equalsInteger(model.getType(),Constants.ZERO)){
+ if(PROVINCE_LIST == null){
+ PROVINCE_LIST = new ArrayList<>();
+ }
+ PROVINCE_LIST.add(model);
+ }else if(Constants.equalsInteger(model.getType(),Constants.ONE)){
+ if(CITY_LIST == null){
+ CITY_LIST = new ArrayList<>();
+ }
+ CITY_LIST.add(model);
+ if(model.getParentId() != null){
+ Areas p = findById(model.getParentId());
+ if(p!=null ){
+ model.setProvinceId(p.getId());
+ model.setProvinceName(p.getName());
+ }
+ }
+ }else if(Constants.equalsInteger(model.getType(),Constants.TWO)){
+ if(AREA_LIST == null){
+ AREA_LIST = new ArrayList<>();
+ }
+ AREA_LIST.add(model);
+ Areas city = findById(model.getParentId());
+ if(city!=null ){
+ model.setCityId(city.getId());
+ model.setCityName(city.getName());
+ if(city!=null && city.getParentId()!=null){
+ Areas p = findById(city.getParentId());
+ if(p!=null ){
+ model.setProvinceId(p.getId());
+ model.setProvinceName(p.getName());
+ }
+ }
+ }
+ }
+ }
+ }
+ if(CITY_LIST!=null){
+ for(Areas aa : CITY_LIST){
+ aa.setChildList(findChildByParentId(aa.getId(), AREA_LIST));
+ }
+ }
+ if(PROVINCE_LIST!=null){
+ for(Areas aa : PROVINCE_LIST){
+ aa.setChildList(findChildByParentId(aa.getId(),CITY_LIST));
+ }
+ }
+ System.out.println("=================");
+ }
+
+ @Override
+ public PageData<Areas> findPage(PageWrap<Areas> pageWrap) {
+ IPage<Areas> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ QueryWrapper<Areas> queryWrapper = new QueryWrapper<>();
+ Utils.MP.blankToNull(pageWrap.getModel());
+ if (pageWrap.getModel().getId() != null) {
+ queryWrapper.lambda().eq(Areas::getId, pageWrap.getModel().getId());
+ }
+
+ if (pageWrap.getModel().getCreator() != null) {
+ queryWrapper.lambda().eq(Areas::getCreator, pageWrap.getModel().getCreator());
+ }
+ if (pageWrap.getModel().getCreateDate() != null) {
+ queryWrapper.lambda().ge(Areas::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+ queryWrapper.lambda().le(Areas::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+ }
+ if (pageWrap.getModel().getEditor() != null) {
+ queryWrapper.lambda().eq(Areas::getEditor, pageWrap.getModel().getEditor());
+ }
+ if (pageWrap.getModel().getEditDate() != null) {
+ queryWrapper.lambda().ge(Areas::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+ queryWrapper.lambda().le(Areas::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+ }
+ if (pageWrap.getModel().getIsdeleted() != null) {
+ queryWrapper.lambda().eq(Areas::getIsdeleted, pageWrap.getModel().getIsdeleted());
+ }
+ if (pageWrap.getModel().getName() != null) {
+ queryWrapper.lambda().eq(Areas::getName, pageWrap.getModel().getName());
+ }
+ if (pageWrap.getModel().getInfo() != null) {
+ queryWrapper.lambda().eq(Areas::getInfo, pageWrap.getModel().getInfo());
+ }
+ if (pageWrap.getModel().getCode() != null) {
+ queryWrapper.lambda().eq(Areas::getCode, pageWrap.getModel().getCode());
+ }
+ if (pageWrap.getModel().getParentId() != null) {
+ queryWrapper.lambda().eq(Areas::getParentId, pageWrap.getModel().getParentId());
+ }
+ if (pageWrap.getModel().getType() != null) {
+ queryWrapper.lambda().eq(Areas::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(areasMapper.selectPage(page, queryWrapper));
+ }
+
+ @Override
+ public long count(Areas areas) {
+ QueryWrapper<Areas> wrapper = new QueryWrapper<>(areas);
+ return areasMapper.selectCount(wrapper);
+ }
+
+ @Override
+ public Areas findByCityAndArea(String cityName, String areasName) {
+ Areas city = findByName(cityName,Constants.ONE);
+ if(city !=null){
+ return findByNameAndParentId(areasName,Constants.TWO,city.getId());
+ }
+ return null;
+ }
+
+ @Override
+ public String getAddress(Integer cityId,Integer areaId){
+ Areas cityAreas = findById(cityId, Constants.ONE);
+ Areas areas = findById(areaId, Constants.TWO);
+
+ String cityName = Optional.ofNullable(cityAreas)
+ .map(s -> s.getProvinceName() + s.getName())
+ .orElseThrow(() -> new BusinessException(ResponseStatus.BAD_REQUEST));
+ String areaName = Optional.ofNullable(areas).map(s -> s.getName()).orElse("");
+
+ return cityName+areaName;
+ }
+
+ @Override
+ public String getAddress(Integer areaId) {
+ Areas areas = findById(areaId, Constants.TWO);
+
+ String cityName = Optional.ofNullable(areas)
+ .map(s -> s.getProvinceName() + s.getCityName())
+ .orElseThrow(() -> new BusinessException(ResponseStatus.BAD_REQUEST));
+ String areaName = Optional.ofNullable(areas).map(s -> s.getName()).orElse("");
+ return cityName+areaName;
+ }
+ public static Areas getAddressByAreaId(Integer areaId) {
+ if(areaId ==null){
+ return null;
+ }
+ if(AREA_LIST!=null){
+ for(Areas a : AREA_LIST){
+ if(Constants.equalsInteger(a.getId(),areaId)){
+ return a;
+// return StringUtils.defaultString(a.getProvinceName(),"")+StringUtils.defaultString(a.getCityName(),"")+StringUtils.defaultString(a.getName(),"")
+ }
+ }
+ }
+ return null;
+ }
+ @Override
+ public List<Areas> getCityList(Areas areas) {
+ //鏌ヨ鍏ㄩ儴鍩庡競鏁版嵁
+ List<Areas> dataList = findByParentId(null,Constants.ONE,0);
+
+ if (StringUtils.isNotBlank(areas.getCityName())){
+ dataList = dataList.stream().filter(s -> s.getName().contains(areas.getCityName())).collect(Collectors.toList());
+ }
+ if(dataList != null){
+ for(Areas c: dataList){
+ c.setFullspell(PinYinUtil.getFullSpell(c.getName()));
+ c.setFirstSpell(PinYinUtil.getFirstFirstSpell(c.getName()));
+ }
+ Collections.sort(dataList);
+ }
+ return dataList;
+ }
+
+}
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/BannerServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/BannerServiceImpl.java
new file mode 100644
index 0000000..53f9009
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/impl/BannerServiceImpl.java
@@ -0,0 +1,148 @@
+package com.doumee.service.business.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.core.constants.Constants;
+import com.doumee.core.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.Utils;
+import com.doumee.dao.business.BannerMapper;
+import com.doumee.dao.business.model.Banner;
+import com.doumee.service.business.BannerService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 杞挱鍥維ervice瀹炵幇
+ * @author rk
+ * @date 2026/04/08
+ */
+@Service
+public class BannerServiceImpl implements BannerService {
+
+ @Autowired
+ private BannerMapper bannerMapper;
+
+ @Override
+ public Integer create(Banner banner) {
+ bannerMapper.insert(banner);
+ return banner.getId();
+ }
+
+ @Override
+ public void deleteById(Integer id) {
+ bannerMapper.deleteById(id);
+ }
+
+ @Override
+ public void delete(Banner banner) {
+ UpdateWrapper<Banner> deleteWrapper = new UpdateWrapper<>(banner);
+ bannerMapper.delete(deleteWrapper);
+ }
+
+ @Override
+ public void deleteByIdInBatch(List<Integer> ids) {
+ if (CollectionUtils.isEmpty(ids)) {
+ return;
+ }
+ bannerMapper.deleteBatchIds(ids);
+ }
+
+ @Override
+ public void updateById(Banner banner) {
+ bannerMapper.updateById(banner);
+ }
+
+ @Override
+ public void updateByIdInBatch(List<Banner> banners) {
+ if (CollectionUtils.isEmpty(banners)) {
+ return;
+ }
+ for (Banner banner : banners) {
+ this.updateById(banner);
+ }
+ }
+
+ @Override
+ public Banner findById(Integer id) {
+ Banner banner = bannerMapper.selectById(id);
+ if (Objects.isNull(banner)) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ return banner;
+ }
+
+ @Override
+ public Banner findOne(Banner banner) {
+ QueryWrapper<Banner> wrapper = new QueryWrapper<>(banner);
+ return bannerMapper.selectOne(wrapper);
+ }
+
+ @Override
+ public List<Banner> findList(Banner banner) {
+ QueryWrapper<Banner> wrapper = new QueryWrapper<>(banner);
+ return bannerMapper.selectList(wrapper);
+ }
+
+ @Override
+ public PageData<Banner> findPage(PageWrap<Banner> pageWrap) {
+ IPage<Banner> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ QueryWrapper<Banner> queryWrapper = new QueryWrapper<>();
+ Utils.MP.blankToNull(pageWrap.getModel());
+ pageWrap.getModel().setDeleted(Constants.ZERO);
+ if (pageWrap.getModel().getId() != null) {
+ queryWrapper.lambda().eq(Banner::getId, pageWrap.getModel().getId());
+ }
+ if (pageWrap.getModel().getDeleted() != null) {
+ queryWrapper.lambda().eq(Banner::getDeleted, pageWrap.getModel().getDeleted());
+ }
+ if (pageWrap.getModel().getCreateUser() != null) {
+ queryWrapper.lambda().eq(Banner::getCreateUser, pageWrap.getModel().getCreateUser());
+ }
+ if (pageWrap.getModel().getCreateTime() != null) {
+ queryWrapper.lambda().ge(Banner::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime()));
+ queryWrapper.lambda().le(Banner::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime()));
+ }
+ if (pageWrap.getModel().getUpdateUser() != null) {
+ queryWrapper.lambda().eq(Banner::getUpdateUser, pageWrap.getModel().getUpdateUser());
+ }
+ if (pageWrap.getModel().getUpdateTime() != null) {
+ queryWrapper.lambda().ge(Banner::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime()));
+ queryWrapper.lambda().le(Banner::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime()));
+ }
+ if (pageWrap.getModel().getStatus() != null) {
+ queryWrapper.lambda().eq(Banner::getStatus, pageWrap.getModel().getStatus());
+ }
+ if (pageWrap.getModel().getType() != null) {
+ queryWrapper.lambda().eq(Banner::getType, pageWrap.getModel().getType());
+ }
+ if (pageWrap.getModel().getPosition() != null) {
+ queryWrapper.lambda().eq(Banner::getPosition, pageWrap.getModel().getPosition());
+ }
+ if (pageWrap.getModel().getShopId() != null) {
+ queryWrapper.lambda().eq(Banner::getShopId, pageWrap.getModel().getShopId());
+ }
+ for (PageWrap.SortData sortData : pageWrap.getSorts()) {
+ if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+ queryWrapper.orderByDesc(sortData.getProperty());
+ } else {
+ queryWrapper.orderByAsc(sortData.getProperty());
+ }
+ }
+ return PageData.from(bannerMapper.selectPage(page, queryWrapper));
+ }
+
+ @Override
+ public long count(Banner banner) {
+ QueryWrapper<Banner> wrapper = new QueryWrapper<>(banner);
+ return bannerMapper.selectCount(wrapper);
+ }
+}
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
new file mode 100644
index 0000000..3bf415e
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java
@@ -0,0 +1,585 @@
+package com.doumee.service.business.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.core.constants.Constants;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.config.jwt.JwtTokenUtil;
+import com.doumee.core.utils.Secure;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.DriverInfoMapper;
+import com.doumee.dao.business.MemberMapper;
+import com.doumee.dao.business.MultifileMapper;
+import com.doumee.dao.business.SmsrecordMapper;
+import com.doumee.dao.business.CategoryMapper;
+import com.doumee.dao.business.model.Category;
+import com.doumee.dao.business.model.DriverInfo;
+import com.doumee.dao.business.model.Member;
+import com.doumee.dao.business.model.Multifile;
+import com.doumee.dao.business.model.Smsrecord;
+import com.doumee.dao.vo.AccountResponse;
+import com.doumee.dao.dto.AuditDTO;
+import com.doumee.dao.dto.DriverLoginRequest;
+import com.doumee.dao.dto.DriverRegisterRequest;
+import com.doumee.dao.dto.DriverVerifyRequest;
+import com.doumee.service.business.AliSmsService;
+import com.doumee.service.business.DriverInfoService;
+import com.alibaba.fastjson.JSONObject;
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 鍙告満娉ㄥ唽淇℃伅Service瀹炵幇
+ * @author rk
+ * @date 2026/04/08
+ */
+@Service
+public class DriverInfoServiceImpl implements DriverInfoService {
+
+ @Autowired
+ private DriverInfoMapper driverInfoMapper;
+
+ @Autowired
+ private MemberMapper memberMapper;
+
+ @Autowired
+ private SmsrecordMapper smsrecordMapper;
+
+ @Autowired
+ private JwtTokenUtil jwtTokenUtil;
+
+ @Autowired
+ private Secure secure;
+
+ @Autowired
+ private RedisTemplate<String, Object> redisTemplate;
+
+ @Autowired
+ private MultifileMapper multifileMapper;
+
+ @Autowired
+ private CategoryMapper categoryMapper;
+
+ @Override
+ public Integer create(DriverInfo driverInfo) {
+ driverInfoMapper.insert(driverInfo);
+ return driverInfo.getId();
+ }
+
+ @Override
+ public void deleteById(Integer id) {
+ driverInfoMapper.deleteById(id);
+ }
+
+ @Override
+ public void delete(DriverInfo driverInfo) {
+ UpdateWrapper<DriverInfo> deleteWrapper = new UpdateWrapper<>(driverInfo);
+ driverInfoMapper.delete(deleteWrapper);
+ }
+
+ @Override
+ public void deleteByIdInBatch(List<Integer> ids) {
+ if (CollectionUtils.isEmpty(ids)) {
+ return;
+ }
+ driverInfoMapper.deleteBatchIds(ids);
+ }
+
+ @Override
+ public void updateById(DriverInfo driverInfo) {
+ driverInfoMapper.updateById(driverInfo);
+ }
+
+ @Override
+ public void updateByIdInBatch(List<DriverInfo> driverInfos) {
+ if (CollectionUtils.isEmpty(driverInfos)) {
+ return;
+ }
+ for (DriverInfo driverInfo : driverInfos) {
+ this.updateById(driverInfo);
+ }
+ }
+
+ @Override
+ public DriverInfo findById(Integer id) {
+ DriverInfo driverInfo = driverInfoMapper.selectById(id);
+ if (Objects.isNull(driverInfo)) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ return driverInfo;
+ }
+
+ @Override
+ public DriverInfo findOne(DriverInfo driverInfo) {
+ QueryWrapper<DriverInfo> wrapper = new QueryWrapper<>(driverInfo);
+ return driverInfoMapper.selectOne(wrapper);
+ }
+
+ @Override
+ public List<DriverInfo> findList(DriverInfo driverInfo) {
+ QueryWrapper<DriverInfo> wrapper = new QueryWrapper<>(driverInfo);
+ return driverInfoMapper.selectList(wrapper);
+ }
+
+ @Override
+ public PageData<DriverInfo> findPage(PageWrap<DriverInfo> pageWrap) {
+ IPage<DriverInfo> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ QueryWrapper<DriverInfo> queryWrapper = new QueryWrapper<>();
+ Utils.MP.blankToNull(pageWrap.getModel());
+ pageWrap.getModel().setDeleted(Constants.ZERO);
+ if (pageWrap.getModel().getId() != null) {
+ queryWrapper.lambda().eq(DriverInfo::getId, pageWrap.getModel().getId());
+ }
+ if (pageWrap.getModel().getDeleted() != null) {
+ queryWrapper.lambda().eq(DriverInfo::getDeleted, pageWrap.getModel().getDeleted());
+ }
+ if (pageWrap.getModel().getCreateUser() != null) {
+ queryWrapper.lambda().eq(DriverInfo::getCreateUser, pageWrap.getModel().getCreateUser());
+ }
+ if (pageWrap.getModel().getCreateTime() != null) {
+ queryWrapper.lambda().ge(DriverInfo::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime()));
+ queryWrapper.lambda().le(DriverInfo::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime()));
+ }
+ if (pageWrap.getModel().getUpdateUser() != null) {
+ queryWrapper.lambda().eq(DriverInfo::getUpdateUser, pageWrap.getModel().getUpdateUser());
+ }
+ if (pageWrap.getModel().getUpdateTime() != null) {
+ queryWrapper.lambda().ge(DriverInfo::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime()));
+ queryWrapper.lambda().le(DriverInfo::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime()));
+ }
+ if (pageWrap.getModel().getRemark() != null) {
+ queryWrapper.lambda().eq(DriverInfo::getRemark, pageWrap.getModel().getRemark());
+ }
+ if (pageWrap.getModel().getName() != null) {
+ queryWrapper.lambda().like(DriverInfo::getName, pageWrap.getModel().getName());
+ }
+ if (pageWrap.getModel().getTelephone() != null) {
+ queryWrapper.lambda().like(DriverInfo::getTelephone, pageWrap.getModel().getTelephone());
+ }
+ if (pageWrap.getModel().getIdcard() != null) {
+ queryWrapper.lambda().eq(DriverInfo::getIdcard, pageWrap.getModel().getIdcard());
+ }
+ if (pageWrap.getModel().getMaritalStatus() != null) {
+ queryWrapper.lambda().eq(DriverInfo::getMaritalStatus, pageWrap.getModel().getMaritalStatus());
+ }
+ if (pageWrap.getModel().getCarType() != null) {
+ queryWrapper.lambda().eq(DriverInfo::getCarType, pageWrap.getModel().getCarType());
+ }
+ if (pageWrap.getModel().getCarCode() != null) {
+ queryWrapper.lambda().like(DriverInfo::getCarCode, pageWrap.getModel().getCarCode());
+ }
+ if (pageWrap.getModel().getCardStartDate() != null) {
+ queryWrapper.lambda().ge(DriverInfo::getCardStartDate, Utils.Date.getStart(pageWrap.getModel().getCardStartDate()));
+ queryWrapper.lambda().le(DriverInfo::getCardStartDate, Utils.Date.getEnd(pageWrap.getModel().getCardStartDate()));
+ }
+ if (pageWrap.getModel().getCardEndDate() != null) {
+ queryWrapper.lambda().ge(DriverInfo::getCardEndDate, Utils.Date.getStart(pageWrap.getModel().getCardEndDate()));
+ queryWrapper.lambda().le(DriverInfo::getCardEndDate, Utils.Date.getEnd(pageWrap.getModel().getCardEndDate()));
+ }
+ if (pageWrap.getModel().getStatus() != null) {
+ queryWrapper.lambda().eq(DriverInfo::getStatus, pageWrap.getModel().getStatus());
+ }
+ if (pageWrap.getModel().getAuditTime() != null) {
+ queryWrapper.lambda().ge(DriverInfo::getAuditTime, Utils.Date.getStart(pageWrap.getModel().getAuditTime()));
+ queryWrapper.lambda().le(DriverInfo::getAuditTime, Utils.Date.getEnd(pageWrap.getModel().getAuditTime()));
+ }
+ if (pageWrap.getModel().getAuditUser() != null) {
+ queryWrapper.lambda().eq(DriverInfo::getAuditUser, pageWrap.getModel().getAuditUser());
+ }
+ if (pageWrap.getModel().getMemberId() != null) {
+ queryWrapper.lambda().eq(DriverInfo::getMemberId, pageWrap.getModel().getMemberId());
+ }
+ for (PageWrap.SortData sortData : pageWrap.getSorts()) {
+ if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+ queryWrapper.orderByDesc(sortData.getProperty());
+ } else {
+ queryWrapper.orderByAsc(sortData.getProperty());
+ }
+ }
+ return PageData.from(driverInfoMapper.selectPage(page, queryWrapper));
+ }
+
+ @Override
+ public long count(DriverInfo driverInfo) {
+ QueryWrapper<DriverInfo> wrapper = new QueryWrapper<>(driverInfo);
+ return driverInfoMapper.selectCount(wrapper);
+ }
+
+ /***************鍙告満楠岃瘉鐮佺櫥褰曚笟鍔�*************/
+
+ @Override
+ public void sendRegisterCode(String telephone) {
+ if (StringUtils.isBlank(telephone)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ // 鐢熸垚6浣嶆暟瀛楅獙璇佺爜
+ String code = RandomStringUtils.randomNumeric(6);
+ // 鍙戦�佺煭淇�
+ String templateParam = "{\"code\":\"" + code + "\"}";
+ AliSmsService.sendSms(telephone, "SMS_491325122", templateParam);
+ // 淇濆瓨鐭俊璁板綍
+ Smsrecord smsrecord = new Smsrecord();
+ smsrecord.setDeleted(Constants.ZERO);
+ smsrecord.setCreateTime(new Date());
+ smsrecord.setUpdateTime(new Date());
+ smsrecord.setPhone(telephone);
+ smsrecord.setContent("鍙告満楠岃瘉鐮佺櫥褰曪細" + code);
+ smsrecord.setType(Constants.ZERO);
+ smsrecord.setCode(code);
+ smsrecord.setStatus(Constants.ZERO);
+ // 鏈夋晥鏈�15鍒嗛挓
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(new Date());
+ calendar.add(Calendar.MINUTE, 15);
+ smsrecord.setValidDate(calendar.getTime());
+ smsrecordMapper.insert(smsrecord);
+ }
+
+ @Override
+ @Transactional
+ public AccountResponse register(DriverRegisterRequest request) {
+ String telephone = request.getTelephone();
+ String code = request.getCode();
+ if (StringUtils.isAnyBlank(telephone, code)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ // 1. 楠岃瘉鐭俊楠岃瘉鐮�
+ QueryWrapper<Smsrecord> smsWrapper = new QueryWrapper<>();
+ smsWrapper.lambda().eq(Smsrecord::getPhone, telephone)
+ .eq(Smsrecord::getCode, code)
+ .eq(Smsrecord::getType, Constants.ZERO)
+ .eq(Smsrecord::getStatus, Constants.ZERO)
+ .ge(Smsrecord::getValidDate, new Date())
+ .orderByDesc(Smsrecord::getCreateTime)
+ .last("limit 1");
+ Smsrecord smsrecord = smsrecordMapper.selectOne(smsWrapper);
+ if (Objects.isNull(smsrecord)) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "楠岃瘉鐮侀敊璇垨宸茶繃鏈�");
+ }
+ // 鏍囪楠岃瘉鐮佸凡浣跨敤
+ smsrecord.setStatus(Constants.ONE);
+ smsrecord.setUpdateTime(new Date());
+ smsrecordMapper.updateById(smsrecord);
+
+ // 2. 鏌ヨ鏄惁宸叉湁鍙告満璐﹀彿
+ Member existMember = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
+ .eq(Member::getTelephone, telephone)
+ .eq(Member::getUserType, Constants.ONE)
+ .ne(Member::getStatus, Constants.TWO)
+ .last("limit 1"));
+
+ Date now = new Date();
+ Member member;
+
+ if (Objects.nonNull(existMember)) {
+ // 宸叉湁鍙告満璐﹀彿锛岀洿鎺ョ櫥褰�
+ if (!Constants.equalsInteger(existMember.getStatus(), Constants.ZERO)) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "璐﹀彿宸插仠鐢紝璇疯仈绯荤鐞嗗憳");
+ }
+ // 鏇存柊鐧诲綍淇℃伅
+ memberMapper.update(new UpdateWrapper<Member>().lambda()
+ .set(Member::getLoginTime, now)
+ .setSql("login_times = login_times + 1")
+ .eq(Member::getId, existMember.getId()));
+ // 鏇存柊鍐呭瓨涓殑鐧诲綍淇℃伅
+ existMember.setLoginTime(now);
+ existMember.setLoginTimes(existMember.getLoginTimes() + 1);
+ member = existMember;
+ } else {
+ // 娌℃湁鍙告満璐﹀彿锛屾敞鍐屾柊鐢ㄦ埛锛岄粯璁ゅ瘑鐮佷负鎵嬫満鍙峰悗鍏綅
+ String salt = RandomStringUtils.randomAlphanumeric(6);
+ String defaultPassword = telephone.substring(telephone.length() - 6);
+ member = new Member();
+ member.setDeleted(Constants.ZERO);
+ member.setCreateTime(now);
+ member.setUpdateTime(now);
+ member.setTelephone(telephone);
+ member.setNickName(telephone);
+ member.setName(telephone);
+ member.setUserType(Constants.ONE);
+ member.setDriverStatus(Constants.ZERO);
+ member.setPassword(secure.encryptPassword(defaultPassword, salt));
+ member.setSalt(salt);
+ member.setWorkerIdentity(Constants.ZERO);
+ member.setDriverIdentity(Constants.ZERO);
+ member.setChefIdentity(Constants.ZERO);
+ member.setAmount(Constants.ZERO.longValue());
+ member.setTotalAmount(Constants.ZERO.longValue());
+ member.setStatus(Constants.ZERO);
+ member.setLoginTime(now);
+ member.setLoginTimes(Constants.ONE.longValue());
+ member.setReceiveNum(Constants.ZERO.longValue());
+ member.setPublishNum(Constants.ZERO.longValue());
+ member.setAutoReceiveStatus(Constants.ONE);
+ member.setUseIdentity(Constants.ZERO);
+ memberMapper.insert(member);
+
+ // 鍒涘缓鍙告満鍩虹淇℃伅锛坰tatus=0锛屾敞鍐岀姸鎬侊級
+ DriverInfo driverInfo = new DriverInfo();
+ driverInfo.setDeleted(Constants.ZERO);
+ driverInfo.setCreateTime(now);
+ driverInfo.setUpdateTime(now);
+ driverInfo.setTelephone(telephone);
+ driverInfo.setMemberId(member.getId());
+ driverInfo.setStatus(Constants.ZERO);
+ driverInfoMapper.insert(driverInfo);
+ }
+
+ // 3. 鐢熸垚token杩斿洖
+ AccountResponse accountResponse = new AccountResponse();
+ accountResponse.setToken(JwtTokenUtil.generateTokenForRedis(member.getId(), Constants.ONE, JSONObject.toJSONString(member), redisTemplate));
+ accountResponse.setMember(member);
+ return accountResponse;
+ }
+
+ @Override
+ public AccountResponse login(DriverLoginRequest request) {
+ String telephone = request.getTelephone();
+ String password = request.getPassword();
+ if (StringUtils.isAnyBlank(telephone, password)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ // 鏌ヨ鍙告満浼氬憳
+ Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
+ .eq(Member::getTelephone, telephone)
+ .eq(Member::getUserType, Constants.ONE)
+ .ne(Member::getStatus, Constants.TWO)
+ .last("limit 1"));
+ if (Objects.isNull(member)) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "璐﹀彿涓嶅瓨鍦�");
+ }
+ if (!Constants.equalsInteger(member.getStatus(), Constants.ZERO)) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "璐﹀彿宸插仠鐢紝璇疯仈绯荤鐞嗗憳");
+ }
+ // 鏍¢獙瀵嗙爜
+ String encryptPwd = secure.encryptPassword(password, member.getSalt());
+ if (!encryptPwd.equals(member.getPassword())) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵嗙爜閿欒");
+ }
+ // 鏇存柊鐧诲綍淇℃伅
+ memberMapper.update(new UpdateWrapper<Member>().lambda()
+ .set(Member::getLoginTime, new Date())
+ .setSql("login_times = login_times + 1")
+ .eq(Member::getId, member.getId()));
+
+ AccountResponse accountResponse = new AccountResponse();
+ accountResponse.setToken(JwtTokenUtil.generateTokenForRedis(member.getId(), Constants.ONE, JSONObject.toJSONString(member), redisTemplate));
+ accountResponse.setMember(member);
+ return accountResponse;
+ }
+
+ /***************鍙告満瀹炲悕璁よ瘉涓氬姟*************/
+
+ @Override
+ @Transactional
+ public void submitVerify(Integer memberId, DriverVerifyRequest request) {
+ // 鍙傛暟鍩虹鏍¢獙
+ if (StringUtils.isAnyBlank(request.getName(), request.getIdcard(), request.getLivePlace(),
+ request.getCarCode(), request.getIdcardImg(), request.getIdcardImgBack())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ if (request.getMaritalStatus() == null || request.getCarType() == null) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ // 韬唤璇佸彿鏍煎紡鏍¢獙锛�18浣嶏紝鏈�鍚庝竴浣嶅彲涓篨锛�
+ if (!request.getIdcard().matches("^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[\\dXx]$")) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "韬唤璇佸彿鏍煎紡涓嶆纭�");
+ }
+ // 鏌ヨ鍙告満淇℃伅
+ DriverInfo driverInfo = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
+ .eq(DriverInfo::getMemberId, memberId)
+ .eq(DriverInfo::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ if (Objects.isNull(driverInfo)) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ // 鐘舵�佹牎楠岋細status=0(娉ㄥ唽)鎴杝tatus=3(瀹℃壒椹冲洖)鍙彁浜よ璇�
+ if (driverInfo.getStatus() != null
+ && !Constants.equalsInteger(driverInfo.getStatus(), Constants.ZERO)
+ && !Constants.equalsInteger(driverInfo.getStatus(), Constants.THREE)) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "褰撳墠鐘舵�佷笉鍏佽鎻愪氦璁よ瘉");
+ }
+ // 鏍规嵁杞﹁締绫诲瀷鍒ゆ柇鏄惁闇�瑕侀┚椹惰瘉
+ Category category = categoryMapper.selectById(request.getCarType());
+ if (Objects.isNull(category) || !Constants.equalsInteger(category.getType(), Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "杞﹁締绫诲瀷涓嶅瓨鍦�");
+ }
+ boolean needLicense = Constants.equalsInteger(Integer.valueOf(category.getOtherField()), Constants.ONE);
+ if (needLicense) {
+ if (request.getCardStartDate() == null || request.getCardEndDate() == null) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "璇ヨ溅杈嗙被鍨嬮渶瑕佸~鍐欓┚椹惰瘉鏈夋晥鏈�");
+ }
+ if (request.getLicenseImgUrls() == null || request.getLicenseImgUrls().isEmpty()) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "璇ヨ溅杈嗙被鍨嬮渶瑕佷笂浼犻┚椹惰瘉鐓х墖");
+ }
+ }
+ // 杞﹁締鐓х墖蹇呭~
+ if (request.getCarImgUrls() == null || request.getCarImgUrls().isEmpty()) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "璇蜂笂浼犺溅杈嗙収鐗�");
+ }
+ // 鐓х墖鏁伴噺鏍¢獙
+ if (request.getCarImgUrls().size() > 3) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "杞﹁締鐓х墖鏈�澶氫笂浼�3寮�");
+ }
+ if (request.getLicenseImgUrls() != null && request.getLicenseImgUrls().size() > 3) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "椹鹃┒璇佺収鐗囨渶澶氫笂浼�3寮�");
+ }
+ if (request.getOtherImgUrls() != null && request.getOtherImgUrls().size() > 3) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鍏朵粬璧勬枡鐓х墖鏈�澶氫笂浼�3寮�");
+ }
+
+ // 鏇存柊鍙告満淇℃伅
+ Date now = new Date();
+ driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda()
+ .set(DriverInfo::getName, request.getName())
+ .set(DriverInfo::getIdcard, request.getIdcard())
+ .set(DriverInfo::getMaritalStatus, request.getMaritalStatus())
+ .set(DriverInfo::getAreaId, request.getAreaId())
+ .set(DriverInfo::getLivePlace, request.getLivePlace())
+ .set(DriverInfo::getCarCode, request.getCarCode())
+ .set(DriverInfo::getCarType, request.getCarType())
+ .set(DriverInfo::getCarColor, request.getCarColor())
+ .set(DriverInfo::getCardStartDate, request.getCardStartDate())
+ .set(DriverInfo::getCardEndDate, request.getCardEndDate())
+ .set(DriverInfo::getIdcardImg, request.getIdcardImg())
+ .set(DriverInfo::getIdcardImgBack, request.getIdcardImgBack())
+ .set(DriverInfo::getStatus, Constants.ONE)
+ .set(DriverInfo::getUpdateTime, now)
+ .set(DriverInfo::getAuditRemark, null)
+ .set(DriverInfo::getAuditTime, null)
+ .eq(DriverInfo::getId, driverInfo.getId()));
+
+ // 鍒犻櫎鏃х殑鐓х墖璁板綍
+ multifileMapper.delete(new QueryWrapper<Multifile>().lambda()
+ .eq(Multifile::getObjId, driverInfo.getId())
+ .in(Multifile::getObjType, 6, 7, 8));
+
+ // 淇濆瓨杞﹁締鐓х墖 objType=6
+ saveMultifileList(driverInfo.getId(), 6, request.getCarImgUrls(), now);
+ // 淇濆瓨椹鹃┒璇佺収鐗� objType=7
+ if (!CollectionUtils.isEmpty(request.getLicenseImgUrls())) {
+ saveMultifileList(driverInfo.getId(), 7, request.getLicenseImgUrls(), now);
+ }
+ // 淇濆瓨鍏朵粬璧勬枡鐓х墖 objType=8
+ if (!CollectionUtils.isEmpty(request.getOtherImgUrls())) {
+ saveMultifileList(driverInfo.getId(), 8, request.getOtherImgUrls(), now);
+ }
+
+ // 鏇存柊浼氬憳鍙告満璁よ瘉鐘舵�佷负璁よ瘉涓�
+ memberMapper.update(new UpdateWrapper<Member>().lambda()
+ .set(Member::getDriverStatus, Constants.ONE)
+ .set(Member::getUpdateTime, now)
+ .eq(Member::getId, memberId));
+ }
+
+ @Override
+ public DriverInfo getVerifyDetail(Integer memberId) {
+ DriverInfo driverInfo = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
+ .eq(DriverInfo::getMemberId, memberId)
+ .eq(DriverInfo::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ if (Objects.isNull(driverInfo)) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ // 鏌ヨ杞﹁締绫诲瀷鍚嶇О鍜屾槸鍚﹂渶瑕侀┚椹惰瘉
+ if (driverInfo.getCarType() != null) {
+ Category category = categoryMapper.selectById(driverInfo.getCarType());
+ if (Objects.nonNull(category)) {
+ driverInfo.setCarTypeName(category.getName());
+ driverInfo.setNeedLicense(Constants.equalsInteger(Integer.valueOf(category.getOtherField()), Constants.ONE) ? Constants.ONE : Constants.ZERO);
+ }
+ }
+ // 鏌ヨ鐓х墖鍒楄〃
+ List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
+ .eq(Multifile::getObjId, driverInfo.getId())
+ .in(Multifile::getObjType, 6, 7, 8)
+ .orderByAsc(Multifile::getSortnum));
+ if (!CollectionUtils.isEmpty(multifileList)) {
+ for (Multifile mf : multifileList) {
+ if (Constants.equalsInteger(mf.getObjType(), 6)) {
+ driverInfo.getCarImgList().add(mf);
+ } else if (Constants.equalsInteger(mf.getObjType(), 7)) {
+ driverInfo.getLicenseImgList().add(mf);
+ } else if (Constants.equalsInteger(mf.getObjType(), 8)) {
+ driverInfo.getOtherImgList().add(mf);
+ }
+ }
+ }
+ return driverInfo;
+ }
+
+ @Override
+ @Transactional
+ public void auditVerify(AuditDTO auditDTO) {
+ if (Objects.isNull(auditDTO.getId()) || Objects.isNull(auditDTO.getAuditStatus())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ DriverInfo driverInfo = driverInfoMapper.selectById(auditDTO.getId());
+ if (Objects.isNull(driverInfo)) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ // 鍙湁鐘舵�佷负1(寰呭鎵�)涓斿凡濉啓璁よ瘉淇℃伅鎵嶈兘瀹℃壒
+ if (!Constants.equalsInteger(driverInfo.getStatus(), Constants.ONE)
+ || StringUtils.isBlank(driverInfo.getIdcard())) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "褰撳墠鐘舵�佷笉鍏佽瀹℃壒");
+ }
+ Date now = new Date();
+ // 瀹℃壒缁撴灉锛歛uditDTO.auditStatus 0=閫氳繃鈫抎riverInfo.status=2锛�1=鎷掔粷鈫抎riverInfo.status=3
+ Integer newStatus;
+ if (Constants.equalsInteger(auditDTO.getAuditStatus(), Constants.ZERO)) {
+ newStatus = Constants.TWO; // 瀹℃壒閫氳繃
+ } else if (Constants.equalsInteger(auditDTO.getAuditStatus(), Constants.ONE)) {
+ newStatus = Constants.THREE; // 瀹℃壒椹冲洖
+ } else {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀹℃壒鐘舵�佸弬鏁伴敊璇�");
+ }
+ // 鏇存柊鍙告満鐘舵��
+ driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda()
+ .set(DriverInfo::getStatus, newStatus)
+ .set(DriverInfo::getAuditTime, now)
+ .set(DriverInfo::getAuditRemark, auditDTO.getAuditRemark())
+ .set(DriverInfo::getAuditUser, auditDTO.getAuditUser())
+ .set(DriverInfo::getUpdateTime, now)
+ .eq(DriverInfo::getId, auditDTO.getId()));
+ // 鏇存柊浼氬憳鍙告満璁よ瘉鐘舵�侊細閫氳繃=2锛岄┏鍥�=3
+ Integer driverStatus = Constants.equalsInteger(newStatus, Constants.TWO) ? Constants.TWO : Constants.THREE;
+ memberMapper.update(new UpdateWrapper<Member>().lambda()
+ .set(Member::getDriverStatus, driverStatus)
+ .set(Member::getUpdateTime, now)
+ .eq(Member::getId, driverInfo.getMemberId()));
+ }
+
+ /**
+ * 鎵归噺淇濆瓨闄勪欢璁板綍
+ */
+ private void saveMultifileList(Integer objId, Integer objType, List<String> urls, Date now) {
+ int sortNum = 0;
+ for (String url : urls) {
+ Multifile multifile = new Multifile();
+ multifile.setObjId(objId);
+ multifile.setObjType(objType);
+ multifile.setType(Constants.ZERO);
+ multifile.setFileurl(url);
+ multifile.setIsdeleted(Constants.ZERO);
+ multifile.setCreateDate(now);
+ multifile.setSortnum(sortNum++);
+ multifileMapper.insert(multifile);
+ }
+ }
+
+}
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 16cb9e2..33dc998 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
@@ -69,6 +69,10 @@
@Autowired
private SystemDictDataBiz systemDictDataBiz;
+ @Autowired
+ private RedisTemplate<String,Object> redisTemplate;
+
+
@Override
public Integer create(Member member) {
memberMapper.insert(member);
@@ -271,13 +275,18 @@
if (StringUtils.isBlank(openId)) {
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鑾峰彇openid澶辫触锛佽鑱旂郴绠$悊鍛�");
}
- Member member = memberMapper.selectOne(new QueryWrapper<Member>().eq("openid", openId).eq("DELETED", Constants.ZERO).last("limit 1"));
+ Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getOpenid, openId).eq(Member::getUserType,Constants.ZERO)
+ .eq(Member::getDeleted, Constants.ZERO).ne(Member::getStatus, Constants.TWO).last("limit 1"));
AccountResponse accountResponse = new AccountResponse();
accountResponse.setOpenid(openId);
if(Objects.isNull(member)){
return accountResponse;
}
- accountResponse.setToken(jwtTokenUtil.generateToken(member));
+ if(!Constants.equalsInteger(member.getStatus(),Constants.ZERO)){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝璐﹀彿宸茬鐢紝璇疯仈绯荤鐞嗗憳!");
+ }
+ String token = JwtTokenUtil.generateTokenForRedis(member.getId(), Constants.ZERO, JSONObject.toJSONString(member), redisTemplate);
+ accountResponse.setToken(token);
accountResponse.setMember(member);
return accountResponse;
} catch (WxErrorException e) {
@@ -301,8 +310,12 @@
if(Objects.isNull(mobile)){
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈幏鍙栧埌鎵嬫満鍙�");
}
- Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getTelephone,mobile).last("limit 1"));
+ Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getTelephone,mobile).eq(Member::getUserType,Constants.ZERO)
+ .ne(Member::getStatus, Constants.TWO).last("limit 1"));
if(Objects.nonNull(member)){
+ if(!Constants.equalsInteger(member.getStatus(),Constants.ZERO)){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝璐﹀彿宸茬鐢紝璇疯仈绯荤鐞嗗憳!");
+ }
memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getTelephone,mobile)
.set(Member::getOpenid,wxPhoneRequest.getOpenid()).set(Member::getUpdateTime,new Date()).eq(Member::getId,member.getId()));
}else{
@@ -328,8 +341,9 @@
member.setUseIdentity(Constants.ZERO);
memberMapper.insert(member);
}
+ String token = JwtTokenUtil.generateTokenForRedis(member.getId(), Constants.ZERO, JSONObject.toJSONString(member), redisTemplate);
AccountResponse accountResponse = new AccountResponse();
- accountResponse.setToken(jwtTokenUtil.generateToken(member));
+ accountResponse.setToken(token);
accountResponse.setMember(member);
return accountResponse;
} catch (Exception e) {
@@ -359,25 +373,25 @@
}
- @Override
- public void editUseIdentity(Member member){
- if(Objects.isNull(member)
- || Objects.isNull(member.getUseIdentity())){
- throw new BusinessException(ResponseStatus.BAD_REQUEST);
- }
- if(Constants.equalsInteger(member.getUseIdentity(),Constants.ZERO)){
- member.setUseIdentity(Constants.ZERO);
- memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getUseIdentity,Constants.ZERO).eq(Member::getId,member.getId()));
- }else{
- if(identityInfoMapper.selectCount(new QueryWrapper<IdentityInfo>().lambda().eq(IdentityInfo::getDeleted,Constants.ZERO)
- .eq(IdentityInfo::getMemberId,member.getId())
- .eq(IdentityInfo::getAuditStatus,Constants.TWO))>Constants.ZERO){
- memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getUseIdentity,Constants.ONE).eq(Member::getId,member.getId()));
- }else{
- throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠鏃犲彲鐢ㄦ帴鍗曡韩浠�!");
- }
- }
- }
+// @Override
+// public void editUseIdentity(Member member){
+// if(Objects.isNull(member)
+// || Objects.isNull(member.getUseIdentity())){
+// throw new BusinessException(ResponseStatus.BAD_REQUEST);
+// }
+// if(Constants.equalsInteger(member.getUseIdentity(),Constants.ZERO)){
+// member.setUseIdentity(Constants.ZERO);
+// memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getUseIdentity,Constants.ZERO).eq(Member::getId,member.getId()));
+// }else{
+// if(identityInfoMapper.selectCount(new QueryWrapper<IdentityInfo>().lambda().eq(IdentityInfo::getDeleted,Constants.ZERO)
+// .eq(IdentityInfo::getMemberId,member.getId())
+// .eq(IdentityInfo::getAuditStatus,Constants.TWO))>Constants.ZERO){
+// memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getUseIdentity,Constants.ONE).eq(Member::getId,member.getId()));
+// }else{
+// throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠鏃犲彲鐢ㄦ帴鍗曡韩浠�!");
+// }
+// }
+// }
@Override
@@ -391,29 +405,29 @@
+systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MEMBER_FILES).getCode();
member.setFullCoverImage(path + member.getCoverImage());
}
- UserCenterVO userCenterVO = new UserCenterVO();
- userCenterVO.setReleaseTaskTotal(Constants.ZERO);
- userCenterVO.setWaitReceiveTotal(Constants.ZERO);
- userCenterVO.setDoingTotal(Constants.ZERO);
- userCenterVO.setWaitCommentTotal(Constants.ZERO);
- userCenterVO.setTaskingTotal(Constants.ZERO);
- userCenterVO.setDoneTotal(Constants.ZERO);
- userCenterVO.setReceiveTotal(Constants.ZERO);
- List<Orders> releaseOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda().eq(Orders::getDeleted,Constants.ZERO)
- .eq(Orders::getReleaseMemberId,member.getId()));
- if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(releaseOrders)){
- userCenterVO.setReleaseTaskTotal(releaseOrders.size());
- userCenterVO.setWaitCommentTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.done.getKey())&&Constants.equalsInteger(i.getCommentStatus(),Constants.ZERO)).collect(Collectors.toList()).size());
- userCenterVO.setDoingTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.doing.getKey())).collect(Collectors.toList()).size());
- userCenterVO.setWaitReceiveTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.wait.getKey())).collect(Collectors.toList()).size());
- }
- List<Orders> acceptOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda().eq(Orders::getDeleted,Constants.ZERO).eq(Orders::getAcceptMemberId,member.getId()));
- if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(acceptOrders)){
- userCenterVO.setReceiveTotal(acceptOrders.size());
- userCenterVO.setTaskingTotal(acceptOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.doing.getKey())).collect(Collectors.toList()).size());
- userCenterVO.setDoneTotal(acceptOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.done.getKey())).collect(Collectors.toList()).size());
- }
- member.setUserCenterVO(userCenterVO);
+// UserCenterVO userCenterVO = new UserCenterVO();
+// userCenterVO.setReleaseTaskTotal(Constants.ZERO);
+// userCenterVO.setWaitReceiveTotal(Constants.ZERO);
+// userCenterVO.setDoingTotal(Constants.ZERO);
+// userCenterVO.setWaitCommentTotal(Constants.ZERO);
+// userCenterVO.setTaskingTotal(Constants.ZERO);
+// userCenterVO.setDoneTotal(Constants.ZERO);
+// userCenterVO.setReceiveTotal(Constants.ZERO);
+// List<Orders> releaseOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda().eq(Orders::getDeleted,Constants.ZERO)
+// .eq(Orders::getReleaseMemberId,member.getId()));
+// if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(releaseOrders)){
+// userCenterVO.setReleaseTaskTotal(releaseOrders.size());
+// userCenterVO.setWaitCommentTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.done.getKey())&&Constants.equalsInteger(i.getCommentStatus(),Constants.ZERO)).collect(Collectors.toList()).size());
+// userCenterVO.setDoingTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.doing.getKey())).collect(Collectors.toList()).size());
+// userCenterVO.setWaitReceiveTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.wait.getKey())).collect(Collectors.toList()).size());
+// }
+// List<Orders> acceptOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda().eq(Orders::getDeleted,Constants.ZERO).eq(Orders::getAcceptMemberId,member.getId()));
+// if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(acceptOrders)){
+// userCenterVO.setReceiveTotal(acceptOrders.size());
+// userCenterVO.setTaskingTotal(acceptOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.doing.getKey())).collect(Collectors.toList()).size());
+// userCenterVO.setDoneTotal(acceptOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.done.getKey())).collect(Collectors.toList()).size());
+// }
+// member.setUserCenterVO(userCenterVO);
return member;
}
@@ -424,20 +438,33 @@
public UserCenterVO getPlatformAboutUs(){
UserCenterVO userCenterVO = new UserCenterVO();
userCenterVO.setAboutUs(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ABOUT_US).getCode()));
- userCenterVO.setFeeStandards(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.FEE_STANDARDS).getCode()));
- userCenterVO.setServerIntroduce(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SERVER_INTRODUCE).getCode()));
- userCenterVO.setServerPhone(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SERVER_PHONE).getCode()));
userCenterVO.setUserAgreement(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.USER_AGREEMENT).getCode()));
userCenterVO.setPrivacyAgreement(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PRIVACY_AGREEMENT).getCode()));
+
+// userCenterVO.setFeeStandards(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.FEE_STANDARDS).getCode()));
+// userCenterVO.setServerIntroduce(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SERVER_INTRODUCE).getCode()));
+// userCenterVO.setServerPhone(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SERVER_PHONE).getCode()));
return userCenterVO;
}
@Override
- public void logOff(String token,Integer memberId){
+ public void logOut(String token,Integer memberId){
memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" openid = null ").eq(Member::getId,memberId));
jwtTokenUtil.logoutForH5(token);
}
+ @Override
+ public void logOff(String token,Integer memberId){
+ Member member = memberMapper.selectById(memberId);
+ if(Objects.nonNull(member)){
+ memberMapper.update(new UpdateWrapper<Member>().lambda()
+// .set(Member::getOpenId,null)
+ .set(Member::getStatus,Constants.TWO)
+ .eq(Member::getId,member.getId())
+ );
+ }
+ redisTemplate.delete(token);
+ }
}
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/PricingRuleServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/PricingRuleServiceImpl.java
new file mode 100644
index 0000000..b82f12d
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/impl/PricingRuleServiceImpl.java
@@ -0,0 +1,602 @@
+package com.doumee.service.business.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.core.constants.Constants;
+import com.doumee.core.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.Utils;
+import com.doumee.dao.business.CategoryMapper;
+import com.doumee.dao.business.PricingRuleMapper;
+import com.doumee.dao.business.model.Category;
+import com.doumee.dao.business.model.PricingRule;
+import com.doumee.dao.dto.LocalStoragePricingItemDTO;
+import com.doumee.dao.dto.LocalStoragePricingSaveDTO;
+import com.doumee.dao.dto.RemoteDeliveryPricingItemDTO;
+import com.doumee.dao.dto.RemoteDeliveryPricingSaveDTO;
+import com.doumee.dao.dto.EstimatedDeliverySaveDTO;
+import com.doumee.dao.dto.StoreDepositItemDTO;
+import com.doumee.dao.dto.StoreDepositSaveDTO;
+import com.doumee.dao.dto.RevenueShareItemDTO;
+import com.doumee.dao.dto.RevenueShareSaveDTO;
+import com.doumee.dao.vo.LocalStoragePricingVO;
+import com.doumee.dao.vo.RemoteDeliveryPricingVO;
+import com.doumee.dao.vo.EstimatedDeliveryVO;
+import com.doumee.dao.vo.StoreDepositVO;
+import com.doumee.dao.vo.RevenueShareVO;
+import com.doumee.service.business.PricingRuleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 璁′环瑙勫垯閰嶇疆Service瀹炵幇
+ * @author rk
+ * @date 2026/04/08
+ */
+@Service
+public class PricingRuleServiceImpl implements PricingRuleService {
+
+ @Autowired
+ private PricingRuleMapper pricingRuleMapper;
+
+ @Autowired
+ private CategoryMapper categoryMapper;
+
+ @Override
+ public Integer create(PricingRule pricingRule) {
+ pricingRuleMapper.insert(pricingRule);
+ return pricingRule.getId();
+ }
+
+ @Override
+ public void deleteById(Integer id) {
+ pricingRuleMapper.deleteById(id);
+ }
+
+ @Override
+ public void delete(PricingRule pricingRule) {
+ UpdateWrapper<PricingRule> deleteWrapper = new UpdateWrapper<>(pricingRule);
+ pricingRuleMapper.delete(deleteWrapper);
+ }
+
+ @Override
+ public void deleteByIdInBatch(List<Integer> ids) {
+ if (CollectionUtils.isEmpty(ids)) {
+ return;
+ }
+ pricingRuleMapper.deleteBatchIds(ids);
+ }
+
+ @Override
+ public void updateById(PricingRule pricingRule) {
+ pricingRuleMapper.updateById(pricingRule);
+ }
+
+ @Override
+ public void updateByIdInBatch(List<PricingRule> pricingRules) {
+ if (CollectionUtils.isEmpty(pricingRules)) {
+ return;
+ }
+ for (PricingRule pricingRule : pricingRules) {
+ this.updateById(pricingRule);
+ }
+ }
+
+ @Override
+ public PricingRule findById(Integer id) {
+ PricingRule pricingRule = pricingRuleMapper.selectById(id);
+ if (Objects.isNull(pricingRule)) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ return pricingRule;
+ }
+
+ @Override
+ public PricingRule findOne(PricingRule pricingRule) {
+ QueryWrapper<PricingRule> wrapper = new QueryWrapper<>(pricingRule);
+ return pricingRuleMapper.selectOne(wrapper);
+ }
+
+ @Override
+ public List<PricingRule> findList(PricingRule pricingRule) {
+ QueryWrapper<PricingRule> wrapper = new QueryWrapper<>(pricingRule);
+ return pricingRuleMapper.selectList(wrapper);
+ }
+
+ @Override
+ public PageData<PricingRule> findPage(PageWrap<PricingRule> pageWrap) {
+ IPage<PricingRule> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ QueryWrapper<PricingRule> queryWrapper = new QueryWrapper<>();
+ Utils.MP.blankToNull(pageWrap.getModel());
+ pageWrap.getModel().setDeleted(Constants.ZERO);
+ if (pageWrap.getModel().getId() != null) {
+ queryWrapper.lambda().eq(PricingRule::getId, pageWrap.getModel().getId());
+ }
+ if (pageWrap.getModel().getDeleted() != null) {
+ queryWrapper.lambda().eq(PricingRule::getDeleted, pageWrap.getModel().getDeleted());
+ }
+ if (pageWrap.getModel().getCreateUser() != null) {
+ queryWrapper.lambda().eq(PricingRule::getCreateUser, pageWrap.getModel().getCreateUser());
+ }
+ if (pageWrap.getModel().getCreateTime() != null) {
+ queryWrapper.lambda().ge(PricingRule::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime()));
+ queryWrapper.lambda().le(PricingRule::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime()));
+ }
+ if (pageWrap.getModel().getUpdateUser() != null) {
+ queryWrapper.lambda().eq(PricingRule::getUpdateUser, pageWrap.getModel().getUpdateUser());
+ }
+ if (pageWrap.getModel().getUpdateTime() != null) {
+ queryWrapper.lambda().ge(PricingRule::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime()));
+ queryWrapper.lambda().le(PricingRule::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime()));
+ }
+ if (pageWrap.getModel().getRemark() != null) {
+ queryWrapper.lambda().eq(PricingRule::getRemark, pageWrap.getModel().getRemark());
+ }
+ if (pageWrap.getModel().getCityId() != null) {
+ queryWrapper.lambda().eq(PricingRule::getCityId, pageWrap.getModel().getCityId());
+ }
+ if (pageWrap.getModel().getType() != null) {
+ queryWrapper.lambda().eq(PricingRule::getType, pageWrap.getModel().getType());
+ }
+ if (pageWrap.getModel().getFieldA() != null) {
+ queryWrapper.lambda().eq(PricingRule::getFieldA, pageWrap.getModel().getFieldA());
+ }
+ if (pageWrap.getModel().getFieldB() != null) {
+ queryWrapper.lambda().eq(PricingRule::getFieldB, pageWrap.getModel().getFieldB());
+ }
+ if (pageWrap.getModel().getFieldC() != null) {
+ queryWrapper.lambda().eq(PricingRule::getFieldC, pageWrap.getModel().getFieldC());
+ }
+ if (pageWrap.getModel().getFieldD() != null) {
+ queryWrapper.lambda().eq(PricingRule::getFieldD, pageWrap.getModel().getFieldD());
+ }
+ if (pageWrap.getModel().getFieldE() != null) {
+ queryWrapper.lambda().eq(PricingRule::getFieldE, pageWrap.getModel().getFieldE());
+ }
+ for (PageWrap.SortData sortData : pageWrap.getSorts()) {
+ if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+ queryWrapper.orderByDesc(sortData.getProperty());
+ } else {
+ queryWrapper.orderByAsc(sortData.getProperty());
+ }
+ }
+ return PageData.from(pricingRuleMapper.selectPage(page, queryWrapper));
+ }
+
+ @Override
+ public long count(PricingRule pricingRule) {
+ QueryWrapper<PricingRule> wrapper = new QueryWrapper<>(pricingRule);
+ return pricingRuleMapper.selectCount(wrapper);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void batchSaveLocalStoragePricing(LocalStoragePricingSaveDTO request) {
+ // 鏍¢獙鍒嗙被鏁版嵁瀹屾暣鎬�
+ Set<Integer> requestCategoryIds = request.getItems().stream()
+ .map(LocalStoragePricingItemDTO::getCategoryId)
+ .collect(Collectors.toSet());
+ validateCategoryType4(requestCategoryIds);
+
+ // 閫愰」 upsert
+ Date now = new Date();
+ for (LocalStoragePricingItemDTO item : request.getItems()) {
+ // 鏌ヨ宸叉湁瑙勫垯
+ QueryWrapper<PricingRule> qw = new QueryWrapper<>();
+ qw.lambda()
+ .eq(PricingRule::getType, Constants.ZERO)
+ .eq(PricingRule::getFieldA, String.valueOf(item.getCategoryId()))
+ .eq(PricingRule::getCityId, request.getCityId())
+ .eq(PricingRule::getDeleted, Constants.ZERO)
+ .last("limit 1");
+ PricingRule existing = pricingRuleMapper.selectOne(qw);
+
+ if (existing != null) {
+ // 鏇存柊
+ existing.setFieldB(item.getUnitPrice());
+ existing.setUpdateTime(now);
+ pricingRuleMapper.updateById(existing);
+ } else {
+ // 鏂板缓
+ PricingRule rule = new PricingRule();
+ rule.setType(Constants.ZERO);
+ rule.setFieldA(String.valueOf(item.getCategoryId()));
+ rule.setFieldB(item.getUnitPrice());
+ rule.setCityId(request.getCityId());
+ rule.setDeleted(Constants.ZERO);
+ rule.setCreateTime(now);
+ rule.setUpdateTime(now);
+ pricingRuleMapper.insert(rule);
+ }
+ }
+ }
+
+ @Override
+ public List<LocalStoragePricingVO> listLocalStoragePricing(Integer cityId) {
+ // 1. 鏌ヨ鎵�鏈� Category type=4, deleted=0
+ Category categoryQuery = new Category();
+ categoryQuery.setType(Constants.FOUR);
+ categoryQuery.setDeleted(Constants.ZERO);
+ List<Category> allCategories = categoryMapper.selectList(new QueryWrapper<>(categoryQuery));
+ Map<Integer, String> categoryNameMap = allCategories.stream()
+ .collect(Collectors.toMap(Category::getId, Category::getName));
+
+ // 2. 鏌ヨ宸叉湁瑙勫垯
+ QueryWrapper<PricingRule> qw = new QueryWrapper<>();
+ qw.lambda()
+ .eq(PricingRule::getType, Constants.ZERO)
+ .eq(PricingRule::getCityId, cityId)
+ .eq(PricingRule::getDeleted, Constants.ZERO);
+ List<PricingRule> rules = pricingRuleMapper.selectList(qw);
+ Map<String, PricingRule> existingMap = rules.stream()
+ .collect(Collectors.toMap(PricingRule::getFieldA, r -> r));
+
+ // 3. 鍩轰簬鎵�鏈夊垎绫荤粍瑁� VO锛屾棤瑙勫垯鍒欒繑鍥炵┖璁板綍
+ return allCategories.stream().map(category -> {
+ LocalStoragePricingVO vo = new LocalStoragePricingVO();
+ vo.setCategoryId(category.getId());
+ vo.setCategoryName(category.getName());
+ vo.setCityId(cityId);
+
+ PricingRule rule = existingMap.get(String.valueOf(category.getId()));
+ if (rule != null) {
+ vo.setPricingRuleId(rule.getId());
+ vo.setUnitPrice(rule.getFieldB());
+ }
+ return vo;
+ }).collect(Collectors.toList());
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void batchSaveRemoteDeliveryPricing(RemoteDeliveryPricingSaveDTO request) {
+ // 鏍¢獙鍒嗙被鏁版嵁瀹屾暣鎬�
+ Set<Integer> requestCategoryIds = request.getItems().stream()
+ .map(RemoteDeliveryPricingItemDTO::getCategoryId)
+ .collect(Collectors.toSet());
+ Map<Integer, String> categoryMap = validateCategoryType4(requestCategoryIds);
+
+ // 閫愰」 upsert
+ Date now = new Date();
+ for (RemoteDeliveryPricingItemDTO item : request.getItems()) {
+ QueryWrapper<PricingRule> qw = new QueryWrapper<>();
+ qw.lambda()
+ .eq(PricingRule::getType, Constants.ONE)
+ .eq(PricingRule::getFieldA, String.valueOf(item.getCategoryId()))
+ .eq(PricingRule::getCityId, request.getCityId())
+ .eq(PricingRule::getDeleted, Constants.ZERO)
+ .last("limit 1");
+ PricingRule existing = pricingRuleMapper.selectOne(qw);
+
+ if (existing != null) {
+ existing.setFieldB(item.getStartDistance());
+ existing.setFieldC(item.getStartPrice());
+ existing.setFieldD(item.getExtraDistance());
+ existing.setFieldE(item.getExtraPrice());
+ existing.setUpdateTime(now);
+ pricingRuleMapper.updateById(existing);
+ } else {
+ PricingRule rule = new PricingRule();
+ rule.setType(Constants.ONE);
+ rule.setFieldA(String.valueOf(item.getCategoryId()));
+ rule.setFieldB(item.getStartDistance());
+ rule.setFieldC(item.getStartPrice());
+ rule.setFieldD(item.getExtraDistance());
+ rule.setFieldE(item.getExtraPrice());
+ rule.setCityId(request.getCityId());
+ rule.setDeleted(Constants.ZERO);
+ rule.setCreateTime(now);
+ rule.setUpdateTime(now);
+ pricingRuleMapper.insert(rule);
+ }
+ }
+ }
+
+ @Override
+ public List<RemoteDeliveryPricingVO> listRemoteDeliveryPricing(Integer cityId) {
+ // 1. 鏌ヨ鎵�鏈� Category type=4, deleted=0
+ Category categoryQuery = new Category();
+ categoryQuery.setType(Constants.FOUR);
+ categoryQuery.setDeleted(Constants.ZERO);
+ List<Category> allCategories = categoryMapper.selectList(new QueryWrapper<>(categoryQuery));
+ Map<Integer, String> categoryNameMap = allCategories.stream()
+ .collect(Collectors.toMap(Category::getId, Category::getName));
+
+ // 2. 鏌ヨ宸叉湁瑙勫垯
+ QueryWrapper<PricingRule> qw = new QueryWrapper<>();
+ qw.lambda()
+ .eq(PricingRule::getType, Constants.ONE)
+ .eq(PricingRule::getCityId, cityId)
+ .eq(PricingRule::getDeleted, Constants.ZERO);
+ List<PricingRule> rules = pricingRuleMapper.selectList(qw);
+ Map<String, PricingRule> existingMap = rules.stream()
+ .collect(Collectors.toMap(PricingRule::getFieldA, r -> r));
+
+ // 3. 鍩轰簬鎵�鏈夊垎绫荤粍瑁� VO锛屾棤瑙勫垯鍒欒繑鍥炵┖璁板綍
+ return allCategories.stream().map(category -> {
+ RemoteDeliveryPricingVO vo = new RemoteDeliveryPricingVO();
+ vo.setCategoryId(category.getId());
+ vo.setCategoryName(category.getName());
+ vo.setCityId(cityId);
+
+ PricingRule rule = existingMap.get(String.valueOf(category.getId()));
+ if (rule != null) {
+ vo.setPricingRuleId(rule.getId());
+ vo.setStartDistance(rule.getFieldB());
+ vo.setStartPrice(rule.getFieldC());
+ vo.setExtraDistance(rule.getFieldD());
+ vo.setExtraPrice(rule.getFieldE());
+ }
+ return vo;
+ }).collect(Collectors.toList());
+ }
+
+ /**
+ * 鏍¢獙璇锋眰涓殑 categoryId 涓庡垎绫昏〃 type=4 鏁版嵁瀹屽叏鍖归厤
+ * @param requestCategoryIds 璇锋眰涓殑 categoryId 闆嗗悎
+ * @return 鍒嗙被琛� id->name 鏄犲皠
+ */
+ private Map<Integer, String> validateCategoryType4(Set<Integer> requestCategoryIds) {
+ Category categoryQuery = new Category();
+ categoryQuery.setType(Constants.FOUR);
+ categoryQuery.setDeleted(Constants.ZERO);
+ List<Category> allType4Categories = categoryMapper.selectList(new QueryWrapper<>(categoryQuery));
+
+ Map<Integer, String> categoryMap = allType4Categories.stream()
+ .collect(Collectors.toMap(Category::getId, Category::getName));
+ Set<Integer> allCategoryIds = categoryMap.keySet();
+
+ // 鏍¢獙锛氳姹備腑瀛樺湪浣嗗垎绫昏〃涓笉瀛樺湪鐨� categoryId
+ List<String> invalidIds = requestCategoryIds.stream()
+ .filter(id -> !allCategoryIds.contains(id))
+ .map(String::valueOf)
+ .collect(Collectors.toList());
+ if (!invalidIds.isEmpty()) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),
+ "浠ヤ笅鐗╁搧瑙勬牸涓嶅瓨鍦�: " + String.join(", ", invalidIds));
+ }
+
+ // 鏍¢獙锛氬垎绫昏〃涓瓨鍦ㄤ絾璇锋眰涓己澶辩殑 categoryId
+ List<String> missingNames = allCategoryIds.stream()
+ .filter(id -> !requestCategoryIds.contains(id))
+ .map(id -> categoryMap.get(id) + "(" + id + ")")
+ .collect(Collectors.toList());
+ if (!missingNames.isEmpty()) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),
+ "缂哄皯浠ヤ笅鐗╁搧瑙勬牸鐨勫畾浠烽厤缃�: " + String.join(", ", missingNames));
+ }
+
+ return categoryMap;
+ }
+
+ @Override
+ public Integer createEstimatedDelivery(EstimatedDeliverySaveDTO request) {
+ PricingRule rule = new PricingRule();
+ rule.setType(Constants.TWO);
+ rule.setCityId(request.getCityId());
+ rule.setFieldA(request.getDistance());
+ rule.setFieldB(request.getDuration());
+ rule.setDeleted(Constants.ZERO);
+ rule.setCreateTime(new Date());
+ rule.setUpdateTime(new Date());
+ pricingRuleMapper.insert(rule);
+ return rule.getId();
+ }
+
+ @Override
+ public void updateEstimatedDelivery(EstimatedDeliverySaveDTO request) {
+ if (request.getId() == null) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "涓婚敭涓嶈兘涓虹┖");
+ }
+ PricingRule existing = pricingRuleMapper.selectById(request.getId());
+ if (Objects.isNull(existing) || !Constants.equalsInteger(existing.getType(), Constants.TWO)) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ existing.setFieldA(request.getDistance());
+ existing.setFieldB(request.getDuration());
+ existing.setCityId(request.getCityId());
+ existing.setUpdateTime(new Date());
+ pricingRuleMapper.updateById(existing);
+ }
+
+ @Override
+ public void deleteEstimatedDelivery(Integer id) {
+ PricingRule existing = pricingRuleMapper.selectById(id);
+ if (Objects.isNull(existing) || !Constants.equalsInteger(existing.getType(), Constants.TWO)) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ existing.setDeleted(Constants.ONE);
+ existing.setUpdateTime(new Date());
+ pricingRuleMapper.updateById(existing);
+ }
+
+ @Override
+ public List<EstimatedDeliveryVO> listEstimatedDelivery(Integer cityId) {
+ QueryWrapper<PricingRule> qw = new QueryWrapper<>();
+ qw.lambda()
+ .eq(PricingRule::getType, Constants.TWO)
+ .eq(PricingRule::getCityId, cityId)
+ .eq(PricingRule::getDeleted, Constants.ZERO)
+ .orderByAsc(PricingRule::getFieldA);
+ List<PricingRule> rules = pricingRuleMapper.selectList(qw);
+ if (CollectionUtils.isEmpty(rules)) {
+ return new ArrayList<>();
+ }
+ return rules.stream().map(rule -> {
+ EstimatedDeliveryVO vo = new EstimatedDeliveryVO();
+ vo.setPricingRuleId(rule.getId());
+ vo.setCityId(rule.getCityId());
+ vo.setDistance(rule.getFieldA());
+ vo.setDuration(rule.getFieldB());
+ return vo;
+ }).collect(Collectors.toList());
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void batchSaveStoreDeposit(StoreDepositSaveDTO request) {
+ // 鏍¢獙锛氬繀椤诲寘鍚� fieldType=0(浼佷笟) 鍜� fieldType=1(涓汉) 鍚勪竴鏉�
+ Set<Integer> fieldTypes = request.getItems().stream()
+ .map(StoreDepositItemDTO::getFieldType)
+ .collect(Collectors.toSet());
+ if (!fieldTypes.contains(Constants.ZERO) || !fieldTypes.contains(Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),
+ "蹇呴』鍖呭惈浼佷笟(0)鍜屼釜浜�(1)涓ゆ潯鏁版嵁");
+ }
+ if (request.getItems().size() != 2) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),
+ "鏈変笖浠呮湁2鏉℃暟鎹�");
+ }
+
+ Date now = new Date();
+ for (StoreDepositItemDTO item : request.getItems()) {
+ QueryWrapper<PricingRule> qw = new QueryWrapper<>();
+ qw.lambda()
+ .eq(PricingRule::getType, Constants.THREE)
+ .eq(PricingRule::getFieldA, String.valueOf(item.getFieldType()))
+ .eq(PricingRule::getCityId, request.getCityId())
+ .eq(PricingRule::getDeleted, Constants.ZERO)
+ .last("limit 1");
+ PricingRule existing = pricingRuleMapper.selectOne(qw);
+
+ if (existing != null) {
+ existing.setFieldB(item.getDepositAmount());
+ existing.setUpdateTime(now);
+ pricingRuleMapper.updateById(existing);
+ } else {
+ PricingRule rule = new PricingRule();
+ rule.setType(Constants.THREE);
+ rule.setFieldA(String.valueOf(item.getFieldType()));
+ rule.setFieldB(item.getDepositAmount());
+ rule.setCityId(request.getCityId());
+ rule.setDeleted(Constants.ZERO);
+ rule.setCreateTime(now);
+ rule.setUpdateTime(now);
+ pricingRuleMapper.insert(rule);
+ }
+ }
+ }
+
+ @Override
+ public List<StoreDepositVO> listStoreDeposit(Integer cityId) {
+ // 鏌ヨ宸叉湁瑙勫垯
+ QueryWrapper<PricingRule> qw = new QueryWrapper<>();
+ qw.lambda()
+ .eq(PricingRule::getType, Constants.THREE)
+ .eq(PricingRule::getCityId, cityId)
+ .eq(PricingRule::getDeleted, Constants.ZERO);
+ List<PricingRule> rules = pricingRuleMapper.selectList(qw);
+
+ // 鏋勫缓宸插瓨鍦ㄦ暟鎹殑鏄犲皠 fieldA -> rule
+ Map<String, PricingRule> existingMap = rules.stream()
+ .collect(Collectors.toMap(PricingRule::getFieldA, r -> r));
+
+ // 鍥哄畾杩斿洖2鏉★細浼佷笟(0)銆佷釜浜�(1)
+ List<StoreDepositVO> result = new ArrayList<>();
+ String[] typeNames = {"浼佷笟", "涓汉"};
+ for (int i = 0; i <= 1; i++) {
+ StoreDepositVO vo = new StoreDepositVO();
+ vo.setFieldType(i);
+ vo.setFieldTypeName(typeNames[i]);
+ vo.setCityId(cityId);
+
+ PricingRule rule = existingMap.get(String.valueOf(i));
+ if (rule != null) {
+ vo.setPricingRuleId(rule.getId());
+ vo.setDepositAmount(rule.getFieldB());
+ }
+ result.add(vo);
+ }
+ return result;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void batchSaveRevenueShare(RevenueShareSaveDTO request) {
+ // 鏍¢獙锛氬繀椤诲寘鍚� fieldType 0-4 鍚勪竴鏉�
+ Set<Integer> fieldTypes = request.getItems().stream()
+ .map(RevenueShareItemDTO::getFieldType)
+ .collect(Collectors.toSet());
+ if (fieldTypes.size() != Constants.FIVE) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),
+ "蹇呴』鍖呭惈浼佷笟瀵�(0)銆佷釜浜哄瘎(1)銆佷紒涓氬彇(2)銆佷釜浜哄彇(3)銆侀厤閫佸憳(4)鍏�5鏉℃暟鎹�");
+ }
+ for (int i = 0; i <= Constants.FOUR; i++) {
+ if (!fieldTypes.contains(i)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),
+ "缂哄皯绫诲瀷" + i + "鐨勬暟鎹�");
+ }
+ }
+
+ Date now = new Date();
+ for (RevenueShareItemDTO item : request.getItems()) {
+ QueryWrapper<PricingRule> qw = new QueryWrapper<>();
+ qw.lambda()
+ .eq(PricingRule::getType, Constants.FOUR)
+ .eq(PricingRule::getFieldA, String.valueOf(item.getFieldType()))
+ .eq(PricingRule::getCityId, request.getCityId())
+ .eq(PricingRule::getDeleted, Constants.ZERO)
+ .last("limit 1");
+ PricingRule existing = pricingRuleMapper.selectOne(qw);
+
+ if (existing != null) {
+ existing.setFieldB(item.getRatio());
+ existing.setUpdateTime(now);
+ pricingRuleMapper.updateById(existing);
+ } else {
+ PricingRule rule = new PricingRule();
+ rule.setType(Constants.FOUR);
+ rule.setFieldA(String.valueOf(item.getFieldType()));
+ rule.setFieldB(item.getRatio());
+ rule.setCityId(request.getCityId());
+ rule.setDeleted(Constants.ZERO);
+ rule.setCreateTime(now);
+ rule.setUpdateTime(now);
+ pricingRuleMapper.insert(rule);
+ }
+ }
+ }
+
+ @Override
+ public List<RevenueShareVO> listRevenueShare(Integer cityId) {
+ // 鏌ヨ宸叉湁瑙勫垯
+ QueryWrapper<PricingRule> qw = new QueryWrapper<>();
+ qw.lambda()
+ .eq(PricingRule::getType, Constants.FOUR)
+ .eq(PricingRule::getCityId, cityId)
+ .eq(PricingRule::getDeleted, Constants.ZERO);
+ List<PricingRule> rules = pricingRuleMapper.selectList(qw);
+
+ // 鏋勫缓宸插瓨鍦ㄦ暟鎹殑鏄犲皠 fieldA -> rule
+ Map<String, PricingRule> existingMap = rules.stream()
+ .collect(Collectors.toMap(PricingRule::getFieldA, r -> r));
+
+ // 鍥哄畾杩斿洖5鏉★細浼佷笟瀵�(0)銆佷釜浜哄瘎(1)銆佷紒涓氬彇(2)銆佷釜浜哄彇(3)銆侀厤閫佸憳(4)
+ List<RevenueShareVO> result = new ArrayList<>();
+ String[] typeNames = {"浼佷笟瀵�", "涓汉瀵�", "浼佷笟鍙�", "涓汉鍙�", "閰嶉�佸憳"};
+ for (int i = 0; i <= Constants.FOUR; i++) {
+ RevenueShareVO vo = new RevenueShareVO();
+ vo.setFieldType(i);
+ vo.setFieldTypeName(typeNames[i]);
+ vo.setCityId(cityId);
+
+ PricingRule rule = existingMap.get(String.valueOf(i));
+ if (rule != null) {
+ vo.setPricingRuleId(rule.getId());
+ vo.setRatio(rule.getFieldB());
+ }
+ result.add(vo);
+ }
+ return result;
+ }
+
+}
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
new file mode 100644
index 0000000..a69fee6
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java
@@ -0,0 +1,171 @@
+package com.doumee.service.business.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.core.constants.Constants;
+import com.doumee.core.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.Utils;
+import com.doumee.dao.business.ShopInfoMapper;
+import com.doumee.dao.business.model.ShopInfo;
+import com.doumee.service.business.ShopInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 闂ㄥ簵淇℃伅Service瀹炵幇
+ * @author rk
+ * @date 2026/04/08
+ */
+@Service
+public class ShopInfoServiceImpl implements ShopInfoService {
+
+ @Autowired
+ private ShopInfoMapper shopInfoMapper;
+
+ @Override
+ public Integer create(ShopInfo shopInfo) {
+ shopInfoMapper.insert(shopInfo);
+ return shopInfo.getId();
+ }
+
+ @Override
+ public void deleteById(Integer id) {
+ shopInfoMapper.deleteById(id);
+ }
+
+ @Override
+ public void delete(ShopInfo shopInfo) {
+ UpdateWrapper<ShopInfo> deleteWrapper = new UpdateWrapper<>(shopInfo);
+ shopInfoMapper.delete(deleteWrapper);
+ }
+
+ @Override
+ public void deleteByIdInBatch(List<Integer> ids) {
+ if (CollectionUtils.isEmpty(ids)) {
+ return;
+ }
+ shopInfoMapper.deleteBatchIds(ids);
+ }
+
+ @Override
+ public void updateById(ShopInfo shopInfo) {
+ shopInfoMapper.updateById(shopInfo);
+ }
+
+ @Override
+ public void updateByIdInBatch(List<ShopInfo> shopInfos) {
+ if (CollectionUtils.isEmpty(shopInfos)) {
+ return;
+ }
+ for (ShopInfo shopInfo : shopInfos) {
+ this.updateById(shopInfo);
+ }
+ }
+
+ @Override
+ public ShopInfo findById(Integer id) {
+ ShopInfo shopInfo = shopInfoMapper.selectById(id);
+ if (Objects.isNull(shopInfo)) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ return shopInfo;
+ }
+
+ @Override
+ public ShopInfo findOne(ShopInfo shopInfo) {
+ QueryWrapper<ShopInfo> wrapper = new QueryWrapper<>(shopInfo);
+ return shopInfoMapper.selectOne(wrapper);
+ }
+
+ @Override
+ public List<ShopInfo> findList(ShopInfo shopInfo) {
+ QueryWrapper<ShopInfo> wrapper = new QueryWrapper<>(shopInfo);
+ return shopInfoMapper.selectList(wrapper);
+ }
+
+ @Override
+ public PageData<ShopInfo> findPage(PageWrap<ShopInfo> pageWrap) {
+ IPage<ShopInfo> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ QueryWrapper<ShopInfo> queryWrapper = new QueryWrapper<>();
+ Utils.MP.blankToNull(pageWrap.getModel());
+ pageWrap.getModel().setDeleted(Constants.ZERO);
+ if (pageWrap.getModel().getId() != null) {
+ queryWrapper.lambda().eq(ShopInfo::getId, pageWrap.getModel().getId());
+ }
+ if (pageWrap.getModel().getDeleted() != null) {
+ queryWrapper.lambda().eq(ShopInfo::getDeleted, pageWrap.getModel().getDeleted());
+ }
+ if (pageWrap.getModel().getCreateUser() != null) {
+ queryWrapper.lambda().eq(ShopInfo::getCreateUser, pageWrap.getModel().getCreateUser());
+ }
+ if (pageWrap.getModel().getCreateTime() != null) {
+ queryWrapper.lambda().ge(ShopInfo::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime()));
+ queryWrapper.lambda().le(ShopInfo::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime()));
+ }
+ if (pageWrap.getModel().getUpdateUser() != null) {
+ queryWrapper.lambda().eq(ShopInfo::getUpdateUser, pageWrap.getModel().getUpdateUser());
+ }
+ if (pageWrap.getModel().getUpdateTime() != null) {
+ queryWrapper.lambda().ge(ShopInfo::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime()));
+ queryWrapper.lambda().le(ShopInfo::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime()));
+ }
+ if (pageWrap.getModel().getRemark() != null) {
+ queryWrapper.lambda().eq(ShopInfo::getRemark, pageWrap.getModel().getRemark());
+ }
+ if (pageWrap.getModel().getCompanyType() != null) {
+ queryWrapper.lambda().eq(ShopInfo::getCompanyType, pageWrap.getModel().getCompanyType());
+ }
+ if (pageWrap.getModel().getName() != null) {
+ queryWrapper.lambda().like(ShopInfo::getName, pageWrap.getModel().getName());
+ }
+ if (pageWrap.getModel().getTelephone() != null) {
+ queryWrapper.lambda().like(ShopInfo::getTelephone, pageWrap.getModel().getTelephone());
+ }
+ if (pageWrap.getModel().getLinkName() != null) {
+ queryWrapper.lambda().like(ShopInfo::getLinkName, pageWrap.getModel().getLinkName());
+ }
+ if (pageWrap.getModel().getLinkPhone() != null) {
+ queryWrapper.lambda().like(ShopInfo::getLinkPhone, pageWrap.getModel().getLinkPhone());
+ }
+ if (pageWrap.getModel().getAreaId() != null) {
+ queryWrapper.lambda().eq(ShopInfo::getAreaId, pageWrap.getModel().getAreaId());
+ }
+ if (pageWrap.getModel().getStatus() != null) {
+ queryWrapper.lambda().eq(ShopInfo::getStatus, pageWrap.getModel().getStatus());
+ }
+ if (pageWrap.getModel().getAuditTime() != null) {
+ queryWrapper.lambda().ge(ShopInfo::getAuditTime, Utils.Date.getStart(pageWrap.getModel().getAuditTime()));
+ queryWrapper.lambda().le(ShopInfo::getAuditTime, Utils.Date.getEnd(pageWrap.getModel().getAuditTime()));
+ }
+ if (pageWrap.getModel().getAuditUserId() != null) {
+ queryWrapper.lambda().eq(ShopInfo::getAuditUserId, pageWrap.getModel().getAuditUserId());
+ }
+ 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());
+ }
+ }
+ return PageData.from(shopInfoMapper.selectPage(page, queryWrapper));
+ }
+
+ @Override
+ public long count(ShopInfo shopInfo) {
+ QueryWrapper<ShopInfo> wrapper = new QueryWrapper<>(shopInfo);
+ return shopInfoMapper.selectCount(wrapper);
+ }
+
+}
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
new file mode 100644
index 0000000..9aa71eb
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/impl/SmsrecordServiceImpl.java
@@ -0,0 +1,159 @@
+package com.doumee.service.business.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.core.constants.Constants;
+import com.doumee.core.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.Utils;
+import com.doumee.dao.business.SmsrecordMapper;
+import com.doumee.dao.business.model.Smsrecord;
+import com.doumee.service.business.SmsrecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 鐭俊楠岃瘉鐮丼ervice瀹炵幇
+ * @author rk
+ * @date 2026/04/08
+ */
+@Service
+public class SmsrecordServiceImpl implements SmsrecordService {
+
+ @Autowired
+ private SmsrecordMapper smsrecordMapper;
+
+ @Override
+ public Integer create(Smsrecord smsrecord) {
+ smsrecordMapper.insert(smsrecord);
+ return smsrecord.getId();
+ }
+
+ @Override
+ public void deleteById(Integer id) {
+ smsrecordMapper.deleteById(id);
+ }
+
+ @Override
+ public void delete(Smsrecord smsrecord) {
+ UpdateWrapper<Smsrecord> deleteWrapper = new UpdateWrapper<>(smsrecord);
+ smsrecordMapper.delete(deleteWrapper);
+ }
+
+ @Override
+ public void deleteByIdInBatch(List<Integer> ids) {
+ if (CollectionUtils.isEmpty(ids)) {
+ return;
+ }
+ smsrecordMapper.deleteBatchIds(ids);
+ }
+
+ @Override
+ public void updateById(Smsrecord smsrecord) {
+ smsrecordMapper.updateById(smsrecord);
+ }
+
+ @Override
+ public void updateByIdInBatch(List<Smsrecord> smsrecords) {
+ if (CollectionUtils.isEmpty(smsrecords)) {
+ return;
+ }
+ for (Smsrecord smsrecord : smsrecords) {
+ this.updateById(smsrecord);
+ }
+ }
+
+ @Override
+ public Smsrecord findById(Integer id) {
+ Smsrecord smsrecord = smsrecordMapper.selectById(id);
+ if (Objects.isNull(smsrecord)) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ return smsrecord;
+ }
+
+ @Override
+ public Smsrecord findOne(Smsrecord smsrecord) {
+ QueryWrapper<Smsrecord> wrapper = new QueryWrapper<>(smsrecord);
+ return smsrecordMapper.selectOne(wrapper);
+ }
+
+ @Override
+ public List<Smsrecord> findList(Smsrecord smsrecord) {
+ QueryWrapper<Smsrecord> wrapper = new QueryWrapper<>(smsrecord);
+ return smsrecordMapper.selectList(wrapper);
+ }
+
+ @Override
+ public PageData<Smsrecord> findPage(PageWrap<Smsrecord> pageWrap) {
+ IPage<Smsrecord> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ QueryWrapper<Smsrecord> queryWrapper = new QueryWrapper<>();
+ Utils.MP.blankToNull(pageWrap.getModel());
+ pageWrap.getModel().setDeleted(Constants.ZERO);
+ if (pageWrap.getModel().getId() != null) {
+ queryWrapper.lambda().eq(Smsrecord::getId, pageWrap.getModel().getId());
+ }
+ if (pageWrap.getModel().getDeleted() != null) {
+ queryWrapper.lambda().eq(Smsrecord::getDeleted, pageWrap.getModel().getDeleted());
+ }
+ if (pageWrap.getModel().getCreateUser() != null) {
+ queryWrapper.lambda().eq(Smsrecord::getCreateUser, pageWrap.getModel().getCreateUser());
+ }
+ if (pageWrap.getModel().getCreateTime() != null) {
+ queryWrapper.lambda().ge(Smsrecord::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime()));
+ queryWrapper.lambda().le(Smsrecord::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime()));
+ }
+ if (pageWrap.getModel().getUpdateUser() != null) {
+ queryWrapper.lambda().eq(Smsrecord::getUpdateUser, pageWrap.getModel().getUpdateUser());
+ }
+ if (pageWrap.getModel().getUpdateTime() != null) {
+ queryWrapper.lambda().ge(Smsrecord::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime()));
+ queryWrapper.lambda().le(Smsrecord::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime()));
+ }
+ if (pageWrap.getModel().getRemark() != null) {
+ queryWrapper.lambda().eq(Smsrecord::getRemark, pageWrap.getModel().getRemark());
+ }
+ if (pageWrap.getModel().getPhone() != null) {
+ queryWrapper.lambda().like(Smsrecord::getPhone, pageWrap.getModel().getPhone());
+ }
+ if (pageWrap.getModel().getContent() != null) {
+ queryWrapper.lambda().like(Smsrecord::getContent, pageWrap.getModel().getContent());
+ }
+ if (pageWrap.getModel().getType() != null) {
+ queryWrapper.lambda().eq(Smsrecord::getType, pageWrap.getModel().getType());
+ }
+ if (pageWrap.getModel().getValidDate() != null) {
+ queryWrapper.lambda().ge(Smsrecord::getValidDate, Utils.Date.getStart(pageWrap.getModel().getValidDate()));
+ queryWrapper.lambda().le(Smsrecord::getValidDate, Utils.Date.getEnd(pageWrap.getModel().getValidDate()));
+ }
+ if (pageWrap.getModel().getCode() != null) {
+ queryWrapper.lambda().eq(Smsrecord::getCode, pageWrap.getModel().getCode());
+ }
+ if (pageWrap.getModel().getStatus() != null) {
+ queryWrapper.lambda().eq(Smsrecord::getStatus, pageWrap.getModel().getStatus());
+ }
+ for (PageWrap.SortData sortData : pageWrap.getSorts()) {
+ if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+ queryWrapper.orderByDesc(sortData.getProperty());
+ } else {
+ queryWrapper.orderByAsc(sortData.getProperty());
+ }
+ }
+ return PageData.from(smsrecordMapper.selectPage(page, queryWrapper));
+ }
+
+ @Override
+ public long count(Smsrecord smsrecord) {
+ QueryWrapper<Smsrecord> wrapper = new QueryWrapper<>(smsrecord);
+ return smsrecordMapper.selectCount(wrapper);
+ }
+
+}
diff --git a/server/web/src/main/java/com/doumee/api/web/AccountApi.java b/server/web/src/main/java/com/doumee/api/web/AccountApi.java
index df272ad..eccaa23 100644
--- a/server/web/src/main/java/com/doumee/api/web/AccountApi.java
+++ b/server/web/src/main/java/com/doumee/api/web/AccountApi.java
@@ -62,8 +62,26 @@
})
public ApiResponse logOff() {
String token = this.getRequest().getHeader(JwtTokenUtil.HEADER_KEY);
- memberService.logOff(token,getMemberId());
+ memberService.logOut(token,getMemberId());
return ApiResponse.success("鎿嶄綔鎴愬姛");
}
+ @LoginRequired
+ @ApiOperation(value = "鐢ㄦ埛娉ㄩ攢", notes = "灏忕▼搴忕")
+ @GetMapping("/logOut")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+ })
+ public ApiResponse logOut() {
+ String token = this.getRequest().getHeader(JwtTokenUtil.HEADER_KEY);
+ memberService.logOut(token,getMemberId());
+ return ApiResponse.success("鎿嶄綔鎴愬姛");
+ }
+
+
+
+
+
+
+
}
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
new file mode 100644
index 0000000..95cc355
--- /dev/null
+++ b/server/web/src/main/java/com/doumee/api/web/DriverInfoApi.java
@@ -0,0 +1,82 @@
+package com.doumee.api.web;
+
+import com.doumee.core.annotation.LoginRequired;
+import com.doumee.core.annotation.trace.Trace;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.dao.dto.DriverLoginRequest;
+import com.doumee.dao.dto.DriverRegisterRequest;
+import com.doumee.dao.dto.DriverVerifyRequest;
+import com.doumee.dao.vo.AccountResponse;
+import com.doumee.service.business.DriverInfoService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 鍙告満楠岃瘉鐮佺櫥褰曟帴鍙�
+ * @author rk
+ * @date 2026/04/08
+ */
+@Api(tags = "鍙告満楠岃瘉鐮佺櫥褰�")
+@Trace(exclude = true)
+@RestController
+@RequestMapping("/web/driverInfo")
+@Slf4j
+public class DriverInfoApi extends ApiController {
+
+ @Autowired
+ private DriverInfoService driverInfoService;
+
+ @Trace
+ @ApiOperation(value = "鍙戦�侀獙璇佺爜", notes = "鍙告満楠岃瘉鐮佺櫥褰�")
+ @GetMapping("/sendCode")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "query", dataType = "String", name = "telephone", value = "鎵嬫満鍙�", required = true)
+ })
+ public ApiResponse sendCode(@RequestParam String telephone) {
+ driverInfoService.sendRegisterCode(telephone);
+ return ApiResponse.success("楠岃瘉鐮佸彂閫佹垚鍔�");
+ }
+
+ @Trace
+ @ApiOperation(value = "鍙告満楠岃瘉鐮佺櫥褰�", notes = "鎵嬫満鍙�+楠岃瘉鐮侊紝鏃犺处鍙疯嚜鍔ㄦ敞鍐屽苟鐧诲綍")
+ @PostMapping("/register")
+ public ApiResponse<AccountResponse> register(@RequestBody DriverRegisterRequest request) {
+ return ApiResponse.success("娉ㄥ唽鎴愬姛", driverInfoService.register(request));
+ }
+
+ @Trace
+ @ApiOperation(value = "鍙告満鐧诲綍", notes = "鎵嬫満鍙�+瀵嗙爜鐧诲綍")
+ @PostMapping("/login")
+ public ApiResponse<AccountResponse> login(@RequestBody DriverLoginRequest request) {
+ return ApiResponse.success("鐧诲綍鎴愬姛", driverInfoService.login(request));
+ }
+
+ @LoginRequired
+ @Trace
+ @ApiOperation(value = "鎻愪氦瀹炲悕璁よ瘉", notes = "鍒濇鎻愪氦鎴栭┏鍥炲悗淇敼")
+ @PostMapping("/submitVerify")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+ })
+ public ApiResponse submitVerify(@RequestBody DriverVerifyRequest request) {
+ driverInfoService.submitVerify(this.getMemberId(), request);
+ return ApiResponse.success("鎻愪氦鎴愬姛");
+ }
+
+ @LoginRequired
+ @Trace
+ @ApiOperation(value = "鏌ヨ瀹炲悕璁よ瘉璇︽儏", notes = "鍙告満绔煡璇�")
+ @GetMapping("/verifyDetail")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+ })
+ public ApiResponse verifyDetail() {
+ return ApiResponse.success(driverInfoService.getVerifyDetail(this.getMemberId()));
+ }
+
+}
diff --git a/server/web/src/main/java/com/doumee/api/web/UserApi.java b/server/web/src/main/java/com/doumee/api/web/UserApi.java
index eecd373..c02650b 100644
--- a/server/web/src/main/java/com/doumee/api/web/UserApi.java
+++ b/server/web/src/main/java/com/doumee/api/web/UserApi.java
@@ -43,14 +43,14 @@
@Autowired
private MemberService memberService;
- @Autowired
- private IdentityInfoService identityInfoService;
+// @Autowired
+// private IdentityInfoService identityInfoService;
- @Autowired
- private MemberRevenueService memberRevenueService;
-
- @Autowired
- private WithdrawalOrdersService withdrawalOrdersService;
+// @Autowired
+// private MemberRevenueService memberRevenueService;
+//
+// @Autowired
+// private WithdrawalOrdersService withdrawalOrdersService;
@ApiOperation(value = "鑾峰彇绯荤粺閰嶇疆", notes = "灏忕▼搴忕")
@@ -83,80 +83,80 @@
return ApiResponse.success("鎿嶄綔鎴愬姛");
}
- @LoginRequired
- @ApiOperation(value = "鍒囨崲鐢ㄥ伐韬唤", notes = "灏忕▼搴忕")
- @PostMapping("/editUseIdentity")
- @ApiImplicitParams({
- @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
- })
- public ApiResponse editUseIdentity(@RequestBody Member member) {
- member.setId(getMemberId());
- memberService.editUseIdentity(member);
- return ApiResponse.success("鎿嶄綔鎴愬姛");
- }
+// @LoginRequired
+// @ApiOperation(value = "鍒囨崲鐢ㄥ伐韬唤", notes = "灏忕▼搴忕")
+// @PostMapping("/editUseIdentity")
+// @ApiImplicitParams({
+// @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+// })
+// public ApiResponse editUseIdentity(@RequestBody Member member) {
+// member.setId(getMemberId());
+// memberService.editUseIdentity(member);
+// return ApiResponse.success("鎿嶄綔鎴愬姛");
+// }
- @LoginRequired
- @ApiOperation(value = "鑾峰彇韬唤璁よ瘉淇℃伅", notes = "灏忕▼搴忕")
- @GetMapping("/getIdentityInfo")
- @ApiImplicitParams({
- @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
- })
- public ApiResponse<IdentityInfo> getIdentityInfo(@RequestParam Integer type) {
- return ApiResponse.success("鏌ヨ鎴愬姛",identityInfoService.findByMemberType(type,getMemberId()));
- }
+// @LoginRequired
+// @ApiOperation(value = "鑾峰彇韬唤璁よ瘉淇℃伅", notes = "灏忕▼搴忕")
+// @GetMapping("/getIdentityInfo")
+// @ApiImplicitParams({
+// @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+// })
+// public ApiResponse<IdentityInfo> getIdentityInfo(@RequestParam Integer type) {
+// return ApiResponse.success("鏌ヨ鎴愬姛",identityInfoService.findByMemberType(type,getMemberId()));
+// }
- @LoginRequired
- @ApiOperation(value = "鐢宠韬唤淇℃伅", notes = "灏忕▼搴忕")
- @PostMapping("/applyForIdentity")
- @ApiImplicitParams({
- @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
- })
- public ApiResponse applyForIdentity(@RequestBody IdentityInfo identityInfo) {
- identityInfo.setMemberId(getMemberId());
- identityInfoService.create(identityInfo);
- return ApiResponse.success("鎿嶄綔鎴愬姛");
- }
+// @LoginRequired
+// @ApiOperation(value = "鐢宠韬唤淇℃伅", notes = "灏忕▼搴忕")
+// @PostMapping("/applyForIdentity")
+// @ApiImplicitParams({
+// @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+// })
+// public ApiResponse applyForIdentity(@RequestBody IdentityInfo identityInfo) {
+// identityInfo.setMemberId(getMemberId());
+// identityInfoService.create(identityInfo);
+// return ApiResponse.success("鎿嶄綔鎴愬姛");
+// }
- @LoginRequired
- @ApiOperation(value = "淇敼韬唤淇℃伅锛堣璇佸け璐ュ悗浣跨敤锛�", notes = "灏忕▼搴忕")
- @PostMapping("/updateIdentity")
- @ApiImplicitParams({
- @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
- })
- public ApiResponse updateIdentity(@RequestBody IdentityInfo identityInfo) {
- identityInfo.setMemberId(getMemberId());
- identityInfoService.updateById(identityInfo);
- return ApiResponse.success("鎿嶄綔鎴愬姛");
- }
+// @LoginRequired
+// @ApiOperation(value = "淇敼韬唤淇℃伅锛堣璇佸け璐ュ悗浣跨敤锛�", notes = "灏忕▼搴忕")
+// @PostMapping("/updateIdentity")
+// @ApiImplicitParams({
+// @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+// })
+// public ApiResponse updateIdentity(@RequestBody IdentityInfo identityInfo) {
+// identityInfo.setMemberId(getMemberId());
+// identityInfoService.updateById(identityInfo);
+// return ApiResponse.success("鎿嶄綔鎴愬姛");
+// }
- @LoginRequired
- @ApiOperation(value = "淇敼韬唤淇℃伅浣嶇疆锛堣璇佹垚鍔熷悗浣跨敤锛�", notes = "灏忕▼搴忕")
- @PostMapping("/updateLocation")
- @ApiImplicitParams({
- @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
- })
- public ApiResponse updateLocation(@RequestBody IdentityInfo identityInfo) {
- identityInfo.setMemberId(getMemberId());
- identityInfoService.updateLocation(identityInfo);
- return ApiResponse.success("鎿嶄綔鎴愬姛");
- }
+// @LoginRequired
+// @ApiOperation(value = "淇敼韬唤淇℃伅浣嶇疆锛堣璇佹垚鍔熷悗浣跨敤锛�", notes = "灏忕▼搴忕")
+// @PostMapping("/updateLocation")
+// @ApiImplicitParams({
+// @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+// })
+// public ApiResponse updateLocation(@RequestBody IdentityInfo identityInfo) {
+// identityInfo.setMemberId(getMemberId());
+// identityInfoService.updateLocation(identityInfo);
+// return ApiResponse.success("鎿嶄綔鎴愬姛");
+// }
- @LoginRequired
- @ApiOperation("浣欓鏄庣粏")
- @PostMapping("/revenuePage")
- @ApiImplicitParams({
- @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
- })
- public ApiResponse<PageData<MemberRevenue>> revenuePage (@RequestBody PageWrap<MemberRevenue> pageWrap) {
- pageWrap.getModel().setMemberId(this.getMemberId());
- return ApiResponse.success(memberRevenueService.findPage(pageWrap));
- }
+// @LoginRequired
+// @ApiOperation("浣欓鏄庣粏")
+// @PostMapping("/revenuePage")
+// @ApiImplicitParams({
+// @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+// })
+// public ApiResponse<PageData<MemberRevenue>> revenuePage (@RequestBody PageWrap<MemberRevenue> pageWrap) {
+// pageWrap.getModel().setMemberId(this.getMemberId());
+// return ApiResponse.success(memberRevenueService.findPage(pageWrap));
+// }
--
Gitblit v1.9.3