zhaoyun 1 mese fa
parent
commit
e746cd9eaa
100 ha cambiato i file con 4154 aggiunte e 101 eliminazioni
  1. 69 0
      ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/controller/merchant/MerchantMarketController.java
  2. 1 1
      ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/controller/merchant/MerchantProductCategoryController.java
  3. 1 0
      ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/controller/platform/ProductCategoryController.java
  4. 79 0
      ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/controller/platform/RiderApplyController.java
  5. 208 0
      ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/controller/platform/RiderController.java
  6. 1 0
      ydd_mer_java/crmeb-admin/src/main/resources/application-dev.yml
  7. 3 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/constants/DateConstants.java
  8. 4 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/constants/NotifyConstants.java
  9. 4 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/constants/OrderConstants.java
  10. 4 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/constants/RedisConstants.java
  11. 106 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/express/ExpressOrder.java
  12. 71 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/express/ExpressOrderDetail.java
  13. 32 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/express/ExpressSpce.java
  14. 28 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/express/ExpressTip.java
  15. 57 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/merchant/MerchantMarket.java
  16. 1 1
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/product/Product.java
  17. 4 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/product/ProductCategory.java
  18. 99 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/rider/Rider.java
  19. 92 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/rider/RiderApply.java
  20. 46 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/rider/RiderDeliveTime.java
  21. 46 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/rider/RiderFeeConfig.java
  22. 4 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/user/User.java
  23. 91 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/user/UserExpressAddress.java
  24. 0 16
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/query/IndexMerchantQuery.java
  25. 6 2
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/OrderFrontListRequest.java
  26. 3 2
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/OrderSendRequest.java
  27. 3 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/ProductAddRequest.java
  28. 4 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/ProductCategoryRequest.java
  29. 8 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/ProductFrontSearchRequest.java
  30. 14 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/SeckillProductSearchRequest.java
  31. 28 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/SiteSearchRequest.java
  32. 85 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/UserExpressAddressRequest.java
  33. 2 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/UserUpdateRequest.java
  34. 40 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/express/CreateExpressOrderRequest.java
  35. 41 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/express/ExpressOrderFrontListRequest.java
  36. 48 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/express/PreExpressOrderDetailRequest.java
  37. 52 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/express/PreExpressOrderRequest.java
  38. 44 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/merchant/MerchantMarketRequest.java
  39. 10 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/merchant/MerchantMoveSearchRequest.java
  40. 9 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/merchant/MerchantProductSearchRequest.java
  41. 23 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/rider/BatchSetDeliveTimeRequest.java
  42. 80 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/rider/RiderAddRequest.java
  43. 45 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/rider/RiderApplyAuditRequest.java
  44. 41 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/rider/RiderApplyRemarkRequest.java
  45. 42 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/rider/RiderApplySearchRequest.java
  46. 51 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/rider/RiderDeliveTimeRequest.java
  47. 43 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/rider/RiderFeeAddRequest.java
  48. 49 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/rider/RiderFeeUpdateRequest.java
  49. 46 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/rider/RiderSearchRequest.java
  50. 68 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/rider/RiderSettledApplyRequest.java
  51. 44 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/rider/RiderUpdatePhoneRequest.java
  52. 85 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/rider/RiderUpdateRequest.java
  53. 4 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/ComputedOrderPriceResponse.java
  54. 3 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/IndexInfoResponse.java
  55. 4 2
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/IndexMerchantResponse.java
  56. 15 1
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/MerchantIndexInfoResponse.java
  57. 44 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/MerchantRecommendResponse.java
  58. 6 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/OrderFrontDataResponse.java
  59. 2 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/PreOrderResponse.java
  60. 3 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/ProductInfoResponse.java
  61. 17 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/RiderDeliveDate.java
  62. 14 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/RiderDeliveTimeResponse.java
  63. 69 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/RiderPageResponse.java
  64. 77 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/RiderPlatformDetailResponse.java
  65. 53 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/RiderSettledResponse.java
  66. 2 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/SeckillProductPageResponse.java
  67. 2 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/UserCenterResponse.java
  68. 3 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/UserInfoResponse.java
  69. 93 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/express/ExpressOrderFrontDataResponse.java
  70. 67 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/express/ExpressOrderInfoFrontDataResponse.java
  71. 42 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/express/ExpressOrderNoResponse.java
  72. 35 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/express/PreExpressOrderInfoDetailResponse.java
  73. 63 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/express/PreExpressOrderResponse.java
  74. 1 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/vo/MerchantConfigInfoVo.java
  75. 169 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/vo/MerchantVo.java
  76. 50 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/vo/PreExpressOrderInfoDetailVo.java
  77. 63 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/vo/PreExpressOrderInfoVo.java
  78. 3 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/vo/PreOrderInfoDetailVo.java
  79. 14 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/vo/ProCategoryCacheVo.java
  80. 54 0
      ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/vo/TimeSumVo.java
  81. 0 42
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/BaiduMapAPI.java
  82. 1 0
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/config/WebConfig.java
  83. 18 1
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/ExpressController.java
  84. 71 0
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/ExpressOrderController.java
  85. 6 5
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/IndexController.java
  86. 7 1
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/MerchantController.java
  87. 10 1
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/OrderController.java
  88. 5 0
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/ProductCategoryController.java
  89. 23 3
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/ProductController.java
  90. 81 0
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/RiderController.java
  91. 35 0
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/TakeOutController.java
  92. 95 0
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/UserExpressAddressController.java
  93. 67 0
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/FrontExpressOrderService.java
  94. 12 0
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/FrontOrderService.java
  95. 31 0
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/FrontProductService.java
  96. 3 3
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/IndexService.java
  97. 14 0
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/TakeOutService.java
  98. 379 0
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/impl/FrontExpressOrderServiceImpl.java
  99. 198 11
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/impl/FrontOrderServiceImpl.java
  100. 61 9
      ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/impl/FrontProductServiceImpl.java

+ 69 - 0
ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/controller/merchant/MerchantMarketController.java

@@ -0,0 +1,69 @@
+package com.zbkj.admin.controller.merchant;
+
+import com.zbkj.common.model.admin.SystemAdmin;
+import com.zbkj.common.model.merchant.MerchantElect;
+import com.zbkj.common.model.merchant.MerchantMarket;
+import com.zbkj.common.request.merchant.MerchantElectRequest;
+import com.zbkj.common.request.merchant.MerchantMarketRequest;
+import com.zbkj.common.result.CommonResult;
+import com.zbkj.common.utils.SecurityUtil;
+import com.zbkj.service.service.MerchantMarketService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * 商户电子面单配置表 前端控制器
+ */
+@Slf4j
+@RestController
+@RequestMapping("api/admin/merchant/market")
+@Api(tags = "商户端 - 营销主信息配置") //配合swagger使用
+
+public class MerchantMarketController {
+
+    @Autowired
+    private MerchantMarketService merchantMarketService;
+
+    /**
+     * 修改营销配置表
+     * @param mrchantMarketRequest 修改参数
+     * @author dazongzi
+     * @since 2025-02-20
+     */
+    @ApiOperation(value = "修改")
+    @RequestMapping(value = "/update", method = RequestMethod.POST)
+    public CommonResult<String> update(@RequestBody @Validated MerchantMarketRequest mrchantMarketRequest) {
+        MerchantMarket mrchantMarket = new MerchantMarket();
+        BeanUtils.copyProperties(mrchantMarketRequest, mrchantMarket);
+        if(merchantMarketService.updateMerchantMarket(mrchantMarket)) {
+            return CommonResult.success();
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    /**
+     * 查询商户营销配置表信息
+     * @author dazongzi
+     * @since 2025-02-20
+     */
+    @ApiOperation(value = "详情")
+    @RequestMapping(value = "/info", method = RequestMethod.GET)
+    public CommonResult<MerchantMarket> info() {
+        SystemAdmin admin = SecurityUtil.getLoginUserVo().getUser();
+        MerchantMarket merchantMarket = merchantMarketService.getMerchantMarket(admin.getMerId());
+        return CommonResult.success(merchantMarket);
+    }
+}
+
+
+

+ 1 - 1
ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/controller/merchant/MerchantProductCategoryController.java

@@ -95,7 +95,7 @@ public class MerchantProductCategoryController {
     @ApiOperation(value = "商户商品分类缓存树")
     @RequestMapping(value = "/cache/tree", method = RequestMethod.GET)
     public CommonResult<List<ProCategoryCacheVo>> getCacheTree() {
-        return CommonResult.success(categoryService.getCacheTree());
+        return CommonResult.success(categoryService.getPlatformCacheTree());
     }
 }
 

+ 1 - 0
ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/controller/platform/ProductCategoryController.java

@@ -46,6 +46,7 @@ public class ProductCategoryController {
         return CommonResult.success(productCategoryService.getAdminList());
     }
 
+
     @LogControllerAnnotation(intoDB = true, methodType = MethodType.ADD, description = "新增商品分类")
     @PreAuthorize("hasAuthority('platform:product:category:add')")
     @ApiOperation(value = "新增商品分类")

+ 79 - 0
ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/controller/platform/RiderApplyController.java

@@ -0,0 +1,79 @@
+package com.zbkj.admin.controller.platform;
+
+import com.zbkj.common.annotation.LogControllerAnnotation;
+import com.zbkj.common.enums.MethodType;
+import com.zbkj.common.model.merchant.MerchantApply;
+import com.zbkj.common.model.rider.RiderApply;
+import com.zbkj.common.page.CommonPage;
+import com.zbkj.common.request.PageParamRequest;
+import com.zbkj.common.request.merchant.MerchantApplyAuditRequest;
+import com.zbkj.common.request.merchant.MerchantApplyRemarkRequest;
+import com.zbkj.common.request.merchant.MerchantApplySearchRequest;
+import com.zbkj.common.request.rider.RiderApplyAuditRequest;
+import com.zbkj.common.request.rider.RiderApplyRemarkRequest;
+import com.zbkj.common.request.rider.RiderApplySearchRequest;
+import com.zbkj.common.result.CommonResult;
+import com.zbkj.service.service.MerchantApplyService;
+import com.zbkj.service.service.RiderApplyService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 骑手入驻控制器
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Slf4j
+@RestController
+@RequestMapping("api/admin/platform/rider/apply")
+@Api(tags = "骑手入驻控制器")
+public class RiderApplyController {
+
+    @Autowired
+    private RiderApplyService riderApplyService;
+
+    @PreAuthorize("hasAuthority('platform:rider:apply:page:list')")
+    @ApiOperation(value="骑手入驻分页列表")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    public CommonResult<CommonPage<RiderApply>> getPageList(@Validated RiderApplySearchRequest searchRequest,
+                                                            @Validated PageParamRequest pageParamRequest) {
+        return CommonResult.success(CommonPage.restPage(riderApplyService.getAdminPage(searchRequest, pageParamRequest)));
+    }
+
+    @LogControllerAnnotation(intoDB = true, methodType = MethodType.UPDATE, description = "骑手入驻审核")
+    @PreAuthorize("hasAuthority('platform:rider:apply:audit')")
+    @ApiOperation(value="审核")
+    @RequestMapping(value = "/audit", method = RequestMethod.POST)
+    public CommonResult<Object> audit(@RequestBody @Validated RiderApplyAuditRequest request) {
+        if (riderApplyService.audit(request)) {
+            return CommonResult.success("申请审核成功");
+        }
+        return CommonResult.failed("申请审核失败");
+    }
+
+    @LogControllerAnnotation(intoDB = true, methodType = MethodType.UPDATE, description = "骑手入驻备注")
+    @PreAuthorize("hasAuthority('platform:rider:apply:remark')")
+    @ApiOperation(value="备注")
+    @RequestMapping(value = "/remark", method = RequestMethod.POST)
+    public CommonResult<Object> remark(@RequestBody @Validated RiderApplyRemarkRequest request) {
+        if (riderApplyService.remark(request)) {
+            return CommonResult.success("备注成功");
+        }
+        return CommonResult.failed("备注失败");
+    }
+}

+ 208 - 0
ydd_mer_java/crmeb-admin/src/main/java/com/zbkj/admin/controller/platform/RiderController.java

@@ -0,0 +1,208 @@
+package com.zbkj.admin.controller.platform;
+
+import com.zbkj.admin.service.AdminLoginService;
+import com.zbkj.common.annotation.LogControllerAnnotation;
+import com.zbkj.common.enums.MethodType;
+import com.zbkj.common.model.rider.RiderDeliveTime;
+import com.zbkj.common.model.rider.RiderFeeConfig;
+import com.zbkj.common.page.CommonPage;
+import com.zbkj.common.request.BatchSetVirtualSalesRequest;
+import com.zbkj.common.request.PageParamRequest;
+import com.zbkj.common.request.rider.*;
+import com.zbkj.common.response.*;
+import com.zbkj.common.result.CommonResult;
+import com.zbkj.service.service.RiderDeliveTimeService;
+import com.zbkj.service.service.RiderService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 骑手控制器
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Slf4j
+@RestController
+@RequestMapping("api/admin/platform/rider")
+@Api(tags = "平台端骑手控制器")
+public class RiderController {
+
+    @Autowired
+    private RiderService riderService;
+    @Autowired
+    private AdminLoginService adminLoginService;
+    @Autowired
+    RiderDeliveTimeService riderDeliveTimeService;
+
+    @PreAuthorize("hasAuthority('platform:rider:page:list')")
+    @ApiOperation(value="骑手分页列表")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    public CommonResult<CommonPage<RiderPageResponse>> getPageList(@Validated RiderSearchRequest searchRequest,
+                                                                      @Validated PageParamRequest pageParamRequest) {
+        return CommonResult.success(CommonPage.restPage(riderService.getAdminPage(searchRequest, pageParamRequest)));
+    }
+
+    @PreAuthorize("hasAuthority('platform:rider:list:header:num')")
+    @ApiOperation(value="骑手分页列表表头数量")
+    @RequestMapping(value = "/list/header/num", method = RequestMethod.GET)
+    public CommonResult<MerchantHeaderNumResponse> getListHeaderNum(@Validated RiderSearchRequest searchRequest) {
+        return CommonResult.success(riderService.getListHeaderNum(searchRequest));
+    }
+
+    @LogControllerAnnotation(intoDB = true, methodType = MethodType.ADD, description = "添加骑手")
+    @PreAuthorize("hasAuthority('platform:rider:add')")
+    @ApiOperation(value="添加骑手")
+    @RequestMapping(value = "/add", method = RequestMethod.POST)
+    public CommonResult<String> add(@RequestBody @Validated RiderAddRequest request) {
+        if (riderService.add(request)) {
+            return CommonResult.success("添加骑手成功");
+        }
+        return CommonResult.failed("添加骑手失败");
+    }
+
+    @LogControllerAnnotation(intoDB = true, methodType = MethodType.UPDATE, description = "编辑骑手")
+    @PreAuthorize("hasAuthority('platform:rider:update')")
+    @ApiOperation(value="编辑骑手")
+    @RequestMapping(value = "/update", method = RequestMethod.POST)
+    public CommonResult<String> update(@RequestBody @Validated RiderUpdateRequest request) {
+        if (riderService.edit(request)) {
+            return CommonResult.success("编辑骑手成功");
+        }
+        return CommonResult.failed("编辑骑手失败");
+    }
+
+    @LogControllerAnnotation(intoDB = true, methodType = MethodType.UPDATE, description = "修改骑手手机号")
+    @PreAuthorize("hasAuthority('platform:rider:update:phone')")
+    @ApiOperation(value="修改骑手手机号")
+    @RequestMapping(value = "/update/phone", method = RequestMethod.POST)
+    public CommonResult<String> updatePhone(@RequestBody @Validated RiderUpdatePhoneRequest request) {
+        if (riderService.updatePhone(request)) {
+            return CommonResult.success("修改骑手手机号成功");
+        }
+        return CommonResult.failed("修改骑手手机号失败");
+    }
+
+
+    @PreAuthorize("hasAuthority('platform:rider:detail')")
+    @ApiOperation(value="骑手详情")
+    @RequestMapping(value = "/detail/{id}", method = RequestMethod.GET)
+    public CommonResult<RiderPlatformDetailResponse> getDetail(@PathVariable("id") Integer id) {
+        return CommonResult.success(riderService.getPlatformDetail(id));
+    }
+
+    @LogControllerAnnotation(intoDB = true, methodType = MethodType.UPDATE, description = "推荐开关")
+    @PreAuthorize("hasAuthority('platform:rider:recommend:switch')")
+    @ApiOperation(value="推荐开关")
+    @RequestMapping(value = "/recommend/switch/{id}", method = RequestMethod.POST)
+    public CommonResult<String> recommendSwitch(@PathVariable("id") Integer id) {
+        if (riderService.recommendSwitch(id)) {
+            return CommonResult.success("切换骑手推荐开关成功");
+        }
+        return CommonResult.failed("切换骑手推荐开关失败");
+    }
+
+    @LogControllerAnnotation(intoDB = true, methodType = MethodType.UPDATE, description = "关闭骑手")
+    @PreAuthorize("hasAuthority('platform:rider:close')")
+    @ApiOperation(value="关闭骑手")
+    @RequestMapping(value = "/close/{id}", method = RequestMethod.POST)
+    public CommonResult<String> close(@PathVariable("id") Integer id) {
+        if (riderService.close(id)) {
+            return CommonResult.success("关闭骑手成功");
+        }
+        return CommonResult.failed("关闭骑手失败");
+    }
+
+    @LogControllerAnnotation(intoDB = true, methodType = MethodType.UPDATE, description = "开启骑手")
+    @PreAuthorize("hasAuthority('platform:rider:open')")
+    @ApiOperation(value="开启骑手")
+    @RequestMapping(value = "/open/{id}", method = RequestMethod.POST)
+    public CommonResult<String> open(@PathVariable("id") Integer id) {
+        if (riderService.open(id)) {
+            return CommonResult.success("开启骑手成功");
+        }
+        return CommonResult.failed("开启骑手失败");
+    }
+
+    @LogControllerAnnotation(intoDB = true, methodType = MethodType.ADD, description = "添加骑手")
+    @PreAuthorize("hasAuthority('platform:rider:fee:add')")
+    @ApiOperation(value="添加骑手配送费")
+    @RequestMapping(value = "/addFee", method = RequestMethod.POST)
+    public CommonResult<String> addFee(@RequestBody @Validated RiderFeeAddRequest request) {
+        if (riderService.addFee(request)) {
+            return CommonResult.success("添加配送费配置成功");
+        }
+        return CommonResult.failed("添加配送费配置失败");
+    }
+    @PreAuthorize("hasAuthority('platform:rider:fee:add')")
+    @ApiOperation(value="骑手配送费详情")
+    @RequestMapping(value = "/getFeeDetail", method = RequestMethod.GET)
+    public CommonResult<RiderFeeConfig> getFeeDetail() {
+        return CommonResult.success(riderService.getRiderFeeConfigDetail());
+    }
+    @ApiOperation(value="添加骑手预约配送时间")
+    @RequestMapping(value = "/deliveTime/add", method = RequestMethod.POST)
+    @PreAuthorize("hasAuthority('platform:rider:deliveTime:add')")
+    public CommonResult<String> addRiderDeliveTime(@RequestBody  RiderDeliveTimeRequest riderDeliveTime) {
+        if (riderDeliveTimeService.saveDeliveTime(riderDeliveTime)) {
+            return CommonResult.success("添加骑手预约配送时间成功");
+        }
+        return CommonResult.failed("添加添加骑手预约配送时间失败");
+    }
+    @ApiOperation(value="编辑骑手预约配送时间")
+    @RequestMapping(value = "/deliveTime/edit", method = RequestMethod.POST)
+    @PreAuthorize("hasAuthority('platform:rider:deliveTime:edit')")
+    public CommonResult<String> editRiderDeliveTime(@RequestBody RiderDeliveTimeRequest riderDeliveTime) {
+        if (riderDeliveTimeService.updateDeliveTime(riderDeliveTime)) {
+            return CommonResult.success("编辑骑手预约配送时间成功");
+        }
+        return CommonResult.failed("编辑骑手预约配送时间失败");
+    }
+    @ApiOperation(value="获取所有配送时间配置信息")
+    @RequestMapping(value = "/deliveTime/all/list", method = RequestMethod.GET)
+    @PreAuthorize("hasAuthority('platform:rider:deliveTime:list')")
+    public CommonResult<List<RiderDeliveTime>> getAllRiderDeliveTime() {
+        return CommonResult.success(riderDeliveTimeService.getAllList());
+    }
+    @ApiOperation(value="删除配送时间配置")
+    @RequestMapping(value = "/deliveTime/delete/{id}", method = RequestMethod.POST)
+    @PreAuthorize("hasAuthority('platform:rider:deliveTime:delete')")
+    public CommonResult<Object> delete(@PathVariable("id") Integer id) {
+        if (riderDeliveTimeService.delDeliveTimeById(id)) {
+            return CommonResult.success("删除配送时间配置成功");
+        }
+        return CommonResult.failed("删除配送时间配置失败");
+    }
+    @ApiOperation(value = "配送时间开关")
+    @RequestMapping(value = "/deliveTime/switch/{id}", method = RequestMethod.POST)
+    @PreAuthorize("hasAuthority('platform:rider:deliveTime:switch')")
+    public CommonResult<Object> switchDeliveTime(@PathVariable(value = "id") Integer id) {
+        if (riderDeliveTimeService.switchRiderDelive(id)) {
+            return CommonResult.success().setMessage("变更开关状态成功");
+        }
+        return CommonResult.failed().setMessage("变更开关状态失败");
+    }
+    @LogControllerAnnotation(intoDB = true, methodType = MethodType.UPDATE, description = "平台端批量设置预约时间")
+    @ApiOperation(value = "批量设置")
+    @RequestMapping(value = "/batch/set/deliveTime", method = RequestMethod.POST)
+    @PreAuthorize("hasAuthority('platform:rider:deliveTime:batch:set')")
+    public CommonResult<String> platBatchSetDeliveTime(@RequestBody @Validated BatchSetDeliveTimeRequest request) {
+        if (riderDeliveTimeService.platBatchSetDeliveTime(request)) {
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+}

+ 1 - 0
ydd_mer_java/crmeb-admin/src/main/resources/application-dev.yml

@@ -6,6 +6,7 @@ crmeb:
   asyncConfig: false #是否同步config表数据到redis
   asyncWeChatProgramTempList: false #是否同步小程序公共模板库
   imagePath: /home/ydd/MER/trip/admin/ # 服务器图片路径配置 斜杠结尾
+  #imagePath: D:/img/ # 服务器图片路径配置 斜杠结尾
   retailStoreBrokerageRatio: 30 #佣金返佣比例和上限
   activityStyleCachedTime: 10 #活动边框缓存周期 秒为单位,生产环境适当5-10分钟即可
   selectProductLimit: 100 # 商品选择 指定商品上线

+ 3 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/constants/DateConstants.java

@@ -54,6 +54,9 @@ public class DateConstants {
     public static final String DATE_FORMAT_HHMM = "yyyy-MM-dd HH:mm";
     /** 日期格式:时分 */
     public static final String DATE_FORMAT_TIME_HHMM = "HHmm";
+
+
+    /** 日期格式:rfc3339标准格式 2015-05-20T13:29:35.120+08:00 */
     /** 日期格式:rfc3339标准格式 2015-05-20T13:29:35.120+08:00 */
     public static final String DATE_FORMAT_RFC_3339 = "yyyy-MM-dd'T'HH:mm:ssXXX";
 

+ 4 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/constants/NotifyConstants.java

@@ -54,5 +54,9 @@ public class NotifyConstants {
     public static final String MERCHANT_PAY_SUCCESS_REMINDER = "merchantPaySuccess";
     /** 商户入驻平台管理提醒 */
     public static final String MERCHANT_SETTLED_APPLY = "merchantSettledApply";
+    /** 骑手入驻平台管理提醒 */
+    public static final String RIDER_SETTLED_APPLY = "riderSettledApply";
+
+    public static final String RIDER_AUDIT_SUCCESS_MARK = "riderAuditSuccess";
 
 }

+ 4 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/constants/OrderConstants.java

@@ -96,6 +96,8 @@ public class OrderConstants {
     public static final Integer ORDER_SHIPPING_TYPE_EXPRESS = 1;
     /** 订单配送方式-门店自提 */
     public static final Integer ORDER_SHIPPING_TYPE_PICK_UP = 2;
+    /** 订单配送方式-骑手配送 */
+    public static final Integer ORDER_SHIPPING_TYPE_TAKEOUT = 3;
     /** 订单配送方式-虚拟发货 */
     public static final Integer ORDER_SHIPPING_TYPE_VIRTUAL = 3;
     /** 订单发货类型-快递 */
@@ -112,6 +114,8 @@ public class OrderConstants {
 
     /** 预下单缓存前缀 */
     public static final String PRE_ORDER_CACHE_PREFIX = "user_pre_order:";
+    /** 预下单缓存前缀 */
+    public static final String PRE_EXP_ORDER_CACHE_PREFIX = "user_exp_pre_order:";
     /** 预下单缓存时间 */
     public static final Long PRE_ORDER_CACHE_TIME = 60L;
 

+ 4 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/constants/RedisConstants.java

@@ -25,6 +25,8 @@ public class RedisConstants {
     public static final String WEB_TOKEN_USER_SHOP_MANAGER_KEY = "user:shopmanager:";
 
     public static final String FRONT_USER_TOKEN_SET_KEY = "FRONT:USER:TOKEN:{}";
+    /** 用户位置坐标 */
+    public static final String FRONT_USER_POSITION_KEY = "FRONT:USER:POSITION:{}";
     public static final String FRONT_MERCHANT_USER_TOKEN_SET_KEY = "FRONT:MERCHANT:USER:TOKEN:{}";
 
     /** 商品浏览量(每日) */
@@ -64,6 +66,8 @@ public class RedisConstants {
 
     /** 商户商品分类缓存Key */
     public static final String STORE_PRODUCT_CATEGORY_CACHE_LIST_KEY = "store:product:category:list:{}";
+    /** 商户商品分类缓存Key */
+    public static final String STORE_PLATFORM_PRODUCT_CATEGORY_CACHE_LIST_KEY = "store:platform:product:category:list:{}";
 
     /** 物流公司缓存Key */
     public static final String EXPRESS_CACHE_LIST_KEY = "expressList";

+ 106 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/express/ExpressOrder.java

@@ -0,0 +1,106 @@
+package com.zbkj.common.model.express;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ * 订单表
+ * </p>
+ *
+ * @author HZW
+ * @since 2022-09-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("eb_express_order")
+@ApiModel(value = "ExpressOrder对象", description = "订单表")
+public class ExpressOrder implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "订单ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "订单号")
+    private String orderNo;
+
+
+    @ApiModelProperty(value = "用户id")
+    private Integer uid;
+
+    @ApiModelProperty(value = "订单商品总数")
+    private Integer totalNum;
+
+    @ApiModelProperty(value = "商品总价")
+    private BigDecimal proTotalPrice;
+
+    @ApiModelProperty(value = "订单总价")
+    private BigDecimal totalPrice;
+
+    @ApiModelProperty(value = "实际支付金额")
+    private BigDecimal payPrice;
+    @ApiModelProperty(value = "小费")
+    private BigDecimal giveTips;
+
+    @ApiModelProperty(value = "支付状态")
+    private Boolean paid;
+
+    @ApiModelProperty(value = "支付时间")
+    private Date payTime;
+
+    @ApiModelProperty(value = "支付方式:weixin,alipay,yue")
+    private String payType;
+
+    @ApiModelProperty(value = "支付渠道:public-公众号,mini-小程序,h5-网页支付,yue-余额,wechatIos-微信Ios,wechatAndroid-微信Android,alipay-支付宝,alipayApp-支付宝App")
+    private String payChannel;
+
+    @ApiModelProperty(value = "订单状态(0:待支付,1:待发货,2:部分发货, 3:待核销,4:待收货,5:已收货,6:已完成,9:已取消)")
+    private Integer status;
+
+//    @ApiModelProperty(value = "退款状态:0 未退款 1 申请中 2 部分退款 3 已退款")
+//    private Integer refundStatus;
+
+    @ApiModelProperty(value = "取消状态:0-未取消,1-系统取消,2-用户取消")
+    private Integer cancelStatus;
+
+    @ApiModelProperty(value = "用户是否删除")
+    private Boolean isUserDel;
+
+
+    @ApiModelProperty(value = "订单类型:0-取件,1-寄件")
+    private Integer type;
+
+
+    @ApiModelProperty(value = "是否删除")
+    private Boolean isDel;
+
+    @ApiModelProperty(value = "收货时间")
+    private Date receivingTime;
+    @ApiModelProperty(value = "用户联系电话")
+    private String userPhone;
+
+    @ApiModelProperty(value = "用户地址id")
+    private Integer userAddressId;
+    @ApiModelProperty(value = "驿站地址id")
+    private Integer postAddressId;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+}

+ 71 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/express/ExpressOrderDetail.java

@@ -0,0 +1,71 @@
+package com.zbkj.common.model.express;
+
+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 io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ * 订单详情表
+ * </p>
+ *
+ * @author HZW
+ * @since 2022-09-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("eb_express_order_detail")
+@ApiModel(value = "OrderDetail对象", description = "订单详情表")
+public class ExpressOrderDetail implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "订单号")
+    private String orderNo;
+
+    @ApiModelProperty(value = "用户id")
+    private Integer uid;
+
+    @ApiModelProperty(value = "快件")
+    private String expressInfo;
+
+    @ApiModelProperty(value = "订单类型")
+    private Integer expressType;
+
+    @ApiModelProperty(value = "商品图片")
+    private String image;
+
+    @ApiModelProperty(value = "商品规格值 ID")
+    private Integer specs;
+
+    @ApiModelProperty(value = "数量")
+    private Integer expNum ;
+
+    @ApiModelProperty(value = "商品单价")
+    private BigDecimal price;
+
+    @ApiModelProperty(value = "实际支付金额")
+    private BigDecimal payPrice;
+
+    @ApiModelProperty(value = "是否收货,0-未收货,1-已收货")
+    private Boolean isReceipt;
+
+    @ApiModelProperty(value = "商品图片")
+    private String remark;
+
+}

+ 32 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/express/ExpressSpce.java

@@ -0,0 +1,32 @@
+package com.zbkj.common.model.express;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("eb_express_spce")
+public class ExpressSpce implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "规格名称")
+    private String spceName;
+
+    @ApiModelProperty(value = "费用")
+    private BigDecimal fee;
+    @ApiModelProperty(value = "样式")
+    private String  imageStyle;
+}

+ 28 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/express/ExpressTip.java

@@ -0,0 +1,28 @@
+package com.zbkj.common.model.express;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("eb_express_tip")
+public class ExpressTip implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    
+    @ApiModelProperty(value = "费用")
+    private BigDecimal fee;
+
+}

+ 57 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/merchant/MerchantMarket.java

@@ -0,0 +1,57 @@
+package com.zbkj.common.model.merchant;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("eb_merchant_market")
+@ApiModel(value = "MerchantMarket对象", description = "商户营销表")
+public class MerchantMarket implements Serializable {
+    private static final long serialVersionUID=1L;
+
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "商户id")
+    private Integer merId;
+
+    @ApiModelProperty(value = "是否满减大促")
+    private Boolean isFullReductProm;
+
+    @ApiModelProperty(value = "首单立减")
+    private Double firstImmedReduct;
+
+    @ApiModelProperty(value = "起送费")
+    private Double deliveryFee;
+
+    @ApiModelProperty(value = "减免配送费开关0-关闭,1-开启")
+    private Boolean isSwitch;
+
+    @ApiModelProperty(value = "是否全免")
+    private Boolean isFullExemption;
+
+    @ApiModelProperty(value = "减免费用")
+    private Double reduceFee;
+    @ApiModelProperty(value = "打包费")
+    private Double  packingFee;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+}
+

+ 1 - 1
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/product/Product.java

@@ -171,7 +171,7 @@ public class Product implements Serializable {
     private Integer exchangeNum;
 
     @ApiModelProperty(value = "是否热门推荐")
-    private Integer isHot;
+    private Boolean isHot;
 
     @ApiModelProperty(value = "商品详情")
     @TableField(exist = false)

+ 4 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/product/ProductCategory.java

@@ -58,6 +58,10 @@ public class ProductCategory implements Serializable {
 
     @ApiModelProperty(value = "更新时间")
     private Date updateTime;
+    @ApiModelProperty(value = "链接地址")
+    private String link;
+    @ApiModelProperty(value = "是否高亮")
+    private Boolean isHighLight;
 
 
 }

+ 99 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/rider/Rider.java

@@ -0,0 +1,99 @@
+package com.zbkj.common.model.rider;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ * 骑手表
+ * </p>
+ *
+ * @author HZW
+ * @since 2022-07-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("eb_rider")
+@ApiModel(value = "Rider对象", description = "骑手表")
+public class Rider implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "骑手ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "骑手名称")
+    private String name;
+
+    @ApiModelProperty(value = "骑手手机号")
+    private String phone;
+
+    @ApiModelProperty(value = "手续费(%)")
+    private Integer handlingFee;
+
+    @ApiModelProperty(value = "省")
+    private String province;
+
+    @ApiModelProperty(value = "市")
+    private String city;
+
+    @ApiModelProperty(value = "区")
+    private String district;
+
+    @ApiModelProperty(value = "骑手详细地址")
+    private String addressDetail;
+
+    @ApiModelProperty(value = "骑手开关:0-关闭,1-开启")
+    private Boolean isSwitch;
+
+    @ApiModelProperty(value = "是否有过配送经验", required = true)
+    private Boolean isExped;
+    @ApiModelProperty(value = "岗位范围id|逗号分隔")
+    private String jobScope;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "资质图片")
+    private String qualificationPicture;
+
+    @ApiModelProperty(value = "骑手头像")
+    private String avatar;
+
+    @ApiModelProperty(value = "骑手余额")
+    private BigDecimal balance;
+
+    @ApiModelProperty(value = "星级1-5")
+    private Integer starLevel;
+
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
+
+    @ApiModelProperty(value = "骑手创建类型:admin-管理员创建,apply-商户入驻申请")
+    private String createType;
+
+    @ApiModelProperty(value = "创建骑手管理员ID")
+    private Integer createId;
+
+    @ApiModelProperty(value = "是否删除")
+    private Boolean isDel;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+}

+ 92 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/rider/RiderApply.java

@@ -0,0 +1,92 @@
+package com.zbkj.common.model.rider;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotEmpty;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 商户申请表
+ * </p>
+ *
+ * @author HZW
+ * @since 2022-07-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("eb_rider_apply")
+@ApiModel(value="RiderApply对象", description="骑手申请表")
+public class RiderApply implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    @ApiModelProperty(value = "申请ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "申请用户ID")
+    private Integer uid;
+
+    @ApiModelProperty(value = "骑手名称")
+    private String name;
+
+    @ApiModelProperty(value = "骑手账号")
+    private String account;
+
+    @ApiModelProperty(value = "登录密码")
+    private String password;
+
+
+    @ApiModelProperty(value = "骑手邮箱")
+    private String email;
+
+    @ApiModelProperty(value = "骑手手机号")
+    private String phone;
+
+    @ApiModelProperty(value = "手续费(%)")
+    private Integer handlingFee;
+
+    @ApiModelProperty(value = "骑手地址")
+    private String address;
+
+    @ApiModelProperty(value = "是否有过配送经验", required = true)
+    private Boolean isExped;
+    @ApiModelProperty(value = "岗位范围id|逗号分隔")
+    private String jobScope;
+
+    @ApiModelProperty(value = "是否推荐:0-不推荐,1-推荐")
+    private Boolean isRecommend;
+
+    @ApiModelProperty(value = "审核状态:1-待审核,2-审核通过,3-审核拒绝")
+    private Integer auditStatus;
+
+    @ApiModelProperty(value = "拒绝原因")
+    private String denialReason;
+
+    @ApiModelProperty(value = "审核员ID")
+    private Integer auditorId;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "资质图片")
+    private String qualificationPicture;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+
+}

