浏览代码

合并代码

叶君翔 3 年之前
父节点
当前提交
f645f53e15
共有 100 个文件被更改,包括 2376 次插入500 次删除
  1. 68 0
      lb-app/src/main/java/com/ydd/app/controller/AuthApi.java
  2. 44 9
      lb-app/src/main/java/com/ydd/app/controller/CommonApi.java
  3. 49 0
      lb-app/src/main/java/com/ydd/app/controller/FeedbackApi.java
  4. 1 1
      lb-app/src/main/java/com/ydd/app/controller/LoginRegisterApi.java
  5. 19 0
      lb-app/src/main/java/com/ydd/app/controller/OrderApi.java
  6. 5 1
      lb-app/src/main/java/com/ydd/app/controller/PayApi.java
  7. 4 4
      lb-app/src/main/java/com/ydd/app/controller/ShopDeviceApi.java
  8. 13 0
      lb-app/src/main/java/com/ydd/app/controller/StatisticsApi.java
  9. 17 1
      lb-app/src/main/java/com/ydd/app/dto/FeedbackDto.java
  10. 18 0
      lb-app/src/main/java/com/ydd/app/dto/MemberDetailReq.java
  11. 5 0
      lb-app/src/main/java/com/ydd/app/dto/RechargeOptionDto.java
  12. 114 0
      lb-app/src/main/java/com/ydd/app/dto/WaimaiOrderDetailDto.java
  13. 207 0
      lb-app/src/main/java/com/ydd/app/dto/WaimaiOrderDto.java
  14. 9 4
      lb-app/src/main/java/com/ydd/app/interceptor/AuthorizationInterceptor.java
  15. 32 0
      lb-app/src/main/java/com/ydd/app/listener/DoCreateOrder.java
  16. 20 0
      lb-app/src/main/java/com/ydd/app/service/ApiAuthService.java
  17. 10 0
      lb-app/src/main/java/com/ydd/app/service/ApiFeedbackService.java
  18. 10 0
      lb-app/src/main/java/com/ydd/app/service/ApiOrderService.java
  19. 2 0
      lb-app/src/main/java/com/ydd/app/service/ApiStatisticsService.java
  20. 81 0
      lb-app/src/main/java/com/ydd/app/service/impl/ApiAuthServiceImpl.java
  21. 1 1
      lb-app/src/main/java/com/ydd/app/service/impl/ApiCallBackMeiTuan.java
  22. 24 0
      lb-app/src/main/java/com/ydd/app/service/impl/ApiFeedbackServiceImpl.java
  23. 6 0
      lb-app/src/main/java/com/ydd/app/service/impl/ApiMemberServiceImpl.java
  24. 1 1
      lb-app/src/main/java/com/ydd/app/service/impl/ApiOrderBackServiceImpl.java
  25. 25 31
      lb-app/src/main/java/com/ydd/app/service/impl/ApiOrderNewServiceImpl.java
  26. 245 4
      lb-app/src/main/java/com/ydd/app/service/impl/ApiOrderServiceImpl.java
  27. 31 2
      lb-app/src/main/java/com/ydd/app/service/impl/ApiOrderValuationServiceImpl.java
  28. 14 5
      lb-app/src/main/java/com/ydd/app/service/impl/ApiPayServiceImpl.java
  29. 21 3
      lb-app/src/main/java/com/ydd/app/service/impl/ApiRechargeServiceImpl.java
  30. 19 4
      lb-app/src/main/java/com/ydd/app/service/impl/ApiShopDeviceServiceImpl.java
  31. 24 9
      lb-app/src/main/java/com/ydd/app/service/impl/ApiShopServiceImpl.java
  32. 43 7
      lb-app/src/main/java/com/ydd/app/service/impl/ApiShopUserServiceImpl.java
  33. 55 16
      lb-app/src/main/java/com/ydd/app/service/impl/ApiStatisticsServiceImpl.java
  34. 35 6
      lb-app/src/main/java/com/ydd/app/service/impl/ApiWaimaiPrintServiceImpl.java
  35. 290 286
      lb-app/src/main/java/com/ydd/app/service/impl/ApiWaimaiServiceImpl.java
  36. 1 1
      lb-app/src/main/java/com/ydd/app/task/SyncRiderEvent.java
  37. 6 0
      lb-app/src/main/java/com/ydd/app/task/SyncRiderTask.java
  38. 5 0
      lb-common/src/main/java/com/ydd/common/constant/RedisKeyConstant.java
  39. 18 0
      lb-framework/src/main/java/com/ydd/framework/config/DruidConfig.java
  40. 12 0
      lb-framework/src/main/java/com/ydd/framework/web/service/TokenService.java
  41. 0 2
      lb-module/src/main/java/com/ydd/module/constants/AppConstant.java
  42. 94 0
      lb-module/src/main/java/com/ydd/module/domain/DeviceConfig.java
  43. 4 0
      lb-module/src/main/java/com/ydd/module/domain/HelpColumn.java
  44. 17 8
      lb-module/src/main/java/com/ydd/module/domain/MemberBalanceLog.java
  45. 1 1
      lb-module/src/main/java/com/ydd/module/domain/OrderPushMessage.java
  46. 2 0
      lb-module/src/main/java/com/ydd/module/domain/Version.java
  47. 11 1
      lb-module/src/main/java/com/ydd/module/dto/DeviceDto.java
  48. 6 1
      lb-module/src/main/java/com/ydd/module/dto/DeviceStatusDto.java
  49. 15 0
      lb-module/src/main/java/com/ydd/module/dto/MemberDetailDto.java
  50. 7 1
      lb-module/src/main/java/com/ydd/module/dto/OrderListDto.java
  51. 3 0
      lb-module/src/main/java/com/ydd/module/dto/ShopDto.java
  52. 5 0
      lb-module/src/main/java/com/ydd/module/dto/StatisticsDeliveryDto.java
  53. 7 1
      lb-module/src/main/java/com/ydd/module/enums/LogSourceEnum.java
  54. 47 0
      lb-module/src/main/java/com/ydd/module/enums/PrintDeviceEnum.java
  55. 23 0
      lb-module/src/main/java/com/ydd/module/mapper/DeviceConfigMapper.java
  56. 3 0
      lb-module/src/main/java/com/ydd/module/mapper/FeedbackMapper.java
  57. 2 0
      lb-module/src/main/java/com/ydd/module/mapper/MerchantMapper.java
  58. 3 1
      lb-module/src/main/java/com/ydd/module/mapper/ShopDeviceMapper.java
  59. 1 1
      lb-module/src/main/java/com/ydd/module/push/MessagePushService.java
  60. 15 4
      lb-module/src/main/java/com/ydd/module/push/impl/MessagePushServiceImpl.java
  61. 28 0
      lb-module/src/main/java/com/ydd/module/service/IDeviceConfigService.java
  62. 8 0
      lb-module/src/main/java/com/ydd/module/service/IFeedbackService.java
  63. 1 1
      lb-module/src/main/java/com/ydd/module/service/IMemberBalanceLogService.java
  64. 7 0
      lb-module/src/main/java/com/ydd/module/service/IMemberConfigService.java
  65. 7 0
      lb-module/src/main/java/com/ydd/module/service/IMerchantService.java
  66. 2 0
      lb-module/src/main/java/com/ydd/module/service/IShopDeviceService.java
  67. 95 0
      lb-module/src/main/java/com/ydd/module/service/impl/DeviceConfigServiceImpl.java
  68. 1 1
      lb-module/src/main/java/com/ydd/module/service/impl/DspDeliveryServiceImpl.java
  69. 4 0
      lb-module/src/main/java/com/ydd/module/service/impl/FeedbackServiceImpl.java
  70. 1 1
      lb-module/src/main/java/com/ydd/module/service/impl/HelpColumnServiceImpl.java
  71. 1 0
      lb-module/src/main/java/com/ydd/module/service/impl/HelpServiceImpl.java
  72. 41 4
      lb-module/src/main/java/com/ydd/module/service/impl/MemberBalanceLogServiceImpl.java
  73. 34 6
      lb-module/src/main/java/com/ydd/module/service/impl/MemberConfigServiceImpl.java
  74. 10 2
      lb-module/src/main/java/com/ydd/module/service/impl/MemberServiceImpl.java
  75. 5 0
      lb-module/src/main/java/com/ydd/module/service/impl/MerchantServiceImpl.java
  76. 11 11
      lb-module/src/main/java/com/ydd/module/service/impl/OrderServiceImpl.java
  77. 1 1
      lb-module/src/main/java/com/ydd/module/service/impl/PackageCityConfigServiceImpl.java
  78. 18 6
      lb-module/src/main/java/com/ydd/module/service/impl/ShopDeliveryBindServiceImpl.java
  79. 1 0
      lb-module/src/main/java/com/ydd/module/service/impl/ShopDeliveryServiceImpl.java
  80. 22 9
      lb-module/src/main/java/com/ydd/module/service/impl/ShopDeviceServiceImpl.java
  81. 8 0
      lb-module/src/main/java/com/ydd/module/service/impl/ShopServiceImpl.java
  82. 26 0
      lb-module/src/main/resources/mapper/module/DeviceConfigMapper.xml
  83. 13 0
      lb-module/src/main/resources/mapper/module/FeedbackMapper.xml
  84. 4 1
      lb-module/src/main/resources/mapper/module/memberBalanceLogMapper.xml
  85. 12 0
      lb-module/src/main/resources/mapper/module/merchantMapper.xml
  86. 1 0
      lb-module/src/main/resources/mapper/module/orderMapper.xml
  87. 48 6
      lb-module/src/main/resources/mapper/module/shopDeviceMapper.xml
  88. 7 4
      lb-third/lb-third-common/src/main/java/com/ydd/third/common/utils/AddressLngLatExchanger.java
  89. 5 0
      lb-third/lb-third-common/src/main/java/com/ydd/third/common/utils/CoordinateUtils.java
  90. 9 0
      lb-third/lb-third-common/src/main/java/com/ydd/third/print/request/PrintOrderDto.java
  91. 5 5
      lb-third/lb-third-delivery/src/main/java/com/ydd/third/delivery/aipt/AiptClient.java
  92. 2 2
      lb-third/lb-third-delivery/src/main/java/com/ydd/third/delivery/dada/DadaClient.java
  93. 2 2
      lb-third/lb-third-delivery/src/main/java/com/ydd/third/delivery/dianwoda/DianwodaClient.java
  94. 2 1
      lb-third/lb-third-delivery/src/main/java/com/ydd/third/delivery/shansong/ShansongClient.java
  95. 2 0
      lb-third/lb-third-delivery/src/main/java/com/ydd/third/delivery/shunfeng/ShunfengClient.java
  96. 3 1
      lb-third/lb-third-print/src/main/java/com/ydd/third/print/enums/PrintDeviceType.java
  97. 23 9
      lb-third/lb-third-print/src/main/java/com/ydd/third/print/feie/utils/PrintUtil.java
  98. 24 10
      lb-third/lb-third-print/src/main/java/com/ydd/third/print/jiaboyun/service/JBYPrintService.java
  99. 12 0
      lb-third/lb-third-print/src/main/java/com/ydd/third/print/request/PrintOrderDto.java
  100. 0 0
      lb-third/lb-third-print/src/main/java/com/ydd/third/print/shangpengyun/service/SPYPrintService.java

+ 68 - 0
lb-app/src/main/java/com/ydd/app/controller/AuthApi.java

@@ -0,0 +1,68 @@
+package com.ydd.app.controller;
+
+import com.ydd.app.service.ApiAuthService;
+import com.ydd.common.annotation.RepeatSubmit;
+import com.ydd.common.core.controller.BaseController;
+import com.ydd.common.core.domain.BaseResult;
+import com.ydd.module.dto.WaimaiAuthListDto;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+
+/**
+ * 商户授权接口
+ *
+ * @author
+ */
+@Api(value = "商户授权", tags = {"商户授权接口"})
+@RestController
+@RequestMapping("/app/auth")
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+public class AuthApi extends BaseController {
+
+    private final ApiAuthService apiAuthService;
+
+
+
+    /**
+     * 商户授权
+     *
+     * @param mobile 手机号
+     */
+    @ApiOperation("商户授权")
+    @ApiImplicitParams({
+            @ApiImplicitParam(required = true, paramType = "query", name = "mobile", value = "手机号"),
+            @ApiImplicitParam(required = true, paramType = "query", name = "code", value = "验证码"),
+            @ApiImplicitParam(required = true, paramType = "query", name = "waimaiId", value = "1美团 2饿了么"),
+    })
+    @RequestMapping(value = "/shopList", method = RequestMethod.POST)
+    @RepeatSubmit
+    public BaseResult<List<WaimaiAuthListDto>> shopList(@RequestParam("mobile") String mobile,@RequestParam("code") String code,
+                                           @RequestParam("waimaiId") Integer waimaiId) {
+        List<WaimaiAuthListDto> list = apiAuthService.shopList(mobile,code,waimaiId);
+        return BaseResult.success(list);
+    }
+
+    @ApiOperation("商户授权")
+    @ApiImplicitParams({
+            @ApiImplicitParam(required = true, paramType = "query", name = "mobile", value = "手机号"),
+            @ApiImplicitParam(required = true, paramType = "query", name = "waimaiId", value = "1美团 2饿了么"),
+    })
+    @RequestMapping(value = "/getToken", method = RequestMethod.POST)
+    @RepeatSubmit
+    public BaseResult<WaimaiAuthListDto> shopListNoCode(@RequestParam("thirdShopId") String thirdShopId,
+                                                        @RequestParam("waimaiId") Integer waimaiId) {
+        WaimaiAuthListDto dto = apiAuthService.shopListNoCode(thirdShopId,waimaiId);
+        return BaseResult.success(dto);
+    }
+}

+ 44 - 9
lb-app/src/main/java/com/ydd/app/controller/CommonApi.java

@@ -9,11 +9,16 @@ import com.ydd.common.core.controller.BaseController;
 import com.ydd.common.core.domain.BaseResult;
 import com.ydd.common.oss.cloud.CloudStorageConfig;
 import com.ydd.common.oss.cloud.OSSFactory;
+import com.ydd.module.domain.DeviceConfig;
 import com.ydd.module.domain.Help;
 import com.ydd.module.domain.Version;
 import com.ydd.module.dto.HelpDetailDto;
 import com.ydd.module.dto.HelpDto;
+import com.ydd.module.dto.MemberConfigDto;
+import com.ydd.module.service.IDeliveryConfigService;
+import com.ydd.module.service.IDeviceConfigService;
 import com.ydd.module.service.IHelpColumnService;
+import com.ydd.module.service.IMemberConfigService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -32,6 +37,7 @@ import static com.ydd.module.enums.ExceptionEnum.FILE_UPLOAD_ERROR;
 
 /**
  * 通用接口
+ *
  * @author douya
  */
 @Api(value = "通用接口", tags = {"通用接口"})