+ 46 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/rider/RiderDeliveTime.java

@@ -0,0 +1,46 @@
+package com.zbkj.common.model.rider;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.sql.Time;
+
+/**
+ * <p>
+ * 骑手表
+ * </p>
+ *
+ * @author HZW
+ * @since 2022-07-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("eb_rider_delive_time")
+@ApiModel(value = "Rider对象", description = "骑手配送预约时间表")
+public class RiderDeliveTime implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    @ApiModelProperty(value = "开始时间", required = true)
+    private String beginTime;
+    @ApiModelProperty(value = "结束时间", required = true)
+    private String endTime;
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
+    @ApiModelProperty(value = "状态")
+    private Boolean status;
+
+}

+ 46 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/rider/RiderFeeConfig.java

@@ -0,0 +1,46 @@
+package com.zbkj.common.model.rider;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ * 骑手表
+ * </p>
+ *
+ * @author HZW
+ * @since 2022-07-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("eb_rider_delive_fee")
+@ApiModel(value = "Rider对象", description = "骑手配送费用表")
+public class RiderFeeConfig implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "起送基础费不能为空", required = true)
+    private BigDecimal basicFee=BigDecimal.ZERO;
+    @ApiModelProperty(value = "配送距离不能为空", required = true)
+    private Double distanceInKm=0.00;
+
+    @ApiModelProperty(value = "每公里费用")
+    private Double feePerKm=0.00;
+
+}

+ 4 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/user/User.java

@@ -171,4 +171,8 @@ public class User implements Serializable {
 
     @ApiModelProperty(value = "付费会员到期时间")
     private Date paidMemberExpirationTime;
+    @ApiModelProperty(value = "是否为骑手")
+    private Boolean isRider;
+    @ApiModelProperty(value = "成为分骑手时间")
+    private Date riderTime;
 }

+ 91 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/model/user/UserExpressAddress.java

@@ -0,0 +1,91 @@
+package com.zbkj.common.model.user;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 用户地址表
+ * </p>
+ *
+ * @author HZW
+ * @since 2022-07-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("eb_user_express_address")
+@ApiModel(value="UserExpressAddress对象", description="用户地址表")
+public class UserExpressAddress implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    @ApiModelProperty(value = "用户地址id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "用户id")
+    private Integer uid;
+
+    @ApiModelProperty(value = "驿站名称")
+    private String expressName;
+
+    @ApiModelProperty(value = "驿站电话")
+    private String phone;
+
+    @ApiModelProperty(value = "驿站所在省")
+    private String province;
+
+    @ApiModelProperty(value = "省份ID")
+    private Integer provinceId;
+
+    @ApiModelProperty(value = "驿站所在市")
+    private String city;
+
+    @ApiModelProperty(value = "城市id")
+    private Integer cityId;
+
+    @ApiModelProperty(value = "驿站所在区/县")
+    private String district;
+
+    @ApiModelProperty(value = "区/县id")
+    private Integer districtId;
+
+    @ApiModelProperty(value = "驿站所在街道·")
+    private String street;
+
+    @ApiModelProperty(value = "驿站详细地址")
+    private String detail;
+
+    @ApiModelProperty(value = "邮编")
+    private Integer postCode;
+
+    @ApiModelProperty(value = "经度")
+    private String longitude;
+
+    @ApiModelProperty(value = "纬度")
+    private String latitude;
+
+    @ApiModelProperty(value = "是否默认")
+    private Boolean isDefault;
+
+    @ApiModelProperty(value = "是否删除")
+    private Boolean isDel;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+
+}

+ 0 - 16
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/query/IndexMerchantQuery.java

@@ -1,16 +0,0 @@
-package com.zbkj.common.query;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.util.List;
-
-@Data
-public class IndexMerchantQuery {
-    @ApiModelProperty(value = "维度")
-    private  Double latitude;
-    @ApiModelProperty(value = "经度")
-    private Double longitude;
-    @ApiModelProperty(value = "条件集合0-按销售排行,1-满减大促,2-首单立减,3-减配送费")
-    private List<String> condition;
-}

+ 6 - 2
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/OrderFrontListRequest.java

@@ -1,5 +1,6 @@
 package com.zbkj.common.request;
 
+import com.zbkj.common.annotation.StringContains;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -29,8 +30,8 @@ public class OrderFrontListRequest extends PageParamRequest implements Serializa
 
     private static final long serialVersionUID = 1L;
 
-    @ApiModelProperty(value = "订单状态(-1:全部,0:待支付,1:待发货,2:部分发货, 3:待核销,4:待收货,5:已收货,6:已完成,9:已取消)", required = true)
-    @NotNull(message = "订单编号不能为空")
+    @ApiModelProperty(value = "订单状态(-1:全部,0:待支付,1:待发货,2:部分发货, 3:待核销,4:待收货,5:已收货,6:已完成,9:已取消)")
+   // @NotNull(message = "订单编号不能为空")
     private Integer status;
 
     @ApiModelProperty(value = "搜索关键字")
@@ -38,4 +39,7 @@ public class OrderFrontListRequest extends PageParamRequest implements Serializa
 
     @ApiModelProperty(value = "订单二级类型:0-普通订单,1-积分订单,2-虚拟订单,4-视频号订单,5-云盘订单,6-卡密订单")
     private Integer secondType;
+
+    @ApiModelProperty(value = "订单类型:0-进行中,1-完成")
+    private Integer orderType;
 }

+ 3 - 2
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/OrderSendRequest.java

@@ -36,9 +36,9 @@ public class OrderSendRequest {
     @NotBlank(message = "订单编号不能为空")
     private String orderNo;
 
-    @ApiModelProperty(value = "发货类型:express-快递,merchant-商家配送,noNeed-无需发货", allowableValues = "range[express,merchant,noNeed]", required = true)
+    @ApiModelProperty(value = "发货类型:express-快递,merchant-商家配送,noNeed-无需发货,takeout-外卖配送", allowableValues = "range[express,merchant,noNeed]", required = true)
     @NotBlank(message = "请选择发货类型")
-    @StringContains(limitValues = {"express","merchant","noNeed"}, message = "未知的发货类型")
+    @StringContains(limitValues = {"express","merchant","noNeed","takeout"}, message = "未知的发货类型")
     private String deliveryType;
 
     @ApiModelProperty(value = "快递公司编码")
@@ -85,4 +85,5 @@ public class OrderSendRequest {
 
     @ApiModelProperty(value = "送货人电话,送货类型必传")
     private String deliveryTel;
+
 }

+ 3 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/ProductAddRequest.java

@@ -141,4 +141,7 @@ public class ProductAddRequest implements Serializable {
 
     @ApiModelProperty(value = "系统表单ID")
     private Integer systemFormId = 0;
+
+    @ApiModelProperty(value = "是否热门推荐")
+    private Boolean isHot;
 }

+ 4 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/ProductCategoryRequest.java

@@ -56,4 +56,8 @@ public class ProductCategoryRequest implements Serializable {
     @NotNull(message = "排序不能为空")
     @Range(min = 0, max = 9999, message = "排序最范围为0-9999")
     private Integer sort;
+    @ApiModelProperty(value = "链接地址")
+    private String link;
+    @ApiModelProperty(value = "是否高亮")
+    private Boolean isHighLight;
 }

+ 8 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/ProductFrontSearchRequest.java

@@ -55,4 +55,12 @@ public class ProductFrontSearchRequest implements Serializable {
 
     @ApiModelProperty(value = "商品标签id")
     private Integer tagId;
+    @ApiModelProperty(value = "维度", required = true)
+    //@NotNull(message = "维度不能为空")
+    private  Double latitude;
+    @ApiModelProperty(value = "经度", required = true)
+    // @NotNull(message = "经度不能为空")
+    private Double longitude;
+    @ApiModelProperty(value = " 商品归类")
+    private Integer productType;
 }

+ 14 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/SeckillProductSearchRequest.java

@@ -6,6 +6,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
+import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.util.List;
 
@@ -55,4 +56,17 @@ public class SeckillProductSearchRequest extends PageParamRequest implements Ser
 
     @ApiModelProperty(value = "小程序:0关闭,1开启")
     private Integer isHot;
+
+    private  Double latitude;
+    @ApiModelProperty(value = "经度")
+    private Double longitude;
+
+    @ApiModelProperty(value = "归属大类")
+    private Integer cateId;
+
+    @ApiModelProperty(value = "价格排序", allowableValues = "range[asc,desc]")
+    private String priceOrder;
+
+    @ApiModelProperty(value = "销量排序", allowableValues = "range[asc,desc]")
+    private String salesOrder;
 }

+ 28 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/SiteSearchRequest.java

@@ -0,0 +1,28 @@
+package com.zbkj.common.request;
+
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * 位置查询请求对象
+ */
+@Data
+public class SiteSearchRequest {
+    @ApiModelProperty(value = "维度", required = true)
+    //@NotNull(message = "维度不能为空")
+    private  Double latitude;
+    @ApiModelProperty(value = "经度", required = true)
+   // @NotNull(message = "经度不能为空")
+    private Double longitude;
+    @ApiModelProperty(value = "条件集合0-按销售排行,1-满减大促,2-首单立减,3-减配送费,4-优惠商家,5-点评高分",allowableValues = "range[0,1,2,3,4,5]")
+    private List<String> condition;
+    @ApiModelProperty(value = "商品类别",required = true)
+    //@NotNull(message = "商品大类不能为空")
+    private Integer cateId;
+    @ApiModelProperty(value = "关键字")
+    private  String keywords;
+}

+ 85 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/UserExpressAddressRequest.java

@@ -0,0 +1,85 @@
+package com.zbkj.common.request;
+
+import com.zbkj.common.constants.RegularConstants;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+import java.io.Serializable;
+
+/**
+ * 新增用户地址对象
+ *  +----------------------------------------------------------------------
+ *  | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ *  +----------------------------------------------------------------------
+ *  | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ *  +----------------------------------------------------------------------
+ *  | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ *  +----------------------------------------------------------------------
+ *  | Author: CRMEB Team <admin@crmeb.com>
+ *  +----------------------------------------------------------------------
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="UserAddressRequest对象", description="新增用户驿站地址对象")
+public class UserExpressAddressRequest implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    @ApiModelProperty(value = "用户地址id,新增时不填")
+    private Integer id;
+
+    @ApiModelProperty(value = "驿站", required = true)
+    @NotBlank(message = "驿站名称不能为空")
+    @Length(max = 64, message = "Consignee name cannot exceed 64 characters")
+    private String expressName;
+
+    @ApiModelProperty(value = "驿站电话")
+
+    @Pattern(regexp = RegularConstants.PHONE_TWO, message = "请输入正确的手机号")
+    private String phone;
+
+    @ApiModelProperty(value = "收货人所在省")
+    @NotBlank(message = "驿站所在省不能为空")
+    private String province;
+
+    @ApiModelProperty(value = "省份ID")
+    @NotNull(message = "省份ID不能为空")
+    private Integer provinceId;
+
+    @ApiModelProperty(value = "驿站所在市")
+    @NotBlank(message = "驿站所在市不能为空")
+    private String city;
+
+    @ApiModelProperty(value = "城市id")
+    @NotNull(message = "城市id不能为空")
+    private Integer cityId;
+
+    @ApiModelProperty(value = "收货人所在区/县")
+    @NotBlank(message = "驿站所在区/县不能为空")
+    private String district;
+
+    @ApiModelProperty(value = "区/县id")
+    @NotNull(message = "区/县id不能为空")
+    private Integer districtId;
+
+    @ApiModelProperty(value = "驿站所在街道")
+//    @NotBlank(message = "收货人所在街道不能为空")
+    private String street;
+
+    @ApiModelProperty(value = "驿站详细地址", required = true)
+    @NotBlank(message = "驿站详细地址不能为空")
+    @Length(max = 500, message = "Consignee's full address cannot exceed 500 characters")
+    private String detail;
+
+    @ApiModelProperty(value = "是否默认", example = "false", required = true)
+    private Boolean isDefault;
+
+}

+ 2 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/UserUpdateRequest.java

@@ -53,4 +53,6 @@ public class UserUpdateRequest implements Serializable {
 
     @ApiModelProperty(value = "是否为推广员")
     private Boolean isPromoter;
+    @ApiModelProperty(value = "是否为骑手")
+    private Boolean isRider;
 }

+ 40 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/express/CreateExpressOrderRequest.java

@@ -0,0 +1,40 @@
+package com.zbkj.common.request.express;
+
+import com.zbkj.common.request.OrderMerchantRequest;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 创建订单请求对象
+ *  +----------------------------------------------------------------------
+ *  | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ *  +----------------------------------------------------------------------
+ *  | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ *  +----------------------------------------------------------------------
+ *  | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ *  +----------------------------------------------------------------------
+ *  | Author: CRMEB Team <admin@crmeb.com>
+ *  +----------------------------------------------------------------------
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="CreateExpressOrderRequest对象", description="创建快递订单请求对象")
+public class CreateExpressOrderRequest implements Serializable {
+
+    private static final long serialVersionUID = -6133994384185333872L;
+
+    @ApiModelProperty(value = "预下单订单号", required = true)
+    @NotBlank(message = "预下单订单号不能为空")
+    private String preOrderNo;
+}

+ 41 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/express/ExpressOrderFrontListRequest.java

@@ -0,0 +1,41 @@
+package com.zbkj.common.request.express;
+
+import com.zbkj.common.request.PageParamRequest;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 移动端订单列表请求对象
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ExpressOrderFrontListRequest", description = "移动端快递订单列表请求对象")
+public class ExpressOrderFrontListRequest extends PageParamRequest implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "订单状态(-1:全部,0:待支付,1:待发货,2:部分发货, 3:待核销,4:待收货,5:已收货,6:已完成,9:已取消)")
+   // @NotNull(message = "订单编号不能为空")
+    private Integer status;
+
+    @ApiModelProperty(value = "搜索关键字")
+    private String keywords;
+
+    @ApiModelProperty(value = "订单类型:0-进行中,1-完成")
+    private Integer orderType;
+}

+ 48 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/express/PreExpressOrderDetailRequest.java

@@ -0,0 +1,48 @@
+package com.zbkj.common.request.express;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+/**
+ * 预下单详情请求对象
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "PreExpressOrderDetailRequest对象", description = "预下单快递详情请求对象")
+public class PreExpressOrderDetailRequest {
+    @ApiModelProperty(value = "快递信息)")
+    private String expressInfo;
+    @ApiModelProperty(value = "快递图片")
+    private String image;
+    @ApiModelProperty(value = "快递规格")
+    @NotNull(message = "快递规格不能为空")
+    private Integer sepec;
+    @ApiModelProperty(value = "快递数量")
+    @NotNull(message = "快递数量不能为空")
+    private Integer expressNum;
+    @ApiModelProperty(value = "费用")
+    private BigDecimal price;
+    @ApiModelProperty(value = "备注")
+    private String remark;
+    @ApiModelProperty(value = "订单编号")
+    private String orderNo;
+
+
+}

+ 52 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/express/PreExpressOrderRequest.java

@@ -0,0 +1,52 @@
+package com.zbkj.common.request.express;
+
+import com.zbkj.common.annotation.StringContains;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 预下单请求对象
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "PreExpressOrderRequest对象", description = "预下单快递请求对象")
+public class PreExpressOrderRequest {
+
+    @ApiModelProperty(value = "预下单类型(“send”:寄件,“take”:取件", required = true)
+    @NotBlank(message = "预下单类型不能为空")
+    @StringContains(limitValues = {"send", "take"}, message = "未知的预下单类型")
+    private String preOrderType;
+
+    @ApiModelProperty(value = "小费")
+    private BigDecimal giveTips= BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "用户地址id")
+    @NotNull(message="用户地址不能为空")
+    private Integer userAddressId;
+    @NotNull(message="驿站地址不能为空")
+    private Integer postAddressId;
+
+    @ApiModelProperty(value = "下单详情列表", required = true)
+    @NotEmpty(message = "下单详情列表不能为空")
+    private List<PreExpressOrderDetailRequest> orderDetails;
+
+}

+ 44 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/merchant/MerchantMarketRequest.java

@@ -0,0 +1,44 @@
+package com.zbkj.common.request.merchant;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+
+@ApiModel(value = "MerchantMarketRequest对象", description = "商户营销")
+public class MerchantMarketRequest implements Serializable {
+    private static final long serialVersionUID=1L;
+    @ApiModelProperty(value = "id")
+    private Integer id;
+
+    @ApiModelProperty(value = "是否满减大促")
+    private Boolean isFullReductProm;
+
+    @ApiModelProperty(value = "首单立减")
+    private Double firstImmedReduct;
+
+    @ApiModelProperty(value = "起送费")
+    private Double deliveryFee;
+
+    @ApiModelProperty(value = "减免配送费开关0-关闭,1-开启")
+    private Boolean isSwitch;
+
+    @ApiModelProperty(value = "是否全免0-全免,1-免部分")
+    private Boolean isFullExemption;
+
+    @ApiModelProperty(value = "减免费用")
+    private Double reduceFee;
+    @ApiModelProperty(value = "打包费")
+    private  Double packingFee;
+
+}
+

+ 10 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/merchant/MerchantMoveSearchRequest.java

@@ -40,4 +40,14 @@ public class MerchantMoveSearchRequest implements Serializable {
     @ApiModelProperty(value = "是否自营:0-非自营,1-自营")
     private Boolean isSelf;
 
+    @ApiModelProperty(value = "维度", required = true)
+    //@NotNull(message = "维度不能为空")
+    private  Double latitude;
+    @ApiModelProperty(value = "经度", required = true)
+    // @NotNull(message = "经度不能为空")
+    private Double longitude;
+
+    @ApiModelProperty(value = " 商品归类")
+    private Integer productType;
+
 }

+ 9 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/merchant/MerchantProductSearchRequest.java

@@ -51,4 +51,13 @@ public class MerchantProductSearchRequest implements Serializable {
 
     @ApiModelProperty(value = "最高价")
     private BigDecimal maxPrice;
+
+    @ApiModelProperty(value = "维度", required = true)
+    //@NotNull(message = "维度不能为空")
+    private  Double latitude;
+    @ApiModelProperty(value = "经度", required = true)
+    // @NotNull(message = "经度不能为空")
+    private Double longitude;
+    @ApiModelProperty(value = " 商品归类")
+    private Integer productType;
 }

+ 23 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/rider/BatchSetDeliveTimeRequest.java

@@ -0,0 +1,23 @@
+package com.zbkj.common.request.rider;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.hibernate.validator.constraints.Range;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="BatchSetDeliveTimeRequest", description="批量设置请求对象")
+public class BatchSetDeliveTimeRequest implements Serializable {
+    private static final long serialVersionUID = -452373239606480650L;
+    @ApiModelProperty(value = "间隔时间", required = true)
+    @NotNull(message = "时间不能为空")
+    @Range(min = 0, max = 99999, message = "初始20分钟")
+    private Integer intervalTime;
+}

+ 80 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/rider/RiderAddRequest.java

@@ -0,0 +1,80 @@
+package com.zbkj.common.request.rider;
+
+import com.zbkj.common.constants.RegularConstants;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.hibernate.validator.constraints.Length;
+import org.hibernate.validator.constraints.Range;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+import java.io.Serializable;
+
+/**
+ * 添加商户请求对象
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "RiderAddRequest对象", description = "添加商户请求对象")
+public class RiderAddRequest implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "骑手名称", required = true)
+    @NotEmpty(message = "骑手名称不能为空")
+    @Length(max = 16, message = "骑手名称不能超过16个字符")
+    private String name;
+
+
+
+    @ApiModelProperty(value = "骑手手机号", required = true)
+    @NotEmpty(message = "骑手手机号不能为空")
+    @Pattern(regexp = RegularConstants.PHONE_TWO, message = "手机号格式不正确,请重新输入")
+    private String phone;
+
+    @ApiModelProperty(value = "手续费(%)", required = true)
+    @NotNull(message = "手续费不能为空")
+    @Range(min = 0, max = 100, message = "手续费率范围为0-100")
+    private Integer handlingFee;
+
+
+    @ApiModelProperty(value = "是否有过配送经验")
+    private Boolean isExped;
+    @ApiModelProperty(value = "岗位范围id|逗号分隔")
+    private String jobScope;
+
+    @ApiModelProperty(value = "是否推荐:0-不推荐,1-推荐", required = true)
+    @NotNull(message = "推荐开关不能为空")
+    private Boolean isRecommend;
+
+    @ApiModelProperty(value = "商户开关:0-关闭,1-开启", required = true)
+    @NotNull(message = "骑手开关不能为空")
+    private Boolean isSwitch;
+
+    @ApiModelProperty(value = "资质图片", required = true)
+    @NotNull(message = "资质图片不能为空")
+    private String qualificationPicture;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "排序", required = true)
+    @NotNull(message = "排序不能为空")
+    @Range(min = 0, max = 9999, message = "排序的的范围为0-9999")
+    private Integer sort;
+
+}

+ 45 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/rider/RiderApplyAuditRequest.java

@@ -0,0 +1,45 @@
+package com.zbkj.common.request.rider;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.hibernate.validator.constraints.Range;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * 商户申请审核请求对象
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="RiderApplyAuditRequest对象", description="商户申请审核请求对象")
+public class RiderApplyAuditRequest implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    @ApiModelProperty(value = "申请ID")
+    @NotNull(message = "申请单ID不能为空")
+    private Integer id;
+
+    @ApiModelProperty(value = "审核状态:2-审核通过,3-审核拒绝")
+    @NotNull(message = "审核状态不能为空")
+    @Range(min = 2, max = 3, message = "未知的审核状态")
+    private Integer auditStatus;
+
+    @ApiModelProperty(value = "拒绝原因")
+    private String denialReason;
+
+}

+ 41 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/rider/RiderApplyRemarkRequest.java

@@ -0,0 +1,41 @@
+package com.zbkj.common.request.rider;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * 商户申请备注请求对象
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="RiderApplyRemarkRequest对象", description="骑手申请备注请求对象")
+public class RiderApplyRemarkRequest implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    @ApiModelProperty(value = "申请ID")
+    @NotNull(message = "申请单ID不能为空")
+    private Integer id;
+
+    @ApiModelProperty(value = "备注内容")
+    @NotEmpty(message = "备注内容不能为空")
+    private String remark;
+
+}

+ 42 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/rider/RiderApplySearchRequest.java

@@ -0,0 +1,42 @@
+package com.zbkj.common.request.rider;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 商户申请查询请求对象
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="RiderApplySearchRequest对象", description="商户申请查询请求对象")
+public class RiderApplySearchRequest implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    @ApiModelProperty(value = "骑手名称")
+    private String name;
+
+    @ApiModelProperty(value = "审核状态:1-待审核,2-审核通过,3-审核拒绝")
+    private Integer auditStatus;
+
+    @ApiModelProperty(value = "创建时间区间")
+    private String dateLimit;
+    @ApiModelProperty(value = "骑手关键字:支持名称、关键字")
+    private String jobScope;
+
+}

+ 51 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/rider/RiderDeliveTimeRequest.java

@@ -0,0 +1,51 @@
+package com.zbkj.common.request.rider;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.sql.Time;
+
+/**
+ * <p>
+ * 骑手表
+ * </p>
+ *
+ * @author HZW
+ * @since 2022-07-20
+ */
+@Data
+
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "RiderDeliveTimeRequest", description = "添加商户请求对象")
+public class RiderDeliveTimeRequest implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "ID")
+    private Integer id;
+
+    @ApiModelProperty(value = "开始时间", required = true)
+    //@JsonFormat(pattern ="HH:mm")
+    @NotNull(message = "开始时间不能为空")
+    private String beginTime;
+    @ApiModelProperty(value = "结束时间", required = true)
+    //@JsonFormat(pattern ="HH:mm")
+    @NotNull(message = "结束时间不能为空")
+    private String endTime;
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
+    @ApiModelProperty(value = "状态")
+    private Boolean status;
+
+}

+ 43 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/rider/RiderFeeAddRequest.java

@@ -0,0 +1,43 @@
+package com.zbkj.common.request.rider;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 添加商户请求对象
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "RiderFeeConfigAddRequest对象", description = "添加骑手配送费请求对象")
+public class RiderFeeAddRequest implements Serializable {
+    private static final long serialVersionUID = 1L;
+    @ApiModelProperty(value = "id")
+    private Integer id;
+    @ApiModelProperty(value = "起送基础费不能为空", required = true)
+    @NotNull(message = "起送基础费不能为空")
+    private BigDecimal basicFee;
+    @ApiModelProperty(value = "配送距离不能为空", required = true)
+    @NotNull(message = "配送距离不能为空")
+    private Double distanceInKm;
+
+    @ApiModelProperty(value = "每公里费用")
+    private Double feePerKm;
+
+}

+ 49 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/rider/RiderFeeUpdateRequest.java

@@ -0,0 +1,49 @@
+package com.zbkj.common.request.rider;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.hibernate.validator.constraints.Length;
+import org.hibernate.validator.constraints.Range;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 编辑商户请求对象
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="RiderFeeUpdateRequest对象", description="编辑骑手请求对象")
+public class RiderFeeUpdateRequest implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    @ApiModelProperty(value = "ID")
+    @NotNull(message = "配置费用ID不能为空")
+    private Integer id;
+
+    @ApiModelProperty(value = "起送基础费不能为空", required = true)
+    @NotNull(message = "起送基础费不能为空")
+    private BigDecimal basicFee;
+    @ApiModelProperty(value = "配送距离不能为空", required = true)
+    @NotNull(message = "配送距离不能为空")
+    private Double distanceInKm;
+
+    @ApiModelProperty(value = "每公里费用")
+    private Double feePerKm;
+}

+ 46 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/rider/RiderSearchRequest.java

@@ -0,0 +1,46 @@
+package com.zbkj.common.request.rider;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 商户查询请求对象
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="RiderSearchRequest对象", description="商户查询请求对象")
+public class RiderSearchRequest implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    @ApiModelProperty(value = "骑手手机号")
+    private String phone;
+
+    @ApiModelProperty(value = "骑手关键字:支持名称、关键字")
+    private String name;
+    @ApiModelProperty(value = "骑手关键字:支持名称、关键字")
+    private String jobScope;
+
+
+    @ApiModelProperty(value = "骑手开关:0-关闭,1-开启")
+    private Boolean isSwitch;
+
+    @ApiModelProperty(value = "创建时间区间")
+    private String dateLimit;
+
+}

+ 68 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/rider/RiderSettledApplyRequest.java