@@ -49,21 +55,26 @@ public class CommonApi extends BaseController {
 
     private final IHelpColumnService iHelpColumnService;
 
+    private final IMemberConfigService iMemberConfigService;
+
+    private final IDeviceConfigService iDeviceConfigService;
+
     /**
      * 通用上传请求
      */
     @ApiOperation("通用上传请求")
     @PostMapping("/upload")
-    public BaseResult<Map<String,Object>> uploadFile(MultipartFile file) {
+    public BaseResult<Map<String, Object>> uploadFile(MultipartFile file) {
         try {
             String suffix = FilenameUtils.getExtension(file.getOriginalFilename());
             String url = OSSFactory.build(cloudStorageConfig).uploadSuffix(file.getInputStream(), "." + suffix);
-            Map<String,Object> result = new HashMap<>();
+            Map<String, Object> result = new HashMap<>();
             result.put("fileName", file.getOriginalFilename());
             result.put("url", url);
             return BaseResult.success(result);
         } catch (Exception e) {
-            logger.error("上传异常",e);
+            logger.error("上传异常", e);
+            e.printStackTrace();
             return BaseResult.error(FILE_UPLOAD_ERROR.MSG);
         }
     }
@@ -88,7 +99,7 @@ public class CommonApi extends BaseController {
     })
     @RequestMapping(value = "/explain", method = RequestMethod.GET)
     public BaseResult<String> explain(@RequestParam("type") Integer type) {
-        return BaseResult.success("OK",apiExplainService.explain(type));
+        return BaseResult.success("OK", apiExplainService.explain(type));
     }
 
     @ApiOperation("版本控制")
@@ -104,10 +115,17 @@ public class CommonApi extends BaseController {
      * 帮助中心
      */
     @ApiOperation("帮助中心栏目")
+    @ApiImplicitParams({
+            @ApiImplicitParam(required = true, paramType = "query", name = "type", value = "类型0 app 1 pc")
+    })
     @RequestMapping(value = "/help", method = RequestMethod.GET)
-    public BaseResult<List<HelpDto>> help(@RequestParam("type") Integer type) {
-        return BaseResult.success("OK",iHelpColumnService.getAll(type));
+    public BaseResult<List<HelpDto>> help(@RequestParam(name = "type",required = false)Integer  type) {
+        if(type==null){
+            type = 1;
+        }
+        return BaseResult.success("OK", iHelpColumnService.getAll(type));
     }
+
     /**
      * 帮助中心
      */
@@ -117,10 +135,27 @@ public class CommonApi extends BaseController {
             @ApiImplicitParam(required = true, paramType = "query", name = "secondColumnId", value = "二级栏目id"),
             @ApiImplicitParam(required = false, paramType = "query", name = "'platformType", value = "PC/APP")
     })
-    public BaseResult<List<HelpDetailDto>> helpDetail(@RequestParam("secondColumnId")Integer secondColumnId,
-                                                      @RequestHeader(name = "platformType",required = false)String platformType) {
-        return BaseResult.success("OK",iHelpColumnService.getHelpDetail(secondColumnId,platformType));
+    public BaseResult<List<HelpDetailDto>> helpDetail(@RequestParam("secondColumnId") Integer secondColumnId,
+                                                      @RequestHeader(name = "platformType", required = false) String platformType) {
+        return BaseResult.success("OK", iHelpColumnService.getHelpDetail(secondColumnId, platformType));
     }
 
+    @ApiOperation("用户是否允许静默更新")
+    @RequestMapping(value = "/userUpgrade", method = RequestMethod.GET)
+    @AccessToken
+    public BaseResult<MemberConfigDto> userUpgrade() {
+        MemberConfigDto dto = iMemberConfigService.findDetail(getLoginId());
+        return BaseResult.success("ok", dto);
+    }
+
+    /**
+     * 打印机绑定说明
+     */
+    @ApiOperation("打印机绑定说明")
+    @RequestMapping(value = "/deviceConfig", method = RequestMethod.GET)
+    @AccessToken
+    public BaseResult<List<DeviceConfig>> deviceConfig() {
+        return BaseResult.success("ok", iDeviceConfigService.getDeviceConfig());
+    }
 
 }

+ 49 - 0
lb-app/src/main/java/com/ydd/app/controller/FeedbackApi.java

@@ -0,0 +1,49 @@
+package com.ydd.app.controller;
+
+import com.ydd.app.dto.FeedbackDto;
+import com.ydd.app.service.ApiFeedbackService;
+import com.ydd.common.annotation.AccessToken;
+import com.ydd.common.core.controller.BaseController;
+import com.ydd.common.core.domain.BaseResult;
+import com.ydd.common.core.page.PageResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 意见反馈接口
+ * @author 叶君翔
+ * @date 2022/03/28 14:02
+ */
+@Api(value = "意见反馈", tags = {"意见反馈"})
+@RestController
+@RequestMapping("/app/feedback")
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+public class FeedbackApi extends BaseController {
+
+    private final ApiFeedbackService apiFeedbackService;
+
+    @ApiOperation("新增意见反馈")
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    @AccessToken
+    public BaseResult feedback(FeedbackDto feedbackDto) {
+        apiFeedbackService.feedback(getLoginId(), feedbackDto);
+        return BaseResult.success();
+    }
+
+    @ApiOperation("意见反馈列表")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @AccessToken
+    public BaseResult feedbackList() {
+        startPage();
+        List<FeedbackDto> list = apiFeedbackService.getFeedbackList(getLoginId());
+        return BaseResult.success(new PageResult(list));
+    }
+
+}

+ 1 - 1
lb-app/src/main/java/com/ydd/app/controller/LoginRegisterApi.java

@@ -59,7 +59,7 @@ public class LoginRegisterApi extends BaseController {
     @ApiOperation("发送验证码")
     @ApiImplicitParams({
             @ApiImplicitParam(required = true, paramType = "query", name = "mobile", value = "手机号"),
-            @ApiImplicitParam(required = true, paramType = "query", name = "type", value = "类型 1:注册登录 2:找回密码")
+            @ApiImplicitParam(required = true, paramType = "query", name = "type", value = "类型 1:注册登录 2:找回密码 3 身份验证")
     })
     @RequestMapping(value = "/send/sms", method = RequestMethod.POST)
     @RepeatSubmit

+ 19 - 0
lb-app/src/main/java/com/ydd/app/controller/OrderApi.java

@@ -497,6 +497,25 @@ public class OrderApi extends BaseController {
         return BaseResult.success();
     }
 
+    @ApiOperation("轮询拉取新订单(app改版)")
+    @PostMapping(value = "/pullNewOrder")
+    @AccessToken
+    public BaseResult pullNewOrder(@RequestBody(required = false) String body) {
+        if (StringUtils.isNotBlank(body)) {
+            try{
+                JSONObject json = JSON.parseObject(body);
+                List<Integer> orderIds = JSONArray.parseArray(json.getString("orderIds"), Integer.class);
+                Integer status = json.get("status") != null ? json.getInteger("status") : null;
+                String searchShopIdStr = json.get("searchShopIdStr") != null ? json.getString("searchShopIdStr") : null;
+                return BaseResult.success(apiOrderService.pullNewOrder(getLoginId(), orderIds, status, searchShopIdStr));
+            } catch (Exception e) {
+                logger.error("轮询拉取外面新订单异常,请求参数{},错误信息{}",body,e.getMessage());
+                return BaseResult.error(501,"请求数据参数格式错误");
+            }
+        }
+        return BaseResult.error(501,"请求数据为空");
+    }
+
     /**
      * 订单列表(一键发单&订单查询)
      */

+ 5 - 1
lb-app/src/main/java/com/ydd/app/controller/PayApi.java

@@ -86,7 +86,11 @@ public class PayApi extends BaseController {
             }
 //            return BaseResult.success(resp);
         } catch (CustomAppException e) {
-            return BaseResult.error(e.getCode(), e.getMessage());
+            if (e.getCode() == null) {
+                return BaseResult.error(BaseResult.Type.ERROR.value(), e.getMessage());
+            } else {
+                return BaseResult.error(e.getCode(), e.getMessage());
+            }
         } finally {
             rLock.unlock();
         }

+ 4 - 4
lb-app/src/main/java/com/ydd/app/controller/ShopDeviceApi.java

@@ -55,12 +55,12 @@ public class ShopDeviceApi extends BaseController {
      */
     @ApiOperation("门店设备列表")
     @ApiImplicitParams({
-            @ApiImplicitParam(required = true, paramType = "query", name = "shopId", value = "门店ID"),
+            @ApiImplicitParam(paramType = "query", name = "shopId", value = "门店ID"),
             @ApiImplicitParam(required = true, paramType = "query", name = "deviceType", value = "设备类型:  1->云音箱,2->云打印,3->收款设备")
     })
     @RequestMapping(value = "/list", method = RequestMethod.GET)
     @AccessToken
-    public BaseResult<List<DeviceDto>> findList(@RequestParam("shopId") Long shopId, @RequestParam("deviceType") Integer deviceType) {
+    public BaseResult<List<DeviceDto>> findList(@RequestParam(value = "shopId", required = false) Long shopId, @RequestParam("deviceType") Integer deviceType) {
         return BaseResult.success(apiShopDeviceService.findList(getLoginId(), shopId, deviceType));
     }
 
@@ -97,11 +97,11 @@ public class ShopDeviceApi extends BaseController {
      */
     @ApiOperation("打印机状态统计")
     @ApiImplicitParams({
-            @ApiImplicitParam(required = true, paramType = "query", name = "shopId", value = "门店ID")
+            @ApiImplicitParam(paramType = "query", name = "shopId", value = "门店ID")
     })
     @RequestMapping(value = "/status", method = RequestMethod.GET)
     @AccessToken
-    public BaseResult<DeviceStatusDto> status(@RequestParam("shopId") Long shopId) {
+    public BaseResult<DeviceStatusDto> status(@RequestParam(value = "shopId", required = false) Long shopId) {
         return BaseResult.success(apiShopDeviceService.status(getLoginId(), shopId));
     }
 

+ 13 - 0
lb-app/src/main/java/com/ydd/app/controller/StatisticsApi.java

@@ -84,4 +84,17 @@ public class StatisticsApi extends BaseController {
     public BaseResult<List<StatisticsDeliveryDto>> delivery(Long shopId, Integer timeType, String startTime, String endTime) {
         return BaseResult.success(apiStatisticsService.delivery(getLoginId(),shopId,timeType,startTime,endTime));
     }
+
+    @ApiOperation("配送统计")
+    @ApiImplicitParams({
+            @ApiImplicitParam(required = false, paramType = "query", name = "shopId", value = "门店ID(全部门店传0)"),
+            @ApiImplicitParam(required = false, paramType = "query", name = "timeType", value = "时间(1今日 2昨日 3本月)"),
+            @ApiImplicitParam(required = false, paramType = "query", name = "startTime", value = "开始时间"),
+            @ApiImplicitParam(required = false, paramType = "query", name = "endTime", value = "结束时间")
+    })
+    @RequestMapping(value = "/deliveryNew", method = RequestMethod.GET)
+    @AccessToken
+    public BaseResult<List<StatisticsDeliveryDto>> deliveryNew(Long shopId, Integer timeType, String startTime, String endTime) {
+        return BaseResult.success(apiStatisticsService.deliveryNew(getLoginId(),shopId,timeType,startTime,endTime));
+    }
 }

+ 17 - 1
lb-app/src/main/java/com/ydd/app/dto/FeedbackDto.java

@@ -1,12 +1,13 @@
 package com.ydd.app.dto;
 
-import com.ydd.common.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 
 import java.io.Serializable;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -22,6 +23,10 @@ import java.util.List;
 @Accessors(chain = true)
 public class FeedbackDto implements Serializable {
 
+    private static final long serialVersionUID = 402009810639307950L;
+
+    private Long id;
+
     /** 建议类型【1账号问题】【2功能问题】【3优化建议】【4其他问题】 */
     @ApiModelProperty(required = true,value = "建议类型【1账号问题】【2功能问题】【3优化建议】【4其他问题】")
     private Integer type;
@@ -32,4 +37,15 @@ public class FeedbackDto implements Serializable {
 
     @ApiModelProperty(required = false,value = "图片")
     private List<String> pictures;
+
+    private Integer status;
+
+    private String answer;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
 }

+ 18 - 0
lb-app/src/main/java/com/ydd/app/dto/MemberDetailReq.java

@@ -89,4 +89,22 @@ public class MemberDetailReq implements Serializable {
     @ApiModelProperty(value = "开启显示商品图片: 1->显示,0->不显示")
     private Integer showFoodImg;
 
+    @ApiModelProperty(value = "开启wifi自动下载安装包: 1->是,0->否")
+    private Integer wifiUpgrade;
+
+    /**
+     * 同步订单商品给骑手
+     */
+    private Integer syncGoodsDetailToDelivery;
+
+    /**
+     * 同步打印客户联商品明细
+     */
+    private Integer customerLinkPrintGoodsDetail;
+
+    /**
+     * 同步打印客户联商品价格
+     */
+    private Integer customerLinkPrintGoodsPrice;
+
 }

+ 5 - 0
lb-app/src/main/java/com/ydd/app/dto/RechargeOptionDto.java

@@ -10,6 +10,7 @@ import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 
@@ -93,5 +94,9 @@ public class RechargeOptionDto implements Serializable {
     @ApiModelProperty("优惠券列表")
     List<Coupon> couponList;
 
+    /**
+     * 赠送优惠券金额
+     */
+    private BigDecimal giveCouponAmount;
 
 }

+ 114 - 0
lb-app/src/main/java/com/ydd/app/dto/WaimaiOrderDetailDto.java

@@ -0,0 +1,114 @@
+package com.ydd.app.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ydd.common.annotation.Excel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 外卖商品详情对象 lb_waimai_order_detail
+ * 
+ * @author douya
+ * @date 2021-03-15
+ */
+@Data
+@NoArgsConstructor
+public class WaimaiOrderDetailDto implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+
+    /** $column.columnComment */
+    private Long id;
+
+    /** 外卖订单ID */
+    @Excel(name = "外卖订单ID")
+    private Long waimaiOrderId;
+
+    /** ERP方菜品id */
+    @Excel(name = "ERP方菜品id")
+    private String appFoodCode;
+
+    /** 餐盒数量 */
+    @ApiModelProperty(value = "餐盒数量")
+    private String boxNum;
+
+    /** 餐盒单价 */
+    @ApiModelProperty(value = "餐盒单价")
+    private BigDecimal boxPrice;
+
+    /** 菜品名 */
+    @ApiModelProperty(value = "菜品名")
+    private String foodName;
+
+    /** 菜品原价 */
+    @ApiModelProperty(value = "菜品原价")
+    private BigDecimal price;
+
+    /** ERP方菜品sku */
+    @Excel(name = "ERP方菜品sku")
+    private String skuId;
+
+    /** 菜品份数 */
+    @ApiModelProperty(value = "菜品份数")
+    private Long quantity;
+
+    /** 单位 */
+    @ApiModelProperty(value = "单位")
+    private String unit;
+
+    /** 菜品折扣 */
+    @Excel(name = "菜品折扣")
+    private BigDecimal foodDiscount;
+
+    /** 菜品属性 */
+    @Excel(name = "菜品属性")
+    private String foodProperty;
+
+    /** 菜品分成 */
+    @Excel(name = "菜品分成")
+    private BigDecimal foodShareFeeChargeByPoi;
+
+    /** 商品所在的口袋 */
+    @Excel(name = "商品所在的口袋")
+    private Long cartId;
+
+    /** 美团菜品分类id */
+    @Excel(name = "美团菜品分类id")
+    private Long mtTagId;
+
+    /** 美团菜品SPUID */
+    @Excel(name = "美团菜品SPUID")
+    private Long mtSpuId;
+
+    /** 美团菜品SKUID */
+    @Excel(name = "美团菜品SKUID")
+    private Long mtSkuId;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /** 更新时间 */
+    @TableField(update = "now()")
+    private Date updateTime;
+
+    /** 删除标识位: 0正常 1删除 */
+    @TableLogic
+    private Integer deleted;
+
+    private String spec;
+
+    @TableField(exist = false)
+    private Map<String, Object> params = new HashMap<>();
+}

+ 207 - 0
lb-app/src/main/java/com/ydd/app/dto/WaimaiOrderDto.java

@@ -0,0 +1,207 @@
+package com.ydd.app.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ydd.common.annotation.Excel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 【请填写功能名称】对象 lb_waimai_order
+ *
+ * @author douya
+ * @date 2021-03-15
+ */
+@Data
+@NoArgsConstructor
+public class WaimaiOrderDto implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+
+    /** $column.columnComment */
+    private Long id;
+
+    /** 外卖平台ID */
+    private Long waimaiId;
+
+    /** 开发者ID */
+    private String developerid;
+
+    /** 门店ID */
+    private Long shopId;
+
+    /** 城市ID */
+    private Long cityId;
+
+    /** 外卖订单ID */
+    private String outOrderId;
+
+    /** 用户下单时看到的订单号 */
+    private String orderidView;
+
+    /** 订单备注 */
+    private String caution;
+
+    /** 外卖订单时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date orderTime;
+
+    /** 门店当天订单流水号 */
+    private String daySeq;
+
+    /** 用户预计送达时间 */
+    private Long deliveryTime;
+
+    /** 是否需要发票:0->不需要,1->需要 */
+
+    private Integer hasInvoiced;
+
+    private Integer orderType;
+
+    /** 订单详情 */
+
+    private String detail;
+
+    /** 由于赠送的菜品在外卖业务中 */
+
+    private String extras;
+
+    /** 发票抬头 */
+
+    private String invoiceTitle;
+
+    /** 发票税号 */
+
+    private String taxpayerId;
+
+    /** 是否第三方配送: 0->否,1->是 */
+
+    private Integer isThirdShipping;
+
+    /** 订餐地址纬度 */
+
+    private BigDecimal latitude;
+
+    /** 订餐地址经度 */
+
+    private BigDecimal longitude;
+
+    /** 用餐人数 */
+    @Excel(name = "用餐人数")
+    private Long dinnersNumber;
+
+    /** 订单原价 */
+    @Excel(name = "订单原价")
+    private BigDecimal originalPrice;
+
+    /** 支付类型:1->货到付款;2->在线支付 */
+    @Excel(name = "支付类型:1->货到付款;2->在线支付")
+    private Integer payType;
+
+    /** 取餐类型:0:普通取餐;1:到店取餐 该信息默认不推送 */
+    @Excel(name = "取餐类型:0:普通取餐;1:到店取餐 该信息默认不推送")
+    private Integer pickType;
+
+    /** 门店地址 */
+    @Excel(name = "门店地址")
+    private String poiAddress;
+
+    /** 门店名称 */
+    @Excel(name = "门店名称")
+    private String poiName;
+
+    /** 商家电话 */
+    @Excel(name = "商家电话")
+    private String poiPhone;
+
+    /** 商家对账详情 */
+    @Excel(name = "商家对账详情")
+    private String poiReceiveDetail;
+
+    /** 收货人地址 */
+    @Excel(name = "收货人地址")
+    private String recipientAddress;
+
+    /** 脱敏收货人地址*/
+    @Excel(name = "脱敏收货人地址")
+    private String recipientAddressDesensitization;
+
+    /** 配送方式*/
+    @Excel(name = "配送方式")
+    private String logisticsCode;
+
+    /** 收货人姓名 */
+    @Excel(name = "收货人姓名")
+    private String recipientName;
+
+    /** 收货人电话 */
+    @Excel(name = "收货人电话")
+    private String recipientPhone;
+
+    @Excel(name = "收货人隐私电话")
+    private String receiptPrivacyPhone;
+
+    /** 维度 */
+    @ApiModelProperty(value = "收件人维度")
+    private String receiptLng;
+
+    /** 经度 */
+    @ApiModelProperty(value = "收件人经度")
+    private String receiptLat;
+
+    /** 配送员电话 */
+    @Excel(name = "配送员电话")
+    private String shipperPhone;
+
+    /** 配送费 */
+    @Excel(name = "配送费")
+    private BigDecimal shippingFee;
+
+    /** 订单状态:1->待接单,2->待配送,3->配送中,4->已完成,-1->已取消 */
+    @Excel(name = "订单状态:1->待接单,2->待配送,3->配送中,4->已完成,-1->已取消")
+    private Integer status;
+
+    /** 订单总价 */
+    @Excel(name = "订单总价")
+    private BigDecimal totalPrice;
+
+    /** 商品份数 */
+    @Excel(name = "商品份数")
+    private Long quantity;
+
+    /** 餐厅平均送餐时间,单位为秒 */
+    @Excel(name = "餐厅平均送餐时间,单位为秒")
+    private Long avgSendTime;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /** 更新时间 */
+    @TableField(update = "now()")
+    private Date updateTime;
+
+    /** 删除标识位: 0正常 1删除 */
+    @TableLogic
+    private Integer deleted;
+    /**超时推送*/
+    private Integer isPush;
+
+    private BigDecimal boxFee;
+    private Date finishTime;
+
+
+    private String thirdShopId;
+
+    private List<WaimaiOrderDetailDto> list;
+
+}

+ 9 - 4
lb-app/src/main/java/com/ydd/app/interceptor/AuthorizationInterceptor.java

@@ -6,7 +6,9 @@ import com.ydd.common.annotation.AccessToken;
 import com.ydd.common.annotation.NoSign;
 import com.ydd.common.config.EnvConfig;
 import com.ydd.common.constant.HttpStatus;
+import com.ydd.common.constant.RedisKeyConstant;
 import com.ydd.common.core.domain.Result;
+import com.ydd.common.core.redis.RedisCache;
 import com.ydd.common.utils.ServletUtils;
 import com.ydd.common.utils.ip.IpUtils;
 import com.ydd.common.utils.sign.SignatureUtil;
@@ -46,6 +48,8 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
 
     private final EnvConfig envConfig;
 
+    private final RedisCache redisCache;
+
     /**
      * 会员ID
      */
@@ -117,7 +121,7 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
         AppInfo appInfo = iAppInfoService.getByAppId(appId);
         if (appInfo == null) {
             log.warn("无效的appId!");
-            ServletUtils.renderString(response, JSON.toJSONString(Result.error(HttpStatus.BAD_REQUEST, "无效的appId!")));
+            ServletUtils.renderString(response, JSON.toJSONString(Result.error(HttpStatus.BAD_REQUEST, "无效的appId, 请更新APP!")));
             return false;
         }
         String sign = StringUtils.isBlank(request.getParameter(SIGN_KEY)) ? request.getHeader(SIGN_KEY) : request.getParameter(SIGN_KEY);
@@ -152,8 +156,8 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
         String accessToken = StringUtils.isBlank(request.getParameter(TOKEN_KEY)) ? request.getHeader(TOKEN_KEY) : request.getParameter(TOKEN_KEY);
         if ("123456".equals(accessToken)) {
             //保存用户信息
-            request.setAttribute(MEMBER_KEY, (long)183);
-            Member member = iMemberService.getById(183);
+            request.setAttribute(MEMBER_KEY, (long)234);
+            Member member = iMemberService.getById(234);
             request.setAttribute("memberUser", member);
             return true;
         }
@@ -167,7 +171,8 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
             return false;
         }
         Member member = iMemberService.getById(memberId);
-        if (member == null || member.getStatus().equals(MerchantStatusEnum.STOP.status)){
+        // 判断用户是否被禁用,若是,直接返回账号已被禁用,前端判断会跳到登录页
+        if (member == null || member.getStatus().equals(MerchantStatusEnum.STOP.status)) {
             ServletUtils.renderString(response, JSON.toJSONString(Result.error(HttpStatus.LOGIN_ERROR, "您的账号已被禁用,请联系管理员")));
             return false;
         }

+ 32 - 0
lb-app/src/main/java/com/ydd/app/listener/DoCreateOrder.java

@@ -12,6 +12,7 @@ import com.ydd.app.service.ApiProductService;
 import com.ydd.common.enums.DeliveryTypeEnums;
 import com.ydd.common.utils.DateUtils;
 import com.ydd.common.utils.StringUtils;
+import com.ydd.ecloud.core.enums.DeletedEnum;
 import com.ydd.module.domain.*;
 import com.ydd.module.dto.CouponDto;
 import com.ydd.module.dto.DeliveryInfo;
@@ -22,8 +23,11 @@ import com.ydd.module.enums.MemberCouponStatusEnum;
 import com.ydd.module.service.*;
 import com.ydd.third.common.config.DeliveryConfig;
 import com.ydd.third.common.vo.ResObject;
+import com.ydd.third.common.vo.dada.domain.order.GoodsInfo;
 import com.ydd.third.common.vo.vo.order.OrderResultVo;
 import com.ydd.third.common.vo.vo.order.OrderVo;
+import com.ydd.third.common.vo.vo.order.ProductVo;
+import com.ydd.third.common.vo.waimai.meituan.OpenApiGood;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
@@ -64,6 +68,8 @@ public class DoCreateOrder {
     private final IShopDeliveryBindService iShopDeliveryBindService;
     private final IDspDeliveryService iDspDeliveryService;
 
+    private final IMemberConfigService iMemberConfigService;
+
     /**
      * 第三方运力下单成功处理
      */
@@ -198,6 +204,32 @@ public class DoCreateOrder {
 
     private OrderResultVo createOrder(OrderReq orderReq, DeliveryInfo delivery) {
         OrderVo orderVo = OrderEntityUtils.createOrderVo(orderReq, delivery, deliveryConfig.isTest());
+        // 获取用户配置
+        Order order = iOrderService.getById(orderReq.getOrderId());
+        MemberConfig memberConfig = iMemberConfigService.getShopMemberConfig(order.getShopId(), null);
+        if (memberConfig != null && memberConfig.getSyncGoodsDetailToDelivery().equals(DeletedEnum.NO.getValue())) {
+            // 是否同步订单商品给骑手
+            List<ProductVo> productList = orderVo.getProductList();
+            if (CollectionUtils.isNotEmpty(productList)) {
+                productList.forEach(productVo -> {
+                   productVo.setProductName("商品");
+                });
+            }
+
+            List<OpenApiGood> mtGoodList = orderVo.getMtGoods();
+            if (CollectionUtils.isNotEmpty(mtGoodList)) {
+                mtGoodList.forEach(mtGood -> {
+                   mtGood.setGoodName("商品");
+                });
+            }
+
+            List<GoodsInfo> dadaGoodList = orderVo.getDadaGoods();
+            if (CollectionUtils.isNotEmpty(dadaGoodList)) {
+                dadaGoodList.forEach(dadaGood -> {
+                   dadaGood.setSku_name("商品");
+                });
+            }
+        }
         ResObject<OrderResultVo> resObject = client.createOrder(orderVo);
         if (resObject.getCode() == 0) {
             return resObject.getData();

+ 20 - 0
lb-app/src/main/java/com/ydd/app/service/ApiAuthService.java

@@ -0,0 +1,20 @@
+package com.ydd.app.service;
+
+import com.ydd.module.dto.WaimaiAuthListDto;
+
+import java.util.List;
+
+/**
+ * Project:lb-server
+ * Class:ApiCallBackService
+ * Description:TODO
+ * Time:2021/3/11 14:08
+ *
+ * @author zoe
+ */
+public interface ApiAuthService {
+
+      List<WaimaiAuthListDto> shopList(String mobile, String code, Integer waimaiId);
+
+      WaimaiAuthListDto shopListNoCode(String thirdShopId, Integer waimaiId);
+}

+ 10 - 0
lb-app/src/main/java/com/ydd/app/service/ApiFeedbackService.java

@@ -2,6 +2,8 @@ package com.ydd.app.service;
 
 import com.ydd.app.dto.FeedbackDto;
 
+import java.util.List;
+
 /**
  * Project:lb-server
  * Class:ApiFeedbackService
@@ -18,4 +20,12 @@ public interface ApiFeedbackService {
      * @param feedbackDto
      */
     void feedback(Long loginId, FeedbackDto feedbackDto);
+
+    /**
+     * 反馈列表
+     * @param loginId 登录用户id
+     * @return 反馈列表
+     */
+    List<FeedbackDto> getFeedbackList(Long loginId);
+
 }

+ 10 - 0
lb-app/src/main/java/com/ydd/app/service/ApiOrderService.java

@@ -203,4 +203,14 @@ public interface ApiOrderService {
      */
     OrderGoodsInfoDto getGoodsInfo(Long orderId, Long memberId);
 
+    /**
+     * 拉取新订单
+     * @param loginId 登录用户id
+     * @param orderIds 已有订单id
+     * @param status 订单状态
+     * @param searchShopIdStr 门店id
+     * @return 新订单
+     */
+    Map<String, Object> pullNewOrder(Long loginId, List<Integer> orderIds, Integer status, String searchShopIdStr);
+
 }

+ 2 - 0
lb-app/src/main/java/com/ydd/app/service/ApiStatisticsService.java

@@ -48,4 +48,6 @@ public interface ApiStatisticsService {
      * @return
      */
     List<StatisticsDeliveryDto> delivery(Long loginId, Long shopId, Integer timeType, String startTime, String endTime);
+
+    List<StatisticsDeliveryDto> deliveryNew(Long loginId, Long shopId, Integer timeType, String startTime, String endTime);
 }

+ 81 - 0
lb-app/src/main/java/com/ydd/app/service/impl/ApiAuthServiceImpl.java

@@ -0,0 +1,81 @@
+package com.ydd.app.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ydd.app.service.ApiAuthService;
+import com.ydd.common.core.redis.RedisCache;
+import com.ydd.common.enums.WaimaiTypeEnums;
+import com.ydd.module.domain.DspWaimai;
+import com.ydd.module.domain.ShopWaimai;
+import com.ydd.module.dto.WaimaiAuthListDto;
+import com.ydd.module.enums.ExceptionEnum;
+import com.ydd.module.expection.CustomAppException;
+import com.ydd.module.service.IDspWaimaiService;
+import com.ydd.module.service.IShopWaimaiService;
+import com.ydd.third.common.config.WaimaiConfig;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+import static com.ydd.module.enums.CacheKeyEnum.SMS_VERIFY_CAPTCHA;
+
+/**
+ * 会员相关
+ *
+ * @author douya
+ * @description
+ * @date 2021/1/20
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+public class ApiAuthServiceImpl implements ApiAuthService {
+
+    private final Logger logger = LoggerFactory.getLogger(ApiAuthServiceImpl.class);
+    private final IShopWaimaiService iShopWaimaiService;
+    private final RedisCache redisCache;
+    private final WaimaiConfig appConfig;
+    private final IDspWaimaiService iDspWaimaiService;
+
+    @Override
+    public List<WaimaiAuthListDto> shopList(String mobile, String code, Integer waimaiId) {
+        String checkCode = redisCache.getCacheObject(SMS_VERIFY_CAPTCHA.key + mobile);
+        if (StringUtils.isBlank(checkCode) || !code.equals(checkCode)) {
+            throw new CustomAppException(ExceptionEnum.INVALID_SMS_CODE);
+        }
+        DspWaimai waimai = iDspWaimaiService.findOne(waimaiId);
+        List<WaimaiAuthListDto> list = iShopWaimaiService.findWMListByMobile(mobile, waimai.getId() + "");
+        if (CollectionUtils.isNotEmpty(list)) {
+            for (WaimaiAuthListDto dto : list) {
+                if (WaimaiTypeEnums.MEI_TUAN.getType() == waimaiId) {
+                    dto.setDeveloperId(appConfig.getMeituanDeveloperId());
+                    dto.setSignKey(appConfig.getMeituanSignKey());
+                } else if (WaimaiTypeEnums.E_LE_ME.getType() == waimaiId) {
+                    dto.setDeveloperId(appConfig.getEleAppKey());
+                    dto.setSignKey(appConfig.getEleAppSecret());
+                }
+            }
+            return list;
+        }
+        return null;
+    }
+
+    @Override
+    public WaimaiAuthListDto shopListNoCode(String thirdShopId, Integer waimaiId) {
+
+        DspWaimai waimai = iDspWaimaiService.findOne(waimaiId);
+        ShopWaimai shopWaimai = iShopWaimaiService.getOne(new QueryWrapper<ShopWaimai>().eq("third_shop_id", thirdShopId).eq("waimai_id", waimai.getId()).eq("bind_status", 1).eq("deleted", 0));
+        WaimaiAuthListDto dto = new WaimaiAuthListDto();
+        if (shopWaimai != null) {
+            dto.setAuthToken(shopWaimai.getAuthToken());
+            dto.setEpoid(shopWaimai.getEpoid());
+        }
+        return dto;
+    }
+}

+ 1 - 1
lb-app/src/main/java/com/ydd/app/service/impl/ApiCallBackMeiTuan.java

@@ -68,7 +68,7 @@ public class ApiCallBackMeiTuan extends ApiCallBack {
             case 20:
                 dto.setOrderStatus(OrderStatusEnum.TO_BE_DELIVERED.status);
                 dto.setOrderMtStatus(15);
-                dto.setOrderEleStatus("DELIVERY_KNIGHT_REACH_SHOP");
+                dto.setOrderEleStatus("DELIVERY_KNIGHT_ACCEPT");
                 dto.setOrderEleRetaiStatus("7");
                 break;
             case 30:

+ 24 - 0
lb-app/src/main/java/com/ydd/app/service/impl/ApiFeedbackServiceImpl.java

@@ -9,10 +9,15 @@ import com.ydd.module.service.IFeedbackService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.compress.utils.Lists;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
  * Project:lb-server
  * Class:ApiFeedbackServiceImpl
@@ -47,4 +52,23 @@ public class ApiFeedbackServiceImpl implements ApiFeedbackService {
             }
         }
     }
+
+    @Override
+    public List<FeedbackDto> getFeedbackList(Long loginId) {
+        List<Feedback> list = iFeedbackService.getFeedbackList(loginId);
+        List<FeedbackDto> result = Lists.newArrayList();
+        list.forEach(item -> {
+            FeedbackDto feedbackDto = new FeedbackDto();
+            BeanUtils.copyProperties(item, feedbackDto);
+            List<FeedbackPicture> feedbackPics = iFeedbackPictureService.getByFeedBackId(item.getId());
+            feedbackDto.setPictures(Lists.newArrayList());
+            if (CollectionUtils.isNotEmpty(feedbackPics)) {
+                List<String> pics = feedbackPics.stream().map(FeedbackPicture::getPicture).collect(Collectors.toList());
+                feedbackDto.setPictures(pics);
+            }
+            result.add(feedbackDto);
+        });
+        return result;
+    }
+
 }

+ 6 - 0
lb-app/src/main/java/com/ydd/app/service/impl/ApiMemberServiceImpl.java

@@ -144,6 +144,12 @@ public class ApiMemberServiceImpl implements ApiMemberService {
             }*/
             smsService.sendForgotPasswordCaptcha(mobile, captcha);
         }
+        if (type.equals(3)) {
+            redisCache.setCacheObject(CacheKeyEnum.SMS_VERIFY_CAPTCHA.key + mobile, captcha, CacheKeyEnum.SMS_VERIFY_CAPTCHA.expireTime, TimeUnit.MINUTES);
+            /*if (SpringContextUtils.checkProfile("prod")) {
+            }*/
+            smsService.sendVerifyCaptcha(mobile, captcha);
+        }
         return captcha;
     }
 

+ 1 - 1
lb-app/src/main/java/com/ydd/app/service/impl/ApiOrderBackServiceImpl.java

@@ -663,7 +663,7 @@ public class ApiOrderBackServiceImpl implements ApiOrderBackService {
                             //扣款
                             iMemberService.updateAmount(member.getId(), realFee.negate());
                             //扣款记录
-                            iMemberBalanceLogService.saveLog(order.getMemberId(), LogTypeEnum.REDUCE.type, "绑定运力支付服务费", LogSourceEnum.CONSUMPTION.status, realFee, member.getMerchantId(), order.getId(), order.getPaymentType());
+                            iMemberBalanceLogService.saveLog(order.getMemberId(), LogTypeEnum.REDUCE.type, "绑定运力支付服务费", LogSourceEnum.CONSUMPTION.status, realFee, member.getMerchantId(),order.getId(), PaymentTypeEnum.BALANCE.type, member.getAmount());
                         }
                     }
                     iOrderDeliveryService.updateById(orderDelivery);

+ 25 - 31
lb-app/src/main/java/com/ydd/app/service/impl/ApiOrderNewServiceImpl.java

@@ -302,6 +302,8 @@ public class ApiOrderNewServiceImpl implements ApiOrderNewService {
         // 非自运力下单、或自运力达达收付配送商下单, 校验猎豹账户余额
         if ((!isMine || isDadaRapDelivery) && order.getPayAmount().compareTo(member.getAmount()) > 0 && PaymentTypeEnum.BALANCE.type.equals(req.getPaymentType())) {
             log.error("余额不足, memberId: {}, orderSn: {}", member.getId(), order.getOrderSn());
+            // 余额不足, 发单失败, 发推送
+            checkAmount(member.getId(), true, order.getOrderSn(), order.getId());
             return "amount_not_enough";
         }
         // 下单运力中含有自运力校验账户余额, 达达配送商模式无需校验
@@ -344,7 +346,7 @@ public class ApiOrderNewServiceImpl implements ApiOrderNewService {
             order.setStatus(PayStatusEnum.PAYED.status);
             order.setDeliveryStatus(DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status);
             // 判断余额是否低于50/100
-            checkAmount(member.getId());
+            checkAmount(member.getId(), false, order.getOrderSn(), order.getId());
         } else if (PaymentTypeEnum.ZHI_FU_BAO.type.equals(req.getPaymentType()) && order.getPayAmount().compareTo(BigDecimal.ZERO) > 0) {
             // PC下单
             if (req.getCreateType() != null && req.getCreateType() == 1) {
@@ -416,7 +418,7 @@ public class ApiOrderNewServiceImpl implements ApiOrderNewService {
                 //扣款
                 iMemberService.updateAmount(member.getId(), payAmount.negate());
                 //扣款记录
-                iMemberBalanceLogService.saveLog(loginId, LogTypeEnum.REDUCE.type, "下单支付", LogSourceEnum.CONSUMPTION.status, order.getPayAmount(), member.getMerchantId(), order.getId(), order.getPaymentType());
+                iMemberBalanceLogService.saveLog(loginId, LogTypeEnum.REDUCE.type, "下单支付", LogSourceEnum.CONSUMPTION.status, order.getPayAmount(), member.getMerchantId(), order.getId(), order.getPaymentType(), member.getAmount());
             }
         }
         if (PaymentTypeEnum.BALANCE.type.equals(req.getPaymentType()) || payAmount.compareTo(BigDecimal.ZERO) == 0) {
@@ -582,6 +584,7 @@ public class ApiOrderNewServiceImpl implements ApiOrderNewService {
         if (member.getMemberType().equals(MemberTypeEnum.SHOP.type)) {
             member = iMemberService.getOne(new QueryWrapper<Member>().eq("member_type", MemberTypeEnum.MERCHANT.type).eq("merchant_id", member.getMerchantId()));
         }
+        BigDecimal beforeAmount = member.getAmount();
         if (PaymentTypeEnum.BALANCE.type.equals(order.getPaymentType())) {
             iMemberService.updateAmount(member.getId(), refundMoney);
         } else if (PaymentTypeEnum.ZHI_FU_BAO.type.equals(order.getPaymentType())) {
@@ -590,11 +593,13 @@ public class ApiOrderNewServiceImpl implements ApiOrderNewService {
             Payment payment = paymentService.getOne(new QueryWrapper<Payment>().eq("child_order_sn", orderNo).eq("payment_type", PaymentTypeEnum.WEI_XIN.type));
             wechatPayService.refund(orderNo, payment.getTotalAmount(), refundMoney, "");
         }
-        iMemberBalanceLogService.saveLog(memberId, LogTypeEnum.INCREASE.type, remark, LogSourceEnum.REFUND.status, refundMoney, merchantId, order.getId(), order.getPaymentType());
+        iMemberBalanceLogService.saveLog(memberId, LogTypeEnum.INCREASE.type, remark, LogSourceEnum.REFUND.status, refundMoney, merchantId, order.getId(), order.getPaymentType(), beforeAmount);
         // 是否需要退服务费-绑定三方运力下单
         if (order.getBindFee().compareTo(BigDecimal.ZERO) == 1) {
             iMemberService.updateAmount(member.getId(), order.getBindFee());
-            iMemberBalanceLogService.saveLog(memberId, LogTypeEnum.INCREASE.type, "订单取消,服务费退款", LogSourceEnum.REFUND.status, order.getBindFee(), merchantId, order.getId(), order.getPaymentType());
+            Member m = iMemberService.getById(member.getId());
+            beforeAmount = m.getAmount();
+            iMemberBalanceLogService.saveLog(memberId, LogTypeEnum.INCREASE.type, "订单取消,服务费退款", LogSourceEnum.REFUND.status, order.getBindFee(), merchantId, order.getId(), PaymentTypeEnum.BALANCE.type, beforeAmount);
         }
     }
 
@@ -614,7 +619,7 @@ public class ApiOrderNewServiceImpl implements ApiOrderNewService {
             }
         }
         if (tips.compareTo(BigDecimal.ZERO) > 0) {
-            iMemberBalanceLogService.saveLog(memberId, LogTypeEnum.INCREASE.type, remark, LogSourceEnum.REFUND.status, tips, merchantId, Long.valueOf(orderTips.get(0).getOrderId()), orderTips.get(0).getPayType());
+            iMemberBalanceLogService.saveLog(memberId, LogTypeEnum.INCREASE.type, remark, LogSourceEnum.REFUND.status, tips, merchantId, Long.valueOf(orderTips.get(0).getOrderId()), orderTips.get(0).getPayType(), member.getAmount());
         }
     }
 
@@ -743,39 +748,28 @@ public class ApiOrderNewServiceImpl implements ApiOrderNewService {
      *
      * @param memberId
      */
-    public void checkAmount(Long memberId) {
+    public void checkAmount(Long memberId, boolean amountNotEnoughFailedCreateOrder, String orderSn, Long orderId) {
         Member member = iMemberService.getById(memberId);
         if (member.getMerchantId() != null) {
             List<Member> members = iMemberService.selectListByMerchantId(member.getMerchantId().intValue());
             List<Long> mIds = new ArrayList<>();
             log.info("推送用户===" + JSONObject.toJSONString(members));
-            if (member.getAmount().compareTo(new BigDecimal(50)) < 0) {
-                // 自动配送关闭,关闭该商家的所有门店
-                for (Member m : members) {
-                    // 判断用户是否开启自配送
-//                    MemberConfigDto memberConfigDto = iMemberConfigService.findDetail(m.getId());
-//                    if (memberConfigDto == null || memberConfigDto.getOpenAutodelivery().equals(0)){
-//                        continue;
-//                    }
-//                    MemberConfig memberConfig = iMemberConfigService.getById(memberConfigDto.getId());
-//                    memberConfig.setOpenAutodelivery(0);
-//                    iMemberConfigService.updateById(memberConfig);
-                    mIds.add(m.getId());
-                }
-                // 发推送
-                if (CollectionUtils.isNotEmpty(mIds)) {
-                    messagePushService.memberAmountMessage(mIds, "您的平台余额低于50元", "您的平台余额已不足50元,可能导致自动发单失败,请及时充值!", 1);
-                }
+            for (Member m : members) {
+                mIds.add(m.getId());
+            }
+            // 余额不足下单失败, 发推送
+            if (amountNotEnoughFailedCreateOrder) {
+                messagePushService.memberAmountMessage(mIds, "您有订单发送失败, 订单号: " + orderSn, "您平台余额不足, 已导致发单失败,请充值后重新发单!", 3, orderId);
                 return;
             }
-            if (member.getAmount().compareTo(new BigDecimal(100)) < 0) {
-                for (Member m : members) {
-                    mIds.add(m.getId());
-                }
-                // 发推送
-                if (CollectionUtils.isNotEmpty(mIds)) {
-                    messagePushService.memberAmountMessage(mIds, "您的平台余额低于100元", "您的平台余额已不足100元,可能导致自动发单失败,请及时充值!", 2);
-                }
+            // 余额不足50,发推送
+            if (member.getAmount().compareTo(new BigDecimal(50)) < 0 && CollectionUtils.isNotEmpty(mIds)) {
+                messagePushService.memberAmountMessage(mIds, "您的平台余额低于50元", "您的平台余额已不足50元,可能导致自动发单失败,请及时充值!", 1, null);
+                return;
+            }
+            // 余额满50但不足100, 发推送
+            if (member.getAmount().compareTo(new BigDecimal(100)) < 0 && CollectionUtils.isNotEmpty(mIds)) {
+                messagePushService.memberAmountMessage(mIds, "您的平台余额低于100元", "您的平台余额已不足100元,可能导致自动发单失败,请及时充值!", 2, null);
             }
         }
     }

+ 245 - 4
lb-app/src/main/java/com/ydd/app/service/impl/ApiOrderServiceImpl.java

@@ -395,6 +395,7 @@ public class ApiOrderServiceImpl implements ApiOrderService {
         orderReq.setOrderSn(SnCodeUtils.createSn());
         orderReq.setAmount(orderReq.getProductAmount());
         OrderVo orderVo = OrderEntityUtils.createOrderVo(orderReq, delivery, deliveryConfig.isTest());
+
         orderVo.setIsMine(delivery.getIsMine());
         if (DeliveryTypeEnums.FENG_NIAO.getType().equals(delivery.getType()) || DeliveryTypeEnums.MEI_TUAN.getType().equals(delivery.getType())) {
             ShopDelivery shopDelivery = iShopDeliveryService.findOne(shopId, delivery.getId());
@@ -551,10 +552,10 @@ public class ApiOrderServiceImpl implements ApiOrderService {
         Object resp = "fail";
         Order order = iOrderService.getById(orderId);
         if (order == null) {
-            throw new CustomWebException("订单不存在!");
+            throw new CustomAppException("订单不存在!", 500);
         }
         if (order.getDadaDspType() != null) {
-            throw new CustomWebException("达达配送商模式订单不支持加小费!");
+            throw new CustomAppException("达达配送商模式订单不支持加小费!", 500);
         }
         List<OrderDelivery> orderDeliverys = iOrderDeliveryService.list(new QueryWrapper<OrderDelivery>().eq("order_sn", order.getOrderSn()));
         if(orderDeliverys!=null&&orderDeliverys.size() ==1 &&"-1".equals(orderDeliverys.get(0).getOutTradeNo())){
@@ -606,7 +607,7 @@ public class ApiOrderServiceImpl implements ApiOrderService {
                 iOrderService.updateById(updateOrder);
                 //扣钱
                 iMemberService.updateAmount(member.getId(), tipAmount.negate());
-                iMemberBalanceLogService.saveLog(loginId, LogTypeEnum.REDUCE.type, "加小费", LogSourceEnum.CONSUMPTION.status, tipAmount, order.getMerchantId(),order.getId(), orderTip.getPayType());
+                iMemberBalanceLogService.saveLog(loginId, LogTypeEnum.REDUCE.type, "加小费", LogSourceEnum.CONSUMPTION.status, tipAmount, order.getMerchantId(),order.getId(), orderTip.getPayType(), member.getAmount());
                 resp = "ok";
                 tipScheduledExecutorService.schedule(new TipsTask(order, null, iOrderService, iDspDeliveryService, client, tipAmount, iOrderDeliveryService, iShopDeliveryService,iShopDeliveryBindService), 1, TimeUnit.SECONDS);
             } else if (PaymentTypeEnum.ZHI_FU_BAO.type.equals(paymentType) && order.getPayAmount().compareTo(BigDecimal.ZERO) > 0) {
@@ -984,6 +985,20 @@ public class ApiOrderServiceImpl implements ApiOrderService {
                     .stream()
                     .collect(Collectors.groupingBy(item -> item.getShopId() + "-" + item.getWaimaiId()));
         }
+        // 待接单状态下获取运力
+        Map<String, List<OrderDelivery>> deliveryMap = new HashMap<>();
+        if ((request.getSearchType() != null && request.getSearchType() == 0 && request.getStatus() == OrderListRequest.OrderListSearchStatusEnum.ORDERS_TO_BE_RECEIVED)
+                || (request.getSearchType() != null && request.getSearchType() == 1)
+                || (request.getSearchType() != null && request.getSearchType() == 2 && request.getSearchStatusItem().isToBeReceivedOrder())) {
+            List<String> orderSns = list.stream().filter(item -> item.getOrderSn() != null && item.getDeliveryStatus() == 1).map(OrderListDto::getOrderSn).collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(orderSns)) {
+                deliveryMap = iOrderDeliveryService.list(new QueryWrapper<OrderDelivery>()
+                        .in("order_sn", orderSns)
+                        .eq("deleted", 0))
+                        .stream()
+                        .collect(Collectors.groupingBy(OrderDelivery::getOrderSn));
+            }
+        }
         for (OrderListDto dto : list) {
             if (dto.getWaimaiOrderId() != null) {
                 DspWaimai waiMai = iDspWaimaiService.getById(dto.getWaimaiId());
@@ -999,6 +1014,12 @@ public class ApiOrderServiceImpl implements ApiOrderService {
                 Shop shop = iShopService.getById(dto.getShopId());
                 dto.setShopName(Objects.isNull(shop) ? "" : shop.getName());
             }
+            // 设置运力logo
+            if (deliveryMap != null && CollectionUtils.isNotEmpty(deliveryMap.get(dto.getOrderSn()))) {
+                List<OrderDelivery> orderDeliveries = deliveryMap.get(dto.getOrderSn());
+                List<String> logos = orderDeliveries.stream().map(OrderDelivery::getDeliveryLogo).collect(Collectors.toList());
+                dto.setDeliveryLogos(logos);
+            }
             // 设置外卖门店名称
             if (shopWaiMaiMap != null && shopWaiMaiMap.size() > 0 && dto.getShopId() != null && dto.getWaimaiId() != null) {
                 List<ShopWaimai> shopWaimais = shopWaiMaiMap.get(dto.getShopId() + "-" + dto.getWaimaiId());
@@ -1291,7 +1312,7 @@ public class ApiOrderServiceImpl implements ApiOrderService {
         String searchStatusStr = request.getSearchStatusStr();
         if (request.getSearchType() != null && request.getSearchType() == 2) {
             // 查询日期默认90天
-            if (request.getStartDate() == null || request.getEndDate() == null) {
+            if (StringUtils.isEmpty(request.getStartDate()) || StringUtils.isEmpty(request.getEndDate())) {
                 String startDateBeginTime = DateUtils.parseToBeginTime(DateUtils.addDaysToTimeStr(new Date(), -90, DateUtils.YYYY_MM_DD));
                 request.setStartDate(startDateBeginTime);
                 String endDateBeginTime = DateUtils.parseToTomorrowBeginTime(DateUtils.dateTime(new Date()));
@@ -2254,4 +2275,224 @@ public class ApiOrderServiceImpl implements ApiOrderService {
         return dto;
     }
 
+    @Override
+    public Map<String, Object> pullNewOrder(Long loginId, List<Integer> orderIds, Integer status, String searchShopIdStr) {
+        List<OrderDetailDto> list = new ArrayList<>();
+        Member member = iMemberService.getById(loginId);
+        if (Objects.isNull(member)) {
+            throw new CustomAppException("用户不存在!");
+        }
+        Long shopId = member.getShopId();
+        Long merchant = null;
+        if (member.getMemberType().equals(MemberTypeEnum.MERCHANT.type)) {
+            merchant = member.getMerchantId();
+        }
+        if(status == null || DeliveryStatusEnum.ORDERS_TO_BE_BILLED.status.equals(status)
+                || DeliveryStatusEnum.APPOINTMENT.status.equals(status)) {
+            String shopNewOrderListKey = "shop" + shopId + "";
+            if (member.getShopId() != null && merchant == null && redisCache.hasKey(shopNewOrderListKey)) {
+                Long size = redisCache.getListSize(shopNewOrderListKey);
+                log.info("外卖新订单数量:" + size);
+                for (int i = 0; i < size.intValue(); i++) {
+                    list.add((OrderDetailDto) redisCache.rPop(shopNewOrderListKey));
+                }
+            }
+            String merchantNewOrderListKey = "merchant" + merchant + "";
+            if (merchant != null && redisCache.hasKey(merchantNewOrderListKey)) {
+                Long size = redisCache.getListSize(merchantNewOrderListKey);
+                log.info("商家外卖新订单数量:" + size);
+                for (int i = 0; i < size.intValue(); i++) {
+                    list.add((OrderDetailDto) redisCache.rPop(merchantNewOrderListKey));
+                }
+            }
+        } else if (DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status.equals(status)){
+            String shopReceivedOrderListKey = "shop_received" + shopId + "";
+            if (shopId != null && merchant == null && redisCache.hasKey(shopReceivedOrderListKey)) {
+                Long size = redisCache.getListSize(shopReceivedOrderListKey);
+                log.info("外卖待接单数量:" + size);
+                for (int i = 0; i < size.intValue(); i++) {
+                    list.add((OrderDetailDto) redisCache.rPop(shopReceivedOrderListKey));
+                }
+            }
+            String merchantReceivedOrderListKey = "merchant_received" + merchant + "";
+            if (merchant != null && redisCache.hasKey(merchantReceivedOrderListKey)) {
+                Long size = redisCache.getListSize(merchantReceivedOrderListKey);
+                log.info("商家待接单数量:" + size);
+                for (int i = 0; i < size.intValue(); i++) {
+                    list.add((OrderDetailDto) redisCache.rPop(merchantReceivedOrderListKey));
+                }
+            }
+        }
+
+        // 过滤已选门店的订单
+        if (StringUtils.isNotEmpty(searchShopIdStr)) {
+            List<Long> searchShopIds = Lists.newArrayList();
+            String[] split = searchShopIdStr.split(",");
+            for (String item : split) {
+                searchShopIds.add(Long.valueOf(item));
+            }
+            if (CollectionUtils.isNotEmpty(searchShopIds) && CollectionUtils.isNotEmpty(list)) {
+                list = list.stream().filter(item -> searchShopIds.contains(item.getShopId())).collect(Collectors.toList());
+            }
+        }
+
+        Map<String, Object> map = new HashMap<>();
+        List<Long> ids = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(orderIds)) {
+            if(DeliveryStatusEnum.APPOINTMENT.status.equals(status)){
+                status = DeliveryStatusEnum.ORDERS_TO_BE_BILLED.status;
+            }
+            List<Order> orderList = iOrderService.list(new QueryWrapper<Order>().in("id", orderIds).ne("delivery_status", status));
+            ids = orderList.stream().map(Order::getId).collect(Collectors.toList());
+            // 待接单状态下缓存过滤
+            list = list.stream().filter(item -> !orderIds.contains(item.getId().intValue())).collect(Collectors.toList());
+        }
+        log.info("原始新订单: {}", JSONObject.toJSONString(list));
+        List<OrderListDto> result = this.buildNewOrderList(list, loginId, status);
+        log.info("处理后新订单: {}", JSONObject.toJSONString(result));
+        map.put("newList", result);
+        map.put("deliveryList", ids);
+        return map;
+    }
+
+    private List<OrderListDto> buildNewOrderList(List<OrderDetailDto> list, Long memberId, Integer status) {
+        List<OrderListDto> result = Lists.newArrayList();
+        if (CollectionUtils.isEmpty(list)) {
+            return result;
+        }
+        // 获取订单日志信息
+        Map<Long, List<OrderLog>> orderLogMap = new HashMap<>();
+        // 获取订单延迟发单信息
+        Map<Long, List<OrderDelay>> orderDelayMap = new HashMap<>();
+        if (CollectionUtils.isNotEmpty(list)){
+            List<Long> orderIds = list.stream().map(OrderDetailDto::getId).collect(Collectors.toList());
+            List<OrderLog> orderLogs = iOrderLogService.getOrderLogByOrderIds(orderIds);
+            orderLogMap = orderLogs.stream().collect(Collectors.groupingBy(OrderLog::getOrderId));
+
+            orderDelayMap = iOrderDelayService.list(new QueryWrapper<OrderDelay>()
+                    .in("order_id", orderIds)
+                    .eq("deleted", 0)).stream().collect(Collectors.groupingBy(OrderDelay::getOrderId));
+        }
+        List<Long> waimaiOrderIds = list.stream().map(OrderDetailDto::getWaimaiOrderId).collect(Collectors.toList());
+        // 外卖订单
+        Map<Long, List<WaimaiOrder>> waiMaiOrderMap = new HashMap<>();
+        // 外卖商品
+        Map<Long, List<WaimaiOrderDetail>> orderDetailMap = new HashMap<>();
+        if (CollectionUtils.isNotEmpty(waimaiOrderIds)) {
+            waiMaiOrderMap = iWaimaiOrderService.list(new QueryWrapper<WaimaiOrder>()
+                    .in("id", waimaiOrderIds))
+                    .stream()
+                    .collect(Collectors.groupingBy(WaimaiOrder::getId));
+
+            orderDetailMap = iWaimaiOrderDetailService.list(new QueryWrapper<WaimaiOrderDetail>()
+                    .in("waimai_order_id", waimaiOrderIds)
+                    .eq("deleted", 0))
+                    .stream()
+                    .collect(Collectors.groupingBy(WaimaiOrderDetail::getWaimaiOrderId));
+        }
+        // 获取外卖门店
+        List<Long> shopIds = list.stream().filter(item -> item.getShopId() != null).map(OrderDetailDto::getShopId).collect(Collectors.toList());
+        Map<String, List<ShopWaimai>> shopWaiMaiMap = new HashMap<>();
+        if (CollectionUtils.isNotEmpty(shopIds)) {
+            shopWaiMaiMap = iShopWaimaiService.list(new QueryWrapper<ShopWaimai>()
+                    .in("shop_id", shopIds)
+                    .eq("bind_status", 1)
+                    .eq("deleted", 0))
+                    .stream()
+                    .collect(Collectors.groupingBy(item -> item.getShopId() + "-" + item.getWaimaiId()));
+        }
+
+        // 待接单状态下获取运力
+        Map<String, List<OrderDelivery>> deliveryMap = new HashMap<>();
+        if (DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status.equals(status)) {
+            List<String> orderSns = list.stream().filter(item -> item.getOrderSn() != null && item.getDeliveryStatus() == 1).map(OrderDetailDto::getOrderSn).collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(orderSns)) {
+                deliveryMap = iOrderDeliveryService.list(new QueryWrapper<OrderDelivery>()
+                        .in("order_sn", orderSns)
+                        .eq("deleted", 0))
+                        .stream()
+                        .collect(Collectors.groupingBy(OrderDelivery::getOrderSn));
+            }
+        }
+        for (OrderDetailDto detailDto : list) {
+            OrderListDto dto = new OrderListDto();
+            BeanUtils.copyProperties(detailDto, dto);
+            // 外卖订单
+            if (waiMaiOrderMap != null && CollectionUtils.isNotEmpty(waiMaiOrderMap.get(dto.getWaimaiOrderId()))){
+                List<WaimaiOrder> waimaiOrderList = waiMaiOrderMap.get(dto.getWaimaiOrderId());
+                WaimaiOrder waimaiOrder = waimaiOrderList.get(0);
+                if (waimaiOrder != null && dto.getWaimaiOrderId() != null) {
+                    dto.setWaimaiOrderId(waimaiOrder.getId());
+                    dto.setWaimaiId(waimaiOrder.getWaimaiId());
+                    dto.setWmstatus(waimaiOrder.getStatus());
+                    dto.setWmDeliveryTime(waimaiOrder.getDeliveryTime());
+                    dto.setOrderType(waimaiOrder.getOrderType());
+                    dto.setProductAmount(waimaiOrder.getTotalPrice());
+                    dto.setOrderTime(waimaiOrder.getOrderTime());
+                    DspWaimai waiMai = iDspWaimaiService.getById(waimaiOrder.getWaimaiId());
+                    dto.setLogo(Objects.isNull(waiMai) ? "" : waiMai.getLogo());
+                } else {
+                    dto.setLogo(AppConstant.LIE_BAO_LOGO);
+                }
+            }
+            if (dto.getShopId() != null && StringUtils.isNull(dto.getShopName())) {
+                Shop shop = iShopService.getById(dto.getShopId());
+                dto.setShopName(Objects.isNull(shop) ? "" : shop.getName());
+            }
+            // 设置运力logo
+            if (deliveryMap != null && CollectionUtils.isNotEmpty(deliveryMap.get(dto.getOrderSn()))) {
+                List<OrderDelivery> orderDeliveries = deliveryMap.get(dto.getOrderSn());
+                List<String> logos = orderDeliveries.stream().map(OrderDelivery::getDeliveryLogo).collect(Collectors.toList());
+                dto.setDeliveryLogos(logos);
+            }
+            // 设置外卖门店名称
+            if (shopWaiMaiMap != null && shopWaiMaiMap.size() > 0 && dto.getShopId() != null && dto.getWaimaiId() != null) {
+                List<ShopWaimai> shopWaimais = shopWaiMaiMap.get(dto.getShopId() + "-" + dto.getWaimaiId());
+                if (CollectionUtils.isNotEmpty(shopWaimais) && shopWaimais.get(0) != null) {
+                    dto.setWaimaiShopName(shopWaimais.get(0).getThirdShopName());
+                }
+            }
+            // 设置外卖订单件数
+            if (orderDetailMap != null && CollectionUtils.isNotEmpty(orderDetailMap.get(dto.getWaimaiOrderId()))){
+                List<WaimaiOrderDetail> orderDetailList = orderDetailMap.get(dto.getWaimaiOrderId());
+                long totalNum = orderDetailList.stream().mapToLong(WaimaiOrderDetail::getQuantity).sum();
+                dto.setSkuNum(orderDetailList.size());
+                dto.setTotalNum(totalNum);
+            }
+            // 计算外卖单用户期望送达时间
+            if (dto.getWmDeliveryTime() != null && dto.getWmDeliveryTime() != 0) {
+                dto.setExceptTime(new Date(dto.getWmDeliveryTime() * 1000L));
+            }
+            // 设置相关操作时间
+            if (orderLogMap.size() > 0) {
+                this.setOrderTime(dto, orderLogMap);
+            }
+            // 设置发件详细地址(发单计价用)
+            if (dto.getSendStreet() == null && dto.getSendAddressId() != null && DeliveryStatusEnum.ORDERS_TO_BE_BILLED.getStatus().equals(dto.getDeliveryStatus())) {
+                MemberAddress memberAddress = iMemberAddressService.findById(memberId, dto.getSendAddressId());
+                dto.setSendStreet(memberAddress != null ? memberAddress.getStreet() : "");
+            }
+            // 设置收件详细地址(发单计价用)
+            if (dto.getReceiptStreet() == null && dto.getReceiptAddressId() != null && DeliveryStatusEnum.ORDERS_TO_BE_BILLED.getStatus().equals(dto.getDeliveryStatus())) {
+                MemberAddress memberAddress = iMemberAddressService.findById(memberId, dto.getReceiptAddressId());
+                dto.setReceiptStreet(memberAddress != null ? memberAddress.getStreet() : "");
+            }
+            OrderDelay orderDelay = null;
+            if (orderDelayMap != null && CollectionUtils.isNotEmpty(orderDelayMap.get(dto.getId()))) {
+                List<OrderDelay> orderDelays = orderDelayMap.get(dto.getId());
+                if (CollectionUtils.isNotEmpty(orderDelays) && orderDelays.get(0) != null) {
+                    orderDelay = orderDelays.get(0);
+                }
+            }
+            // 外卖预约单
+            if (dto.getTakeType() > 0 && dto.getWaimaiOrderId() != null) {
+                this.setDelayTime(orderDelay, dto, null);
+            }
+            // 设置按钮状态
+            dto.setButtonStatus(this.getButtonStatus(dto));
+            result.add(dto);
+        }
+        return result;
+    }
+
 }

+ 31 - 2
lb-app/src/main/java/com/ydd/app/service/impl/ApiOrderValuationServiceImpl.java

@@ -16,6 +16,7 @@ import com.ydd.common.enums.DeliveryTypeEnums;
 import com.ydd.common.utils.DateUtils;
 import com.ydd.common.utils.SnCodeUtils;
 import com.ydd.common.utils.StringUtils;
+import com.ydd.ecloud.core.enums.DeletedEnum;
 import com.ydd.ecloud.core.utils.BigDecimalUtils;
 import com.ydd.ecloud.core.utils.JsonMapper;
 import com.ydd.module.domain.*;
@@ -29,10 +30,13 @@ import com.ydd.system.service.ISysConfigService;
 import com.ydd.third.common.config.DeliveryConfig;
 import com.ydd.third.common.utils.CoordinateUtils;
 import com.ydd.third.common.vo.ResObject;
+import com.ydd.third.common.vo.dada.domain.order.GoodsInfo;
 import com.ydd.third.common.vo.shop.AmountResultVo;
 import com.ydd.third.common.vo.shop.QueryAmount;
 import com.ydd.third.common.vo.vo.order.OrderResultVo;
 import com.ydd.third.common.vo.vo.order.OrderVo;
+import com.ydd.third.common.vo.vo.order.ProductVo;
+import com.ydd.third.common.vo.waimai.meituan.OpenApiGood;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
@@ -212,8 +216,8 @@ public class ApiOrderValuationServiceImpl implements ApiOrderValuationService {
                 // 饿百零售
                 orderReq.setOrderSource("103");
             }else if (platformType == 6) {
-            // 京东到家
-            orderReq.setOrderSource("104");
+                // 京东到家
+                orderReq.setOrderSource("104");
             }
         }
     }
@@ -547,6 +551,31 @@ public class ApiOrderValuationServiceImpl implements ApiOrderValuationService {
         orderReq.setOrderSn(SnCodeUtils.createSn());
         orderReq.setAmount(orderReq.getProductAmount());
         OrderVo orderVo = OrderEntityUtils.createOrderVo(orderReq, delivery, deliveryConfig.isTest());
+        // 获取用户配置
+        MemberConfig memberConfig = iMemberConfigService.getShopMemberConfig(shopId, null);
+        if (memberConfig != null && memberConfig.getSyncGoodsDetailToDelivery().equals(DeletedEnum.NO.getValue())) {
+            // 是否同步订单商品给骑手
+            List<ProductVo> productList = orderVo.getProductList();
+            if (CollectionUtils.isNotEmpty(productList)) {
+                productList.forEach(productVo -> {
+                   productVo.setProductName("商品");
+                });
+            }
+
+            List<OpenApiGood> mtGoodList = orderVo.getMtGoods();
+            if (CollectionUtils.isNotEmpty(mtGoodList)) {
+                mtGoodList.forEach(mtGood -> {
+                   mtGood.setGoodName("商品");
+                });
+            }
+
+            List<GoodsInfo> dadaGoodList = orderVo.getDadaGoods();
+            if (CollectionUtils.isNotEmpty(dadaGoodList)) {
+                dadaGoodList.forEach(dadaGood -> {
+                   dadaGood.setSku_name("商品");
+                });
+            }
+        }
         orderVo.setIsMine(delivery.getIsMine());
         if (DeliveryTypeEnums.FENG_NIAO.getType().equals(delivery.getType()) || DeliveryTypeEnums.MEI_TUAN.getType().equals(delivery.getType())
                 || DeliveryTypeEnums.FENG_NIAO_PT.getType().equals(delivery.getType())) {

+ 14 - 5
lb-app/src/main/java/com/ydd/app/service/impl/ApiPayServiceImpl.java

@@ -113,7 +113,7 @@ public class ApiPayServiceImpl implements ApiPayService {
             //TODO
 
             //余额变动记录
-            iMemberBalanceLogService.saveLog(loginId, LogTypeEnum.REDUCE.type, "余额支付", LogSourceEnum.CONSUMPTION.status, order.getPayAmount(), order.getMerchantId(),order.getId(), order.getPaymentType());
+            iMemberBalanceLogService.saveLog(loginId, LogTypeEnum.REDUCE.type, "余额支付", LogSourceEnum.CONSUMPTION.status, order.getPayAmount(), order.getMerchantId(),order.getId(), order.getPaymentType(), member.getAmount());
         }
         iOrderService.updateById(order);
     }
@@ -153,7 +153,7 @@ public class ApiPayServiceImpl implements ApiPayService {
             return resp;
         } catch (WxPayException e) {
            // e.printStackTrace();
-            throw new CustomException("支付失败, 请重试");
+            throw new CustomAppException("支付失败, 请重试");
         }
     }
 
@@ -225,7 +225,11 @@ public class ApiPayServiceImpl implements ApiPayService {
                     couponDto.setStatus(MemberCouponStatusEnum.USED.getStatus());
                     apiCouponService.updateCoupon(couponDto);
                 }
-                iMemberBalanceLogService.saveLog(order.getMemberId(), LogTypeEnum.REDUCE.type, "下单支付", LogSourceEnum.CONSUMPTION.status, order.getPayAmount(), order.getMerchantId(),order.getId(), order.getPaymentType());
+                Member member = iMemberService.getById(order.getMemberId());
+                if (member.getMemberType().equals(MemberTypeEnum.SHOP.type)) {
+                    member = iMemberService.getOne(new QueryWrapper<Member>().eq("member_type", MemberTypeEnum.MERCHANT.type).eq("merchant_id", member.getMerchantId()));
+                }
+                iMemberBalanceLogService.saveLog(order.getMemberId(), LogTypeEnum.REDUCE.type, "下单支付", LogSourceEnum.CONSUMPTION.status, order.getPayAmount(), order.getMerchantId(),order.getId(), order.getPaymentType(), member.getAmount());
 
                 List<ValuationRes> resList = JSONArray.parseArray(payment.getValuation(), ValuationRes.class);
                 if (CollectionUtils.isNotEmpty(resList)) {
@@ -272,7 +276,12 @@ public class ApiPayServiceImpl implements ApiPayService {
             payment.setTransactionSn(tradeSn);
             payment.setPayTime(new Date());
             paymentService.updatePayment(payment);
-            iMemberBalanceLogService.saveLog(order.getMemberId(), LogTypeEnum.REDUCE.type, "加小费", LogSourceEnum.CONSUMPTION.status, orderTip.getAmount(), order.getMerchantId(),order.getId(), orderTip.getPayType());
+
+            Member member = iMemberService.getById(order.getMemberId());
+            if (member.getMemberType().equals(MemberTypeEnum.SHOP.type)) {
+                member = iMemberService.getOne(new QueryWrapper<Member>().eq("member_type", MemberTypeEnum.MERCHANT.type).eq("merchant_id", member.getMerchantId()));
+            }
+            iMemberBalanceLogService.saveLog(order.getMemberId(), LogTypeEnum.REDUCE.type, "加小费", LogSourceEnum.CONSUMPTION.status, orderTip.getAmount(), order.getMerchantId(),order.getId(), orderTip.getPayType(), member.getAmount());
 
             tipScheduledExecutorService.schedule(new TipsTask(order, null, iOrderService, iDspDeliveryService, client, orderTip.getAmount(), iOrderDeliveryService, iShopDeliveryService,iShopDeliveryBindService), 1, TimeUnit.SECONDS);
 
@@ -351,7 +360,7 @@ public class ApiPayServiceImpl implements ApiPayService {
             return wechatPayService.wechatTradeQuery(orderSn);
         } else {
             log.warn("无效的付款类型! orderSn: {}, payType: {}", orderSn, payType);
-            throw new CustomException("payType参数错误!");
+            throw new CustomAppException("payType参数错误!");
         }
     }
 

+ 21 - 3
lb-app/src/main/java/com/ydd/app/service/impl/ApiRechargeServiceImpl.java

@@ -5,6 +5,7 @@ import com.ydd.app.dto.RechargeOptionDto;
 import com.ydd.app.service.ApiRechargeService;
 import com.ydd.module.domain.Coupon;
 import com.ydd.module.domain.RechargeOption;
+import com.ydd.module.enums.CouponTypeEnum;
 import com.ydd.module.enums.StatusEnum;
 import com.ydd.module.service.ICouponService;
 import com.ydd.module.service.IRechargeOptionService;
@@ -16,6 +17,7 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -49,22 +51,38 @@ public class ApiRechargeServiceImpl implements ApiRechargeService {
             RechargeOptionDto dto = new RechargeOptionDto();
             BeanUtils.copyProperties(option,dto);
 
-            if (StringUtils.isNoneBlank(option.getCouponIds())){
+            if (StringUtils.isNoneBlank(option.getCouponIds())) {
                 String[] ids = option.getCouponIds().split(",");
                 List<Coupon> list = new ArrayList<>();
-                for (int i=0;i<ids.length;i++){
+                BigDecimal totalGiveCouponAmount = BigDecimal.ZERO;
+                for (int i=0;i<ids.length;i++) {
                     Coupon coupon = iCouponService.getById(ids[i]);
-                    if (checkCoupon(coupon)){
+                    if (checkCoupon(coupon)) {
+                        BigDecimal giveCouponAmount = this.computeGiveAmount(coupon);
+                        totalGiveCouponAmount = totalGiveCouponAmount.add(giveCouponAmount);
                         list.add(coupon);
                     }
                 }
                 dto.setCouponList(list);
+                dto.setGiveCouponAmount(totalGiveCouponAmount);
             }
             optionDtoList.add(dto);
         }
         return optionDtoList;
     }
 
+    private BigDecimal computeGiveAmount(Coupon coupon) {
+        BigDecimal giveCouponAmount = BigDecimal.ZERO;
+        if (CouponTypeEnum.MAN_JIAN.type.equals(coupon.getCouponType()) && coupon.getMoney() != null && coupon.getMemberReciveNum() != null) {
+            giveCouponAmount = giveCouponAmount.add(coupon.getMoney().multiply(BigDecimal.valueOf(coupon.getMemberReciveNum())));
+        } else if (CouponTypeEnum.ZHE_KOU.type.equals(coupon.getCouponType()) && coupon.getMaxDiscount() != null && coupon.getMemberReciveNum() != null) {
+            giveCouponAmount = giveCouponAmount.add(coupon.getMaxDiscount().multiply(BigDecimal.valueOf(coupon.getMemberReciveNum())));
+        } else if (CouponTypeEnum.LI_JIAN.type.equals(coupon.getCouponType()) && coupon.getMoney() != null && coupon.getMemberReciveNum() != null) {
+            giveCouponAmount = giveCouponAmount.add(coupon.getMoney().multiply(BigDecimal.valueOf(coupon.getMemberReciveNum())));
+        }
+        return giveCouponAmount;
+    }
+
     public boolean checkCoupon(Coupon coupon){
         boolean flg = true;
         if (coupon.getValidEndTime()!= null && coupon.getValidEndTime().getTime()<System.currentTimeMillis()){

+ 19 - 4
lb-app/src/main/java/com/ydd/app/service/impl/ApiShopDeviceServiceImpl.java

@@ -13,6 +13,7 @@ import com.ydd.module.dto.DeviceStatusDto;
 import com.ydd.module.dto.ShopDeviceDto;
 import com.ydd.module.enums.DeviceStatusEnum;
 import com.ydd.module.enums.IsDeleteEnum;
+import com.ydd.module.enums.MemberTypeEnum;
 import com.ydd.module.enums.StatusEnum;
 import com.ydd.module.expection.CustomAppException;
 import com.ydd.module.service.IDeviceService;
@@ -134,10 +135,24 @@ public class ApiShopDeviceServiceImpl implements ApiShopDeviceService {
 
     @Override
     public DeviceStatusDto status(Long loginId, Long shopId) {
-        DeviceStatusDto dto = new DeviceStatusDto();
-        dto.setOfflineNum(iShopDeviceService.count(new QueryWrapper<ShopDevice>().eq("shop_id", shopId).eq("online_status", DeviceStatusEnum.OFFLINE.status).eq("deleted",0).ne("device_id", 0)));
-        dto.setOnlineNum(iShopDeviceService.count(new QueryWrapper<ShopDevice>().eq("shop_id", shopId).eq("online_status", DeviceStatusEnum.ONLINE.status).eq("deleted",0).ne("device_id", 0)));
-        dto.setAbnormalNum(iShopDeviceService.count(new QueryWrapper<ShopDevice>().eq("shop_id", shopId).eq("online_status", DeviceStatusEnum.ABNORMAL.status).eq("deleted",0).ne("device_id", 0)));
+        Member member = iMemberService.getById(loginId);
+        if (member == null) {
+            throw new CustomAppException("用户不可为空!");
+        }
+        DeviceStatusDto dto = new DeviceStatusDto(0, 0, 0);
+        if (MemberTypeEnum.PERSON.type.equals(member.getMemberType())) {
+            return dto;
+        }
+        List<ShopDevice> list = iShopDeviceService.getShopDeviceByShopOrMerchantId(shopId, member.getMerchantId());
+        if (CollectionUtils.isEmpty(list)) {
+            return dto;
+        }
+        long offlineCount = list.stream().filter(item -> DeviceStatusEnum.OFFLINE.status.equals(item.getOnlineStatus())).count();
+        long onlineCount = list.stream().filter(item -> DeviceStatusEnum.ONLINE.status.equals(item.getOnlineStatus())).count();
+        long abnormalCount = list.stream().filter(item -> DeviceStatusEnum.ABNORMAL.status.equals(item.getOnlineStatus())).count();
+        dto.setOfflineNum((int) offlineCount);
+        dto.setOnlineNum((int) onlineCount);
+        dto.setAbnormalNum((int) abnormalCount);
         return dto;
     }
 

+ 24 - 9
lb-app/src/main/java/com/ydd/app/service/impl/ApiShopServiceImpl.java

@@ -113,6 +113,10 @@ public class ApiShopServiceImpl implements ApiShopService {
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Shop saveShop(Long loginId, ShopReq shopReq, boolean isMerchant) {
+        int count = iShopService.count(new QueryWrapper<Shop>().eq("name", shopReq.getName()));
+        if (count > 0) {
+            throw new CustomAppException("店铺名称已存在!");
+        }
         Member member = iMemberService.getById(loginId);
         if (member.getMerchantId() == null) {
             throw new CustomAppException("请先申请成为商家!");
@@ -346,6 +350,10 @@ public class ApiShopServiceImpl implements ApiShopService {
         if (shop == null) {
             throw new CustomAppException("门店不存在!");
         }
+        int count = iShopService.count(new QueryWrapper<Shop>().eq("name", shopReq.getName()).ne("id", shopReq.getId()));
+        if (count > 0) {
+            throw new CustomAppException("店铺名称已存在!");
+        }
         shop.setProvinceName(shopReq.getProvinceName());
         shop.setCityName(shopReq.getCityName());
         shop.setDistrictName(shopReq.getDistrictName());
@@ -697,23 +705,30 @@ public class ApiShopServiceImpl implements ApiShopService {
 
     @Override
     public ShopDto findThirdDetail(Long loginId, Long shopId, Long deliveryId) {
-        ShopDto dto = new ShopDto();
-//        if (dto == null) {
-        dto = iShopService.findDetail(shopId);
+        ShopDto dto = iShopService.findDetail(shopId);
+        if (dto == null) {
+            throw new CustomAppException("门店不存在!");
+        }
         // 查询经营类目
-        Merchant merchant = iMerchantService.getById(dto.getMerchantId());
-        if (merchant != null) {
-            MerchantCategory category = iMerchantCategoryService.getById(merchant.getCategoryId());
+//        Merchant merchant = iMerchantService.getById(dto.getMerchantId());
+//        if (merchant != null) {
+//            MerchantCategory category = iMerchantCategoryService.getById(merchant.getCategoryId());
+//            dto.setFnProductType(category.getFnProductType());
+//        }
+        MerchantCategory category = iMerchantCategoryService.getById(dto.getCategoryId());
+        if (category != null) {
             dto.setFnProductType(category.getFnProductType());
+            dto.setCategoryName(category.getName());
         }
-//        }
         // 不需要传入图片
         Integer isNew = 0;
         DspDelivery dspDelivery = iDspDeliveryService.getById(deliveryId);
         if (dspDelivery != null) {
             SysConfig pic = iSysConfigService.selectSysConfigByKey("FENGNIAO_PIC");
-            if (pic != null && (DeliveryTypeEnums.FENG_NIAO.getType().equals(dspDelivery.getType()) || DeliveryTypeEnums.FENG_NIAO_PT.getType().equals(dspDelivery.getType()))) {
-                if (pic.getConfigValue().equals("yes")) {
+            if (pic != null && (DeliveryTypeEnums.FENG_NIAO.getType().equals(dspDelivery.getType())
+                    || DeliveryTypeEnums.FENG_NIAO_PT.getType().equals(dspDelivery.getType()))
+                    || DeliveryTypeEnums.MEI_TUAN.getType().equals(dspDelivery.getType())) {
+                if ("yes".equals(pic.getConfigValue())) {
                     isNew = 1;
                 }
             }

+ 43 - 7
lb-app/src/main/java/com/ydd/app/service/impl/ApiShopUserServiceImpl.java

@@ -1,29 +1,37 @@
 package com.ydd.app.service.impl;
 
 import cn.hutool.core.lang.UUID;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ydd.app.dto.MemberDetailReq;
 import com.ydd.app.service.ApiShopUserService;
 import com.ydd.app.service.ApiWaimaiPlatformService;
-import com.ydd.app.service.ApiWaimaiService;
-import com.ydd.common.constant.Constants;
+import com.ydd.common.core.redis.RedisCache;
 import com.ydd.common.utils.sign.Md5Utils;
+import com.ydd.ecloud.core.enums.MemberStatusEnum;
+import com.ydd.framework.web.service.TokenService;
 import com.ydd.module.domain.Member;
+import com.ydd.module.domain.MemberConfig;
 import com.ydd.module.domain.ShopUser;
-import com.ydd.module.dto.DeliveryConfigDto;
 import com.ydd.module.dto.ShopUserDto;
 import com.ydd.module.enums.ExceptionEnum;
 import com.ydd.module.enums.MemberTypeEnum;
 import com.ydd.module.expection.CustomAppException;
+import com.ydd.module.service.IMemberConfigService;
 import com.ydd.module.service.IMemberService;
 import com.ydd.module.service.IOrderPushMessageService;
 import com.ydd.module.service.IShopUserService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
 
 /**
  * Project:lb-server
@@ -43,6 +51,10 @@ public class ApiShopUserServiceImpl implements ApiShopUserService {
     private final IMemberService iMemberService;
     private final IOrderPushMessageService iOrderPushMessageService;
     private final ApiWaimaiPlatformService apiWaimaiPlatformService;
+    private final IMemberConfigService iMemberConfigService;
+    private final RedisCache redisCache;
+    private final TokenService tokenService;
+
     @Override
     public List<ShopUserDto> findList(Long loginId) {
         Member member = iMemberService.getById(loginId);
@@ -86,9 +98,23 @@ public class ApiShopUserServiceImpl implements ApiShopUserService {
         shopUser.setName(userDto.getName());
         shopUser.setMerchantId(member.getMerchantId());
         iShopUserService.save(shopUser);
-        if(m.getId()!=null){
+        if(m.getId()!=null) {
             iOrderPushMessageService.queryPushMessageStatus(m.getId());
-            apiWaimaiPlatformService.saveConfig(m.getId(),new DeliveryConfigDto());
+            MemberConfig target = new MemberConfig();
+            List<Member> list = iMemberService.list(new QueryWrapper<Member>().eq("shop_id",userDto.getShopId()).eq("status", MemberStatusEnum.ENABLE.value).eq("deleted",0));
+            List<Long> memberIds =  list.stream().map(Member::getId).collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(memberIds)) {
+                Optional<MemberConfig> optional = iMemberConfigService.list(new QueryWrapper<MemberConfig>().in("member_id", memberIds)).stream().findAny();
+                if (optional.isPresent()) {
+                    MemberConfig memberConfig = optional.get();
+                    MemberDetailReq memberDetailReq = new MemberDetailReq();
+                    BeanUtils.copyProperties(memberConfig, memberDetailReq);
+                    BeanUtils.copyProperties(memberDetailReq, target);
+                }
+            }
+            target.setMemberId(m.getId());
+            iMemberConfigService.saveConfig(m.getId(), target);
+//            apiWaimaiPlatformService.saveConfig(m.getId(), new DeliveryConfigDto());
         }
     }
 
@@ -107,15 +133,25 @@ public class ApiShopUserServiceImpl implements ApiShopUserService {
         shopUser.setShopId(userDto.getShopId());
         shopUser.setName(userDto.getName());
         iShopUserService.updateById(shopUser);
-        //修改用户
+        // 修改用户
         Member m = iMemberService.getById(shopUser.getMemberId());
+        if (userDto.getMobile() != null && !userDto.getMobile().equals(m.getMobile())) {
+            int count = iMemberService.count(new QueryWrapper<Member>()
+                    .eq("mobile", userDto.getMobile()));
+            if (count > 0) {
+                throw new CustomAppException(ExceptionEnum.MOBILE_EXISTS);
+            }
+            // 清除token, 防止修改前手机号登录状态可以继续操作
+            tokenService.removeMemberToken(Md5Utils.hash(m.getId().toString()));
+        }
         m.setStatus(userDto.getStatus());
+        m.setMobile(userDto.getMobile());
+        m.setNickname(userDto.getMobile());
         if (StringUtils.isNotBlank(userDto.getPassword())){
             m.setPassword(Md5Utils.hash(userDto.getPassword()));
         }
         m.setShopId(userDto.getShopId());
         iMemberService.updateById(m);
-
     }
 
     @Override

+ 55 - 16
lb-app/src/main/java/com/ydd/app/service/impl/ApiStatisticsServiceImpl.java

@@ -90,7 +90,7 @@ public class ApiStatisticsServiceImpl implements ApiStatisticsService {
         waimai.setIncome(waimaiOrderIncome);
 
         // 退款外卖订单
-        List<WaimaiOrder> refundOrderList = waimaiOrderList.stream().filter(waimaiOrder -> DeliveryStatusEnum.CANCEL.status.equals(waimaiOrder.getStatus()) ).collect(Collectors.toList());
+        List<WaimaiOrder> refundOrderList = waimaiOrderList.stream().filter(waimaiOrder -> DeliveryStatusEnum.CANCEL.status.equals(waimaiOrder.getStatus())).collect(Collectors.toList());
         Long waimaiRefundOrderNum = refundOrderList.stream().count();
         // 外卖统计(外卖退单)
         if (waimaiRefundOrderNum == null) {
@@ -106,20 +106,20 @@ public class ApiStatisticsServiceImpl implements ApiStatisticsService {
         dto.setWaimai(waimai);
 
         List<Order> orderList = iOrderService.sumOrder(loginId, null, null, shopIds, timeType, startTime, endTime);
-      //  OrderSumDto orderSumDto1 = iOrderService.sumOrder1(loginId, -1, null, shopId, timeType, startTime, endTime);
+        //  OrderSumDto orderSumDto1 = iOrderService.sumOrder1(loginId, -1, null, shopId, timeType, startTime, endTime);
         StatisticsDto.Delivery delivery = new StatisticsDto.Delivery();
         BigDecimal total = BigDecimal.ZERO;
         total = orderList.stream().map(Order::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
         BigDecimal refund = BigDecimal.ZERO;
-        int refundNum=0;
-        if(!CollectionUtils.isEmpty(orderList)){
+        int refundNum = 0;
+        if (!CollectionUtils.isEmpty(orderList)) {
             List<Order> refundList = orderList.stream().filter(item -> DeliveryStatusEnum.CANCEL.status.equals(item.getDeliveryStatus())).collect(Collectors.toList());
-            if(!CollectionUtils.isEmpty(refundList)){
+            if (!CollectionUtils.isEmpty(refundList)) {
                 refundNum = refundList.size();
-                refund =refundList.stream().map(Order::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+                refund = refundList.stream().map(Order::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
             }
         }
-        delivery.setRefund(new BigDecimal(refundNum+""));
+        delivery.setRefund(new BigDecimal(refundNum + ""));
         delivery.setDeliveryNum(orderList.size());
         delivery.setExpenses(total);
         delivery.setPayMoney(total.subtract(refund));
@@ -200,10 +200,10 @@ public class ApiStatisticsServiceImpl implements ApiStatisticsService {
                 BigDecimal total = BigDecimal.ZERO;
                 total = waimaiOrderList.stream().map(WaimaiOrder::getTotalPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
                 BigDecimal refund = BigDecimal.ZERO;
-                if(!CollectionUtils.isEmpty(waimaiOrderList)){
+                if (!CollectionUtils.isEmpty(waimaiOrderList)) {
                     List<WaimaiOrder> refundList = waimaiOrderList.stream().filter(item -> DeliveryStatusEnum.CANCEL.status.equals(item.getStatus())).collect(Collectors.toList());
-                    if(!CollectionUtils.isEmpty(refundList)){
-                        refund =refundList.stream().map(WaimaiOrder::getTotalPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    if (!CollectionUtils.isEmpty(refundList)) {
+                        refund = refundList.stream().map(WaimaiOrder::getTotalPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
                     }
                 }
 
@@ -271,26 +271,65 @@ public class ApiStatisticsServiceImpl implements ApiStatisticsService {
                 if (dspDelivery.getLogo() != null) {
                     dto.setLogo(dspDelivery.getLogo());
                 }
-               // OrderSumDto orderSumDto = iOrderService.sumOrder(loginId, 4, dspDelivery.getId().intValue(), shopId, timeType, startTime, endTime);
-                List<Order>  newOrderList = orderList.stream().filter(item -> dspDelivery.getId().equals(item.getDeliveryId())).collect(Collectors.toList());
+                // OrderSumDto orderSumDto = iOrderService.sumOrder(loginId, 4, dspDelivery.getId().intValue(), shopId, timeType, startTime, endTime);
+                List<Order> newOrderList = orderList.stream().filter(item -> dspDelivery.getId().equals(item.getDeliveryId())).collect(Collectors.toList());
 
                 //  OrderSumDto orderSumDto1 = iOrderService.sumOrder1(loginId, -1, null, shopId, timeType, startTime, endTime);
                 BigDecimal total = BigDecimal.ZERO;
                 total = newOrderList.stream().map(Order::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
                 BigDecimal refund = BigDecimal.ZERO;
                 int refundSize = 0;
-                if(!CollectionUtils.isEmpty(newOrderList)){
+                if (!CollectionUtils.isEmpty(newOrderList)) {
                     List<Order> refundList = newOrderList.stream().filter(item -> DeliveryStatusEnum.CANCEL.status.equals(item.getDeliveryStatus())).collect(Collectors.toList());
-                    if(!CollectionUtils.isEmpty(refundList)){
+                    if (!CollectionUtils.isEmpty(refundList)) {
                         refundSize = refundList.size();
-                        refund =refundList.stream().map(Order::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+                        refund = refundList.stream().map(Order::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
                     }
                 }
-                dto.setOrderNum(newOrderList.size()-refundSize);
+                dto.setOrderNum(newOrderList.size() - refundSize);
                 dto.setConsumption(total.subtract(refund));
                 list.add(dto);
             }
         }
         return list;
     }
+
+    @Override
+    public List<StatisticsDeliveryDto> deliveryNew(Long loginId, Long shopId, Integer timeType, String startTime, String endTime) {
+        List<StatisticsDeliveryDto> list = new ArrayList<>();
+
+        Member member = iMemberService.getById(loginId);
+        if (member.getMemberType().equals(MemberTypeEnum.SHOP.type) && member.getShopId() != null) {
+            shopId = member.getShopId();
+        }
+        List<Integer> shopIds = new ArrayList<>();
+        if (shopId == null || shopId.intValue() == 0) {
+            if (member.getMerchantId() != null) {
+                shopIds = iShopService.findByMerchantId(member.getMerchantId().intValue());
+            }
+        } else {
+            shopIds.add(shopId.intValue());
+        }
+        List<Order> orderList = iOrderService.sumOrder(loginId, DeliveryStatusEnum.FINISH.status, null, shopIds, timeType, startTime, endTime);
+        StatisticsDeliveryDto dto = new StatisticsDeliveryDto();
+
+        BigDecimal total = BigDecimal.ZERO;
+        total = orderList.stream().map(Order::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal refund = BigDecimal.ZERO;
+        int refundSize = 0;
+        if (!CollectionUtils.isEmpty(orderList)) {
+            List<Order> refundList = orderList.stream().filter(item ->( DeliveryStatusEnum.CANCEL.status.equals(item.getDeliveryStatus()) ||  DeliveryStatusEnum.ABNORMAL.status.equals(item.getDeliveryStatus()))).collect(Collectors.toList());
+            if (!CollectionUtils.isEmpty(refundList)) {
+                refundSize = refundList.size();
+                refund = refundList.stream().map(Order::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+            }
+        }
+        dto.setOrderNum(orderList.size());
+        dto.setSuccessNum(orderList.size() - refundSize);
+        dto.setConsumption(total);
+        dto.setRealPay(total.subtract(refund));
+        list.add(dto);
+
+        return list;
+    }
 }

+ 35 - 6
lb-app/src/main/java/com/ydd/app/service/impl/ApiWaimaiPrintServiceImpl.java

@@ -10,11 +10,9 @@ import com.ydd.common.enums.WaimaiTypeEnums;
 import com.ydd.common.exception.CustomException;
 import com.ydd.common.utils.DateUtils;
 import com.ydd.common.utils.StringUtils;
-import com.ydd.module.domain.DspWaimai;
-import com.ydd.module.domain.ShopDevice;
-import com.ydd.module.domain.WaimaiOrder;
-import com.ydd.module.domain.WaimaiOrderDetail;
+import com.ydd.module.domain.*;
 import com.ydd.module.enums.OrderStatusEnum;
+import com.ydd.module.expection.CustomAppException;
 import com.ydd.module.service.*;
 import com.ydd.third.common.vo.waimai.eleme.api.entity.order.OActivity;
 import com.ydd.third.common.vo.waimai.meituan.MeituanOrderExtraVo;
@@ -63,6 +61,8 @@ public class ApiWaimaiPrintServiceImpl implements ApiWaimaiPrintService {
 
     private final PrintApi unifiedPrintService;
 
+    private final IMemberConfigService iMemberConfigService;
+
 
 
     /**
@@ -76,10 +76,10 @@ public class ApiWaimaiPrintServiceImpl implements ApiWaimaiPrintService {
         WaimaiOrder waimaiOrder = iWaimaiOrderService.getById(waimaiId);
         List<ShopDevice> deviceDtos = iShopDeviceService.list(new QueryWrapper<ShopDevice>().eq("shop_id", waimaiOrder.getShopId()).eq("status", 1).eq("deleted", 0));
         if (CollectionUtils.isEmpty(deviceDtos)) {
-            throw new CustomException("暂无可用的设备");
+            throw new CustomAppException("暂无可用的设备");
         }else{
            if(deviceDtos.get(0).getOpenOrderPrint()==0){
-               throw new CustomException("请开启自动接单打印");
+               throw new CustomAppException("请开启自动接单打印");
            }
         }
         List<PrintDeviceDto> printDeviceDtos = new ArrayList<>();
@@ -196,6 +196,14 @@ public class ApiWaimaiPrintServiceImpl implements ApiWaimaiPrintService {
         }
         printOrderDto.setOpenQrCode(iShopService.getOpenQrCode(waimaiOrder.getShopId()));
         printOrderDto.setQrCode(waimaiOrder.getOutOrderId());
+
+        // 获取门店用户配置
+        MemberConfig config = iMemberConfigService.getShopMemberConfig(waimaiOrder.getShopId(), null);
+        if (config != null) {
+          printOrderDto.setCustomerLinkPrintGoodsDetail(config.getCustomerLinkPrintGoodsDetail());
+          printOrderDto.setCustomerLinkPrintGoodsPrice(config.getCustomerLinkPrintGoodsPrice());
+        }
+
         //手动打印, 强制
         PrintDto dto = new PrintDto();
         dto.setPrintOrderDto(printOrderDto);
@@ -338,6 +346,12 @@ public class ApiWaimaiPrintServiceImpl implements ApiWaimaiPrintService {
             printOrderDto.setRecipientAddress(waimaiOrder.getRecipientAddress());
         }
         printOrderDto.setOpenQrCode(iShopService.getOpenQrCode(waimaiOrder.getShopId()));
+        // 获取门店用户配置
+        MemberConfig config = iMemberConfigService.getShopMemberConfig(waimaiOrder.getShopId(), null);
+        if (config != null) {
+            printOrderDto.setCustomerLinkPrintGoodsDetail(config.getCustomerLinkPrintGoodsDetail());
+            printOrderDto.setCustomerLinkPrintGoodsPrice(config.getCustomerLinkPrintGoodsPrice());
+        }
         //手动打印, 强制
         PrintDto dto = new PrintDto();
         dto.setPrintOrderDto(printOrderDto);
@@ -385,6 +399,14 @@ public class ApiWaimaiPrintServiceImpl implements ApiWaimaiPrintService {
 
         printOrderDto.setOpenQrCode(iShopService.getOpenQrCode(waimaiOrder.getShopId()));
         printOrderDto.setQrCode(waimaiOrder.getOutOrderId());
+
+        // 获取门店用户配置
+        MemberConfig config = iMemberConfigService.getShopMemberConfig(waimaiOrder.getShopId(), null);
+        if (config != null) {
+          printOrderDto.setCustomerLinkPrintGoodsDetail(config.getCustomerLinkPrintGoodsDetail());
+          printOrderDto.setCustomerLinkPrintGoodsPrice(config.getCustomerLinkPrintGoodsPrice());
+        }
+
         //手动打印, 强制
         PrintDto dto = new PrintDto();
         dto.setPrintOrderDto(printOrderDto);
@@ -444,6 +466,13 @@ public class ApiWaimaiPrintServiceImpl implements ApiWaimaiPrintService {
         printOrderDto.setEncryptRecipientPhone(waimaiOrder.getRecipientPhone());
         printOrderDto.setOpenQrCode(iShopService.getOpenQrCode(waimaiOrder.getShopId()));
         printOrderDto.setQrCode(waimaiOrder.getOutOrderId());
+
+        // 获取门店用户配置
+        MemberConfig config = iMemberConfigService.getShopMemberConfig(waimaiOrder.getShopId(), null);
+        if (config != null) {
+          printOrderDto.setCustomerLinkPrintGoodsDetail(config.getCustomerLinkPrintGoodsDetail());
+          printOrderDto.setCustomerLinkPrintGoodsPrice(config.getCustomerLinkPrintGoodsPrice());
+        }
         //手动打印, 强制
         PrintDto dto = new PrintDto();
         dto.setPrintOrderDto(printOrderDto);

文件差异内容过多而无法显示
+ 290 - 286
lb-app/src/main/java/com/ydd/app/service/impl/ApiWaimaiServiceImpl.java


+ 1 - 1
lb-app/src/main/java/com/ydd/app/task/SyncRiderEvent.java

@@ -23,7 +23,7 @@ public class SyncRiderEvent extends ApplicationEvent implements Serializable {
     private  OrderDelivery orderDelivery;
     private  DspDelivery delivery;
 
-    public SyncRiderEvent(Order order, SyncRiderPositionStatusVo vo, OrderDelivery orderDelivery, DspDelivery delivery) {
+    public SyncRiderEvent(Order order, SyncRiderPositionStatusVo  vo,OrderDelivery orderDelivery,DspDelivery delivery) {
         super(vo);
         this.order = order;
         this.vo = vo;

+ 6 - 0
lb-app/src/main/java/com/ydd/app/task/SyncRiderTask.java

@@ -6,6 +6,7 @@ import com.ydd.api.ElemeApi;
 import com.ydd.api.MeiTuanApi;
 import com.ydd.api.MeiTuanSgApi;
 import com.ydd.app.service.ApiRiderLocationService;
+import com.ydd.common.utils.StringUtils;
 import com.ydd.module.domain.DspDelivery;
 import com.ydd.module.domain.Order;
 import com.ydd.module.domain.OrderDelivery;
@@ -65,7 +66,12 @@ public class SyncRiderTask {
                 if (orderDto != null) {
                     syncRiderPositionVo.setLatitude(orderDto.getShipperLat());
                     syncRiderPositionVo.setLongitude(orderDto.getShipperLng());
+                    if(StringUtils.isNotBlank(orderDto.getShipperName())){
+                        syncRiderPositionVo.setCourierName(orderDto.getShipperName());
+                        syncRiderPositionVo.setCourierPhone(orderDto.getShipperPhone());
+                    }
                 }
+
                 CallBackOrderDto dto = getStatus(nowOrder);
                 String client = syncRiderPositionVo.getLbClient();
                 if (client.equals("meituan")){

+ 5 - 0
lb-common/src/main/java/com/ydd/common/constant/RedisKeyConstant.java

@@ -38,6 +38,11 @@ public interface RedisKeyConstant {
     String MEMBER_DAY_SEQ = "member_day_seq:date:";
 
     /**
+     * 修改用户手机号标识
+     */
+    String MEMBER_PHONE_MODIFY = "member_phone_modify:";
+
+    /**
      * 计价结果缓存key
      */
     String VALUATION_RESULT = "valuation_result:";

+ 18 - 0
lb-framework/src/main/java/com/ydd/framework/config/DruidConfig.java

@@ -9,9 +9,12 @@ import javax.servlet.ServletException;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 import javax.sql.DataSource;
+
+import com.alibaba.druid.support.http.StatViewServlet;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.boot.web.servlet.ServletRegistrationBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Primary;
@@ -78,6 +81,21 @@ public class DruidConfig
         }
     }
 
+    @Bean
+    public ServletRegistrationBean druidServlet() {
+        ServletRegistrationBean reg = new ServletRegistrationBean();
+        reg.setServlet(new StatViewServlet());
+        reg.addUrlMappings("/druid/*");
+        //设置控制台管理用户
+        reg.addInitParameter("loginUsername","root");
+        reg.addInitParameter("loginPassword","root123!");
+        // 禁用HTML页面上的“Reset All”功能
+        reg.addInitParameter("resetEnable","false");
+        //reg.addInitParameter("allow", "127.0.0.1"); //白名单
+        return reg;
+    }
+
+
     /**
      * 去除监控页面底部的广告
      */

+ 12 - 0
lb-framework/src/main/java/com/ydd/framework/web/service/TokenService.java

@@ -217,6 +217,17 @@ public class TokenService
         return token;
     }
 
+    /**
+     * 获取请求携带的token
+     *
+     * @param request
+     * @return token
+     */
+    public String getAppToken(HttpServletRequest request)
+    {
+        return request.getHeader("token");
+    }
+
     private String getTokenKey(String uuid)
     {
         return Constants.LOGIN_TOKEN_KEY + uuid;
@@ -257,4 +268,5 @@ public class TokenService
     public void setDeliveryOptFlag(String deliveryOptFlag, Long memberId) {
         redisCache.setCacheObject(Constants.DELIVERY_OPT_FLAG + memberId, deliveryOptFlag, 15, TimeUnit.DAYS);
     }
+
 }

+ 0 - 2
lb-module/src/main/java/com/ydd/module/constants/AppConstant.java

@@ -1,7 +1,5 @@
 package com.ydd.module.constants;
 
-import com.ydd.common.enums.UserTypeJoinRoleEnums;
-
 import java.util.Arrays;
 import java.util.List;
 

+ 94 - 0
lb-module/src/main/java/com/ydd/module/domain/DeviceConfig.java

@@ -0,0 +1,94 @@
+package com.ydd.module.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ydd.common.annotation.Excel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Demo class
+ *
+ * @author 14027
+ * @date 2022/4/15 13:56
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("lb_device_config")
+public class DeviceConfig implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    /** $column.columnComment */
+    @TableId(value = "id")
+    private Long id;
+
+    /** 聚合服务商ID */
+    @Excel(name = "聚合服务商ID")
+    @ApiModelProperty(value = "聚合服务商ID")
+    private Long dspId;
+
+    /** 打印机名称 */
+    @Excel(name = "打印机名称")
+    @ApiModelProperty(value = "打印机名称")
+    private String name;
+
+    /** 打印机logo */
+    @Excel(name = "打印机logo")
+    @ApiModelProperty(value = "打印机logo")
+    private String logo;
+
+    /** 打印机pc logo */
+    @Excel(name = "打印机pc logo")
+    @ApiModelProperty(value = "打印机pc logo")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private String pcLogo;
+
+    /** 网址 */
+    @Excel(name = "网址")
+    @ApiModelProperty(value = "网址")
+    private String website;
+
+    /** 绑定说明 */
+    @Excel(name = "绑定说明")
+    @ApiModelProperty(value = "绑定说明")
+    private String content;
+
+    /** 顺序 */
+    @Excel(name = "顺序")
+    @ApiModelProperty(value = "顺序")
+    private Integer sort;
+
+    /** 状态:1->开启,0->关闭 */
+    @Excel(name = "状态:1->开启,0->关闭")
+    @ApiModelProperty(value = "1->开启,0->关闭")
+    private Integer status;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /** 更新时间 */
+    @TableField(update = "now()")
+    private Date updateTime;
+
+    /** 删除标识位: 0正常 1删除 */
+    @TableLogic
+    private Integer deleted;
+
+    @ApiModelProperty(value = "打印机型号,21->飞蛾云打印,22->易联云打印,23->中午云,,24->佳博云,25->芯烨云,26->商鹏,27->优声")
+    private Integer type;
+
+    @ApiModelProperty(value = "扫码二维码绑定设置:0->非扫码绑定 1->扫码绑定")
+    private Integer codeBind;
+
+    @ApiModelProperty(value = "打印机类型,2.云打印 99.usb打印")
+    private Integer deviceType;
+}

+ 4 - 0
lb-module/src/main/java/com/ydd/module/domain/HelpColumn.java

@@ -48,6 +48,10 @@ public class HelpColumn implements Serializable {
     @TableField(update = "now()")
     private Date updateTime;
 
+    /** 类型:0->app,1->pc */
+    @Excel(name = "类型")
+    private Integer type;
+
     /** 顺序 */
     @Excel(name = "顺序")
     private Integer sort;

+ 17 - 8
lb-module/src/main/java/com/ydd/module/domain/MemberBalanceLog.java

@@ -1,19 +1,18 @@
 package com.ydd.module.domain;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ydd.ecloud.core.excel.entity.ExcelColumn;
+import com.ydd.common.annotation.Excel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
-import com.ydd.common.annotation.Excel;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableLogic;
 
-import java.math.BigDecimal;
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
@@ -62,7 +61,7 @@ private static final long serialVersionUID=1L;
     private Integer type;
 
     /** 资金来源:1->充值,2->消费,3->退款 */
-    @Excel(name = "类型", readConverterExp = "1=充值,2=消费,3=退款,4=赠送,5=补贴,6=订单退款")
+    @Excel(name = "类型", readConverterExp = "1=充值,2=消费,3=退款,4=赠送,5=补贴,6=订单退款 7=系统扣款-余额")
     @ApiModelProperty("资金来源:1->充值,2->消费,3->退款")
     private Integer source;
 
@@ -77,6 +76,16 @@ private static final long serialVersionUID=1L;
     private BigDecimal amount;
 
     /**
+     * 变更前余额(paymentType=4时有值)
+     */
+    private BigDecimal beforeAccountAmount;
+
+    /**
+     * 变更后余额(paymentType=4时有值)
+     */
+    private BigDecimal afterAccountAmount;
+
+    /**
      * 支付类型:1->支付宝支付 2->微信支付 3->银联支付 4->余额支付 5->三方运力支付
      */
     @Excel(name = "支付方式", readConverterExp = "1=支付宝,2=微信支付,3=银联支付,4=余额支付,5=官方平台支付")

+ 1 - 1
lb-module/src/main/java/com/ydd/module/domain/OrderPushMessage.java

@@ -45,7 +45,7 @@ public class OrderPushMessage implements Serializable {
 
     /** 1 -> 新订单提醒  2 -> 配送已接单提醒
      * 3 -> 5分钟未接单语音提醒 4 ->配送被骑手取消
-     * 5->外卖订单被用户取消
+     * 5->外卖订单被用户取消 6-余额不足100 7-余额不足50 8-配送超时系统自动取消 9-配送被骑手取消  10-余额不足,发单失败
      */
     @Excel(name = "1 -> 新订单提醒  2 -> 配送已接单提醒 3 -> 5分钟未接单语音提醒 4 ->配送被骑手取消 5->外卖订单被用户取消")
     private Integer status;

+ 2 - 0
lb-module/src/main/java/com/ydd/module/domain/Version.java

@@ -87,4 +87,6 @@ public class Version implements Serializable {
     /** 更新时间 */
     @TableField(update = "now()")
     private Date updateTime;
+
+    private Integer isFull;
 }

+ 11 - 1
lb-module/src/main/java/com/ydd/module/dto/DeviceDto.java

@@ -1,6 +1,5 @@
 package com.ydd.module.dto;
 
-import com.ydd.common.annotation.Excel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -92,4 +91,15 @@ public class DeviceDto implements Serializable {
 
     @ApiModelProperty(value = "打印机图片")
     private String img;
+
+    /**
+     * 门店名称
+     */
+    private String shopName;
+
+    /**
+     * 门店id
+     */
+    private Long shopId;
+
 }

+ 6 - 1
lb-module/src/main/java/com/ydd/module/dto/DeviceStatusDto.java

@@ -16,7 +16,6 @@ import java.io.Serializable;
  * @author zoe
  */
 @Data
-@NoArgsConstructor
 @Accessors(chain = true)
 public class DeviceStatusDto implements Serializable {
 
@@ -29,4 +28,10 @@ public class DeviceStatusDto implements Serializable {
     @ApiModelProperty(value = "异常数量")
     private Integer abnormalNum;
 
+    public DeviceStatusDto(Integer onlineNum, Integer offlineNum, Integer abnormalNum) {
+        this.onlineNum = onlineNum;
+        this.offlineNum = offlineNum;
+        this.abnormalNum = abnormalNum;
+    }
+
 }

+ 15 - 0
lb-module/src/main/java/com/ydd/module/dto/MemberDetailDto.java

@@ -119,4 +119,19 @@ public class MemberDetailDto extends Member {
      */
     private BigDecimal privateNumberInvalidTime;
 
+    /**
+     * 同步订单商品给骑手
+     */
+    private Integer syncGoodsDetailToDelivery;
+
+    /**
+     * 同步打印客户联商品明细
+     */
+    private Integer customerLinkPrintGoodsDetail;
+
+    /**
+     * 同步打印客户联商品价格
+     */
+    private Integer customerLinkPrintGoodsPrice;
+
 }

+ 7 - 1
lb-module/src/main/java/com/ydd/module/dto/OrderListDto.java

@@ -8,6 +8,7 @@ import lombok.NoArgsConstructor;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 订单列表返回实体
@@ -219,7 +220,7 @@ public class OrderListDto implements Serializable {
     /**
      * 外卖平台ID
      */
-    private Integer waimaiId;
+    private Long waimaiId;
 
     /**
      * 外卖订单ID
@@ -437,4 +438,9 @@ public class OrderListDto implements Serializable {
     @JsonIgnore
     private Integer autoDeliveryMinutes;
 
+    /**
+     * 发单中运力logo
+     */
+    private List<String> deliveryLogos;
+
 }

+ 3 - 0
lb-module/src/main/java/com/ydd/module/dto/ShopDto.java

@@ -31,6 +31,9 @@ public class ShopDto extends Shop {
     @ApiModelProperty(value = "经营类目")
     private String fnProductType;
 
+    @ApiModelProperty(value = "经营类目名称")
+    private String categoryName;
+
     private Integer isPic;
 
     /**

+ 5 - 0
lb-module/src/main/java/com/ydd/module/dto/StatisticsDeliveryDto.java

@@ -33,4 +33,9 @@ public class StatisticsDeliveryDto implements Serializable {
     @ApiModelProperty(value = "当日消费")
     private BigDecimal consumption;
 
+    @ApiModelProperty(value = "发单数量")
+    private Integer successNum;
+
+    @ApiModelProperty(value = "实际支付")
+    private BigDecimal realPay;
 }

+ 7 - 1
lb-module/src/main/java/com/ydd/module/enums/LogSourceEnum.java

@@ -31,7 +31,13 @@ public enum LogSourceEnum {
     /**
      * 后台退款
      */
-    BACK_REFUND(6,"后台退款");
+    BACK_REFUND(6,"后台退款"),
+
+    /**
+     * 系统扣款-余额
+     */
+    SYSTEM_BALANCE_REDUCE(7,"系统扣款-余额")
+    ;
 
     public Integer status;
     public String name;

+ 47 - 0
lb-module/src/main/java/com/ydd/module/enums/PrintDeviceEnum.java

@@ -0,0 +1,47 @@
+package com.ydd.module.enums;
+
+import org.springframework.util.StringUtils;
+
+/**
+ * Demo class
+ *
+ * @author 14027
+ * @date 2022/4/15 17:04
+ */
+public enum PrintDeviceEnum {
+
+
+    FEIE_DA_YIN(21,"飞蛾云打印"),
+
+    YLY_YIN(22,"易联云打印"),
+    zwy(23, "中午云"),
+    jby(24, "佳博云"),
+    xhy(25, "芯烨云"),
+    sp(26, "商鹏"),
+    ys(27, "优声");
+
+    public Integer type;
+    public String name;
+
+    PrintDeviceEnum(Integer type, String name) {
+        this.type = type;
+        this.name = name;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public static String getNameByType(Integer type) {
+        if (StringUtils.isEmpty(type)) {
+            return null;
+        }
+
+        for (PrintDeviceEnum enums : PrintDeviceEnum.values()) {
+            if(enums.type.equals(type)) {
+                return enums.name;
+            }
+        }
+        return null;
+    }
+}

+ 23 - 0
lb-module/src/main/java/com/ydd/module/mapper/DeviceConfigMapper.java

@@ -0,0 +1,23 @@
+package com.ydd.module.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydd.common.core.domain.entity.SysUser;
+import com.ydd.module.domain.DeviceConfig;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * Demo class
+ *
+ * @author 14027
+ * @date 2022/4/15 14:08
+ */
+public interface DeviceConfigMapper extends BaseMapper<DeviceConfig> {
+
+    List<DeviceConfig> selectByDspId(@Param("params") SysUser user);
+
+    List<DeviceConfig> selectByType(@Param("type")Integer type);
+
+    void inserrAll(@Param("list") List<DeviceConfig> list);
+}

+ 3 - 0
lb-module/src/main/java/com/ydd/module/mapper/FeedbackMapper.java

@@ -21,4 +21,7 @@ public interface FeedbackMapper extends BaseMapper<Feedback> {
      * 修改意见反馈状态
      */
     int  updateStats(Long id);
+
+    List<Feedback> getFeedbackList(@Param("loginId") Long loginId);
+
 }

+ 2 - 0
lb-module/src/main/java/com/ydd/module/mapper/MerchantMapper.java

@@ -50,4 +50,6 @@ public interface MerchantMapper extends BaseMapper<Merchant> {
 
     List<Long> findMerchantIdByAgentId(@Param("agentIds") List<Long> agentIds);
 
+    List<Merchant> selectListByDadaDspId(@Param("dadaDspId") Long dadaDspId);
+
 }

+ 3 - 1
lb-module/src/main/java/com/ydd/module/mapper/ShopDeviceMapper.java

@@ -16,7 +16,7 @@ import java.util.List;
  */
 public interface ShopDeviceMapper extends BaseMapper<ShopDevice> {
 
-    List<DeviceDto> findList(@Param("loginId") Long loginId, @Param("shopId")Long shopId, @Param("deviceType")Integer deviceType);
+    List<DeviceDto> findList(@Param("loginId") Long loginId, @Param("shopId")Long shopId, @Param("merchantId") Long merchantId, @Param("deviceType")Integer deviceType);
 
     ShopDeviceDto findDetail(@Param("id") Long id);
 
@@ -31,4 +31,6 @@ public interface ShopDeviceMapper extends BaseMapper<ShopDevice> {
 
     List<ShopDeviceDto> findUsbPrintList(@Param("shopId") Long shopId);
 
+    List<ShopDevice> getShopDeviceByShopOrMerchantId(@Param("shopId") Long shopId,@Param("merchantId") Long merchantId);
+
 }

+ 1 - 1
lb-module/src/main/java/com/ydd/module/push/MessagePushService.java

@@ -109,6 +109,6 @@ public interface MessagePushService {
      * @param content
      * @param type 1 50 ,2 100
      */
-    void memberAmountMessage(List<Long> memberIds, String title, String content, Integer type);
+    void memberAmountMessage(List<Long> memberIds, String title, String content, Integer type, Long orderId);
 
 }

+ 15 - 4
lb-module/src/main/java/com/ydd/module/push/impl/MessagePushServiceImpl.java

@@ -113,12 +113,14 @@ public class MessagePushServiceImpl implements MessagePushService {
     /**
      * 余额不足推送消息
      *
-     * @param memberIds
-     * @param title
-     * @param content
+     * @param memberIds 待发送用户id
+     * @param title 消息标题
+     * @param content 消息内容
+     * @param type 消息类型   1: 余额不足50元    2: 余额满50不足100元   3: 余额不足导致发单失败
+     * @param orderId 订单id
      */
     @Override
-    public void memberAmountMessage(List<Long> memberIds, String title, String content, Integer type) {
+    public void memberAmountMessage(List<Long> memberIds, String title, String content, Integer type, Long orderId) {
         log.info("推送的用户==" + "类型==" + type + ">>>>>>" + JSONObject.toJSONString(memberIds));
         PushMsg pushMsg = new PushMsg();
         pushMsg.setTitle(title);
@@ -129,9 +131,18 @@ public class MessagePushServiceImpl implements MessagePushService {
             // 播放50的声音
             sound = "lower-than.caf";
             status = 7;
+        } else if (type == 3) {
+            sound = "amount-not-enough-failed-create-order.mp3";
+            pushMsg.setOrderId(orderId);
         }
         pushMsg.setSound(sound);
 
+        // 余额不足发单失败, 强制推送
+        if (type == 3 && CollectionUtils.isNotEmpty(memberIds)) {
+            commonMessage(memberIds, pushMsg);
+            return;
+        }
+
         QueryWrapper queryWrapper = new QueryWrapper<OrderPushMessage>()
                 .in("member_id", memberIds)
                 .eq("open", 1)

+ 28 - 0
lb-module/src/main/java/com/ydd/module/service/IDeviceConfigService.java

@@ -0,0 +1,28 @@
+package com.ydd.module.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydd.common.core.domain.entity.SysUser;
+import com.ydd.module.domain.DeviceConfig;
+
+import java.util.List;
+
+/**
+ * Demo class
+ *
+ * @author 14027
+ * @date 2022/4/15 14:06
+ */
+public interface IDeviceConfigService extends IService<DeviceConfig> {
+
+    List<DeviceConfig> queryList(SysUser user);
+
+    Boolean createDeliveryConfig(DeviceConfig deviceConfig);
+
+    void changeStatus(Long id,SysUser user);
+
+//    Boolean updateDeliveryConfigById(DeviceConfig deviceConfig, SysUser user);
+
+    List<DeviceConfig> getDeviceConfig();
+
+    Boolean updateDeviceConfig(DeviceConfig deviceConfig);
+}

+ 8 - 0
lb-module/src/main/java/com/ydd/module/service/IFeedbackService.java

@@ -27,4 +27,12 @@ public interface IFeedbackService extends IService<Feedback> {
      * @return
      */
     int  updateStats(Long id, String answer);
+
+    /**
+     *
+     * @param loginId
+     * @return
+     */
+    List<Feedback> getFeedbackList(Long loginId);
+
 }

+ 1 - 1
lb-module/src/main/java/com/ydd/module/service/IMemberBalanceLogService.java

@@ -83,7 +83,7 @@ public interface IMemberBalanceLogService extends IService<MemberBalanceLog> {
      * @param type
      * @param payAmount
      */
-    void saveLog(Long loginId, Integer type, String desc, Integer source, BigDecimal payAmount,Long merchantId,Long orderId, Integer paymentType);
+    void saveLog(Long loginId, Integer type, String desc, Integer source, BigDecimal payAmount,Long merchantId,Long orderId, Integer paymentType, BigDecimal beforeAmount);
 
     PageResult queryRechargeList(Page page, MemberBalanceLog memberBalanceLog, SysUser user);
 

+ 7 - 0
lb-module/src/main/java/com/ydd/module/service/IMemberConfigService.java

@@ -36,4 +36,11 @@ public interface IMemberConfigService extends IService<MemberConfig> {
      */
     MemberConfig getShopMemberConfig(Long shopId, Long memberId);
 
+    /**
+     * 保存配置
+     * @param id 用户id
+     * @param target 配置项
+     */
+    void saveConfig(Long id, MemberConfig target);
+
 }

+ 7 - 0
lb-module/src/main/java/com/ydd/module/service/IMerchantService.java

@@ -111,4 +111,11 @@ public interface IMerchantService extends IService<Merchant> {
     boolean bindFreightPackage(DadaDspBindFreightQuery bindFreightQuery);
 
     List<Long> selectIdByName(String merchantName);
+
+    /**
+     * 根据达达配送服务商id查询商家
+     * @param dadaDspId
+     * @return
+     */
+    List<Merchant> selectListByDadaDspId(Long dadaDspId);
 }

+ 2 - 0
lb-module/src/main/java/com/ydd/module/service/IShopDeviceService.java

@@ -51,6 +51,8 @@ public interface IShopDeviceService extends IService<ShopDevice> {
 
     List<ShopDeviceDto> findUsbPrintList(Long shopId);
 
+    List<ShopDevice> getShopDeviceByShopOrMerchantId(Long shopId, Long merchantId);
+
     /**
      * 修改是否打印二维码
      * @param shopDevice 请求参数

+ 95 - 0
lb-module/src/main/java/com/ydd/module/service/impl/DeviceConfigServiceImpl.java

@@ -0,0 +1,95 @@
+package com.ydd.module.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydd.common.core.domain.entity.SysUser;
+import com.ydd.common.exception.CustomException;
+import com.ydd.module.domain.DeviceConfig;
+import com.ydd.module.domain.DspConfig;
+import com.ydd.module.enums.ListSizeEnum;
+import com.ydd.module.enums.PrintDeviceEnum;
+import com.ydd.module.enums.StatusEnum;
+import com.ydd.module.mapper.DeviceConfigMapper;
+import com.ydd.module.service.IDeviceConfigService;
+import com.ydd.module.service.IDspConfigService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Demo class
+ *
+ * @author 14027
+ * @date 2022/4/15 14:07
+ */
+@Service
+public class DeviceConfigServiceImpl extends ServiceImpl<DeviceConfigMapper, DeviceConfig> implements IDeviceConfigService {
+
+    @Resource
+    private IDspConfigService iDspConfigService;
+
+    @Override
+    public List<DeviceConfig> queryList(SysUser user) {
+        return baseMapper.selectByDspId(user);
+    }
+
+    @Override
+    public Boolean createDeliveryConfig(DeviceConfig deviceConfig) {
+        //平台名称校验
+        List<DeviceConfig> list = baseMapper.selectByType(deviceConfig.getType());
+        if (list.size() > ListSizeEnum.ZERO.getSize()){
+            throw new CustomException("已存在该打印机,请确认后重新操作!");
+        }
+        //创建默认的外卖平台(没有绑定渠道商的平台)
+//        deviceConfig.setStatus(StatusEnum.SHOW.getStatus());
+//        baseMapper.insert(deviceConfig);
+        //查询出所有渠道商(包括被禁用的)创建对应的外卖平台,默认未启用
+        List<DspConfig> dspList = iDspConfigService.selectDspListByStatus(null);
+        //渠道商的外卖平台
+        List<DeviceConfig> deviceConfigList = new ArrayList<>();
+        dspList.stream().forEach(dspConfig -> {
+            DeviceConfig deviceConfig1 = new DeviceConfig();
+            BeanUtils.copyProperties(deviceConfig,deviceConfig1);
+            deviceConfig1.setStatus(StatusEnum.STOP.getStatus());
+            deviceConfig1.setDspId(dspConfig.getId());
+
+            String name = PrintDeviceEnum.getNameByType(deviceConfig.getType());
+            deviceConfig1.setName(name);
+            deviceConfigList.add(deviceConfig1);
+        });
+        //批量保存已存在渠道商的外卖平台
+        if (deviceConfigList.size() >ListSizeEnum.ZERO.getSize()){
+            baseMapper.inserrAll(deviceConfigList);
+        }
+        return true;
+    }
+
+    @Override
+    public void changeStatus(Long id, SysUser user) {
+        DeviceConfig deviceConfig = this.getById(id);
+        deviceConfig.setStatus(getStatus(deviceConfig));
+        updateById(deviceConfig);
+    }
+
+    @Override
+    public List<DeviceConfig> getDeviceConfig() {
+        return baseMapper.selectList(new QueryWrapper<DeviceConfig>().eq("deleted", 0).isNotNull("dsp_id"));
+    }
+
+    @Override
+    public Boolean updateDeviceConfig(DeviceConfig deviceConfig) {
+        String name = PrintDeviceEnum.getNameByType(deviceConfig.getType());
+        deviceConfig.setName(name);
+        baseMapper.updateById(deviceConfig);
+        return true;
+    }
+
+    public Integer getStatus(DeviceConfig deviceConfig){
+        return deviceConfig.getStatus().equals(StatusEnum.SHOW.getStatus()) ?
+                StatusEnum.STOP.getStatus() : StatusEnum.SHOW.getStatus();
+    }
+
+}

+ 1 - 1
lb-module/src/main/java/com/ydd/module/service/impl/DspDeliveryServiceImpl.java

@@ -386,7 +386,7 @@ public class DspDeliveryServiceImpl extends ServiceImpl<DspDeliveryMapper, DspDe
                         if (sd != null && sd.getThirdShopId() != null) {
                             info.setShopId(sd.getThirdShopId());
                         } else {
-                            // 如果默认店铺被删了,则取列表第一个
+                            // 如果默认店铺被删了,则取列表第一个(逻辑废弃)
                             List<ShopDelivery> deliveries = iShopDeliveryService.list(new QueryWrapper<ShopDelivery>().eq("merchant_id", member.getMerchantId()).eq("delivery_id", delivery.getId())
                                     .eq("deleted", IsDeleteEnum.NORMAL.status).isNotNull("third_shop_id"));
                             if (CollectionUtils.isNotEmpty(deliveries)){

+ 4 - 0
lb-module/src/main/java/com/ydd/module/service/impl/FeedbackServiceImpl.java

@@ -51,5 +51,9 @@ public class FeedbackServiceImpl extends ServiceImpl<FeedbackMapper, Feedback> i
         return baseMapper.updateStats(id);
     }
 
+    @Override
+    public List<Feedback> getFeedbackList(Long loginId) {
+        return baseMapper.getFeedbackList(loginId);
+    }
 
 }

+ 1 - 1
lb-module/src/main/java/com/ydd/module/service/impl/HelpColumnServiceImpl.java

@@ -34,7 +34,7 @@ public class HelpColumnServiceImpl extends ServiceImpl<HelpColumnMapper, HelpCol
         if (StringUtils.isNotBlank(helpColumn.getName())) {
             lqw.like(HelpColumn::getName, helpColumn.getName());
         }
-
+        lqw.orderByDesc(HelpColumn::getId);
         List<HelpColumn> list = this.list(lqw);
         list.forEach(helpColumn1 -> {
             if (helpColumn1.getPId() != null) {

+ 1 - 0
lb-module/src/main/java/com/ydd/module/service/impl/HelpServiceImpl.java

@@ -37,6 +37,7 @@ public class HelpServiceImpl extends ServiceImpl<HelpMapper, Help> implements IH
         if (StringUtils.isNotBlank(help.getTitle())) {
             lqw.like(Help::getTitle, help.getTitle());
         }
+        lqw.orderByDesc(Help::getId);
         List<Help> list = this.list(lqw);
         list.forEach(help1 -> {
             HelpColumn firstHelpColumn = iHelpColumnService.getById(help1.getFirstColumnId());

+ 41 - 4
lb-module/src/main/java/com/ydd/module/service/impl/MemberBalanceLogServiceImpl.java

@@ -12,6 +12,8 @@ import com.ydd.module.dto.ProfitsMerchantDTO;
 import com.ydd.module.dto.RechargeDto;
 import com.ydd.module.dto.SystemMemberBalanceLogDto;
 import com.ydd.module.enums.LogSourceEnum;
+import com.ydd.module.enums.LogTypeEnum;
+import com.ydd.module.enums.PaymentTypeEnum;
 import com.ydd.module.mapper.MemberBalanceLogMapper;
 import com.ydd.module.mapper.MemberMapper;
 import com.ydd.module.mapper.OrderMapper;
@@ -20,6 +22,7 @@ import com.ydd.module.service.IAgentService;
 import com.ydd.module.service.IMemberService;
 import com.ydd.module.service.IProfitsDetailService;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.compress.utils.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -40,6 +43,7 @@ import java.util.stream.Collectors;
  * @author douya
  * @date 2021-02-01
  */
+@Slf4j
 @Service
 @RequiredArgsConstructor(onConstructor_ = @Autowired)
 public class MemberBalanceLogServiceImpl extends ServiceImpl<MemberBalanceLogMapper, MemberBalanceLog> implements IMemberBalanceLogService {
@@ -169,20 +173,53 @@ public class MemberBalanceLogServiceImpl extends ServiceImpl<MemberBalanceLogMap
         balanceLogs.forEach(item -> {
             if (LogSourceEnum.BACK_REFUND.getStatus().equals(item.getSource())) {
                 item.setRemark("取消订单退款");
-            }
-            if (LogSourceEnum.SUBSIDY.getStatus().equals(item.getSource())) {
-                item.setRemark("后台补贴");
+                this.setPaymentType(item);
+            } else if (LogSourceEnum.SUBSIDY.getStatus().equals(item.getSource())) {
+                item.setRemark("账户充值 - 系统");
+            } else if (LogSourceEnum.SYSTEM_BALANCE_REDUCE.getStatus().equals(item.getSource())) {
+                item.setRemark("系统扣款 - 余额");
+            } else {
+                if (LogSourceEnum.RECHARGE.getStatus().equals(item.getSource())) {
+                    item.setRemark("账户充值");
+                }
+                this.setPaymentType(item);
             }
         });
         //过滤掉退款金额为0的记录
         return balanceLogs;
     }
 
+    private void setPaymentType(MemberBalanceLog item) {
+        if (PaymentTypeEnum.ZHI_FU_BAO.type.equals(item.getPaymentType())) {
+            item.setRemark(item.getRemark() + " - 支付宝");
+        } else if (PaymentTypeEnum.WEI_XIN.type.equals(item.getPaymentType())) {
+            item.setRemark(item.getRemark() + " - 微信");
+        } else if (PaymentTypeEnum.YING_LIAN.type.equals(item.getPaymentType())) {
+            item.setRemark(item.getRemark() + " - 银联");
+        } else if (PaymentTypeEnum.BALANCE.type.equals(item.getPaymentType())) {
+            item.setRemark(item.getRemark() + " - 余额");
+        } else if (PaymentTypeEnum.LOCAL.type.equals(item.getPaymentType())) {
+            item.setRemark(item.getRemark() + " - 三方平台");
+        }
+    }
+
     @Override
-    public void saveLog(Long loginId, Integer type, String desc, Integer source, BigDecimal payAmount,Long merchantId,Long orderId, Integer paymentType) {
+    public void saveLog(Long loginId, Integer type, String desc, Integer source, BigDecimal payAmount,Long merchantId,Long orderId, Integer paymentType, BigDecimal beforeAmount) {
+        log.info("记录账户变更日志: memberId:{}, type: {}, desc: {}, source: {}, changeAmount: {}, beforeAmount: {}, orderId: {}, paymentType: {}", loginId, type, desc, source, payAmount, beforeAmount, orderId, paymentType);
         MemberBalanceLog log = new MemberBalanceLog();
         log.setRemark(desc);
         log.setAmount(payAmount);
+        // 余额变更, 记录变更前后值
+        if (PaymentTypeEnum.BALANCE.type.equals(paymentType) && payAmount != null) {
+            log.setBeforeAccountAmount(beforeAmount == null ? BigDecimal.ZERO : beforeAmount);
+            BigDecimal afterAmount = BigDecimal.ZERO;
+            if (LogTypeEnum.INCREASE.type.equals(type)) {
+                afterAmount = log.getBeforeAccountAmount().add(payAmount);
+            } else if (LogTypeEnum.REDUCE.type.equals(type)) {
+                afterAmount = log.getBeforeAccountAmount().subtract(payAmount);
+            }
+            log.setAfterAccountAmount(afterAmount);
+        }
         log.setMemberId(loginId);
         log.setSource(source);
         log.setType(type);

+ 34 - 6
lb-module/src/main/java/com/ydd/module/service/impl/MemberConfigServiceImpl.java

@@ -1,21 +1,25 @@
 package com.ydd.module.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydd.module.domain.Member;
+import com.ydd.module.domain.MemberConfig;
+import com.ydd.module.domain.Shop;
 import com.ydd.module.dto.MemberConfigDto;
+import com.ydd.module.enums.MemberTypeEnum;
 import com.ydd.module.enums.StatusEnum;
 import com.ydd.module.mapper.MemberConfigMapper;
+import com.ydd.module.service.IMemberConfigService;
 import com.ydd.module.service.IMemberService;
+import com.ydd.module.service.IShopService;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.compress.utils.Lists;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import org.apache.commons.lang3.StringUtils;
-import com.ydd.module.domain.MemberConfig;
-import com.ydd.module.service.IMemberConfigService;
 
 import java.util.List;
 import java.util.stream.Collectors;
@@ -32,6 +36,9 @@ public class MemberConfigServiceImpl extends ServiceImpl<MemberConfigMapper, Mem
     @Autowired
     private IMemberService iMemberService;
 
+    @Autowired
+    private IShopService iShopService;
+
     @Override
     public List<MemberConfig> queryList(MemberConfig memberConfig) {
         LambdaQueryWrapper<MemberConfig> lqw = Wrappers.lambdaQuery();
@@ -110,6 +117,12 @@ public class MemberConfigServiceImpl extends ServiceImpl<MemberConfigMapper, Mem
         if (shopId != null) {
             List<Member> memberList = iMemberService.list(new QueryWrapper<Member>().eq("shop_id", shopId).eq("status", StatusEnum.SHOW.status).eq("deleted", 0));
             memberIds =  memberList.stream().map(Member::getId).collect(Collectors.toList());
+            // 门店无子账号、则根据商户账号来配置
+            if (CollectionUtils.isEmpty(memberIds)) {
+                Shop shop = iShopService.getById(shopId);
+                Member member = iMemberService.getOne(new QueryWrapper<Member>().eq("member_type", MemberTypeEnum.MERCHANT.type).eq("merchant_id", shop.getMerchantId()));
+                memberIds.add(member.getId());
+            }
         } else if (memberId != null) {
             memberIds.add(memberId);
         }
@@ -123,4 +136,19 @@ public class MemberConfigServiceImpl extends ServiceImpl<MemberConfigMapper, Mem
         return result;
     }
 
+    @Override
+    public void saveConfig(Long loginId, MemberConfig target) {
+        MemberConfig memberConfig = this.getOne(new QueryWrapper<MemberConfig>().eq("member_id", loginId));
+        if (memberConfig == null) {
+            memberConfig = new MemberConfig();
+            memberConfig.setMemberId(loginId);
+        }
+        BeanUtils.copyProperties(target, memberConfig);
+        if (memberConfig.getId() != null) {
+            this.updateById(memberConfig);
+        } else {
+            this.save(memberConfig);
+        }
+    }
+
 }

+ 10 - 2
lb-module/src/main/java/com/ydd/module/service/impl/MemberServiceImpl.java

@@ -441,11 +441,15 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> impleme
             throw new CustomAppException("该用户不存在!");
         }
 
+        if (member.getAmount() == null || member.getAmount().compareTo(BigDecimal.ZERO) == 0) {
+            throw new CustomAppException("补贴金额不能为空、不能为0!");
+        }
+
         String checkCode = redisCache.getCacheObject(SMS_REGISTER_CAPTCHA.key + member.getMobile());
         if (StringUtils.isBlank(checkCode) || !member.getCode().equals(checkCode)) {
             throw new CustomAppException(ExceptionEnum.INVALID_SMS_CODE);
         }
-
+        BigDecimal beforeAmount = person.getAmount();
         baseMapper.subsidyAmount(member.getId(), member.getAmount());
 
         Merchant merchant = new Merchant();
@@ -456,7 +460,11 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> impleme
                 merchantId = merchant.getId();
             }
         }
-        iMemberBalanceLogService.saveLog(person.getId(), LogTypeEnum.INCREASE.type, member.getReason(), LogSourceEnum.SUBSIDY.status, member.getAmount(), merchantId, null, PaymentTypeEnum.BALANCE.type);
+        if (member.getAmount().compareTo(BigDecimal.ZERO) < 0) {
+            iMemberBalanceLogService.saveLog(person.getId(), LogTypeEnum.REDUCE.type, member.getReason(), LogSourceEnum.SYSTEM_BALANCE_REDUCE.status, member.getAmount().abs(), merchantId, null, PaymentTypeEnum.BALANCE.type, beforeAmount);
+        } else {
+            iMemberBalanceLogService.saveLog(person.getId(), LogTypeEnum.INCREASE.type, member.getReason(), LogSourceEnum.SUBSIDY.status, member.getAmount(), merchantId, null, PaymentTypeEnum.BALANCE.type, beforeAmount);
+        }
         return true;
     }
 

+ 5 - 0
lb-module/src/main/java/com/ydd/module/service/impl/MerchantServiceImpl.java

@@ -730,4 +730,9 @@ public class MerchantServiceImpl extends ServiceImpl<MerchantMapper, Merchant> i
     public List<Long> selectIdByName(String merchantName) {
       return baseMapper.selectIdByName(merchantName);
     }
+
+    @Override
+    public List<Merchant> selectListByDadaDspId(Long dadaDspId) {
+        return baseMapper.selectListByDadaDspId(dadaDspId);
+    }
 }

+ 11 - 11
lb-module/src/main/java/com/ydd/module/service/impl/OrderServiceImpl.java

@@ -989,7 +989,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             }
         }
         if (tips.compareTo(BigDecimal.ZERO) > 0) {
-            iMemberBalanceLogService.saveLog(memberId, LogTypeEnum.INCREASE.type, remark, LogSourceEnum.REFUND.status, tips, merchantId, Long.valueOf(orderTips.get(0).getOrderId()), orderTips.get(0).getPayType());
+            iMemberBalanceLogService.saveLog(memberId, LogTypeEnum.INCREASE.type, remark, LogSourceEnum.REFUND.status, tips, merchantId, Long.valueOf(orderTips.get(0).getOrderId()), orderTips.get(0).getPayType(), member.getAmount());
         }
     }
 
@@ -1004,10 +1004,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         } else if (PaymentTypeEnum.ZHI_FU_BAO.type.equals(order.getPaymentType())) {
             aliPayService.alipayRefundRequest(orderNo, refundMoney.doubleValue());
         } else if (PaymentTypeEnum.WEI_XIN.type.equals(order.getPaymentType())) {
-            Payment payment = paymentService.getOne(new QueryWrapper<Payment>().eq("child_order_sn", orderNo).eq("payment_type", PaymentTypeEnum.WEI_XIN.type));
+            Payment payment = paymentService.getOne(new QueryWrapper<Payment>().eq("child_order_sn", orderNo).eq("payment_type",PaymentTypeEnum.WEI_XIN.type));
             wechatPayService.refund(orderNo, payment.getTotalAmount(), refundMoney, "");
         }
-        iMemberBalanceLogService.saveLog(memberId, LogTypeEnum.INCREASE.type, remark, LogSourceEnum.BACK_REFUND.status, refundMoney, merchantId, order.getId(), order.getPaymentType());
+        iMemberBalanceLogService.saveLog(memberId, LogTypeEnum.INCREASE.type, remark, LogSourceEnum.BACK_REFUND.status, refundMoney, merchantId,order.getId(), order.getPaymentType(), member.getAmount());
         // 是否需要退服务费-绑定三方运力下单
 //        if (order.getBindFee().compareTo(BigDecimal.ZERO) == 1){
 //            iMemberService.updateAmount(member.getId(), order.getBindFee());
@@ -1202,9 +1202,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         List<SystemOrderDto> systemOrderList = baseMapper.selectDadaCountByStatus(orderQuery);
         deliveryStatusList.forEach(deliveryStatus -> {
             long count;
-            if (!DeliveryStatusEnum.FINISH.getStatus().equals(deliveryStatus.getDeliveryStatus())) {
+            if(!DeliveryStatusEnum.FINISH.getStatus().equals(deliveryStatus.getDeliveryStatus())) {
                 // 其它状态
-                count = systemOrderList.stream().filter(item -> ((item.getWmstatus() == null || item.getWmstatus() != 4)
+                count = systemOrderList.stream().filter(item -> ((item.getWmstatus() == null || item.getWmstatus() != 4 )
                         && deliveryStatus.getDeliveryStatus().equals(item.getDeliveryStatus()))).count();
             } else {
                 // 平台完成
@@ -1219,9 +1219,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         List<Long> merchantIds = Lists.newArrayList();
         if (StringUtils.isNotBlank(orderQuery.getMerchantName())) {
             merchantIds = iMerchantService.list(new QueryWrapper<Merchant>()
-                            .like("merchant_name", orderQuery.getMerchantName())
-                            .eq("deleted", 0)
-                            .eq(dadaDspId != null, "dada_dsp_id", dadaDspId))
+                    .like("merchant_name", orderQuery.getMerchantName())
+                    .eq("deleted", 0)
+                    .eq(dadaDspId != null, "dada_dsp_id", dadaDspId))
                     .stream()
                     .map(Merchant::getId)
                     .collect(Collectors.toList());
@@ -1232,9 +1232,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         }
         if (StringUtils.isNotBlank(orderQuery.getShopName())) {
             List<Long> shopIds = iShopService.list(new QueryWrapper<Shop>()
-                            .in(CollectionUtils.isNotEmpty(merchantIds), "merchant_id", merchantIds)
-                            .like("name", orderQuery.getShopName())
-                            .eq("deleted", 0))
+                    .in(CollectionUtils.isNotEmpty(merchantIds), "merchant_id", merchantIds)
+                    .like("name", orderQuery.getShopName())
+                    .eq("deleted", 0))
                     .stream()
                     .map(Shop::getId)
                     .collect(Collectors.toList());

+ 1 - 1
lb-module/src/main/java/com/ydd/module/service/impl/PackageCityConfigServiceImpl.java

@@ -119,7 +119,7 @@ public class PackageCityConfigServiceImpl extends ServiceImpl<PackageCityConfigM
                     packageId = discountPackage ? agent.getPackageDiscountId() : agent.getPackageCommissionId();
 
                     // 优惠包 代理商名下直接享有此包
-                    if ((agent.getPackageDiscountId() == null || agent.getPackageCommissionId() == null) && agent.getPid() != null) {
+                    if (packageId == null && agent.getPid() != null) {
                       Agent superAgent = iAgentService.getById(agent.getPid());
                       if (Objects.nonNull(superAgent)) {
                         packageId = discountPackage ? superAgent.getPackageDiscountId() : superAgent.getPackageCommissionId();

+ 18 - 6
lb-module/src/main/java/com/ydd/module/service/impl/ShopDeliveryBindServiceImpl.java

@@ -3,6 +3,7 @@ package com.ydd.module.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
 import com.ydd.api.DeliveryService;
 import com.ydd.common.core.page.PageResult;
 import com.ydd.common.enums.DeliveryTypeEnums;
@@ -15,10 +16,7 @@ import com.ydd.module.enums.BindStatusEnum;
 import com.ydd.module.enums.DadaBindTypeEnum;
 import com.ydd.module.enums.IsDeleteEnum;
 import com.ydd.module.mapper.ShopDeliveryBindMapper;
-import com.ydd.module.service.IDspDeliveryService;
-import com.ydd.module.service.IMemberService;
-import com.ydd.module.service.IShopDeliveryBindService;
-import com.ydd.module.service.IShopService;
+import com.ydd.module.service.*;
 import com.ydd.third.common.vo.ResObject;
 import com.ydd.third.common.vo.shop.AmountResultVo;
 import com.ydd.third.common.vo.shop.QueryAmount;
@@ -51,6 +49,9 @@ public class ShopDeliveryBindServiceImpl extends ServiceImpl<ShopDeliveryBindMap
     private IMemberService iMemberService;
 
     @Resource
+    private IMerchantService iMerchantService;
+
+    @Resource
     private IShopService iShopService;
 
 
@@ -218,9 +219,20 @@ public class ShopDeliveryBindServiceImpl extends ServiceImpl<ShopDeliveryBindMap
       }
 
       List<Integer> bindStatusList = Arrays.asList(1, 4);
+
+      // 获取达达配送商下所有商家
+      Merchant merchant = iMerchantService.getById(shop.getMerchantId());
+      List<Merchant> merchantList = iMerchantService.selectListByDadaDspId(merchant.getDadaDspId());
+      List<Long> merchants = Lists.newArrayList();
+      if (CollectionUtils.isNotEmpty(merchantList)) {
+          merchants = merchantList.stream().map(Merchant::getId).collect(Collectors.toList());
+      }
       // 查询对应商家是否已经授权
-      List<ShopDeliveryBind> autoList = baseMapper.selectList(new QueryWrapper<ShopDeliveryBind>().eq("merchant_id", shop.getMerchantId()).
-        eq("delivery_id", 7).eq("deleted", 0).in("bind_status", bindStatusList));
+      List<ShopDeliveryBind> autoList = baseMapper.selectList(new QueryWrapper<ShopDeliveryBind>()
+              .eq("delivery_id", 7)
+              .eq("deleted", 0)
+              .in("merchant_id", merchants)
+              .in("bind_status", bindStatusList));
 
       if (CollectionUtils.isNotEmpty(autoList)) {
         shopDeliveryBind.setBindStatus(BindStatusEnum.BIND.status);

+ 1 - 0
lb-module/src/main/java/com/ydd/module/service/impl/ShopDeliveryServiceImpl.java

@@ -42,6 +42,7 @@ import java.util.stream.Collectors;
  * @date 2021-03-02
  */
 @Service
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
 public class ShopDeliveryServiceImpl extends ServiceImpl<ShopDeliveryMapper, ShopDelivery> implements IShopDeliveryService {
 
     @Resource

+ 22 - 9
lb-module/src/main/java/com/ydd/module/service/impl/ShopDeviceServiceImpl.java

@@ -3,17 +3,12 @@ package com.ydd.module.service.impl;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydd.api.PrintApi;
-import com.ydd.module.domain.Device;
-import com.ydd.module.domain.Merchant;
-import com.ydd.module.domain.Shop;
-import com.ydd.module.domain.ShopDevice;
+import com.ydd.module.domain.*;
 import com.ydd.module.dto.DeviceDto;
 import com.ydd.module.dto.ShopDeviceDto;
+import com.ydd.module.expection.CustomAppException;
 import com.ydd.module.mapper.ShopDeviceMapper;
-import com.ydd.module.service.IDeviceService;
-import com.ydd.module.service.IMerchantService;
-import com.ydd.module.service.IShopDeviceService;
-import com.ydd.module.service.IShopService;
+import com.ydd.module.service.*;
 import com.ydd.third.print.response.PrintStatusResp;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
@@ -42,6 +37,9 @@ public class ShopDeviceServiceImpl extends ServiceImpl<ShopDeviceMapper, ShopDev
     @Resource
     private IDeviceService iDeviceService;
 
+    @Resource
+    private IMemberService iMemberService;
+
     @Override
     public List<ShopDevice> queryList(ShopDevice shopDevice, List<Integer> merchantIds) {
         List<ShopDevice> list = baseMapper.queryList(shopDevice, merchantIds);
@@ -93,7 +91,11 @@ public class ShopDeviceServiceImpl extends ServiceImpl<ShopDeviceMapper, ShopDev
 
     @Override
     public List<DeviceDto> findList(Long loginId, Long shopId, Integer deviceType) {
-        List<DeviceDto> list = baseMapper.findList(loginId, shopId, deviceType);
+        Member member = iMemberService.getById(loginId);
+        if (member == null) {
+            throw new CustomAppException("登录用户不可为空!");
+        }
+        List<DeviceDto> list = baseMapper.findList(loginId, shopId, member.getMerchantId(), deviceType);
         list.forEach(v ->{
          //   if (v.getDeviceType().equals(DeviceTypeEnum.FEIE_DA_YIN.type)){
             PrintStatusResp feStatusResp=unifiedPrintService.printStatus(v.getDeviceType(), v.getDeviceSn(),v.getDeviceSecret());
@@ -170,6 +172,17 @@ public class ShopDeviceServiceImpl extends ServiceImpl<ShopDeviceMapper, ShopDev
         return baseMapper.findUsbPrintList(shopId);
     }
 
+    /**
+     * 查询门店设备
+     * @param shopId 门店id
+     * @param merchantId 商户id
+     * @return 门店设备列表(id, 设备状态)
+     */
+    @Override
+    public List<ShopDevice> getShopDeviceByShopOrMerchantId(Long shopId, Long merchantId) {
+        return baseMapper.getShopDeviceByShopOrMerchantId(shopId, merchantId);
+    }
+
     @Override
     public int updateOpenQrCodeStatus(ShopDevice shopDevice) {
         return baseMapper.update(null, new UpdateWrapper<ShopDevice>()

+ 8 - 0
lb-module/src/main/java/com/ydd/module/service/impl/ShopServiceImpl.java

@@ -435,6 +435,10 @@ public class ShopServiceImpl extends ServiceImpl<ShopMapper, Shop> implements IS
         if (StringUtils.isBlank(shopReq.getName())){
             throw new CustomWebException("门店名称不能为空!");
         }
+        int count = this.count(new QueryWrapper<Shop>().eq("name", shopReq.getName()));
+        if (count > 0) {
+            throw new CustomAppException("店铺名称已存在!");
+        }
         if (StringUtils.isBlank(shopReq.getContactName())){
             throw new CustomWebException("联系人名称不能为空!");
         }
@@ -638,6 +642,10 @@ public class ShopServiceImpl extends ServiceImpl<ShopMapper, Shop> implements IS
         if (shop == null) {
             throw new CustomWebException("门店不存在!");
         }
+        int count = this.count(new QueryWrapper<Shop>().eq("name", shopReq.getName()).ne("id", shopReq.getId()));
+        if (count > 0) {
+            throw new CustomAppException("店铺名称已存在!");
+        }
         if (StringUtils.isBlank(shopReq.getProvinceName())
                 || StringUtils.isBlank(shopReq.getCityName())
                 || StringUtils.isBlank(shopReq.getDistrictName())

+ 26 - 0
lb-module/src/main/resources/mapper/module/DeviceConfigMapper.xml

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ydd.module.mapper.DeviceConfigMapper">
+    <insert id="inserrAll" parameterType="java.util.List">
+        INSERT INTO
+        lb_device_config(dsp_id,`name`,logo,pc_logo,website,content,sort,status,`type`,code_bind,device_type)
+        VALUES
+        <foreach collection="list" item="item" index="index" open="" separator="," close="">
+            (#{item.dspId}, #{item.name}, #{item.logo}, #{item.pcLogo}, #{item.website}, #{item.content}, #{item.sort}, #{item.status}, #{item.type}, #{item.codeBind}, #{item.deviceType})
+        </foreach>
+    </insert>
+
+    <select id="selectByDspId" resultType="com.ydd.module.domain.DeviceConfig">
+        SELECT * FROM lb_device_config WHERE 1 = 1
+        <if test="params.type == 1">
+            AND dsp_id = #{params.dspId}
+        </if>
+        order by sort
+    </select>
+
+    <select id="selectByType" resultType="com.ydd.module.domain.DeviceConfig">
+        SELECT * FROM lb_device_config WHERE `type` = #{type}
+    </select>
+</mapper>

+ 13 - 0
lb-module/src/main/resources/mapper/module/FeedbackMapper.xml

@@ -47,5 +47,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         UPDATE lb_feedback SET `status` = 2   WHERE id = #{id}
     </update>
 
+    <select id="getFeedbackList" resultMap="FeedbackResult">
+        SELECT
+            id,
+            status,
+            type,
+            content,
+            create_time,
+            update_time,
+            answer
+        FROM lb_feedback
+        WHERE member_id = #{loginId}
+        AND deleted = 0
+    </select>
 
 </mapper>

+ 4 - 1
lb-module/src/main/resources/mapper/module/memberBalanceLogMapper.xml

@@ -49,7 +49,10 @@
             <if test="source == 1">
                 AND (source = 1 OR source = 5)
             </if>
-            <if test="source != 3 and source != 1">
+            <if test="source == 2">
+                AND (source = 2 OR source = 7)
+            </if>
+            <if test="source != 3 and source != 1 and source != 2">
                 AND source = #{source}
             </if>
         </if>

+ 12 - 0
lb-module/src/main/resources/mapper/module/merchantMapper.xml

@@ -328,4 +328,16 @@
         </if>
     </select>
 
+    <select id="selectListByDadaDspId" resultType="com.ydd.module.domain.Merchant">
+        SELECT
+            id,
+            code,
+            merchant_name,
+            create_time,
+            dada_dsp_id
+        FROM lb_merchant
+        WHERE deleted = 0
+        AND dada_dsp_id = #{dadaDspId}
+    </select>
+
 </mapper>

+ 1 - 0
lb-module/src/main/resources/mapper/module/orderMapper.xml

@@ -2218,6 +2218,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         ) t
         GROUP BY deliveryName,date
         ORDER BY date DESC
+
     </select>
 
     <select id="countPersonalOrder" resultType="java.lang.Integer">

+ 48 - 6
lb-module/src/main/resources/mapper/module/shopDeviceMapper.xml

@@ -13,21 +13,49 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="deviceSn"    column="device_sn"    />
         <result property="deviceSecret"    column="device_secret"    />
         <result property="onlineStatus"    column="online_status"    />
-        <result property="status"    column="status"    />
-        <result property="remark"    column="remark"    />
+        <result property="status"    column="status"/>
+        <result property="remark"    column="remark"/>
     </resultMap>
     <select id="findList" resultType="com.ydd.module.dto.DeviceDto">
-        select sd.*,d.name as deviceName,d.img
+        select
+            sd.id,
+            sd.device_sn,
+            sd.name,
+            sd.device_secret,
+            sd.online_status,
+            sd.device_type,
+            sd.open_voice_broadcast,
+            sd.neworder_reminder_count,
+            sd.riderorder_reminder_count,
+            sd.noanswerorder_reminder_count,
+            sd.ridercancel_reminder_count,
+            sd.ordercancel_reminder_count,
+            sd.open_order_print,
+            sd.open_order_cancel_print,
+            sd.print_customer_count,
+            sd.print_merchant_count,
+            sd.print_kitchen_count,
+            d.name as deviceName,
+            d.img,
+            s.id as shopId,
+            s.name as shopName
         from lb_shop_device as sd
-        left join lb_device as d
-        on d.id = sd.device_id
-        where sd.deleted=0 and  sd.shop_id = #{shopId}
+        left join lb_device as d on d.id = sd.device_id
+        left join lb_shop s on sd.shop_id = s.id
+        where sd.deleted=0
+        <if test="shopId != null and shopId != 0">
+            and sd.shop_id = #{shopId}
+        </if>
+        <if test="merchantId != null and merchantId != 0">
+            and sd.merchant_id = #{merchantId}
+        </if>
         <if test="deviceType == 2">
             and sd.device_type&gt;=21 and sd.device_type&lt;=27
         </if>
         <if test="deviceType != 2">
             and sd.device_type like concat(#{deviceType}, '%')
         </if>
+        order by sd.shop_id asc
     </select>
 
     <select id="findDetail" resultType="com.ydd.module.dto.ShopDeviceDto">
@@ -109,4 +137,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         and status = 1
     </select>
 
+    <select id="getShopDeviceByShopOrMerchantId" resultType="com.ydd.module.domain.ShopDevice">
+        select
+            id,
+            online_status
+        from lb_shop_device
+        where deleted = 0 and device_id != 0
+        <if test="shopId != null and shopId != 0">
+            and shop_id = #{shopId}
+        </if>
+        <if test="merchantId != null and merchantId != 0">
+            and merchant_id = #{merchantId}
+        </if>
+    </select>
+
 </mapper>

+ 7 - 4
lb-third/lb-third-common/src/main/java/com/ydd/third/common/utils/AddressLngLatExchanger.java

@@ -16,7 +16,7 @@ public class AddressLngLatExchanger {
 
     private static  final String key="5ae8644771ef9abf9cfb3ea23b1df6ca";
     /**
-     * 高德地图通过地址获取经纬度
+     * 高德地图通过地址获取经纬度、城市编码等信息
      */
     public static Map<String, Object> addressToLngAndLag(String address) {
         Map<String, Object> map = new HashMap<String, Object>();
@@ -24,6 +24,7 @@ public class AddressLngLatExchanger {
         String geturl = "https://restapi.amap.com/v3/geocode/geo?key="+key+"&address=" + address;
 
         String location = "";
+        String cityCode = "";
         try {
             String resp = HttpUtils.sendGet(geturl);
 
@@ -35,18 +36,20 @@ public class AddressLngLatExchanger {
             }
             JSONObject c = JSON.parseObject(sddressArr.get(0).toString());
             location = c.get("location").toString();
+            cityCode = c.get("citycode").toString();
         } catch (Exception e) {
             e.printStackTrace();
             //  System.out.println("失败!");
         }
-        return stringToMap(location);
+        return stringToMap(location, cityCode);
     }
 
-    public static Map<String, Object> stringToMap(String LngLat) {
-        Map<String, Object> map = new HashMap<String, Object>();
+    public static Map<String, Object> stringToMap(String LngLat, String cityCode) {
+        Map<String, Object> map = new HashMap<>();
         String[] strArr = LngLat.split("\\,");
         map.put("lng", Double.parseDouble(strArr[0]));
         map.put("lat", Double.parseDouble(strArr[1]));
+        map.put("cityCode", cityCode);
         return map;
     }
 

+ 5 - 0
lb-third/lb-third-common/src/main/java/com/ydd/third/common/utils/CoordinateUtils.java

@@ -144,6 +144,11 @@ public class CoordinateUtils {
      */
     private static final double EARTH_RADIUS = 6378.137;
 
+    private static double rad(double d) {
+        return d * Math.PI / 180.0;
+    }
+
+
     /**
      * 根据经纬度,计算两点间的距离
      *

+ 9 - 0
lb-third/lb-third-common/src/main/java/com/ydd/third/print/request/PrintOrderDto.java

@@ -114,6 +114,15 @@ public class PrintOrderDto implements Serializable {
 
     private String encryptRecipientPhone;
 
+    /**
+     * 是否打印客户联商品明细: 1->打印,0->不打印,
+     */
+    private Integer customerLinkPrintGoodsDetail;
+    /**
+     * 是否打印客户联商品价格: 1->打印,0->不打印
+     */
+    private Integer customerLinkPrintGoodsPrice;
+
 //    public String getDeliverTime() {
 //        if(StringUtils.isNotBlank(deliveryTime)){
 //            return DateUtils.parseDateToStr("MM月dd日 HH:mm", new Date(Long.parseLong(deliveryTime)*1000))+"送达";

+ 5 - 5
lb-third/lb-third-delivery/src/main/java/com/ydd/third/delivery/aipt/AiptClient.java

@@ -166,9 +166,9 @@ public class AiptClient implements ClientHandler {
         param.put("app_id",appConfig.getAiptAppId());
         param.put("phone",phone);
         param.put("start_city",order.getStartCity());
-        param.put("start_address",order.getFromAddress());
+        param.put("start_address",order.getFromAddressWithHouseNumber());
         param.put("end_city",order.getEndCity());
-        param.put("end_address",order.getReceiverAddress());
+        param.put("end_address",order.getReceiverAddressWithHouseNumber());
         // 起始
         double[] gps = CoordinateUtils.gcj02_To_Bd09(order.getFromLatitude().doubleValue(), order.getFromLongitude().doubleValue());
         param.put("start_location",String.valueOf(gps[1])+","+ String.valueOf(gps[0]));
@@ -234,9 +234,9 @@ public class AiptClient implements ClientHandler {
         param.put("app_id",appConfig.getAiptAppId());
         param.put("phone",phone);
         param.put("start_city",order.getStartCity());
-        param.put("start_address",order.getFromAddress());
+        param.put("start_address",order.getFromAddressWithHouseNumber());
         param.put("end_city",order.getEndCity());
-        param.put("end_address",order.getReceiverAddress());
+        param.put("end_address",order.getReceiverAddressWithHouseNumber());
         param.put("timestamp",times);
         if (order.getWeight() != null){
             param.put("weight",order.getWeight());
@@ -274,7 +274,7 @@ public class AiptClient implements ClientHandler {
             log.error(ex.getMessage());
             ex.printStackTrace();
         }
-        return null;
+        return resObject;
     }
 
     @Override

+ 2 - 2
lb-third/lb-third-delivery/src/main/java/com/ydd/third/delivery/dada/DadaClient.java

@@ -255,7 +255,7 @@ public class DadaClient implements ClientHandler {
         //填写发货人信息
         orderAddModel.setSupplierName(order.getFromSenderName());
         orderAddModel.setSupplierPhone(fromMobile);
-        orderAddModel.setSupplierAddress(order.getFromAddressWithHouseNumber() );
+        orderAddModel.setSupplierAddress(order.getFromAddressWithHouseNumber());
         orderAddModel.setSupplierLng(order.getFromLongitude());
         orderAddModel.setSupplierLat(order.getFromLatitude());
         // 填写收货人信息
@@ -970,7 +970,7 @@ public class DadaClient implements ClientHandler {
         String cityCode = order.getCityCode(); //jsonParams.getString("cityCode");
         BigDecimal cargoPrice = order.getOrderMoney(); // getjsonParams.getBigDecimal("cargoPrice");
         String receiverName = order.getReceiverName(); //jsonParams.getString("receiverName");
-        String receiverAddress = order.getReceiverAddress(); //jsonParams.getString("receiverAddress");
+        String receiverAddress = order.getReceiverAddressWithHouseNumber(); //jsonParams.getString("receiverAddress");
         BigDecimal receiverLat = order.getReceiverLat(); //jsonParams.getBigDecimal("receiverLat");
         BigDecimal receiverLng = order.getReceiverLng(); //jsonParams.getBigDecimal("receiverLng");
         String receiverPhone = order.getReceiverPhone(); //jsonParams.getString("receiverPhone");

+ 2 - 2
lb-third/lb-third-delivery/src/main/java/com/ydd/third/delivery/dianwoda/DianwodaClient.java

@@ -136,7 +136,7 @@ public class DianwodaClient {
         //客人信息
         request.setConsigneeName(orderVo.getReceiverName());
         request.setConsigneeMobile(orderVo.getReceiverPhone());
-        request.setConsigneeAddress(orderVo.getReceiverAddress());
+        request.setConsigneeAddress(orderVo.getReceiverAddressWithHouseNumber());
         request.setConsigneeLat(orderVo.getReceiverLat().doubleValue());
         request.setConsigneeLng(orderVo.getReceiverLng().doubleValue());
         //订单货品信息
@@ -304,7 +304,7 @@ public class DianwodaClient {
         request.setSellerLat(orderVo.getShopLat().doubleValue());
         request.setSellerLng(orderVo.getShopLng().doubleValue());
         //客人信息
-        request.setConsigneeAddress(orderVo.getReceiverAddress());
+        request.setConsigneeAddress(orderVo.getReceiverAddressWithHouseNumber());
         request.setConsigneeLat(orderVo.getReceiverLat().doubleValue());
         request.setConsigneeLng(orderVo.getReceiverLng().doubleValue());
         //订单货品信息

+ 2 - 1
lb-third/lb-third-delivery/src/main/java/com/ydd/third/delivery/shansong/ShansongClient.java

@@ -853,6 +853,7 @@ public class ShansongClient implements ClientHandler {
             resObject.setMsg(ex.getMessage());
             log.error(ex.getMessage());
         }
+        log.info("闪送查骑手位置返回"+JSONObject.toJSONString(resObject));
         return resObject;
     }
 
@@ -1073,7 +1074,7 @@ public class ShansongClient implements ClientHandler {
             paramsMap.put("sign", sign);
             String result = HttpClient.post(url, paramsMap);
             //String result = HttpUtil.postData("http://open.s.bingex.com/openapi/oauth/refresh_token", c);
-            log.info("闪送门店返回:"+result);
+            log.info("闪送查询门店返回:"+result);
             JSONObject json = JSONObject.parseObject(result);
 
             String of = json.getString("status");

+ 2 - 0
lb-third/lb-third-delivery/src/main/java/com/ydd/third/delivery/shunfeng/ShunfengClient.java

@@ -720,6 +720,8 @@ public class ShunfengClient implements ClientHandler {
             if (null != jsonData) {
                 resultVo.setLng(jsonData.getBigDecimal("rider_lng"));
                 resultVo.setLat(jsonData.getBigDecimal("rider_lat"));
+                resultVo.setName(jsonData.getString("rider_name"));
+                resultVo.setPhone(jsonData.getString("rider_phone"));
                 resultVo.setCurTime(new Date((jsonData.getLong("upload_time")) * 1000));
             }
             resultVo.setResData(jsonData);

+ 3 - 1
lb-third/lb-third-print/src/main/java/com/ydd/third/print/enums/PrintDeviceType.java

@@ -16,7 +16,9 @@ public enum PrintDeviceType {
     jby(24, "佳博云"),
     xhy(25, "芯烨云"),
     sp(26, "商鹏"),
-    ys(27, "优声");
+    ys(27, "优声"),
+
+    usb(99, "USB打印");
 
     public Integer type;
 

+ 23 - 9
lb-third/lb-third-print/src/main/java/com/ydd/third/print/feie/utils/PrintUtil.java

@@ -1,6 +1,7 @@
 package com.ydd.third.print.feie.utils;
 
 import com.ydd.common.utils.StringUtils;
+import com.ydd.ecloud.core.enums.DeletedEnum;
 import com.ydd.ecloud.core.enums.StatusEnum;
 import com.ydd.third.print.request.PrintOrderActDto;
 import com.ydd.third.print.request.PrintOrderDto;
@@ -39,7 +40,7 @@ public class PrintUtil {
     //orderList为数组  b1代表名称列占用字节  b2单价列 b3数量列 b4金额列-->这里的字节数可按自己需求自由改写,详细往上看112行调用实际例子运用
     public static String getCustomerOrder(PrintOrderDto printOrderDto, int b1, int b2, int b3, int b4) {
             try {
-                String orderInfo = "<CB>#" + printOrderDto.getDaySeq() + printOrderDto.getOrderSource() + "(客联)</CB><BR>";
+                String orderInfo = "<CB>#" + printOrderDto.getDaySeq() + printOrderDto.getOrderSource() + "(客联)</CB><BR>";
                 if (printOrderDto.getOrderStatus() != null){
                     orderInfo = "<CB>#" + printOrderDto.getDaySeq() + printOrderDto.getOrderSource()+ "</CB><BR>";
                     orderInfo += "<CB>"+"取消单</CB><BR>";
@@ -53,10 +54,21 @@ public class PrintUtil {
                 orderInfo += "------------商品----------------<BR>";
                 List<PrintOrderGoodsDto> printOrderGoodsDtos = printOrderDto.getOrderGoodsDtoList();
                 for (int i = 0; i < printOrderGoodsDtos.size(); i++) {
-                    String title = printOrderGoodsDtos.get(i).getFoodName();
+//                    String title = printOrderGoodsDtos.get(i).getFoodName();
+
+                    String title = "商品";
+                    if (printOrderDto.getCustomerLinkPrintGoodsDetail() != null && printOrderDto.getCustomerLinkPrintGoodsDetail().equals(DeletedEnum.YES.getValue())) {
+                      title = printOrderGoodsDtos.get(i).getFoodName();
+                    }
                     String num = printOrderGoodsDtos.get(i).getQuantity().toString();
-                    String total = "" + printOrderGoodsDtos.get(i).getPrice().multiply(new BigDecimal(printOrderGoodsDtos.get(i).getQuantity())).toString();
+//                    String total = "" + printOrderGoodsDtos.get(i).getPrice().multiply(new BigDecimal(printOrderGoodsDtos.get(i).getQuantity())).toString();
 
+                    String total;
+                    if (printOrderDto.getCustomerLinkPrintGoodsPrice() != null && printOrderDto.getCustomerLinkPrintGoodsPrice().equals(DeletedEnum.YES.getValue())) {
+                      total = "" + printOrderGoodsDtos.get(i).getPrice().multiply(new BigDecimal(printOrderGoodsDtos.get(i).getQuantity())).toString();
+                    }else {
+                        total = "";
+                    }
                     orderInfo = good(title, num, total, orderInfo);
                 }
                 if (StringUtils.isNotBlank(printOrderDto.getInvoiceTitle())){
@@ -72,7 +84,7 @@ public class PrintUtil {
                 }
                 orderInfo += "--------------------------------<BR>";
                 int spaceLength =4;
-                if (CollectionUtils.isNotEmpty(printOrderDto.getActDtos())) {
+                if (CollectionUtils.isNotEmpty(printOrderDto.getActDtos()) && printOrderDto.getCustomerLinkPrintGoodsPrice() != null && printOrderDto.getCustomerLinkPrintGoodsPrice().equals(DeletedEnum.YES.getValue())) {
                     for (PrintOrderActDto actDto : printOrderDto.getActDtos()) {
 
                         if ("饿了么".equals(printOrderDto.getOrderSource()) && "1".equals(actDto.getType())) {
@@ -83,7 +95,7 @@ public class PrintUtil {
 
                     }
                 }
-                if (CollectionUtils.isNotEmpty(printOrderDto.getActDtos())) {
+                if (CollectionUtils.isNotEmpty(printOrderDto.getActDtos()) && printOrderDto.getCustomerLinkPrintGoodsPrice() != null && printOrderDto.getCustomerLinkPrintGoodsPrice().equals(DeletedEnum.YES.getValue())) {
                     for (PrintOrderActDto actDto : printOrderDto.getActDtos()) {
                         String var = actDto.getName();
                         if (org.apache.commons.lang3.StringUtils.isNotBlank(actDto.getAmount())) {
@@ -97,15 +109,17 @@ public class PrintUtil {
 
                     }
                 }
-                if (StringUtils.isNotBlank(printOrderDto.getDeliverFee())) {
+                if (StringUtils.isNotBlank(printOrderDto.getDeliverFee()) && DeletedEnum.YES.getValue().equals(printOrderDto.getCustomerLinkPrintGoodsPrice())) {
                     orderInfo += "配送费:" +  p.addSpace(33-"配送费:".getBytes("gbk").length-printOrderDto.getDeliverFee().getBytes("gbk").length-spaceLength)+printOrderDto.getDeliverFee() + "元<BR>";
                 }
-                if (StringUtils.isNotBlank(printOrderDto.getBoxFee())) {
+                if (StringUtils.isNotBlank(printOrderDto.getBoxFee()) && DeletedEnum.YES.getValue().equals( printOrderDto.getCustomerLinkPrintGoodsPrice())) {
                     orderInfo += "餐盒费:" +p.addSpace(33-"配送费:".getBytes("gbk").length-printOrderDto.getBoxFee().getBytes("gbk").length-spaceLength)+ printOrderDto.getBoxFee() + "元<BR>";
                 }
                 orderInfo += "********************************<BR>";
-                orderInfo += "原价:" + printOrderDto.getOriginalPrice() + "元<BR>";
-                orderInfo += "<B>实付:" + printOrderDto.getTotalPrice() + "元</B><BR>";
+                if (printOrderDto.getCustomerLinkPrintGoodsPrice() != null &&  printOrderDto.getCustomerLinkPrintGoodsPrice().equals(DeletedEnum.YES.getValue())) {
+                   orderInfo += "原价:" + printOrderDto.getOriginalPrice() + "元<BR>";
+                   orderInfo += "<B>实付:" + printOrderDto.getTotalPrice() + "元</B><BR>";
+                }
                 orderInfo += "--------------------------------<BR>";
                 orderInfo += "<B>地址:" + printOrderDto.getRecipientAddress() + "</B><BR>";
                 orderInfo += "<L>" + printOrderDto.getRecipientName() + "</L><BR>";

+ 24 - 10
lb-third/lb-third-print/src/main/java/com/ydd/third/print/jiaboyun/service/JBYPrintService.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.ydd.common.utils.StringUtils;
+import com.ydd.ecloud.core.enums.DeletedEnum;
 import com.ydd.third.print.feie.utils.PrintUtil;
 import com.ydd.third.print.jiaboyun.config.Config;
 import com.ydd.third.print.jiaboyun.utils.JBYApi;
@@ -138,7 +139,7 @@ public class JBYPrintService implements PrintService {
 
     private static String printerCustomerContent(PrintOrderDto printOrderDto){
         try {
-            String content= "<gpWord Align=1 Bold=0 Wsize=1 Hsize=1 Reverse=0 Underline=0>#"+printOrderDto.getDaySeq()+ printOrderDto.getOrderSource() + "(客联)</gpWord><gpBr/>";
+            String content= "<gpWord Align=1 Bold=0 Wsize=1 Hsize=1 Reverse=0 Underline=0>#"+printOrderDto.getDaySeq()+ printOrderDto.getOrderSource() + "(客联)</gpWord><gpBr/>";
             if (printOrderDto.getOrderStatus() != null){
                 content= "<gpWord Align=1 Bold=0 Wsize=1 Hsize=1 Reverse=0 Underline=0>#"+printOrderDto.getDaySeq()+ printOrderDto.getOrderSource() + "</gpWord><gpBr/>";
                 content += "<gpWord Align=1 Bold=0 Wsize=1 Hsize=1 Reverse=0 Underline=0>取消单</gpWord><gpBr/>";
@@ -151,10 +152,19 @@ public class JBYPrintService implements PrintService {
             content += "------------商品----------------<gpBr/>";
             List<PrintOrderGoodsDto> printOrderGoodsDtos = printOrderDto.getOrderGoodsDtoList();
             for (int i = 0; i < printOrderGoodsDtos.size(); i++) {
-                String title = printOrderGoodsDtos.get(i).getFoodName();
+//                String title = printOrderGoodsDtos.get(i).getFoodName();
+                String title = "商品";
+                if (printOrderDto.getCustomerLinkPrintGoodsDetail() != null && printOrderDto.getCustomerLinkPrintGoodsDetail().equals(DeletedEnum.YES.getValue())) {
+                  title = printOrderGoodsDtos.get(i).getFoodName();
+                }
                 String num = printOrderGoodsDtos.get(i).getQuantity().toString();
-                String total = "" + printOrderGoodsDtos.get(i).getPrice().multiply(new BigDecimal(printOrderGoodsDtos.get(i).getQuantity())).toString();
-
+//                String total = "" + printOrderGoodsDtos.get(i).getPrice().multiply(new BigDecimal(printOrderGoodsDtos.get(i).getQuantity())).toString();
+                String total;
+                if (printOrderDto.getCustomerLinkPrintGoodsPrice() != null && printOrderDto.getCustomerLinkPrintGoodsPrice().equals(DeletedEnum.YES.getValue())) {
+                  total = "" + printOrderGoodsDtos.get(i).getPrice().multiply(new BigDecimal(printOrderGoodsDtos.get(i).getQuantity())).toString();
+                }else {
+                    total = "";
+                }
                 content = good(title, num, total, content);
             }
             if (StringUtils.isNotBlank(printOrderDto.getInvoiceTitle())){
@@ -170,7 +180,7 @@ public class JBYPrintService implements PrintService {
             }
             content += "--------------------------------<gpBr/>";
             int spaceLength =4;
-            if (CollectionUtils.isNotEmpty(printOrderDto.getActDtos())) {
+            if (CollectionUtils.isNotEmpty(printOrderDto.getActDtos()) && printOrderDto.getCustomerLinkPrintGoodsPrice() != null && printOrderDto.getCustomerLinkPrintGoodsPrice().equals(DeletedEnum.YES.getValue())) {
                 for (PrintOrderActDto actDto : printOrderDto.getActDtos()) {
 
                     if ("饿了么".equals(printOrderDto.getOrderSource()) && "1".equals(actDto.getType())) {
@@ -180,7 +190,7 @@ public class JBYPrintService implements PrintService {
                     }
                 }
             }
-            if (CollectionUtils.isNotEmpty(printOrderDto.getActDtos())) {
+            if (CollectionUtils.isNotEmpty(printOrderDto.getActDtos()) && printOrderDto.getCustomerLinkPrintGoodsPrice() != null && printOrderDto.getCustomerLinkPrintGoodsPrice().equals(DeletedEnum.YES.getValue())) {
                 for (PrintOrderActDto actDto : printOrderDto.getActDtos()) {
                     String var = actDto.getName();
                     if (org.apache.commons.lang3.StringUtils.isNotBlank(actDto.getAmount())) {
@@ -194,15 +204,19 @@ public class JBYPrintService implements PrintService {
 
                 }
             }
-            if (StringUtils.isNotBlank(printOrderDto.getDeliverFee())) {
+            if (StringUtils.isNotBlank(printOrderDto.getDeliverFee()) && printOrderDto.getCustomerLinkPrintGoodsPrice() != null && printOrderDto.getCustomerLinkPrintGoodsPrice().equals(DeletedEnum.YES.getValue())) {
                 content += "配送费:" +  p.addSpace(33-"配送费:".getBytes("gbk").length-printOrderDto.getDeliverFee().getBytes("gbk").length-spaceLength)+printOrderDto.getDeliverFee() + "元<gpBr/>";
             }
-            if (StringUtils.isNotBlank(printOrderDto.getBoxFee())) {
+            if (StringUtils.isNotBlank(printOrderDto.getBoxFee()) && printOrderDto.getCustomerLinkPrintGoodsPrice() != null && printOrderDto.getCustomerLinkPrintGoodsPrice().equals(DeletedEnum.YES.getValue())) {
                 content += "餐盒费:" +p.addSpace(33-"配送费:".getBytes("gbk").length-printOrderDto.getBoxFee().getBytes("gbk").length-spaceLength)+ printOrderDto.getBoxFee() + "元<gpBr/>";
             }
             content += "********************************<gpBr/>";
-            content += "原价:" + printOrderDto.getOriginalPrice() + "元<gpBr/>";
-            content += "<gpWord Align=0 Bold=0 Wsize=1 Hsize=1 Reverse=0 Underline=0>实付:" + printOrderDto.getTotalPrice() + "元</gpWord><gpBr/>";
+//            content += "原价:" + printOrderDto.getOriginalPrice() + "元<gpBr/>";
+//            content += "<gpWord Align=0 Bold=0 Wsize=1 Hsize=1 Reverse=0 Underline=0>实付:" + printOrderDto.getTotalPrice() + "元</gpWord><gpBr/>";
+            if (printOrderDto.getCustomerLinkPrintGoodsPrice() != null && printOrderDto.getCustomerLinkPrintGoodsPrice().equals(DeletedEnum.YES.getValue())) {
+                content += "原价:" + printOrderDto.getOriginalPrice() + "元<gpBr/>";
+                content += "<gpWord Align=0 Bold=0 Wsize=1 Hsize=1 Reverse=0 Underline=0>实付:" + printOrderDto.getTotalPrice() + "元</gpWord><gpBr/>";
+            }
             content += "--------------------------------<gpBr/>";
             content += "<gpWord Align=0 Bold=1 Wsize=1 Hsize=1 Reverse=0 Underline=0>地址:" + printOrderDto.getRecipientAddress() + "</gpWord><gpBr/>";
             content +=" <gpWord Align=0 Bold=0 Wsize=0 Hsize=1 Reverse=0 Underline=0>"+printOrderDto.getRecipientName() + "</gpWord><gpBr/>";

+ 12 - 0
lb-third/lb-third-print/src/main/java/com/ydd/third/print/request/PrintOrderDto.java

@@ -1,5 +1,6 @@
 package com.ydd.third.print.request;
 
+import com.ydd.common.utils.EncryptUtils;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -113,6 +114,14 @@ public class PrintOrderDto implements Serializable {
     private Integer openQrCode;
 
     private String encryptRecipientPhone;
+    /**
+     * 是否打印客户联商品明细: 1->打印,0->不打印,
+     */
+    private Integer customerLinkPrintGoodsDetail;
+    /**
+     * 是否打印客户联商品价格: 1->打印,0->不打印
+     */
+    private Integer customerLinkPrintGoodsPrice;
 
 //    public String getDeliverTime() {
 //        if(StringUtils.isNotBlank(deliveryTime)){
@@ -135,4 +144,7 @@ public class PrintOrderDto implements Serializable {
         return recipientPhone;
     }
 
+    public String getEncryptRecipientPhone() {
+        return EncryptUtils.aesEncrypt(encryptRecipientPhone,EncryptUtils.KEY);
+    }
 }

+ 0 - 0
lb-third/lb-third-print/src/main/java/com/ydd/third/print/shangpengyun/service/SPYPrintService.java


部分文件因为文件数量过多而无法显示