@@ -0,0 +1,68 @@
+package com.zbkj.common.request.rider;
+
+import com.zbkj.common.constants.RegularConstants;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+import java.io.Serializable;
+
+/**
+ * 商户入驻申请请求对象
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "RiderSettledApplyRequest对象", description = "骑手入驻申请请求对象")
+public class RiderSettledApplyRequest implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "骑手名称", required = true)
+    @NotEmpty(message = "骑手名称不能为空")
+    @Length(max = 16, message = "骑手名称不能超过16个字符")
+    private String name;
+    @ApiModelProperty(value = "骑手手机号", required = true)
+    @NotEmpty(message = "骑手手机号不能为空")
+    @Pattern(regexp = RegularConstants.PHONE_TWO, message = "手机号格式不正确,请重新输入")
+    private String phone;
+
+    @ApiModelProperty(value = "手续费(%)", required = true)
+//    @NotNull(message = "手续费不能为空")
+//    @Range(min = 0, max = 100, message = "手续费率范围为0-100")
+    private Integer handlingFee;
+
+
+    @ApiModelProperty(value = "资质图片", required = true)
+    @NotEmpty(message = "资质图片不能为空")
+    private String qualificationPicture;
+
+    @ApiModelProperty(value = "验证码", required = true)
+    @NotEmpty(message = "验证码不能为空")
+    @Pattern(regexp = RegularConstants.VALIDATE_CODE_NUM_SIX, message = "验证码格式不正确,必须为6位数字")
+    private String captcha;
+    @NotNull(message = "配送经验不能为空")
+    @ApiModelProperty(value = "是否有过配送经验")
+    private Boolean isExped;
+    @ApiModelProperty(value = "岗位范围id|逗号分隔", required = true)
+    @NotBlank(message = "岗位范围不能为空")
+    @Length(max = 64, message = "岗位范围组合长度不能超过64个字符")
+    private String jobScope;
+
+}

+ 44 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/rider/RiderUpdatePhoneRequest.java

@@ -0,0 +1,44 @@
+package com.zbkj.common.request.rider;
+
+import com.zbkj.common.constants.RegularConstants;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+import java.io.Serializable;
+
+/**
+ * 修改商户手机号请求对象
+ *  +----------------------------------------------------------------------
+ *  | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ *  +----------------------------------------------------------------------
+ *  | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ *  +----------------------------------------------------------------------
+ *  | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ *  +----------------------------------------------------------------------
+ *  | Author: CRMEB Team <admin@crmeb.com>
+ *  +----------------------------------------------------------------------
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="RiderUpdatePhoneRequestt对象", description="修改商户手机号请求对象")
+public class RiderUpdatePhoneRequest implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    @ApiModelProperty(value = "商户ID", required = true)
+    @NotNull(message = "骑手ID不能为空")
+    private Integer id;
+
+    @ApiModelProperty(value = "商户手机号")
+    @NotBlank(message = "骑手手机号不能为空")
+    @Pattern(regexp = RegularConstants.PHONE_TWO, message = "手机号格式不正确,请重新输入")
+    private String phone;
+
+}

+ 85 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/request/rider/RiderUpdateRequest.java

@@ -0,0 +1,85 @@
+package com.zbkj.common.request.rider;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.hibernate.validator.constraints.Length;
+import org.hibernate.validator.constraints.Range;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * 编辑商户请求对象
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="RiderUpdateRequest对象", description="编辑骑手请求对象")
+public class RiderUpdateRequest implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    @ApiModelProperty(value = "商户ID")
+    @NotNull(message = "骑手ID不能为空")
+    private Integer id;
+
+    @ApiModelProperty(value = "商户名称")
+    @NotEmpty(message = "骑手名称不能为空")
+    @Length(max = 50, message = "骑手名称不能超过50个字符")
+    private String name;
+
+
+    @ApiModelProperty(value = "手续费(%)")
+    @NotNull(message = "手续费不能为空")
+    @Range(min = 0, max = 100, message = "手续费率范围为0-100")
+    private Integer handlingFee;
+
+    @ApiModelProperty(value = "骑手关键字")
+    private String keywords;
+
+    @ApiModelProperty(value = "商户详细地址")
+    private String addressDetail;
+
+    @ApiModelProperty(value = "骑手开关:0-关闭,1-开启")
+    @NotNull(message = "骑手开关不能为空")
+    private Boolean isSwitch;
+
+    @ApiModelProperty(value = "是否推荐:0-不推荐,1-推荐")
+    private Boolean isRecommend;
+
+
+    @ApiModelProperty(value = "商户星级1-5")
+    @NotNull(message = "骑手星级不能为空")
+    @Range(min = 1, max = 5, message = "商户星级的范围为:1~5")
+    private Integer starLevel;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "排序")
+    @NotNull(message = "排序不能为空")
+    @Range(min = 0, max = 9999, message = "排序的的范围为0-9999")
+    private Integer sort;
+
+    @ApiModelProperty(value = "资质图片")
+    private String qualificationPicture;
+    @ApiModelProperty(value = "骑手头像")
+    private String avatar;
+    @ApiModelProperty(value = "是否有过配送经验")
+    private Boolean isExped;
+    @ApiModelProperty(value = "岗位范围id|逗号分隔")
+    private String jobScope;
+}

+ 4 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/ComputedOrderPriceResponse.java

@@ -72,4 +72,8 @@ public class ComputedOrderPriceResponse implements Serializable {
 
     @ApiModelProperty(value = "svip优惠金额")
     private BigDecimal svipDiscountPrice = BigDecimal.ZERO;
+
+
+    @ApiModelProperty(value = "打包费")
+    private BigDecimal packingFee= BigDecimal.ZERO;
 }

+ 3 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/IndexInfoResponse.java

@@ -1,6 +1,7 @@
 package com.zbkj.common.response;
 
 import com.zbkj.common.model.article.Article;
+import com.zbkj.common.model.product.ProductCategory;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -61,4 +62,6 @@ public class IndexInfoResponse implements Serializable {
 
     @ApiModelProperty(value = "商户对应推荐商品")
     private List<SeckillProductPageResponse> proList;
+    @ApiModelProperty(value = "显示产品大类")
+    private List<ProductCategory>  cateList;
 }

+ 4 - 2
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/IndexMerchantResponse.java

@@ -81,8 +81,10 @@ public class IndexMerchantResponse implements Serializable {
     private Integer salesVolume;
     @ApiModelProperty(value = "优惠标签")
     private List<String> discountLabel;
-    @ApiModelProperty(value = "是否免配送费:0-免,1-免")
+    @ApiModelProperty(value = "是否免配送费:0-免,1-免")
     private Boolean isFreeDeliverFee;
     @ApiModelProperty(value = "免配送费")
-    private Double freeDeliverFee;
+    private Double freeDeliverFee=0.00;
+    @ApiModelProperty(value = "优惠券列表")
+    private List<CouponFrontResponse> couponList;
 }

+ 15 - 1
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/MerchantIndexInfoResponse.java

@@ -1,5 +1,7 @@
 package com.zbkj.common.response;
 
+import com.zbkj.common.model.article.Article;
+import com.zbkj.common.model.article.MerchantArticle;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -7,6 +9,7 @@ import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * 商户首页信息响应对象
@@ -28,8 +31,10 @@ public class MerchantIndexInfoResponse implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    @ApiModelProperty(value = "商户ID")
+    @ApiModelProperty(value = "商户信息ID")
     private Integer id;
+    @ApiModelProperty(value = "商户ID")
+    private Integer merId;
 
     @ApiModelProperty(value = "商户名称")
     private String name;
@@ -63,4 +68,13 @@ public class MerchantIndexInfoResponse implements Serializable {
 
     @ApiModelProperty(value = "客服电话")
     private String servicePhone;
+
+    @ApiModelProperty(value = "销量")
+    private Integer sales;
+    @ApiModelProperty(value = "商户详细地址")
+    private String addressDetail;
+
+
+    @ApiModelProperty(value = "新闻简报消息滚动")
+    private List<MerchantArticle> headline;
 }

+ 44 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/MerchantRecommendResponse.java

@@ -0,0 +1,44 @@
+package com.zbkj.common.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "MerchantRecommendResponse对象", description = "商户推荐响应对象")
+public class MerchantRecommendResponse implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "商户ID")
+    private Integer merId;
+
+    @ApiModelProperty(value = "商户名称")
+    private String merName;
+
+    @ApiModelProperty(value = "商户logo(横)")
+    private String rectangleLogo;
+
+    @ApiModelProperty(value = "商户星级1-5")
+    private Integer starLevel;
+
+    @ApiModelProperty(value = "销量")
+    private Integer sales;
+    @ApiModelProperty(value = "是否免配送")
+    private Boolean isFreeDeliveryFee;
+    @ApiModelProperty(value = "免配送费")
+    private Double freeDeliveryFee;
+    @ApiModelProperty(value = "优惠券列表")
+    private List<CouponFrontResponse> couponList;
+    @ApiModelProperty(value = "商户对应推荐商品")
+    private List<ProductSimpleResponse> proList;
+    @ApiModelProperty(value = "是否今日推荐")
+    private Boolean isTodayRecommend;
+}
+

+ 6 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/OrderFrontDataResponse.java

@@ -109,4 +109,10 @@ public class OrderFrontDataResponse implements Serializable {
 
     @ApiModelProperty(value = "过期时间")
     private String expirationTime;
+    @ApiModelProperty(value = "商家电话")
+    private String merPhone;
+    @ApiModelProperty(value = "商家地址")
+    private String merAddress;
+    @ApiModelProperty(value = "用户地址")
+    private String userAddress;
 }

+ 2 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/PreOrderResponse.java

@@ -40,6 +40,8 @@ public class PreOrderResponse implements Serializable {
 
     @ApiModelProperty(value = "运费金额")
     private BigDecimal freightFee = BigDecimal.ZERO;
+    @ApiModelProperty(value = "打包费")
+    private BigDecimal packingFee= BigDecimal.ZERO;
 
     @ApiModelProperty(value = "优惠金额")
     private BigDecimal couponFee = BigDecimal.ZERO;

+ 3 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/ProductInfoResponse.java

@@ -141,4 +141,7 @@ public class ProductInfoResponse implements Serializable {
 
     @ApiModelProperty(value = "是否支持退款")
     private Boolean refundSwitch;
+
+    @ApiModelProperty(value = "是否推荐")
+    private Boolean isHot;
 }

+ 17 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/RiderDeliveDate.java

@@ -0,0 +1,17 @@
+package com.zbkj.common.response;
+
+import com.zbkj.common.model.rider.RiderDeliveTime;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class RiderDeliveDate {
+    @ApiModelProperty(value = "日期")
+    private String deliveDate;
+    @ApiModelProperty(value = "中文描述日今天,明天,后天")
+    private String chDesc;
+    @ApiModelProperty(value = "预约时间")
+    private List<RiderDeliveTime> deliveList;
+}

+ 14 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/RiderDeliveTimeResponse.java

@@ -0,0 +1,14 @@
+package com.zbkj.common.response;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class RiderDeliveTimeResponse {
+    @ApiModelProperty(value = "日期")
+    private List<RiderDeliveDate> riderDeliveDate = new ArrayList<>();
+
+}

+ 69 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/RiderPageResponse.java

@@ -0,0 +1,69 @@
+package com.zbkj.common.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 平台端商户分页列表响应对象
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="RiderPageResponse对象", description="平台端骑手分页列表响应对象")
+public class RiderPageResponse implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    @ApiModelProperty(value = "骑手ID")
+    private Integer id;
+
+    @ApiModelProperty(value = "骑手名称")
+    private String name;
+
+    @ApiModelProperty(value = "商户手机号")
+    private String phone;
+
+    @ApiModelProperty(value = "是否推荐:0-不推荐,1-推荐")
+    private Boolean isRecommend;
+
+    @ApiModelProperty(value = "商户开关:0-关闭,1-开启")
+    private Boolean isSwitch;
+
+    @ApiModelProperty(value = "骑手星级1-5")
+    private Integer starLevel;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+    @ApiModelProperty(value = "骑手头像")
+    private String avatar;
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
+
+    @ApiModelProperty(value = "骑手创建类型:admin-管理员创建,apply-骑手入驻申请")
+    private String createType;
+
+    @ApiModelProperty(value = "商户创建管理员名称")
+    private String createName;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+    @ApiModelProperty(value = "是否有过配送经验")
+    private Boolean isExped;
+    @ApiModelProperty(value = "岗位范围id|逗号分隔")
+    private String jobScope;
+}

+ 77 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/RiderPlatformDetailResponse.java

@@ -0,0 +1,77 @@
+package com.zbkj.common.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 平台端商户详情响应对象
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="RiderPlatformDetailResponse", description="平台端商户详情响应对象")
+public class RiderPlatformDetailResponse implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    @ApiModelProperty(value = "骑手ID")
+    private Integer id;
+
+    @ApiModelProperty(value = "骑手名称")
+    private String name;
+
+
+    @ApiModelProperty(value = "骑手手机号")
+    private String phone;
+
+    @ApiModelProperty(value = "手续费(%)")
+    private Integer handlingFee;
+    @ApiModelProperty(value = "是否有过配送经验", required = true)
+    private Boolean isExped;
+    @ApiModelProperty(value = "岗位范围id|逗号分隔")
+    private String jobScope;
+
+    @ApiModelProperty(value = "骑手详细地址")
+    private String addressDetail;
+    @ApiModelProperty(value = "骑手头像")
+    private  String avatar;
+
+    @ApiModelProperty(value = "是否推荐:0-不推荐,1-推荐")
+    private Boolean isRecommend;
+
+    @ApiModelProperty(value = "骑手开关:0-关闭,1-开启")
+    private Boolean isSwitch;
+
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
+
+    @ApiModelProperty(value = "资质图片")
+    private String qualificationPicture;
+
+    @ApiModelProperty(value = "骑手创建类型:admin-管理员创建,apply-商户入驻申请")
+    private String createType;
+
+    @ApiModelProperty(value = "关联管理账号ID")
+    private Integer adminId;
+
+    @ApiModelProperty(value = "骑手星级1-5")
+    private Integer starLevel;
+}

+ 53 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/RiderSettledResponse.java

@@ -0,0 +1,53 @@
+package com.zbkj.common.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 骑手入驻响应对象
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="RiderSettledResponse对象", description="骑手入驻响应对象")
+public class RiderSettledResponse implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    @ApiModelProperty(value = "申请ID")
+    private Integer id;
+
+    @ApiModelProperty(value = "骑手名称")
+    private String name;
+
+    @ApiModelProperty(value = "骑手手机号")
+    private String phone;
+
+    @ApiModelProperty(value = "审核状态:1-待审核,2-审核通过,3-审核拒绝")
+    private Integer auditStatus;
+
+    @ApiModelProperty(value = "拒绝原因")
+    private String denialReason;
+
+    @ApiModelProperty(value = "资质图片")
+    private String qualificationPicture;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+}

+ 2 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/SeckillProductPageResponse.java

@@ -67,6 +67,8 @@ public class SeckillProductPageResponse {
 
     @ApiModelProperty(value = "商户名称")
     private String merName;
+    @ApiModelProperty(value = "商户名称")
+    private String merId;
 
     @ApiModelProperty(value = "商户分类ID")
     private Integer merCategoryId;

+ 2 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/UserCenterResponse.java

@@ -90,4 +90,6 @@ public class UserCenterResponse implements Serializable {
 
     @ApiModelProperty(value = "是否移动端商家管理员")
     private Boolean isEmployee = false;
+    @ApiModelProperty(value = "是否骑手")
+    private Boolean isRider=false;
 }

+ 3 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/UserInfoResponse.java

@@ -51,4 +51,7 @@ public class UserInfoResponse implements Serializable {
 
     @ApiModelProperty(value = "性别,0未知,1男,2女,3保密")
     private Integer sex;
+
+    @ApiModelProperty(value = "是否骑手")
+    private Boolean isRider;
 }

+ 93 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/express/ExpressOrderFrontDataResponse.java

@@ -0,0 +1,93 @@
+package com.zbkj.common.response.express;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 订单移动端列表数据响应对象
+ *  +----------------------------------------------------------------------
+ *  | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ *  +----------------------------------------------------------------------
+ *  | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ *  +----------------------------------------------------------------------
+ *  | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ *  +----------------------------------------------------------------------
+ *  | Author: CRMEB Team <admin@crmeb.com>
+ *  +----------------------------------------------------------------------
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="OrderFrontDataResponse对象", description="订单移动端列表数据响应对象")
+public class ExpressOrderFrontDataResponse implements Serializable {
+
+    private static final long serialVersionUID = 1387727608277207652L;
+
+    @ApiModelProperty(value = "订单id")
+    private Integer id;
+
+    @ApiModelProperty(value = "订单号")
+    private String orderNo;
+
+    @ApiModelProperty(value = "商户ID")
+    private Integer merId;
+
+    @ApiModelProperty(value = "支付状态")
+    private Boolean paid;
+
+    @ApiModelProperty(value = "支付时间")
+    private Date payTime;
+
+    @ApiModelProperty(value = "支付金额")
+    private BigDecimal payPrice;
+
+    @ApiModelProperty(value = "订单状态(0:待支付,1:待发货,2:部分发货, 3:待核销,4:待收货,5:已收货,6:已完成,9:已取消)")
+    private Integer status;
+
+    @ApiModelProperty(value = "取消状态:0-未取消,1-系统取消,2-用户取消")
+    private Integer cancelStatus;
+
+    @ApiModelProperty(value = "订单商品总数")
+    private Integer totalNum;
+
+    @ApiModelProperty(value = "商品总价")
+    private BigDecimal proTotalPrice;
+
+    @ApiModelProperty(value = "订单总价")
+    private BigDecimal totalPrice;
+
+    @ApiModelProperty(value = "订单详情对象列表")
+    private List<ExpressOrderInfoFrontDataResponse> orderInfoList;
+
+    @ApiModelProperty(value = "商户名称")
+    private String merName;
+
+    @ApiModelProperty(value = "订单类型:0-寄件,1-取件")
+    private Integer type;
+
+
+    @ApiModelProperty(value = "过期时间")
+    private Long cancelTime;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "退款状态:0 未退款 1 申请中 2 部分退款 3 已退款")
+    private Integer refundStatus;
+
+    @ApiModelProperty(value = "过期时间")
+    private String expirationTime;
+
+    @ApiModelProperty(value = "驿站地址")
+    private String postAddress;
+    @ApiModelProperty(value = "用户地址")
+    private String userAddress;
+}

+ 67 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/express/ExpressOrderInfoFrontDataResponse.java

@@ -0,0 +1,67 @@
+package com.zbkj.common.response.express;
+
+import com.zbkj.common.model.cdkey.CardSecret;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 订单详情移动端数据响应对象
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="ExpressOrderInfoFrontDataResponse对象", description="订单详情移动端数据响应对象")
+public class ExpressOrderInfoFrontDataResponse implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @ApiModelProperty(value = "快件信息")
+    private String expressInfo;
+
+    @ApiModelProperty(value = "快件图片")
+    private String image;
+
+    @ApiModelProperty(value = "格值 ID")
+    private Integer specs;
+
+    @ApiModelProperty(value = "单价")
+    private BigDecimal price;
+
+    @ApiModelProperty(value = "数量")
+    private Integer expNum;
+
+    @ApiModelProperty(value = "实际支付金额")
+    private BigDecimal payPrice;
+
+    @ApiModelProperty(value = "申请退款数量")
+    private Integer applyRefundNum;
+
+    @ApiModelProperty(value = "退款数量")
+    private Integer refundNum;
+
+    @ApiModelProperty(value = "发货数量")
+    private Integer  deliveryNum;
+
+    @ApiModelProperty(value = "快件类型:0=取件,1-寄件")
+    private Integer type;
+
+}

+ 42 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/express/ExpressOrderNoResponse.java

@@ -0,0 +1,42 @@
+package com.zbkj.common.response.express;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 订单号响应对象
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="OrderNoResponse对象", description="订单号响应对象")
+public class ExpressOrderNoResponse implements Serializable {
+
+    private static final long serialVersionUID = 5527685476730836401L;
+
+    @ApiModelProperty(value = "订单号(预下单时为预下单单号)")
+    private String orderNo;
+
+    @ApiModelProperty(value = "订单类型:0-取件,1-寄件")
+    private Integer orderType;
+
+    @ApiModelProperty(value = "支付金额")
+    private BigDecimal payPrice;
+
+}

+ 35 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/express/PreExpressOrderInfoDetailResponse.java

@@ -0,0 +1,35 @@
+package com.zbkj.common.response.express;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "PreExpressOrderInfoDetailResponse对象", description = "预下单订单详情Vo对象")
+public class PreExpressOrderInfoDetailResponse {
+    @ApiModelProperty(value = "快递信息")
+    private String expressInfo;
+
+    @ApiModelProperty(value = "规格")
+    private Integer specId;
+
+    @ApiModelProperty(value = "商品图片")
+    private String image;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "单价")
+    private BigDecimal price;
+
+    @ApiModelProperty(value = "实际支付金额")
+    private BigDecimal payPrice;
+
+    @ApiModelProperty(value = "数量")
+    private Integer expressNum;
+}

+ 63 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/response/express/PreExpressOrderResponse.java

@@ -0,0 +1,63 @@
+package com.zbkj.common.response.express;
+
+import com.zbkj.common.vo.PreExpressOrderInfoDetailVo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 预下单响应对象
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "PreExpressOrderResponse对象", description = "预下单响应对象")
+public class PreExpressOrderResponse implements Serializable {
+
+    private static final long serialVersionUID = 7282892323898493847L;
+
+    @ApiModelProperty(value = "商品总计金额")
+    private BigDecimal proTotalFee;
+
+    @ApiModelProperty(value = "订单商品数量")
+    private Integer orderProNum;
+
+    @ApiModelProperty(value = "实际支付金额")
+    private BigDecimal payFee;
+
+    @ApiModelProperty(value = "用户id")
+    private Integer userId;
+
+    @ApiModelProperty(value = "用户名称")
+    private String userName;
+
+    @ApiModelProperty(value = "用户地址id")
+    private Integer userAddressId;
+    @ApiModelProperty(value = "驿站地址id")
+    private Integer expressAddressId;
+
+    @ApiModelProperty(value = "订单类型:0-取件,1-寄件")
+    private Integer type;
+    @ApiModelProperty(value = "用户可用余额")
+    private BigDecimal userBalance;
+    @ApiModelProperty(value = "小费")
+    private BigDecimal giveTips= BigDecimal.ZERO;
+    @ApiModelProperty(value = "用户订单数组")
+    private List<PreExpressOrderInfoDetailResponse> userOrderVoList;
+
+}

+ 1 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/vo/MerchantConfigInfoVo.java

@@ -112,4 +112,5 @@ public class MerchantConfigInfoVo implements Serializable {
 
     @ApiModelProperty(value = "腾讯地图KEY")
     private String txMapKey;
+
 }

+ 169 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/vo/MerchantVo.java

@@ -0,0 +1,169 @@
+package com.zbkj.common.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ * 商户表
+ * </p>
+ *
+ * @author HZW
+ * @since 2022-07-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "Merchant对象", description = "商户表")
+public class MerchantVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "商户ID")
+    private Integer id;
+
+    @ApiModelProperty(value = "商户名称")
+    private String name;
+
+    @ApiModelProperty(value = "商户分类ID")
+    private Integer categoryId;
+
+    @ApiModelProperty(value = "商户类型ID")
+    private Integer typeId;
+
+    @ApiModelProperty(value = "商户姓名")
+    private String realName;
+
+    @ApiModelProperty(value = "商户邮箱")
+    private String email;
+
+    @ApiModelProperty(value = "商户手机号")
+    private String phone;
+
+    @ApiModelProperty(value = "手续费(%)")
+    private Integer handlingFee;
+
+    @ApiModelProperty(value = "商户关键字")
+    private String keywords;
+
+    @ApiModelProperty(value = "省")
+    private String province;
+
+    @ApiModelProperty(value = "市")
+    private String city;
+
+    @ApiModelProperty(value = "区")
+    private String district;
+
+    @ApiModelProperty(value = "商户详细地址")
+    private String addressDetail;
+
+    @ApiModelProperty(value = "纬度")
+    private String latitude;
+
+    @ApiModelProperty(value = "经度")
+    private String longitude;
+
+    @ApiModelProperty(value = "是否自营:0-非自营,1-自营")
+    private Boolean isSelf;
+
+    @ApiModelProperty(value = "是否推荐:0-不推荐,1-推荐")
+    private Boolean isRecommend;
+
+    @ApiModelProperty(value = "商户开关:0-关闭,1-开启")
+    private Boolean isSwitch;
+
+    @ApiModelProperty(value = "商品审核开关:0-关闭,1-开启")
+    private Boolean productSwitch;
+
+    @ApiModelProperty(value = "自提开关:0-关闭,1-开启")
+    private Boolean isTakeTheir;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "资质图片")
+    private String qualificationPicture;
+
+    @ApiModelProperty(value = "商户背景图")
+    private String backImage;
+
+    @ApiModelProperty(value = "商户头像")
+    private String avatar;
+
+    @ApiModelProperty(value = "商户logo(横)")
+    private String rectangleLogo;
+
+    @ApiModelProperty(value = "商户封面图")
+    private String coverImage;
+
+    @ApiModelProperty(value = "商户街背景图")
+    private String streetBackImage;
+
+    @ApiModelProperty(value = "商户简介")
+    private String intro;
+
+    @ApiModelProperty(value = "复制商品数量")
+    private Integer copyProductNum;
+
+    @ApiModelProperty(value = "商户余额")
+    private BigDecimal balance;
+
+    @ApiModelProperty(value = "商户星级1-5")
+    private Integer starLevel;
+
+    @ApiModelProperty(value = "pcBanner")
+    private String pcBanner;
+
+    @ApiModelProperty(value = "pc背景图")
+    private String pcBackImage;
+
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
+
+    @ApiModelProperty(value = "商户创建类型:admin-管理员创建,apply-商户入驻申请")
+    private String createType;
+
+    @ApiModelProperty(value = "创建商户管理员ID")
+    private Integer createId;
+
+    @ApiModelProperty(value = "关联管理账号ID")
+    private Integer adminId;
+
+    @ApiModelProperty(value = "小票打印开关:0关闭,1=手动打印,2=自动打印,3=自动和手动")
+    private Integer receiptPrintingSwitch;
+
+    @ApiModelProperty(value = "电子面单开关:0关闭,1=开启")
+    private Integer electrPrintingSwitch;
+
+    @ApiModelProperty(value = "是否删除")
+    private Boolean isDel;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    @ApiModelProperty(value = "商户PCLogo")
+    private String pcLogo;
+
+    @ApiModelProperty(value = "商户PC品牌好店封面图片")
+    private String pcGoodStoreCoverImage;
+
+    @ApiModelProperty(value = "商户是否强制关闭:0-否,1-强制关闭")
+    private Boolean isForceShutdown;
+    @ApiModelProperty(value = "距离公里")
+    private Double distance;
+
+}

+ 50 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/vo/PreExpressOrderInfoDetailVo.java

@@ -0,0 +1,50 @@
+package com.zbkj.common.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+
+/**
+ * 订单详情Vo对象
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "PreOrderInfoDetailVo对象", description = "预下单订单详情Vo对象")
+public class PreExpressOrderInfoDetailVo {
+    @ApiModelProperty(value = "快递信息")
+    private String expressInfo;
+
+    @ApiModelProperty(value = "规格")
+    private Integer specId;
+
+    @ApiModelProperty(value = "商品图片")
+    private String image;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "单价")
+    private BigDecimal price;
+
+    @ApiModelProperty(value = "实际支付金额")
+    private BigDecimal payPrice;
+
+    @ApiModelProperty(value = "数量")
+    private Integer expressNum;
+
+
+}

+ 63 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/vo/PreExpressOrderInfoVo.java

@@ -0,0 +1,63 @@
+package com.zbkj.common.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 预下单Vo对象
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "PreExpressOrderInfoVo对象", description = "预下单Vo对象")
+public class PreExpressOrderInfoVo implements Serializable {
+
+    private static final long serialVersionUID = 567452850314559079L;
+
+    @ApiModelProperty(value = "总计金额")
+    private BigDecimal proTotalFee;
+
+    @ApiModelProperty(value = "订单数量")
+    private Integer orderProNum;
+
+    @ApiModelProperty(value = "实际支付金额")
+    private BigDecimal payFee;
+
+    @ApiModelProperty(value = "用户id")
+    private Integer userId;
+
+    @ApiModelProperty(value = "用户名称")
+    private String userName;
+    @ApiModelProperty(value = "用户名称")
+    private String userPhone;
+
+    @ApiModelProperty(value = "用户地址id")
+    private Integer userAddressId;
+    @ApiModelProperty(value = "驿站地址id")
+    private Integer postAddressId;
+
+    @ApiModelProperty(value = "订单类型:0-取件,1-寄件")
+    private Integer type;
+    @ApiModelProperty(value = "用户可用余额")
+    private BigDecimal userBalance;
+    @ApiModelProperty(value = "小费")
+    private BigDecimal giveTips= BigDecimal.ZERO;
+    @ApiModelProperty(value = "用户订单数组")
+    private List<PreExpressOrderInfoDetailVo> userOrderVoList;
+}

+ 3 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/vo/PreOrderInfoDetailVo.java

@@ -86,6 +86,9 @@ public class PreOrderInfoDetailVo {
     @ApiModelProperty(value = "优惠券优惠金额")
     private BigDecimal couponPrice = BigDecimal.ZERO;
 
+    @ApiModelProperty(value = "打包费")
+    private BigDecimal packingFee= BigDecimal.ZERO;
+
     @ApiModelProperty(value = "使用积分")
     private Integer useIntegral = 0;
 

+ 14 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/vo/ProCategoryCacheVo.java

@@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -50,6 +51,19 @@ public class ProCategoryCacheVo implements Serializable {
     @ApiModelProperty(value = "显示状态")
     private Boolean isShow;
 
+    @ApiModelProperty(value = "销量")
+    private  Integer sales;
+
+    @ApiModelProperty(value = "商品价格")
+    private BigDecimal price;
+
+    @ApiModelProperty(value = "好评率")
+    private String replyChance;
+
+    @ApiModelProperty(value = "营销类型:0=基础商品,1=秒杀,2=拼团")
+    private Integer marketingType;
+    @ApiModelProperty(value = "基础类型:0=普通商品,1-积分商品,2-虚拟商品,4=视频号,5-云盘商品,6-卡密商品")
+    private Integer type;
     @ApiModelProperty(value = "子对象列表")
     private List<ProCategoryCacheVo> childList;
 }

+ 54 - 0
ydd_mer_java/crmeb-common/src/main/java/com/zbkj/common/vo/TimeSumVo.java

@@ -0,0 +1,54 @@
+package com.zbkj.common.vo;
+
+public class TimeSumVo {
+    private int hours;
+    private int minutes;
+    private int seconds;
+
+    public TimeSumVo(int hours, int minutes) {
+        this.hours = hours;
+        this.minutes = minutes;
+        //this.seconds = seconds;
+    }
+    public  int getHours(){
+        return this.hours;
+    }
+    public  int getMinutes(){
+        return this.minutes;
+    }
+
+    public void addTime(int hours, int minutes) {
+        //this.seconds += seconds;
+        this.minutes += minutes + this.seconds / 60;
+        this.hours += hours + this.minutes / 60;
+
+        // 处理进位
+        //this.seconds %= 60;
+        this.minutes %= 60;
+        this.hours %= 24; // 假设不跨天
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%02d:%02d", hours, minutes);
+    }
+    public static void main(String[] args) {
+//        TimeSumVo timeSum = new TimeSumVo(1, 30); // 1小时30分钟45秒
+//        timeSum.addTime(0, 30); // 添加2小时15分钟30秒
+
+        int endTime=24;
+        int hours=0;
+        int minutes=0;
+        do{
+            TimeSumVo timeSum=new TimeSumVo(hours,minutes);
+            timeSum.addTime(0, 30);
+            System.out.println("累加后的时间为: " + timeSum.toString());
+            hours=timeSum.hours;
+            minutes=timeSum.minutes;
+            if(hours==23 && minutes==30)
+                break;
+        }while (hours<24);
+
+
+    }
+}

+ 0 - 42
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/BaiduMapAPI.java

@@ -1,42 +0,0 @@
-package com.zbkj.front;
-
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.text.DecimalFormat;
-
-import org.json.JSONObject;
-
-public class BaiduMapAPI {
-    public static void main(String[] args) {
-        try {
-            String address = "长沙枫林3路8号"; // 例如:北京市海淀区某地址
-            String apiKey = "XsXnvmH2oO7xNwHK5xIWrblxHZgMmrI5"; // 替换为你的百度地图API Key
-            String sn="2NczeKtfgzr4r1Omej0hNwGoGbamrU8j";
-            String urlString = "http://api.map.baidu.com/geocoding/v3/?address=" + address + "&output=json&ak=" + apiKey;
-            URL url = new URL(urlString);
-            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
-            connection.setRequestMethod("GET");
-            connection.connect();
-            DecimalFormat df = new DecimalFormat("#.#####");
-            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
-            StringBuilder response = new StringBuilder();
-            String line;
-            while ((line = reader.readLine()) != null) {
-                response.append(line);
-            }
-            reader.close();
-            connection.disconnect();
-            System.out.println(response.toString());
-            JSONObject jsonResponse = new JSONObject(response.toString());
-            JSONObject result = jsonResponse.getJSONObject("result");
-            JSONObject location = result.getJSONObject("location");
-            double lat = location.getDouble("lat"); // 纬度
-            double lng = location.getDouble("lng"); // 经度
-            System.out.println("纬度: " + lat + ", 经度: " + lng);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-}

+ 1 - 0
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/config/WebConfig.java

@@ -60,6 +60,7 @@ public class WebConfig implements WebMvcConfigurer {
                 excludePathPatterns("/api/front/safety/**").
                 excludePathPatterns("/api/front/captcha/**").
                 excludePathPatterns("/api/front/index/**").
+                excludePathPatterns("/api/front/takeout/**").
                 excludePathPatterns("/api/front/product/category/**").
                 excludePathPatterns("/api/front/product/**").
                 excludePathPatterns("/api/front/qrcode/**").

+ 18 - 1
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/ExpressController.java

@@ -1,8 +1,12 @@
 package com.zbkj.front.controller;
 
 import com.zbkj.common.model.express.Express;
+import com.zbkj.common.model.express.ExpressSpce;
+import com.zbkj.common.model.express.ExpressTip;
 import com.zbkj.common.result.CommonResult;
 import com.zbkj.service.service.ExpressService;
+import com.zbkj.service.service.ExpressSpceService;
+import com.zbkj.service.service.ExpressTipService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -28,11 +32,24 @@ public class ExpressController {
 
     @Autowired
     private ExpressService expressService;
+    @Autowired
+    private ExpressSpceService expressSpceService;
+    @Autowired
+    private ExpressTipService expressTipService;
 
     @ApiOperation(value = "获取物流公司列表")
     @RequestMapping(value = "/all", method = RequestMethod.GET)
     public CommonResult<List<Express>> getAllList() {
         return CommonResult.success(expressService.findAll("normal"));
     }
-
+    @ApiOperation(value = "获取规格列表")
+    @RequestMapping(value = "/spce", method = RequestMethod.GET)
+    public CommonResult<List<ExpressSpce>> getSpceAllList() {
+        return CommonResult.success(expressSpceService.findAll());
+    }
+    @ApiOperation(value = "获取小费列表")
+    @RequestMapping(value = "/tip", method = RequestMethod.GET)
+    public CommonResult<List<ExpressTip>> getTipAllList() {
+        return CommonResult.success(expressTipService.findAll());
+    }
 }

+ 71 - 0
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/ExpressOrderController.java

@@ -0,0 +1,71 @@
+package com.zbkj.front.controller;
+
+import com.zbkj.common.page.CommonPage;
+import com.zbkj.common.request.*;
+import com.zbkj.common.request.express.CreateExpressOrderRequest;
+import com.zbkj.common.request.express.ExpressOrderFrontListRequest;
+import com.zbkj.common.request.express.PreExpressOrderRequest;
+import com.zbkj.common.response.*;
+import com.zbkj.common.response.express.ExpressOrderFrontDataResponse;
+import com.zbkj.common.response.express.ExpressOrderInfoFrontDataResponse;
+import com.zbkj.common.response.express.ExpressOrderNoResponse;
+import com.zbkj.common.response.express.PreExpressOrderResponse;
+import com.zbkj.common.result.CommonResult;
+import com.zbkj.common.vo.LogisticsResultVo;
+import com.zbkj.front.service.FrontExpressOrderService;
+import com.zbkj.front.service.FrontOrderService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * H5端订单操作
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Slf4j
+@RestController
+@RequestMapping("api/front/express/order")
+@Api(tags = "快递订单")
+public class ExpressOrderController {
+
+    @Autowired
+    private FrontExpressOrderService expressOrderService;
+
+    @ApiOperation(value = "预下单")
+    @RequestMapping(value = "/pre/order", method = RequestMethod.POST)
+    public CommonResult<ExpressOrderNoResponse> preOrder(@RequestBody @Validated PreExpressOrderRequest request) {
+        return CommonResult.success(expressOrderService.preOrder(request));
+    }
+
+    @ApiOperation(value = "加载预下单")
+    @RequestMapping(value = "load/pre/{preOrderNo}", method = RequestMethod.GET)
+    public CommonResult<PreExpressOrderResponse> loadPreOrder(@PathVariable String preOrderNo) {
+        return CommonResult.success(expressOrderService.loadPreOrder(preOrderNo));
+    }
+
+
+    @ApiOperation(value = "创建订单")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    public CommonResult<ExpressOrderNoResponse> createOrder(@Validated @RequestBody CreateExpressOrderRequest orderRequest) {
+        return CommonResult.success(expressOrderService.createOrder(orderRequest));
+    }
+    @ApiOperation(value = "订单列表")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    public CommonResult<CommonPage<ExpressOrderFrontDataResponse>> orderList(@ModelAttribute @Validated ExpressOrderFrontListRequest request) {
+        return CommonResult.success(CommonPage.restPage(expressOrderService.list(request)));
+    }
+}

+ 6 - 5
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/IndexController.java

@@ -6,8 +6,8 @@ import com.zbkj.common.exception.CrmebException;
 import com.zbkj.common.model.seckill.SeckillProduct;
 import com.zbkj.common.model.system.SystemConfig;
 import com.zbkj.common.page.CommonPage;
-import com.zbkj.common.query.IndexMerchantQuery;
 import com.zbkj.common.request.PageParamRequest;
+import com.zbkj.common.request.SiteSearchRequest;
 import com.zbkj.common.response.*;
 import com.zbkj.common.result.CommonResult;
 import com.zbkj.common.vo.SplashAdConfigVo;
@@ -45,8 +45,8 @@ public class IndexController {
 
     @ApiOperation(value = "首页数据")
     @RequestMapping(value = "/info", method = RequestMethod.GET)
-    public CommonResult<IndexInfoResponse> getIndexInfo() {
-        return CommonResult.success(indexService.getIndexInfo());
+    public CommonResult<IndexInfoResponse> getIndexInfo( SiteSearchRequest siteSearchRequest) {
+        return CommonResult.success(indexService.getIndexInfo(siteSearchRequest.getLatitude(),siteSearchRequest.getLongitude(),siteSearchRequest.getCateId()));
     }
 
     @ApiOperation(value = "首页商品列表")
@@ -59,9 +59,10 @@ public class IndexController {
 
     @ApiOperation(value = "首页店铺列表-根据数量加载")
     @RequestMapping(value = "/merchant/list/{recomdnum}", method = RequestMethod.GET)
+
     public CommonResult<CommonPage<IndexMerchantResponse>> getMerchantListByRecomdNum(@PathVariable(name = "recomdnum", required = false) Integer recomdnum,
-                                                                                      IndexMerchantQuery indexMerchantQuery) {
-        return CommonResult.success(CommonPage.restPage(indexService.findIndexMerchantListByRecomdNum(indexMerchantQuery,recomdnum)));
+                                                                                      SiteSearchRequest siteSearchRequest) {
+        return CommonResult.success(CommonPage.restPage(indexService.findIndexMerchantListByRecomdNum(siteSearchRequest,recomdnum)));
     }
 
     @ApiOperation(value = "首页店铺列表-根据id集合加载")

+ 7 - 1
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/MerchantController.java

@@ -77,9 +77,15 @@ public class MerchantController {
     @ApiOperation(value = "商户搜索列表")
     @RequestMapping(value = "/search/list", method = RequestMethod.GET)
     public CommonResult<CommonPage<MerchantSearchResponse>> searchList(MerchantMoveSearchRequest request, @ModelAttribute PageParamRequest pageParamRequest) {
-        return CommonResult.success(CommonPage.restPage(merchantService.findSearchList(request, pageParamRequest)));
+        return CommonResult.success(CommonPage.restPage(merchantService.findSearchList_v1(request, pageParamRequest)));
+        //return CommonResult.success(CommonPage.restPage(merchantService.findPageList(request, pageParamRequest)));
     }
 
+    @ApiOperation(value = "商户搜索列表")
+    @RequestMapping(value = "/search/list/v1", method = RequestMethod.GET)
+    public CommonResult<CommonPage<IndexMerchantResponse>> searchListV1(MerchantMoveSearchRequest request, @ModelAttribute PageParamRequest pageParamRequest) {
+        return CommonResult.success(CommonPage.restPage(merchantService.findPageList(request, pageParamRequest)));
+    }
     @ApiOperation(value = "店铺街")
     @RequestMapping(value = "/street", method = RequestMethod.GET)
     public CommonResult<CommonPage<MerchantSearchResponse>> getStreet(@ModelAttribute PageParamRequest pageParamRequest) {

+ 10 - 1
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/OrderController.java

@@ -68,7 +68,11 @@ public class OrderController {
     public CommonResult<CommonPage<OrderFrontDataResponse>> orderList(@ModelAttribute @Validated OrderFrontListRequest request) {
         return CommonResult.success(CommonPage.restPage(orderService.list_v1_4(request)));
     }
-
+    @ApiOperation(value = "骑手接单列表")
+    @RequestMapping(value = "/riderOrderTakinglist", method = RequestMethod.GET)
+    public CommonResult<CommonPage<OrderFrontDataResponse>> riderOrderTakinglist(@ModelAttribute @Validated OrderFrontListRequest request) {
+        return CommonResult.success(CommonPage.restPage(orderService.list_v1_6(request)));
+    }
     @ApiOperation(value = "订单详情")
     @RequestMapping(value = "/detail/{orderNo}", method = RequestMethod.GET)
     public CommonResult<OrderFrontDetailResponse> orderDetail(@PathVariable String orderNo) {
@@ -134,4 +138,9 @@ public class OrderController {
     public CommonResult<List<HashMap<String, Object>>> getOrderStatusImage() {
         return CommonResult.success(orderService.getOrderStatusImage());
     }
+    @ApiOperation(value = "订单列表")
+    @RequestMapping(value = "/deliveTime", method = RequestMethod.GET)
+    public CommonResult<RiderDeliveTimeResponse> deliveTime() {
+        return CommonResult.success(orderService.deliveTime());
+    }
 }

+ 5 - 0
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/ProductCategoryController.java

@@ -47,6 +47,11 @@ public class ProductCategoryController {
     public CommonResult<List<ProductCategory>> getHomeThirdCategory(@PathVariable(name = "id") Integer id) {
         return CommonResult.success(productCategoryService.getHomeThirdCategory(id));
     }
+    @ApiOperation(value = "获取美食外卖第二级商品分类")
+    @RequestMapping(value = "/get/second/{id}", method = RequestMethod.GET)
+    public CommonResult<List<ProductCategory>> getSecondCategory(@PathVariable(name = "id") Integer id) {
+        return CommonResult.success(productCategoryService.findAllChildListByPid(id,2));
+    }
 
     @ApiOperation(value = "获取商品分类缓存树")
     @RequestMapping(value = "/get/tree", method = RequestMethod.GET)

+ 23 - 3
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/ProductController.java

@@ -51,7 +51,12 @@ public class ProductController {
                                                                   @ModelAttribute @Validated PageParamRequest pageParamRequest) {
         return CommonResult.success(CommonPage.restPage(productService.getList(request, pageParamRequest)));
     }
-
+    @ApiOperation(value = "精选商品分页列表")
+    @RequestMapping(value = "/list/v1", method = RequestMethod.GET)
+    public CommonResult<CommonPage<ProductFrontResponse>> getSelectedList(@ModelAttribute @Validated ProductFrontSearchRequest request,
+                                                                  @ModelAttribute @Validated PageParamRequest pageParamRequest) {
+        return CommonResult.success(CommonPage.restPage(productService.getSelectedList(request, pageParamRequest)));
+    }
     @ApiOperation(value = "商品详情")
     @RequestMapping(value = "/detail", method = RequestMethod.GET)
     public CommonResult<ProductDetailResponse> getDetail(@Validated ProductFrontDetailRequest request) {
@@ -64,7 +69,18 @@ public class ProductController {
     public CommonResult<List<ProductFrontResponse>> getProductByIds(@PathVariable String ids) {
         return CommonResult.success(productService.getProductByIds(CrmebUtil.stringToArray(ids)));
     }
-
+    @ApiOperation(value = "商户下所有商品评论列表")
+    @RequestMapping(value = "/merchant/reply/list/{merId}", method = RequestMethod.GET)
+    @ApiImplicitParam(name = "type", value = "评价等级|0=全部,1=好评,2=中评,3=差评", allowableValues = "range[0,1,2,3]")
+    public CommonResult<CommonPage<ProductReplyResponse>> getList(@PathVariable Integer merId,
+                                                                  @RequestParam(value = "type") Integer type, @Validated PageParamRequest pageParamRequest) {
+        return CommonResult.success(CommonPage.restPage(productService.getMerReplyList(merId, type, pageParamRequest)));
+    }
+    @ApiOperation(value = "商户下所有商品评论数量")
+    @RequestMapping(value = "/merchant/reply/config/{merId}", method = RequestMethod.GET)
+    public CommonResult<ProductReplayCountResponse> getMerReplyCount(@PathVariable Integer merId) {
+        return CommonResult.success(productService.getMerReplyCount(merId));
+    }
     @ApiOperation(value = "商品评论列表")
     @RequestMapping(value = "/reply/list/{id}", method = RequestMethod.GET)
     @ApiImplicitParam(name = "type", value = "评价等级|0=全部,1=好评,2=中评,3=差评", allowableValues = "range[0,1,2,3]")
@@ -91,7 +107,11 @@ public class ProductController {
                                                                               @ModelAttribute @Validated PageParamRequest pageParamRequest) {
         return CommonResult.success(CommonPage.restPage(productService.getMerchantProList(request, pageParamRequest)));
     }
-
+    @ApiOperation(value = "商户精选商品列表")
+    @RequestMapping(value = "/merchant/pro/list/v1", method = RequestMethod.GET)
+    public CommonResult<CommonPage<ProductCommonResponse>> getMerchantProListV1(@ModelAttribute @Validated MerchantProductSearchRequest request, @ModelAttribute @Validated PageParamRequest pageParamRequest) {
+        return CommonResult.success(CommonPage.restPage(productService.getMerchantProListV1(request, pageParamRequest)));
+    }
     @ApiOperation(value = "我的优惠券商品列表")
     @RequestMapping(value = "/coupon/pro/list", method = RequestMethod.GET)
     public CommonResult<CommonPage<ProductFrontResponse>> getCouponProList(@ModelAttribute @Validated CouponProductSearchRequest request) {

+ 81 - 0
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/RiderController.java

@@ -0,0 +1,81 @@
+package com.zbkj.front.controller;
+
+import com.zbkj.common.annotation.LogControllerAnnotation;
+import com.zbkj.common.enums.MethodType;
+import com.zbkj.common.model.merchant.MerchantCategory;
+import com.zbkj.common.model.merchant.MerchantType;
+import com.zbkj.common.page.CommonPage;
+import com.zbkj.common.request.PageParamRequest;
+import com.zbkj.common.request.SendCodeRequest;
+import com.zbkj.common.request.merchant.MerchantMoveSearchRequest;
+import com.zbkj.common.request.merchant.MerchantSettledApplyRequest;
+import com.zbkj.common.request.rider.RiderSettledApplyRequest;
+import com.zbkj.common.request.rider.RiderUpdateRequest;
+import com.zbkj.common.response.*;
+import com.zbkj.common.result.CommonResult;
+import com.zbkj.common.vo.ProCategoryCacheVo;
+import com.zbkj.service.service.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 骑手 前端控制器
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Slf4j
+@RestController
+@RequestMapping("api/front/rider")
+@Api(tags = "骑手控制器")
+public class RiderController {
+
+    @Autowired
+    private RiderService riderService;
+
+    @ApiOperation(value = "骑手入驻申请")
+    @RequestMapping(value = "/settled/apply", method = RequestMethod.POST)
+    public CommonResult<String> settledApply(@RequestBody @Validated RiderSettledApplyRequest request) {
+        if (riderService.settledApply(request)) {
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation(value = "发送入驻申请短信验证码")
+    @RequestMapping(value = "/send/settled/code", method = RequestMethod.POST)
+    public CommonResult<String> sendSettledCode(@RequestBody @Validated SendCodeRequest request) {
+        if (riderService.sendSettledCode(request.getPhone())) {
+            return CommonResult.success("发送成功");
+        }
+        return CommonResult.failed("发送失败");
+    }
+
+    @ApiOperation(value = "骑手入驻记录")
+    @RequestMapping(value = "/settled/record", method = RequestMethod.GET)
+    public CommonResult<CommonPage<RiderSettledResponse>> settledRecord(@ModelAttribute PageParamRequest pageParamRequest) {
+        return CommonResult.success(CommonPage.restPage(riderService.findSettledRecord(pageParamRequest)));
+    }
+//    @LogControllerAnnotation(intoDB = true, methodType = MethodType.UPDATE, description = "编辑骑手")
+//    @ApiOperation(value="编辑骑手")
+//    @RequestMapping(value = "/update", method = RequestMethod.POST)
+//    public CommonResult<String> update(@RequestBody @Validated RiderUpdateRequest request) {
+//        if (riderService.edit(request)) {
+//            return CommonResult.success("编辑骑手成功");
+//        }
+//        return CommonResult.failed("编辑骑手失败");
+//    }
+}

+ 35 - 0
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/TakeOutController.java

@@ -0,0 +1,35 @@
+package com.zbkj.front.controller;
+
+import com.zbkj.common.page.CommonPage;
+import com.zbkj.common.request.OrderFrontListRequest;
+import com.zbkj.common.request.PageParamRequest;
+import com.zbkj.common.request.SiteSearchRequest;
+import com.zbkj.common.response.IndexMerchantResponse;
+import com.zbkj.common.response.MerchantRecommendResponse;
+import com.zbkj.common.response.OrderFrontDataResponse;
+import com.zbkj.common.result.CommonResult;
+import com.zbkj.common.vo.ProCategoryCacheVo;
+import com.zbkj.front.service.IndexService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@Slf4j
+@RestController
+@RequestMapping("api/front/takeout")
+@Api(tags = "外卖控制器")
+public class TakeOutController {
+    @Autowired
+    private IndexService indexService;
+    @ApiOperation(value = "获取今日推荐商户")
+    @RequestMapping(value = "/recommend/merchant", method = RequestMethod.GET)
+    public CommonResult<IndexMerchantResponse> getRecommendMerchant(@ModelAttribute SiteSearchRequest siteSearchRequest) {
+        List<IndexMerchantResponse> merchantList=indexService.findIndexMerchantListByRecomdNum(siteSearchRequest,1);
+        return CommonResult.success((merchantList!=null&& merchantList.size()>0)?merchantList.get(0):null);
+    }
+}

+ 95 - 0
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/controller/UserExpressAddressController.java

@@ -0,0 +1,95 @@
+package com.zbkj.front.controller;
+
+import com.zbkj.common.model.user.UserAddress;
+import com.zbkj.common.model.user.UserExpressAddress;
+import com.zbkj.common.request.UserAddressRequest;
+import com.zbkj.common.request.UserExpressAddressRequest;
+import com.zbkj.common.request.WechatAddressImportRequest;
+import com.zbkj.common.result.CommonResult;
+import com.zbkj.service.service.UserAddressService;
+import com.zbkj.service.service.UserExpressAddressService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+
+/**
+ * 用户地址 前端控制器
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Slf4j
+@RestController
+@RequestMapping("api/front/address/express")
+@Api(tags = "用户驿站 -- 地址")
+public class UserExpressAddressController {
+
+    @Autowired
+    private UserExpressAddressService userAddressService;
+
+    @ApiOperation(value = "用户驿站地址分页列表")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    public CommonResult<List<UserExpressAddress>> getList() {
+        return CommonResult.success(userAddressService.getAllList());
+    }
+
+    @ApiOperation(value = "用户驿站地址添加")
+    @RequestMapping(value = "/add", method = RequestMethod.POST)
+    public CommonResult<Integer> add(@RequestBody @Validated UserExpressAddressRequest request) {
+        return CommonResult.success(userAddressService.create(request));
+    }
+
+    @ApiOperation(value = "用户驿站地址编辑")
+    @RequestMapping(value = "/edit", method = RequestMethod.POST)
+    public CommonResult<UserExpressAddress> edit(@RequestBody @Validated UserExpressAddressRequest request) {
+        if (userAddressService.edit(request)) {
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation(value = "用户驿站地址删除")
+    @RequestMapping(value = "/delete/{id}", method = RequestMethod.POST)
+    public CommonResult<String> delete(@PathVariable Integer id) {
+        if (userAddressService.delete(id)) {
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+
+    @ApiOperation(value = "用户驿站地址详情")
+    @RequestMapping(value = "/detail/{id}", method = RequestMethod.GET)
+    public CommonResult<UserExpressAddress> info(@PathVariable(value = "id") Integer id) {
+        return CommonResult.success(userAddressService.getDetail(id));
+    }
+
+    @ApiOperation(value = "获取默认用户驿站地址")
+    @RequestMapping(value = "/get/default", method = RequestMethod.GET)
+    public CommonResult<UserExpressAddress> getDefault() {
+        return CommonResult.success(userAddressService.getDefault());
+    }
+
+    @ApiOperation(value = "设置默认用户驿站地址")
+    @RequestMapping(value = "/set/default/{id}", method = RequestMethod.POST)
+    public CommonResult<Object> setDefault(@PathVariable(value = "id") Integer id) {
+        if (userAddressService.setDefault(id)) {
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+}
+
+
+

+ 67 - 0
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/FrontExpressOrderService.java

@@ -0,0 +1,67 @@
+package com.zbkj.front.service;
+
+import com.github.pagehelper.PageInfo;
+import com.zbkj.common.model.order.OrderDetail;
+import com.zbkj.common.model.user.UserAddress;
+import com.zbkj.common.request.*;
+import com.zbkj.common.request.express.CreateExpressOrderRequest;
+import com.zbkj.common.request.express.ExpressOrderFrontListRequest;
+import com.zbkj.common.request.express.PreExpressOrderRequest;
+import com.zbkj.common.response.*;
+import com.zbkj.common.response.express.ExpressOrderFrontDataResponse;
+import com.zbkj.common.response.express.ExpressOrderInfoFrontDataResponse;
+import com.zbkj.common.response.express.ExpressOrderNoResponse;
+import com.zbkj.common.response.express.PreExpressOrderResponse;
+import com.zbkj.common.vo.LogisticsResultVo;
+import com.zbkj.common.vo.PreOrderInfoVo;
+
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * 移动端端订单操作
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+public interface FrontExpressOrderService {
+
+    /**
+     * 预下单
+     * @param request 预下单请求参数
+     * @return ExpressOrderResponse
+     */
+    ExpressOrderNoResponse preOrder(PreExpressOrderRequest request);
+
+
+    /**
+     * 加载预下单信息
+     * @param preOrderNo 预下单号
+     * @return 预下单信息
+     */
+    PreExpressOrderResponse loadPreOrder(String preOrderNo);
+
+
+
+    /**
+     * 创建订单
+     * @param orderRequest 创建订单请求参数
+     * @return OrderNoResponse 订单编号
+     */
+    ExpressOrderNoResponse createOrder(CreateExpressOrderRequest orderRequest);
+
+    /**
+     * 订单列表
+     * @param request
+     * @return
+     */
+    PageInfo<ExpressOrderFrontDataResponse> list(ExpressOrderFrontListRequest request);
+
+
+}

+ 12 - 0
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/FrontOrderService.java

@@ -172,5 +172,17 @@ public interface FrontOrderService {
      * @return PageInfo
      */
     PageInfo<OrderFrontDataResponse> list_v1_4(OrderFrontListRequest request);
+    /**
+     * 订单列表(v1.4.0)
+     * @param request 搜索参数
+     * @return PageInfo
+     */
+    PageInfo<OrderFrontDataResponse> list_v1_6(OrderFrontListRequest request);
+
+    /**
+     *配送时间
+     * @return
+     */
+    RiderDeliveTimeResponse deliveTime();
 
 }

+ 31 - 0
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/FrontProductService.java

@@ -32,6 +32,14 @@ public interface FrontProductService {
      * @return List
      */
     PageInfo<ProductFrontResponse> getList(ProductFrontSearchRequest request, PageParamRequest pageParamRequest);
+    /**
+     * 商品列表
+     *
+     * @param request          请求参数
+     * @param pageParamRequest 分页参数
+     * @return List
+     */
+    PageInfo<ProductFrontResponse> getSelectedList(ProductFrontSearchRequest request, PageParamRequest pageParamRequest);
 
     /**
      * 获取商品详情V1.7
@@ -53,6 +61,14 @@ public interface FrontProductService {
      * @return List<ProductReplyResponse>
      */
     PageInfo<ProductReplyResponse> getReplyList(Integer proId, Integer type, PageParamRequest pageParamRequest);
+    /**
+     * 商品评论列表
+     * @param merId 商户编号
+     * @param type 评价等级|0=全部,1=好评,2=中评,3=差评
+     * @param pageParamRequest 分页参数
+     * @return List<ProductReplyResponse>
+     */
+    PageInfo<ProductReplyResponse> getMerReplyList(Integer merId, Integer type, PageParamRequest pageParamRequest);
 
     /**
      * 商品评论数量
@@ -62,6 +78,13 @@ public interface FrontProductService {
     ProductReplayCountResponse getReplyCount(Integer id);
 
     /**
+     * 商品评论数量
+     * @param id 商户id
+     * @return StoreProductReplayCountResponse
+     */
+    ProductReplayCountResponse getMerReplyCount(Integer id);
+
+    /**
      * 商品详情评论
      * @param id 商品id
      * @return ProductDetailReplyResponse
@@ -77,6 +100,14 @@ public interface FrontProductService {
     PageInfo<ProductCommonResponse> getMerchantProList(MerchantProductSearchRequest request, PageParamRequest pageParamRequest);
 
     /**
+     * 商户精选商品列表
+     * @param request 搜索参数
+     * @param pageParamRequest 分页参数
+     * @return List
+     */
+    PageInfo<ProductCommonResponse> getMerchantProListV1(MerchantProductSearchRequest request, PageParamRequest pageParamRequest);
+
+    /**
      * 优惠券商品列表
      * @param request 搜索参数
      * @return PageInfo

+ 3 - 3
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/IndexService.java

@@ -3,8 +3,8 @@ package com.zbkj.front.service;
 import com.github.pagehelper.PageInfo;
 import com.zbkj.common.model.seckill.SeckillProduct;
 import com.zbkj.common.model.system.SystemConfig;
-import com.zbkj.common.query.IndexMerchantQuery;
 import com.zbkj.common.request.PageParamRequest;
+import com.zbkj.common.request.SiteSearchRequest;
 import com.zbkj.common.response.*;
 import com.zbkj.common.vo.SplashAdConfigVo;
 
@@ -29,7 +29,7 @@ public interface IndexService{
      * 首页信息
      * @return IndexInfoResponse
      */
-    IndexInfoResponse getIndexInfo();
+    IndexInfoResponse getIndexInfo(Double latitude, Double longitude,Integer cateId);
 
     /**
      * 热门搜索
@@ -61,7 +61,7 @@ public interface IndexService{
      * 首页商户列表
      * @param recomdProdsNum 推荐商品数量
      */
-    List<IndexMerchantResponse> findIndexMerchantListByRecomdNum(IndexMerchantQuery indexMerchantQuery, Integer recomdProdsNum);
+    List<IndexMerchantResponse> findIndexMerchantListByRecomdNum(SiteSearchRequest siteSearchRequest, Integer recomdProdsNum);
 
     /**
      * 根据商户id集合查询对应商户信息

+ 14 - 0
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/TakeOutService.java

@@ -0,0 +1,14 @@
+package com.zbkj.front.service;
+
+import com.zbkj.common.request.SiteSearchRequest;
+import com.zbkj.common.response.IndexInfoResponse;
+import com.zbkj.common.response.IndexMerchantResponse;
+import com.zbkj.common.response.MerchantRecommendResponse;
+
+public interface TakeOutService {
+    /**
+     * 获取用户所处位置附近推荐商户
+     * @return MerchantRecommendResponse
+     */
+    IndexMerchantResponse getRecommendMerchant(SiteSearchRequest siteSearchRequest);
+}

+ 379 - 0
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/impl/FrontExpressOrderServiceImpl.java

@@ -0,0 +1,379 @@
+package com.zbkj.front.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateField;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.github.pagehelper.PageInfo;
+import com.zbkj.common.config.CrmebConfig;
+import com.zbkj.common.constants.*;
+import com.zbkj.common.exception.CrmebException;
+import com.zbkj.common.model.cat.Cart;
+import com.zbkj.common.model.cdkey.CardSecret;
+import com.zbkj.common.model.coupon.Coupon;
+import com.zbkj.common.model.coupon.CouponProduct;
+import com.zbkj.common.model.coupon.CouponUser;
+import com.zbkj.common.model.express.*;
+import com.zbkj.common.model.groupbuy.GroupBuyActivitySku;
+import com.zbkj.common.model.groupbuy.GroupBuyRecord;
+import com.zbkj.common.model.groupbuy.GroupBuyUser;
+import com.zbkj.common.model.merchant.Merchant;
+import com.zbkj.common.model.merchant.MerchantMarket;
+import com.zbkj.common.model.order.*;
+import com.zbkj.common.model.product.Product;
+import com.zbkj.common.model.product.ProductAttrValue;
+import com.zbkj.common.model.product.ProductCategory;
+import com.zbkj.common.model.product.ProductReply;
+import com.zbkj.common.model.rider.RiderFeeConfig;
+import com.zbkj.common.model.seckill.SeckillProduct;
+import com.zbkj.common.model.user.User;
+import com.zbkj.common.model.user.UserAddress;
+import com.zbkj.common.model.user.UserExpressAddress;
+import com.zbkj.common.model.user.UserIntegralRecord;
+import com.zbkj.common.model.wechat.video.PayComponentProduct;
+import com.zbkj.common.model.wechat.video.PayComponentProductSku;
+import com.zbkj.common.page.CommonPage;
+import com.zbkj.common.request.*;
+import com.zbkj.common.request.express.CreateExpressOrderRequest;
+import com.zbkj.common.request.express.ExpressOrderFrontListRequest;
+import com.zbkj.common.request.express.PreExpressOrderDetailRequest;
+import com.zbkj.common.request.express.PreExpressOrderRequest;
+import com.zbkj.common.response.*;
+import com.zbkj.common.response.express.*;
+import com.zbkj.common.response.groupbuy.GroupBuyActivityRecordForFrontShareUse;
+import com.zbkj.common.result.CommonResultCode;
+import com.zbkj.common.result.OrderResultCode;
+import com.zbkj.common.utils.CrmebDateUtil;
+import com.zbkj.common.utils.CrmebUtil;
+import com.zbkj.common.utils.GeoUtils;
+import com.zbkj.common.utils.RedisUtil;
+import com.zbkj.common.vo.*;
+import com.zbkj.front.service.FrontExpressOrderService;
+import com.zbkj.front.service.SeckillService;
+import com.zbkj.service.ExpressOrderService;
+import com.zbkj.service.service.*;
+import com.zbkj.service.service.groupbuy.GroupBuyActivitySkuService;
+import com.zbkj.service.service.groupbuy.GroupBuyRecordService;
+import com.zbkj.service.service.groupbuy.GroupBuyUserService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.support.TransactionTemplate;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+/**
+ * H5端订单操作
+ * +----------------------------------------------------------------------
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+ * +----------------------------------------------------------------------
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+ * +----------------------------------------------------------------------
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+ * +----------------------------------------------------------------------
+ * | Author: CRMEB Team <admin@crmeb.com>
+ * +----------------------------------------------------------------------
+ */
+@Service
+public class FrontExpressOrderServiceImpl implements FrontExpressOrderService {
+
+    private final Logger logger = LoggerFactory.getLogger(FrontExpressOrderServiceImpl.class);
+
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private ExpressOrderService orderService;
+    @Autowired
+    private UserAddressService userAddressService;
+    @Autowired
+    private UserExpressAddressService userExpressAddressService;
+    @Autowired
+    private RedisUtil redisUtil;
+
+    @Autowired
+    private TransactionTemplate transactionTemplate;
+
+    @Autowired
+    private ExpressOrderDetailService orderDetailService;
+
+    @Autowired
+    private CrmebConfig crmebConfig;
+    /**
+     * 预下单V1.7
+     * @param request 预下单请求参数
+     * @return PreOrderResponse
+     */
+    @Override
+    public ExpressOrderNoResponse preOrder(PreExpressOrderRequest request) {
+        User user = userService.getInfo();
+        // 校验预下单商品信息
+        PreExpressOrderInfoVo preOrderInfoVo = validatePreOrderRequest(request, user);
+        BigDecimal totalPrice = preOrderInfoVo.getUserOrderVoList().stream()
+                    .map(e -> e.getPrice().multiply(new BigDecimal(e.getExpressNum())))
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+        preOrderInfoVo.setProTotalFee(totalPrice);
+        preOrderInfoVo.setOrderProNum(preOrderInfoVo.getUserOrderVoList().stream().mapToInt(PreExpressOrderInfoDetailVo::getExpressNum).sum());
+        // 实际支付金额
+        preOrderInfoVo.setPayFee(preOrderInfoVo.getProTotalFee().add(preOrderInfoVo.getGiveTips()));
+        preOrderInfoVo.setUserBalance(user.getNowMoney());
+        return createPreOrderResponse(user.getId(), preOrderInfoVo);
+    }
+    /**
+     * 订单列表
+     * @param request 搜索参数
+     * @return PageInfo
+     */
+    @Override
+    public PageInfo<ExpressOrderFrontDataResponse> list(ExpressOrderFrontListRequest request) {
+        Integer userId = userService.getUserIdException();
+        PageInfo<ExpressOrder> pageInfo =orderService.getUserOrderList(userId, request);
+        List<ExpressOrder> orderList = pageInfo.getList();
+        if (CollUtil.isEmpty(orderList)) {
+            return CommonPage.copyPageInfo(pageInfo, CollUtil.newArrayList());
+        }
+        List<ExpressOrderFrontDataResponse> responseList = CollUtil.newArrayList();
+        DateTime cancelTime;
+        for (ExpressOrder order : orderList) {
+            ExpressOrderFrontDataResponse infoResponse = new ExpressOrderFrontDataResponse();
+            BeanUtils.copyProperties(order, infoResponse);
+            // 订单详情对象列表
+            List<ExpressOrderDetail> orderDetailList = orderDetailService.getByOrderNo(order.getOrderNo());
+            List<ExpressOrderInfoFrontDataResponse> infoResponseList = CollUtil.newArrayList();
+            orderDetailList.forEach(e -> {
+                ExpressOrderInfoFrontDataResponse orderInfoResponse = new ExpressOrderInfoFrontDataResponse();
+                BeanUtils.copyProperties(e, orderInfoResponse);
+                infoResponseList.add(orderInfoResponse);
+            });
+            infoResponse.setOrderInfoList(infoResponseList);
+            if (!order.getPaid()) {
+                cancelTime = DateUtil.offset(order.getCreateTime(), DateField.MINUTE, crmebConfig.getOrderCancelTime());
+                infoResponse.setCancelTime(cancelTime.getTime());
+                // 返回订单过期时间 2025-02-12
+                if (redisUtil.exists(StrUtil.format(RedisConstants.ORDER_EXPIRE_TIME, order.getOrderNo()))) {
+                    String expireTime = redisUtil.get(StrUtil.format(RedisConstants.ORDER_EXPIRE_TIME, order.getOrderNo()));
+                    infoResponse.setExpirationTime(expireTime);
+                }
+            }
+            responseList.add(infoResponse);
+        }
+        return CommonPage.copyPageInfo(pageInfo, responseList);
+    }
+    private ExpressOrderNoResponse createPreOrderResponse(Integer userId, PreExpressOrderInfoVo preOrderInfoVo) {
+        String key = userId + CrmebDateUtil.getNowTime().toString() + CrmebUtil.getUuid();
+        redisUtil.set(OrderConstants.PRE_EXP_ORDER_CACHE_PREFIX + key, JSONObject.toJSONString(preOrderInfoVo), OrderConstants.PRE_ORDER_CACHE_TIME, TimeUnit.MINUTES);
+        ExpressOrderNoResponse response = new ExpressOrderNoResponse();
+        response.setOrderNo(key);
+        response.setPayPrice(preOrderInfoVo.getPayFee());
+        response.setOrderType(preOrderInfoVo.getType());
+        return response;
+    }
+
+    /**
+     * 加载预下单信息
+     *
+     * @param preOrderNo 预下单号
+     * @return 预下单信息
+     */
+    @Override
+    public PreExpressOrderResponse loadPreOrder(String preOrderNo) {
+//        Integer userId = userService.getUserIdException();
+//        User user = userService.getById(userId);
+        // 通过缓存获取预下单对象
+        String key = OrderConstants.PRE_EXP_ORDER_CACHE_PREFIX + preOrderNo;
+        boolean exists = redisUtil.exists(key);
+        if (!exists) {
+            throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "预下单订单不存在");
+        }
+        String orderVoString = redisUtil.get(key);
+        PreExpressOrderInfoVo orderInfoVo = JSONObject.parseObject(orderVoString, PreExpressOrderInfoVo.class);
+        PreExpressOrderResponse preOrderResponse = new PreExpressOrderResponse();
+        BeanUtils.copyProperties(orderInfoVo, preOrderResponse);
+        List<PreExpressOrderInfoDetailResponse> infoResponseList = new ArrayList<>();
+        List<PreExpressOrderInfoDetailVo> merchantOrderVoList = orderInfoVo.getUserOrderVoList();
+        for (PreExpressOrderInfoDetailVo merchantOrderVo : merchantOrderVoList) {
+            PreExpressOrderInfoDetailResponse infoResponse = new PreExpressOrderInfoDetailResponse();
+            BeanUtils.copyProperties(merchantOrderVo, infoResponse);
+            infoResponseList.add(infoResponse);
+        }
+        preOrderResponse.setUserOrderVoList(infoResponseList);
+        return preOrderResponse;
+
+    }
+
+    /**
+     * 创建订单
+     *
+     * @param orderRequest 创建订单请求参数
+     * @return OrderNoResponse 订单编号
+     */
+    @Override
+    public ExpressOrderNoResponse createOrder(CreateExpressOrderRequest orderRequest) {
+        User user = userService.getInfo();
+        // 通过缓存获取预下单对象
+        String key = OrderConstants.PRE_EXP_ORDER_CACHE_PREFIX + orderRequest.getPreOrderNo();
+        boolean exists = redisUtil.exists(key);
+        if (!exists) {
+            throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "预下单订单不存在");
+        }
+        String orderVoString = redisUtil.get(key).toString();
+        PreExpressOrderInfoVo orderInfoVo = JSONObject.parseObject(orderVoString, PreExpressOrderInfoVo.class);
+
+        // 平台订单
+        ExpressOrder order = new ExpressOrder();
+        String orderNo = CrmebUtil.getOrderNo(OrderConstants.ORDER_PREFIX_PLATFORM);
+        order.setOrderNo(orderNo);
+        order.setUid(user.getId());
+        order.setTotalNum(orderInfoVo.getOrderProNum());
+        order.setProTotalPrice(orderInfoVo.getProTotalFee());
+        order.setGiveTips(orderInfoVo.getGiveTips());
+        order.setTotalPrice(order.getProTotalPrice().add(order.getGiveTips()));
+        order.setPayPrice(order.getTotalPrice());
+        order.setPaid(false);
+        order.setUserPhone(orderInfoVo.getUserPhone());
+        order.setUserAddressId(orderInfoVo.getUserAddressId());
+        order.setPostAddressId(orderInfoVo.getPostAddressId());
+        order.setCancelStatus(OrderConstants.ORDER_CANCEL_STATUS_NORMAL);
+        order.setType(orderInfoVo.getType());
+        order.setCreateTime(DateUtil.date());
+        // 订单明细
+        List<ExpressOrderDetail> orderDetailList = new ArrayList<>();
+        for (PreExpressOrderInfoDetailVo userOrderVo : orderInfoVo.getUserOrderVoList()) {
+            ExpressOrderDetail orderDetail = new ExpressOrderDetail();
+            orderDetail.setOrderNo(order.getOrderNo());
+            orderDetail.setUid(user.getId());
+            orderDetail.setExpressType(orderInfoVo.getType());
+            orderDetail.setExpNum(userOrderVo.getExpressNum());
+            orderDetail.setImage(userOrderVo.getImage());
+            orderDetail.setIsReceipt(false);
+            orderDetail.setPrice(userOrderVo.getPrice());
+            orderDetail.setPayPrice(orderDetail.getPrice().multiply(new BigDecimal(orderDetail.getExpNum().toString())));
+            if (orderDetail.getPayPrice().compareTo(BigDecimal.ZERO) < 0) {
+                throw new CrmebException("订单详情价格计算错误,详情价格不能小于0");
+            }
+            orderDetail.setExpressInfo(userOrderVo.getExpressInfo());
+            orderDetail.setSpecs(userOrderVo.getSpecId());
+            orderDetailList.add(orderDetail);
+        }
+        Boolean execute = transactionTemplate.execute(e -> {
+            orderService.save(order);
+            orderDetailService.saveBatch(orderDetailList);
+            return Boolean.TRUE;
+        });
+        if (!execute) {
+            throw new CrmebException("订单生成失败");
+        }
+
+        // 删除缓存订单
+        if (redisUtil.exists(key)) {
+            redisUtil.delete(key);
+        }
+
+        // 加入自动未支付自动取消队列
+        redisUtil.lPush(TaskConstants.ORDER_TASK_REDIS_KEY_AUTO_CANCEL_KEY, order.getOrderNo());
+        // 设置自动过期时间 2025-02-11
+        Integer orderCancelTimeMinute = crmebConfig.getOrderCancelTime();
+        DateTime expirationTime = DateUtil.offset(order.getCreateTime(), DateField.MINUTE, crmebConfig.getOrderCancelTime());
+        Long expireTime = (long) orderCancelTimeMinute * 60;
+        redisUtil.set(StrUtil.format(RedisConstants.ORDER_EXPIRE_TIME, order.getOrderNo()), expirationTime.toString(), expireTime);
+        ExpressOrderNoResponse response = new ExpressOrderNoResponse();
+        response.setOrderNo(order.getOrderNo());
+        response.setPayPrice(order.getPayPrice());
+        return response;
+    }
+    /**
+     * 校验预下单商品信息
+     *
+     * @param request 预下单请求参数
+     * @return OrderInfoVo
+     */
+    private PreExpressOrderInfoVo validatePreOrderRequest(PreExpressOrderRequest request, User user) {
+        PreExpressOrderInfoVo preOrderInfoVo = new PreExpressOrderInfoVo();
+        UserAddress userAddress = null;
+        UserExpressAddress userExpressAddress = null;
+        if (ObjectUtil.isNull(request.getUserAddressId())) {
+            throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "请选择用户地址");
+        }
+        userAddress = userAddressService.getById(request.getUserAddressId());
+        if (ObjectUtil.isNull(userAddress) || userAddress.getIsDel()) {
+            throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "用户地址有误");
+        }
+        if (ObjectUtil.isNull(request.getPostAddressId())) {
+            throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "请选择驿站地址");
+        }
+        userExpressAddress = userExpressAddressService.getById(request.getPostAddressId());
+        if (ObjectUtil.isNull(userExpressAddress) || userExpressAddress.getIsDel()) {
+            throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "驿站地址有误");
+        }
+        List<PreExpressOrderInfoDetailVo> userOrderVoList = CollUtil.newArrayList();
+        switch (request.getPreOrderType()) {
+            case "take":
+                userOrderVoList = validatePreOrder(request, user);
+                preOrderInfoVo.setType(0);
+                break;
+            case "send":
+                userOrderVoList = validatePreOrder(request, user);
+                preOrderInfoVo.setType(1);
+                break;
+        }
+        if(ObjectUtil.isNull(request.getGiveTips())){
+            request.setGiveTips(BigDecimal.ZERO);
+        }
+        BigDecimal proPrice = userOrderVoList.stream()
+                .map(e -> {
+                    BigDecimal price;
+                    price = e.getPrice().multiply(new BigDecimal(e.getExpressNum()));
+                    return price;
+                })
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        preOrderInfoVo.setUserPhone(userAddress.getPhone());
+        preOrderInfoVo.setProTotalFee(proPrice);
+        preOrderInfoVo.setGiveTips(BigDecimal.ZERO);
+        preOrderInfoVo.setPostAddressId(request.getPostAddressId());
+        preOrderInfoVo.setUserAddressId(request.getUserAddressId());
+        preOrderInfoVo.setUserId(user.getId());
+        preOrderInfoVo.setUserName(user.getRealName());
+        preOrderInfoVo.setUserOrderVoList(userOrderVoList);
+        return preOrderInfoVo;
+    }
+
+    /**
+     * 基础商品校验
+     */
+    private PreExpressOrderInfoDetailVo validatePreOrderBase(PreExpressOrderDetailRequest detailRequest) {
+        if (ObjectUtil.isNull(detailRequest.getExpressInfo())) {
+            throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "取件信息不能为空");
+        }
+        if (ObjectUtil.isNull(detailRequest.getExpressNum())|| detailRequest.getExpressNum()<0) {
+            throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "取件数量不能为空");
+        }
+        if (ObjectUtil.isNull(detailRequest.getSepec())) {
+            throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "规格不能为空");
+        }
+         // 构造PreExpressOrderInfoDetailVo对象
+        PreExpressOrderInfoDetailVo orderVo = new PreExpressOrderInfoDetailVo();
+        BigDecimal payPrice = detailRequest.getPrice().multiply(new BigDecimal(detailRequest.getExpressNum()));
+        orderVo.setPayPrice(payPrice);
+        BeanUtils.copyProperties(detailRequest,orderVo);
+        return orderVo;
+    }
+
+    private List<PreExpressOrderInfoDetailVo> validatePreOrder(PreExpressOrderRequest request, User user) {
+        List<PreExpressOrderInfoDetailVo> userOrderVoList = CollUtil.newArrayList();
+        request.getOrderDetails().forEach(e -> {
+            PreExpressOrderInfoDetailVo userOrderVo = validatePreOrderBase(e);
+            userOrderVoList.add(userOrderVo);
+        });
+        return userOrderVoList;
+    }
+
+
+}

+ 198 - 11
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/impl/FrontOrderServiceImpl.java

@@ -24,11 +24,13 @@ import com.zbkj.common.model.groupbuy.GroupBuyActivitySku;
 import com.zbkj.common.model.groupbuy.GroupBuyRecord;
 import com.zbkj.common.model.groupbuy.GroupBuyUser;
 import com.zbkj.common.model.merchant.Merchant;
+import com.zbkj.common.model.merchant.MerchantMarket;
 import com.zbkj.common.model.order.*;
 import com.zbkj.common.model.product.Product;
 import com.zbkj.common.model.product.ProductAttrValue;
 import com.zbkj.common.model.product.ProductCategory;
 import com.zbkj.common.model.product.ProductReply;
+import com.zbkj.common.model.rider.RiderFeeConfig;
 import com.zbkj.common.model.seckill.SeckillProduct;
 import com.zbkj.common.model.system.SystemForm;
 import com.zbkj.common.model.user.User;
@@ -44,6 +46,7 @@ import com.zbkj.common.result.CommonResultCode;
 import com.zbkj.common.result.OrderResultCode;
 import com.zbkj.common.utils.CrmebDateUtil;
 import com.zbkj.common.utils.CrmebUtil;
+import com.zbkj.common.utils.GeoUtils;
 import com.zbkj.common.utils.RedisUtil;
 import com.zbkj.common.vo.*;
 import com.zbkj.front.service.FrontOrderService;
@@ -158,7 +161,13 @@ public class FrontOrderServiceImpl implements FrontOrderService {
     private GroupBuyUserService groupBuyUserService;
     @Autowired
     private GroupBuyActivitySkuService groupBuyActivitySkuService;
+    @Autowired
+    private MerchantMarketService merchantMarketService;
+    @Autowired
+    private RiderService riderService;
 
+    @Autowired
+    private RiderDeliveTimeService riderDeliveTimeService;
     /**
      * 预下单V1.7
      * @param request 预下单请求参数
@@ -202,6 +211,8 @@ public class FrontOrderServiceImpl implements FrontOrderService {
         int orderProNum = orderInfoList.stream().mapToInt(PreOrderInfoDetailVo::getPayNum).sum();
         preOrderInfoVo.setOrderProNum(orderProNum);
 
+
+
         // 运费计算
         if (preOrderInfoVo.getSecondType().equals(OrderConstants.ORDER_SECOND_TYPE_CLOUD)
                 || preOrderInfoVo.getSecondType().equals(OrderConstants.ORDER_SECOND_TYPE_CDKEY)
@@ -1166,7 +1177,7 @@ public class FrontOrderServiceImpl implements FrontOrderService {
                 || orderInfoVo.getSecondType().equals(OrderConstants.ORDER_SECOND_TYPE_VIRTUALLY)) {
             orderRequest.setAddressId(0);
         } else {
-            if (orderMerchantRequestList.stream().anyMatch(e -> e.getShippingType().equals(OrderConstants.ORDER_SHIPPING_TYPE_EXPRESS))) {
+            if (orderMerchantRequestList.stream().anyMatch(e -> (e.getShippingType().equals(OrderConstants.ORDER_SHIPPING_TYPE_EXPRESS)||e.getShippingType().equals(OrderConstants.ORDER_SHIPPING_TYPE_TAKEOUT)))) {
                 if (ObjectUtil.isNull(orderRequest.getAddressId())) {
                     throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "请选择收货地址");
                 }
@@ -1738,8 +1749,84 @@ public class FrontOrderServiceImpl implements FrontOrderService {
     @Override
     public PageInfo<OrderFrontDataResponse> list_v1_4(OrderFrontListRequest request) {
         Integer userId = userService.getUserIdException();
+        PageInfo<Order> pageInfo = request.getOrderType()!=null?orderService.getUserOrderList_v1_5(userId, request):orderService.getUserOrderList_v1_4(userId, request);
+        List<Order> orderList = pageInfo.getList();
+        if (CollUtil.isEmpty(orderList)) {
+            return CommonPage.copyPageInfo(pageInfo, CollUtil.newArrayList());
+        }
+        List<Integer> merIdList = orderList.stream().map(Order::getMerId).filter(i -> i > 0).distinct().collect(Collectors.toList());
+        Map<Integer, Merchant> merchantMap = null;
+        if (CollUtil.isNotEmpty(merIdList)) {
+            merchantMap = merchantService.getMerIdMapByIdList(merIdList);
+        }
+        List<OrderFrontDataResponse> responseList = CollUtil.newArrayList();
+        DateTime cancelTime;
+        for (Order order : orderList) {
+            OrderFrontDataResponse infoResponse = new OrderFrontDataResponse();
+            BeanUtils.copyProperties(order, infoResponse);
+            // 订单详情对象列表
+            List<OrderDetail> orderDetailList = orderDetailService.getByOrderNo(order.getOrderNo());
+            List<OrderInfoFrontDataResponse> infoResponseList = CollUtil.newArrayList();
+            orderDetailList.forEach(e -> {
+                OrderInfoFrontDataResponse orderInfoResponse = new OrderInfoFrontDataResponse();
+                BeanUtils.copyProperties(e, orderInfoResponse);
+                infoResponseList.add(orderInfoResponse);
+            });
+            infoResponse.setOrderInfoList(infoResponseList);
+            if (order.getMerId() > 0) {
+                infoResponse.setMerName(merchantMap.get(order.getMerId()).getName());
+                infoResponse.setMerPhone(merchantMap.get(order.getMerId()).getPhone());
+            }
+            if (!order.getPaid()) {
+                cancelTime = DateUtil.offset(order.getCreateTime(), DateField.MINUTE, crmebConfig.getOrderCancelTime());
+                infoResponse.setCancelTime(cancelTime.getTime());
+                // 返回订单过期时间 2025-02-12
+                if (redisUtil.exists(StrUtil.format(RedisConstants.ORDER_EXPIRE_TIME, order.getOrderNo()))) {
+                    String expireTime = redisUtil.get(StrUtil.format(RedisConstants.ORDER_EXPIRE_TIME, order.getOrderNo()));
+                    infoResponse.setExpirationTime(expireTime);
+                }
+            }
+            // 在次添加拼团订单信息
+            if(order.getType().equals(OrderConstants.ORDER_TYPE_PITUAN)){
+                GroupBuyUser currentGroupBuyUser = groupBuyUserService.getByOrderNo(order.getOrderNo());
+                if(ObjectUtil.isNotNull(currentGroupBuyUser) && currentGroupBuyUser.getId() > 0){
+                    GroupBuyRecord currentGroupBuyRecord = groupBuyRecordService.getById(currentGroupBuyUser.getGroupRecordId());
+                    GroupBuyActivitySku currentSku = null;
+                    GroupBuyActivityRecordForFrontShareUse groupBuyActivityRecord = new GroupBuyActivityRecordForFrontShareUse();
+                    if(ObjectUtil.isNotNull(currentGroupBuyRecord)){
+                        currentSku = groupBuyActivitySkuService.getByAttrId(currentGroupBuyUser.getGroupActivityId(), currentGroupBuyRecord.getSkuid());
+                        groupBuyActivityRecord.setBuyingCountNum(currentGroupBuyRecord.getBuyingCountNum());
+                        groupBuyActivityRecord.setYetBuyingNum(currentGroupBuyRecord.getYetBuyingNum());
+                    }
+                    if(ObjectUtil.isNull(currentSku)){ //这里有可能在购买后,管理端删除基础商品的sku后,关联操作拼团sku后导致这里查询不到,拼团价为null的情况下 前端不予生成拼团码
+                        groupBuyActivityRecord.setActivePrice(null);
+                    }else{
+                        groupBuyActivityRecord.setActivePrice(currentSku.getActivePrice());
+                    }
+                    groupBuyActivityRecord.setGroupActivityId(currentGroupBuyUser.getGroupActivityId());
+                    groupBuyActivityRecord.setProductId(currentGroupBuyUser.getProductGroupId());
+                    groupBuyActivityRecord.setGroupRecordId(currentGroupBuyUser.getGroupRecordId());
+                    groupBuyActivityRecord.setGroupLeaderNickname(currentGroupBuyUser.getGroupNickname());
+                    groupBuyActivityRecord.setGroupLeaderAvatar(currentGroupBuyUser.getGroupAvatar());
+                    groupBuyActivityRecord.setGroupLeaderUid(currentGroupBuyUser.getGroupUid());
+                    infoResponse.setGroupBuyActivityRecord(groupBuyActivityRecord);
+                }
+            }
+            responseList.add(infoResponse);
+        }
+
+        return CommonPage.copyPageInfo(pageInfo, responseList);
+    }
 
-        PageInfo<Order> pageInfo = orderService.getUserOrderList_v1_4(userId, request);
+    /**
+     * 订单列表(v1.4.0)
+     * @param request 搜索参数
+     * @return PageInfo
+     */
+    @Override
+    public PageInfo<OrderFrontDataResponse> list_v1_6(OrderFrontListRequest request) {
+        //Integer userId = userService.getUserIdException();
+        PageInfo<Order> pageInfo = orderService.getUserOrderList_v1_6(request);
         List<Order> orderList = pageInfo.getList();
         if (CollUtil.isEmpty(orderList)) {
             return CommonPage.copyPageInfo(pageInfo, CollUtil.newArrayList());
@@ -1765,6 +1852,12 @@ public class FrontOrderServiceImpl implements FrontOrderService {
             infoResponse.setOrderInfoList(infoResponseList);
             if (order.getMerId() > 0) {
                 infoResponse.setMerName(merchantMap.get(order.getMerId()).getName());
+                infoResponse.setMerPhone(merchantMap.get(order.getMerId()).getPhone());
+                infoResponse.setMerAddress(merchantMap.get(order.getMerId()).getAddressDetail());
+            }
+            if (order.getUid() > 0) {
+                List<MerchantOrder> merchantOrderList = merchantOrderService.getByOrderNo(order.getOrderNo());
+                infoResponse.setUserAddress(merchantOrderList!=null&&merchantOrderList.size()>0?merchantOrderList.get(0).getUserAddress():"");
             }
             if (!order.getPaid()) {
                 cancelTime = DateUtil.offset(order.getCreateTime(), DateField.MINUTE, crmebConfig.getOrderCancelTime());
@@ -1807,6 +1900,11 @@ public class FrontOrderServiceImpl implements FrontOrderService {
         return CommonPage.copyPageInfo(pageInfo, responseList);
     }
 
+    @Override
+    public RiderDeliveTimeResponse deliveTime() {
+        return riderDeliveTimeService.chose();
+    }
+
     /**
      * 移动端订单详情
      *
@@ -2464,6 +2562,11 @@ public class FrontOrderServiceImpl implements FrontOrderService {
                 merchantOrderVo.getOrderInfoList().forEach(info -> info.setFreightFee(BigDecimal.ZERO));
                 continue;
             }
+//            if (merchantOrderVo.getShippingType().equals(OrderConstants.ORDER_SHIPPING_TYPE_TAKEOUT)) {
+//                merchantOrderVo.setFreightFee(storePostage);
+//                merchantOrderVo.getOrderInfoList().forEach(info -> info.setFreightFee(BigDecimal.ZERO));
+//                continue;
+//            }
             if (orderInfoVo.getSecondType().equals(OrderConstants.ORDER_SECOND_TYPE_INTEGRAL)) {
                 // 积分订单默认全国包邮
                 merchantOrderVo.setFreightFee(storePostage);
@@ -2641,9 +2744,32 @@ public class FrontOrderServiceImpl implements FrontOrderService {
             merchantOrderVo.setFreightFee(storePostage);
             freightFee = freightFee.add(storePostage);
         }
+          for(PreMerchantOrderVo e:merchantOrderVoList ){
+            if( e.getShippingType().equals(OrderConstants.ORDER_SHIPPING_TYPE_TAKEOUT)) {
+                RiderFeeConfig riderFeeConfig= riderService.getRiderFeeConfigDetail();
+                if(riderFeeConfig!=null) {
+                    Merchant merchant=merchantService.getByIdException(e.getMerId());
+                    freightFee=riderFeeConfig.getBasicFee();
+                    freightFee=freightFee.add(getOverLoadFee(userAddress.getLatitude(),userAddress.getLongitude(),merchant.getLatitude(),merchant.getLongitude(),riderFeeConfig));
+                    if (merchantOrderVoList.stream().anyMatch(m -> (!m.getMerId().equals(e.getMerId())))) {
+                        throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "同一个订单不能购买不同商家商品");
+                    }
+                    e.setFreightFee(freightFee);
+                }
+            }
+        }
         orderInfoVo.setFreightFee(freightFee);
     }
 
+    private BigDecimal getOverLoadFee(String lat1,String long1,String lat2,String long2,RiderFeeConfig riderFeeConfig){
+        BigDecimal overloadFee=BigDecimal.ZERO;
+        Double distance = GeoUtils.haversineDistance( Double.parseDouble(lat1), Double.parseDouble(long1) , Double.parseDouble(lat2), Double.parseDouble(long2));
+        if(ObjectUtil.isNotNull(riderFeeConfig.getDistanceInKm())&&distance>riderFeeConfig.getDistanceInKm()){
+            int overload=distance.intValue()-riderFeeConfig.getDistanceInKm().intValue();
+             overloadFee=new BigDecimal(overload).multiply(new BigDecimal(riderFeeConfig.getFeePerKm()));
+        }
+        return overloadFee;
+    }
     /**
      * 校验预下单商品信息
      *
@@ -2664,15 +2790,18 @@ public class FrontOrderServiceImpl implements FrontOrderService {
                 break;
             case OrderConstants.PLACE_ORDER_TYPE_BUY_NOW:
                 // 立即购买只会有一条详情
-                PreOrderDetailRequest preOrderDetailRequest = request.getOrderDetails().get(0);
-                PreMerchantOrderVo preMerchantOrderVo = validatePreOrderBase(preOrderDetailRequest);
-                preOrderInfoVo.setType(OrderConstants.ORDER_TYPE_BASE);
-                preOrderInfoVo.setSecondType(preMerchantOrderVo.getSecondType());
-                preOrderInfoVo.setSystemFormId(preMerchantOrderVo.getSystemFormId());
-                preOrderInfoVo.setSystemFormValue(preMerchantOrderVo.getSystemFormValue());
-                preMerchantOrderVo.setSystemFormId(0);
-                preMerchantOrderVo.setSystemFormValue("");
-                merchantOrderVoList.add(preMerchantOrderVo);
+                merchantOrderVoList = validatePreOrder(request, user);
+                    //PreOrderDetailRequest preOrderDetailRequest = request.getOrderDetails().get(0);
+                    //PreMerchantOrderVo preMerchantOrderVo = validatePreOrderBase(preOrderDetailRequest);
+                    preOrderInfoVo.setType(OrderConstants.ORDER_TYPE_BASE);
+                    //preOrderInfoVo.setSecondType(preMerchantOrderVo.getSecondType());
+                    preOrderInfoVo.setSecondType(OrderConstants.ORDER_SECOND_TYPE_NORMAL);
+                    //preOrderInfoVo.setSystemFormId(preMerchantOrderVo.getSystemFormId());
+                    //preOrderInfoVo.setSystemFormValue(preMerchantOrderVo.getSystemFormValue());
+                    //preMerchantOrderVo.setSystemFormId(0);
+                   // preMerchantOrderVo.setSystemFormValue("");
+                    //merchantOrderVoList.add(preMerchantOrderVo);
+
                 break;
             case OrderConstants.PLACE_ORDER_TYPE_VIDEO:
                 // 视频号暂时只能购买一个商品
@@ -2914,6 +3043,56 @@ public class FrontOrderServiceImpl implements FrontOrderService {
         return merchantOrderVoList;
     }
 
+    private List<PreMerchantOrderVo> validatePreOrder(PreOrderRequest request, User user) {
+        List<PreMerchantOrderVo> merchantOrderVoList = CollUtil.newArrayList();
+        request.getOrderDetails().forEach(e -> {
+            PreMerchantOrderVo merchantOrderVo = validatePreOrderBase(e);
+            if (merchantOrderVoList.stream().anyMatch(m -> m.getMerId().equals(merchantOrderVo.getMerId()))) {
+                for (PreMerchantOrderVo orderVo : merchantOrderVoList) {
+                    if (orderVo.getMerId().equals(merchantOrderVo.getMerId())) {
+                        orderVo.getOrderInfoList().addAll(merchantOrderVo.getOrderInfoList());
+                        break;
+                    }
+                }
+            } else {
+                merchantOrderVoList.add(merchantOrderVo);
+            }
+        });
+        for (PreMerchantOrderVo merchantOrderVo : merchantOrderVoList) {
+            List<PreOrderInfoDetailVo> orderInfoList = merchantOrderVo.getOrderInfoList();
+            boolean onlyMerchant = false;
+            boolean onlyVerification = false;
+            for (PreOrderInfoDetailVo info : orderInfoList) {
+                if (info.getDeliveryMethod().equals("1")) {
+                    onlyMerchant = true;
+                }
+                if (info.getDeliveryMethod().equals("2")) {
+                    onlyVerification = true;
+                }
+            }
+            if (onlyMerchant && onlyVerification) {
+                throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "部分商品配送方式不一致,请单独下单");
+            }
+            if (onlyVerification) {
+                merchantOrderVo.setShippingType(OrderConstants.ORDER_SHIPPING_TYPE_PICK_UP);
+                Merchant merchant = merchantService.getByIdException(merchantOrderVo.getMerId());
+                if (!merchant.getIsTakeTheir()) {
+                    throw new CrmebException(CommonResultCode.VALIDATE_FAILED, StrUtil.format("{}没有配置店铺地址,请联系客服", merchant.getName()));
+                }
+            }
+            if (onlyMerchant) {
+                merchantOrderVo.setDeliveryMethodMer("1");
+                merchantOrderVo.setShippingType(1);
+            } else if (onlyVerification) {
+                merchantOrderVo.setDeliveryMethodMer("2");
+                merchantOrderVo.setShippingType(2);
+            } else {
+                merchantOrderVo.setDeliveryMethodMer("1,2");
+                merchantOrderVo.setShippingType(1);
+            }
+        }
+        return merchantOrderVoList;
+    }
     private ComputedOrderPriceResponse computedPrice(OrderComputedPriceRequest request, PreOrderInfoVo orderInfoVo, User user) {
         String integralDeductionSwitch = systemConfigService.getValueByKey(SysConfigConstants.CONFIG_KEY_INTEGRAL_DEDUCTION_SWITCH);
         if (request.getIsUseIntegral()) {
@@ -2924,6 +3103,7 @@ public class FrontOrderServiceImpl implements FrontOrderService {
 
         // 计算各种价格
         ComputedOrderPriceResponse priceResponse = new ComputedOrderPriceResponse();
+
         List<OrderMerchantRequest> orderMerchantRequestList = request.getOrderMerchantRequestList();
         // 计算运费
         UserAddress userAddress = userAddressService.getById(request.getAddressId());
@@ -2934,8 +3114,15 @@ public class FrontOrderServiceImpl implements FrontOrderService {
                     e.setUserCouponId(o.getUserCouponId());
                     e.setCouponFee(BigDecimal.ZERO);
                     e.setMerCouponFee(BigDecimal.ZERO);
+
+
                 }
             });
+            //计算打包费
+            MerchantMarket merchantMarket= merchantMarketService.getMerchantMarket(e.getMerId());
+            if(merchantMarket!=null && merchantMarket.getPackingFee()!=null){
+                priceResponse.setPackingFee(new BigDecimal(merchantMarket.getPackingFee()));
+            }
         });
         getFreightFee_V_1_8(orderInfoVo, userAddress, user.getIsPaidMember());
         priceResponse.setFreightFee(orderInfoVo.getFreightFee());

+ 61 - 9
ydd_mer_java/crmeb-front/src/main/java/com/zbkj/front/service/impl/FrontProductServiceImpl.java

@@ -16,10 +16,7 @@ import com.zbkj.common.model.record.BrowseRecord;
 import com.zbkj.common.model.system.GroupConfig;
 import com.zbkj.common.model.user.User;
 import com.zbkj.common.page.CommonPage;
-import com.zbkj.common.request.CouponProductSearchRequest;
-import com.zbkj.common.request.PageParamRequest;
-import com.zbkj.common.request.ProductFrontSearchRequest;
-import com.zbkj.common.request.SystemCouponProductSearchRequest;
+import com.zbkj.common.request.*;
 import com.zbkj.common.request.merchant.MerchantProductSearchRequest;
 import com.zbkj.common.response.*;
 import com.zbkj.common.result.CommonResultCode;
@@ -103,6 +100,8 @@ public class FrontProductServiceImpl implements FrontProductService {
     private ProductAttributeService productAttributeService;
     @Autowired
     private ProductAttributeOptionService productAttributeOptionService;
+    @Autowired
+    private SeckillProductService seckillProductService;
 
 
     /**
@@ -116,6 +115,15 @@ public class FrontProductServiceImpl implements FrontProductService {
     }
 
     /**
+     * 精选商品列表
+     *
+     * @return List<ProductFrontResponse>
+     */
+    @Override
+    public PageInfo<ProductFrontResponse> getSelectedList(ProductFrontSearchRequest request, PageParamRequest pageRequest) {
+        return productService.findH5List_V1(request, pageRequest);
+    }
+    /**
      * 获取商品详情V1.7
      *
      * @param id            商品id
@@ -228,6 +236,18 @@ public class FrontProductServiceImpl implements FrontProductService {
     }
 
     /**
+     * 商品评论列表
+     *
+     * @param merId            商户编号
+     * @param type             评价等级|0=全部,1=好评,2=中评,3=差评
+     * @param pageParamRequest 分页参数
+     * @return List<ProductReplyResponse>
+     */
+    @Override
+    public PageInfo<ProductReplyResponse> getMerReplyList(Integer merId, Integer type, PageParamRequest pageParamRequest) {
+        return productReplyService.getH5MerList(merId,type,pageParamRequest);
+    }
+    /**
      * 产品评价数量和好评度
      *
      * @return StoreProductReplayCountResponse
@@ -237,6 +257,11 @@ public class FrontProductServiceImpl implements FrontProductService {
         return productReplyService.getH5Count(id);
     }
 
+    @Override
+    public ProductReplayCountResponse getMerReplyCount(Integer id) {
+        return productReplyService.getH5MerCount(id);
+    }
+
     /**
      * 商品列表转为首页商品格式
      *
@@ -248,9 +273,9 @@ public class FrontProductServiceImpl implements FrontProductService {
             ProductCommonResponse productResponse = new ProductCommonResponse();
             BeanUtils.copyProperties(product, productResponse);
             // 评论总数
-            Integer sumCount = productReplyService.getCountByScore(product.getId(), ProductConstants.PRODUCT_REPLY_TYPE_ALL);
+            Integer sumCount = productReplyService.getCountByScore(product.getId(), ProductConstants.PRODUCT_REPLY_TYPE_ALL,1);
             // 好评总数
-            Integer goodCount = productReplyService.getCountByScore(product.getId(), ProductConstants.PRODUCT_REPLY_TYPE_GOOD);
+            Integer goodCount = productReplyService.getCountByScore(product.getId(), ProductConstants.PRODUCT_REPLY_TYPE_GOOD,1);
             String replyChance = "0";
             if (sumCount > 0 && goodCount > 0) {
                 replyChance = String.format("%.2f", ((goodCount.doubleValue() / sumCount.doubleValue())));
@@ -299,6 +324,33 @@ public class FrontProductServiceImpl implements FrontProductService {
         return CommonPage.copyPageInfo(pageInfo, responseList);
     }
 
+    @Override
+    public PageInfo<ProductCommonResponse> getMerchantProListV1(MerchantProductSearchRequest request, PageParamRequest pageParamRequest) {
+        SeckillProductSearchRequest seckillProductSearchRequest=new SeckillProductSearchRequest();
+        seckillProductSearchRequest.setCateId(request.getProductType());
+        seckillProductSearchRequest.setProStatus(1);//已上架商品
+        seckillProductSearchRequest.setActivityStatus(1);//活动开启
+        seckillProductSearchRequest.setAuditStatus(2);//已审核
+        seckillProductSearchRequest.setLimit(pageParamRequest.getLimit());//显示商品数量
+        seckillProductSearchRequest.setPage(pageParamRequest.getPage());
+        seckillProductSearchRequest.setLatitude(request.getLatitude());
+        seckillProductSearchRequest.setLongitude(request.getLongitude());
+        PageInfo<SeckillProductPageResponse> pageInfo = seckillProductService.getSeckillProductPage(seckillProductSearchRequest);
+        List<SeckillProductPageResponse> seckillProductList = pageInfo.getList();
+        if (CollUtil.isEmpty(seckillProductList)) {
+            return CommonPage.copyPageInfo(pageInfo, CollUtil.newArrayList());
+        }
+        List<Product> productList=new ArrayList<>();
+        for(SeckillProductPageResponse seckillProduct: seckillProductList){
+            Product product=new Product();
+            BeanUtils.copyProperties(seckillProduct,product);
+            productList.add(product);
+        }
+        productList = activityStyleService.makeActivityBorderStyle(productList);
+        List<ProductCommonResponse> responseList = productToIndexProduct(productList);
+        return CommonPage.copyPageInfo(pageInfo, responseList);
+    }
+
     /**
      * 优惠券商品列表
      *
@@ -410,7 +462,7 @@ public class FrontProductServiceImpl implements FrontProductService {
             response.setMerName(merchant.getName());
             response.setMerCategoryId(merchant.getCategoryId());
             response.setMerTypeId(merchant.getTypeId());
-            response.setReplyNum(productReplyService.getCountByScore(product.getId(), ProductConstants.PRODUCT_REPLY_TYPE_ALL));
+            response.setReplyNum(productReplyService.getCountByScore(product.getId(), ProductConstants.PRODUCT_REPLY_TYPE_ALL,1));
             response.setSales(product.getSales() + product.getFicti());
             return response;
         }).collect(Collectors.toList());
@@ -504,9 +556,9 @@ public class FrontProductServiceImpl implements FrontProductService {
         }).collect(Collectors.toList());
         productFrontResponses.forEach(e -> {
             // 评论总数
-            Integer sumCount = productReplyService.getCountByScore(e.getId(), ProductConstants.PRODUCT_REPLY_TYPE_ALL);
+            Integer sumCount = productReplyService.getCountByScore(e.getId(), ProductConstants.PRODUCT_REPLY_TYPE_ALL,1);
             // 好评总数
-            Integer goodCount = productReplyService.getCountByScore(e.getId(), ProductConstants.PRODUCT_REPLY_TYPE_GOOD);
+            Integer goodCount = productReplyService.getCountByScore(e.getId(), ProductConstants.PRODUCT_REPLY_TYPE_GOOD,1);
             // 设置商品标签
             ProductTagsFrontResponse productTagsFrontResponse = productTagService.setProductTagByProductTagsRules(e.getId(), e.getBrandId(), e.getMerId(), e.getCategoryId(), e.getProductTags());
             e.setProductTags(productTagsFrontResponse);

Some files were not shown because too many files changed in this diff