Browse Source

Merge branch 'master' of http://git.dayaedu.com/yonge/cooleshow into zouxuan

zouxuan 2 years ago
parent
commit
53268706f6
100 changed files with 1854 additions and 2283 deletions
  1. 1 1
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/client/SysUserFeignService.java
  2. 1 2
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/TokenController.java
  3. 0 36
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/PlatformEnum.java
  4. 13 2
      cooleshow-mall/mall-admin/pom.xml
  5. 2 2
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/MallAdminApplication.java
  6. 17 10
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/AdminStatisticalController.java
  7. 5 4
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/OmsOrderReturnApplyController.java
  8. 0 62
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/PaymentController.java
  9. 3 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/UmsAdminController.java
  10. 14 5
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/dao/OmsOrderDao.java
  11. 6 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/dao/PmsProductDao.java
  12. 123 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/dto/HomeOrderStatistical.java
  13. 3 3
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/dto/HomeStatistical.java
  14. 50 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/dto/OrderStatistical.java
  15. 11 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/dto/PmsProductQueryParam.java
  16. 36 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/dto/search/OrderStatisticalSearch.java
  17. 29 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/enums/OrderStatisticalEnum.java
  18. 0 6
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/OmsOrderReturnApplyService.java
  19. 10 2
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/OmsOrderService.java
  20. 9 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/UmsAdminService.java
  21. 60 83
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/OmsOrderReturnApplyServiceImpl.java
  22. 173 7
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/OmsOrderServiceImpl.java
  23. 7 27
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/PmsProductServiceImpl.java
  24. 19 8
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/UmsAdminServiceImpl.java
  25. 47 0
      cooleshow-mall/mall-admin/src/main/resources/config/mybatis/OmsOrderDao.xml
  26. 41 0
      cooleshow-mall/mall-admin/src/main/resources/config/mybatis/PmsProductDao.xml
  27. 1 1
      cooleshow-mall/mall-admin/src/main/resources/logback-spring.xml
  28. 4 4
      cooleshow-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/enums/OrderCacheEnum.java
  29. 10 0
      cooleshow-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/exception/GlobalExceptionHandler.java
  30. 4 0
      cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/mapper/PmsProductMapper.java
  31. 8 0
      cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/mapper/UserOrderPaymentMapper.java
  32. 2 0
      cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/mapper/UserOrderRefundMapper.java
  33. 2 0
      cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/OmsCartItem.java
  34. 11 0
      cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/OmsOrderItem.java
  35. 12 0
      cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/OmsOrderReturnApply.java
  36. 11 0
      cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/PmsProduct.java
  37. 23 0
      cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/UserOrderPayment.java
  38. 11 0
      cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/UserOrderRefund.java
  39. 5 2
      cooleshow-mall/mall-mbg/src/main/resources/config/mybatis/OmsOrderItemMapper.xml
  40. 18 3
      cooleshow-mall/mall-mbg/src/main/resources/config/mybatis/OmsOrderReturnApplyMapper.xml
  41. 26 3
      cooleshow-mall/mall-mbg/src/main/resources/config/mybatis/PmsProductMapper.xml
  42. 33 5
      cooleshow-mall/mall-mbg/src/main/resources/config/mybatis/UserOrderPaymentMapper.xml
  43. 25 3
      cooleshow-mall/mall-mbg/src/main/resources/config/mybatis/UserOrderRefundMapper.xml
  44. 0 43
      cooleshow-mall/mall-pay/pom.xml
  45. 0 36
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/config/HuifuConfiguration.java
  46. 0 40
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/enums/OrderStatusEnum.java
  47. 0 37
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/enums/PayChannelEnum.java
  48. 0 37
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/enums/PayStatusEnum.java
  49. 0 110
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/props/HuifuProperties.java
  50. 0 260
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/adapay/PaymentSdk.java
  51. 0 170
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/adapay/dto/PaymentReq.java
  52. 0 139
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/adapay/dto/RefundReq.java
  53. 0 27
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/req/DeviceInfo.java
  54. 0 55
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/req/DivMember.java
  55. 0 52
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/req/OrderCloseReq.java
  56. 0 68
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/req/OrderRefundReq.java
  57. 0 73
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/req/PaymentConfirmParam.java
  58. 0 39
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/res/OrderCloseRes.java
  59. 0 92
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/res/OrderRefundRes.java
  60. 0 50
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/service/PaymentService.java
  61. 0 145
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/service/impl/AdapayPaymentServiceImpl.java
  62. 0 116
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/util/DistributedLock.java
  63. 9 4
      cooleshow-mall/mall-portal/pom.xml
  64. 2 2
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/MallPortalApplication.java
  65. 1 1
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/component/CancelOrderReceiver.java
  66. 1 1
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsPortalOrderController.java
  67. 3 2
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsPortalOrderReturnApplyController.java
  68. 126 67
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/PaymentController.java
  69. 2 1
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dao/OmsOrderReturnApplyDao.java
  70. 6 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dao/PortalProductDao.java
  71. 12 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/domain/OmsOrderReturnApplyParam.java
  72. 29 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/domain/ProductStock.java
  73. 37 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dto/OmsOrderReturnApplyVo.java
  74. 6 6
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dto/OmsReturnApplyQueryParam.java
  75. 26 63
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dto/OrderPayReq.java
  76. 1 13
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dto/OrderPayRes.java
  77. 5 1
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/OmsPortalOrderReturnApplyService.java
  78. 21 11
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/OmsPortalOrderService.java
  79. 12 6
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/UserOrderPaymentService.java
  80. 33 6
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsCartItemServiceImpl.java
  81. 99 4
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderReturnApplyServiceImpl.java
  82. 279 128
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java
  83. 39 10
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPromotionServiceImpl.java
  84. 31 19
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/UserOrderPaymentServiceImpl.java
  85. 13 14
      cooleshow-mall/mall-portal/src/main/resources/config/mybatis/OmsOrderReturnApplyDao.xml
  86. 1 0
      cooleshow-mall/mall-portal/src/main/resources/config/mybatis/PortalOrderDao.xml
  87. 21 5
      cooleshow-mall/mall-portal/src/main/resources/config/mybatis/PortalProductDao.xml
  88. 1 1
      cooleshow-mall/mall-portal/src/main/resources/logback-spring.xml
  89. 0 1
      cooleshow-mall/pom.xml
  90. 5 4
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/SmsCodeController.java
  91. 2 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderRefundController.java
  92. 42 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/VipCardRecordController.java
  93. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/convert/AudioTypeConverter.java
  94. 7 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java
  95. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleRepliedDao.java
  96. 15 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleStudentDao.java
  97. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/PinaoRoomTimeDao.java
  98. 19 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserBindingTeacherDao.java
  99. 19 16
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderRefundDao.java
  100. 26 23
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VipCardRecordDao.java

+ 1 - 1
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/client/SysUserFeignService.java

@@ -53,7 +53,7 @@ public interface SysUserFeignService {
 										   @RequestParam("clientId")String clientId,
 										   @RequestParam("clientSecret")String clientSecret);
 
-	@PostMapping(value = "exit",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
+	@GetMapping(value = "exit")
 	@ApiOperation(value = "退出登录")
 	HttpResponseResult<String> logout();
 

+ 1 - 2
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/TokenController.java

@@ -124,10 +124,9 @@ public class TokenController extends BaseController {
 		return succeed(objectMapper.readValue(resp.getBody(), Map.class));
 	}
 
-	@PostMapping(value = "exit",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
+	@GetMapping(value = "exit")
 	@ApiOperation(value = "退出登录")
 	public HttpResponseResult<String> logout(HttpServletRequest request) {
-		
 		String authHeader = request.getHeader(HttpHeaders.AUTHORIZATION);
 		if (StringUtils.isBlank(authHeader)) {
 			return failed("退出失败,token 为空");

+ 0 - 36
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/PlatformEnum.java

@@ -1,36 +0,0 @@
-package com.yonge.cooleshow.common.enums;
-
-import com.yonge.toolset.base.enums.BaseEnum;
-
-/**
- * Description
- *
- * @author liujunchi
- * @date 2022-04-24
- */
-public enum PlatformEnum implements BaseEnum<String,PlatformEnum> {
-
-    STUDENT("STUDENT","STUDENT"),
-    TEACHER("TEACHER","TEACHER");
-
-    private String code;
-    private String msg;
-
-    PlatformEnum(String code,String msg) {
-        this.code = code;
-        this.msg = msg;
-    }
-
-    @Override
-    public String getCode() {
-        return this.code;
-    }
-
-    public String getMsg() {
-        return msg;
-    }
-
-    public void setMsg(String msg) {
-        this.msg = msg;
-    }
-}

+ 13 - 2
cooleshow-mall/mall-admin/pom.xml

@@ -37,6 +37,16 @@
         <dependency>
             <groupId>com.yonge.cooleshow</groupId>
             <artifactId>mall-mbg</artifactId>
+            <exclusions>
+                <exclusion>
+                    <artifactId>mybatis</artifactId>
+                    <groupId>org.mybatis</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>mybatis-spring</artifactId>
+                    <groupId>org.mybatis</groupId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>com.yonge.cooleshow</groupId>
@@ -62,8 +72,9 @@
         </dependency>
 
         <dependency>
-            <groupId>com.yonge.cooleshow</groupId>
-            <artifactId>mall-pay</artifactId>
+            <groupId>com.yonge.toolset</groupId>
+            <artifactId>toolset-payment</artifactId>
+            <version>${project.toolset.version}</version>
         </dependency>
 
         <dependency>

+ 2 - 2
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/MallAdminApplication.java

@@ -14,9 +14,9 @@ import org.springframework.context.annotation.ComponentScan;
  */
 @SpringBootApplication
 @EnableDiscoveryClient
-@MapperScan({"com.yonge.cooleshow.admin.dao","com.yonge.cooleshow.mbg.mapper"})
+@MapperScan({"com.yonge.cooleshow.admin.dao","com.yonge.cooleshow.mbg.mapper", "com.yonge.toolset.payment.core.dao"})
 @ComponentScan(basePackages = {"com.yonge.cooleshow.admin", "com.yonge.cooleshow.mbg", "com.yonge.cooleshow.mall.common",
-                               "com.yonge.cooleshow.common","com.yonge.cooleshow","com.yonge.toolset.thirdparty"})
+                               "com.yonge.cooleshow.common","com.yonge.toolset.thirdparty","com.yonge.toolset.payment","com.yonge.toolset.log"})
 @EnableSwagger2Doc
 @EnableFeignClients("com.yonge.cooleshow")
 public class MallAdminApplication {

+ 17 - 10
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/AdminStatisticalController.java

@@ -1,20 +1,15 @@
 package com.yonge.cooleshow.admin.controller;
 
+import com.yonge.cooleshow.admin.dto.HomeOrderStatistical;
 import com.yonge.cooleshow.admin.dto.HomeStatistical;
-import com.yonge.cooleshow.admin.dto.search.UserStatisticalSearch;
+import com.yonge.cooleshow.admin.dto.search.OrderStatisticalSearch;
 import com.yonge.cooleshow.admin.service.OmsOrderService;
 import com.yonge.cooleshow.mall.common.api.CommonResult;
-import com.yonge.cooleshow.mbg.model.CmsPrefrenceArea;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-import java.util.List;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * Description
@@ -34,11 +29,23 @@ public class AdminStatisticalController {
     @ApiOperation("商城首页统计")
     @RequestMapping(value = "/home", method = RequestMethod.GET)
     @ResponseBody
-    public CommonResult<HomeStatistical> userStatistical() {
+    public CommonResult<HomeStatistical> count() {
 
-        HomeStatistical statistical = orderService.statistical();
+        HomeStatistical statistical = orderService.countStatistical();
 
         return CommonResult.success(statistical);
 
     }
+
+
+    @ApiOperation("商城首页统计")
+    @PostMapping(value = "/orderStatistical")
+    @ResponseBody
+    public CommonResult<HomeOrderStatistical> orderStatistical(@RequestBody OrderStatisticalSearch search) {
+
+        HomeOrderStatistical homeOrderStatistical = orderService.orderStatistical(search);
+
+        return CommonResult.success(homeOrderStatistical);
+
+    }
 }

+ 5 - 4
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/OmsOrderReturnApplyController.java

@@ -1,6 +1,6 @@
 package com.yonge.cooleshow.admin.controller;
 
-import com.yonge.cooleshow.enums.OrdeerCacherEnmu;
+import com.yonge.cooleshow.mall.common.enums.OrderCacheEnum;
 import com.yonge.cooleshow.mall.common.api.CommonPage;
 import com.yonge.cooleshow.mall.common.api.CommonResult;
 import com.yonge.cooleshow.admin.dto.OmsOrderReturnApplyResult;
@@ -70,7 +70,7 @@ public class OmsOrderReturnApplyController {
     @RequestMapping(value = "/update/status/{id}", method = RequestMethod.POST)
     @ResponseBody
     public CommonResult updateStatus(@PathVariable Long id, @RequestBody OmsUpdateStatusParam statusParam) {
-        RLock lock = redissonClient.getLock(OrdeerCacherEnmu.LOCK_REFUND_ORDER_MALL + ":refundOrder:" + id);
+        RLock lock = redissonClient.getLock(OrderCacheEnum.LOCK_REFUND_ORDER_MALL + ":refundOrder:" + id);
         try {
             boolean b = lock.tryLock(60, 60, TimeUnit.SECONDS);
             if (b) {
@@ -79,9 +79,10 @@ public class OmsOrderReturnApplyController {
                     return CommonResult.success(count);
                 }
             }
-        } catch (Exception e) {
-            log.error(e.getLocalizedMessage());
+        } catch (InterruptedException e) {
             e.printStackTrace();
+            log.warn("");
+        } finally {
             lock.unlock();
         }
 

+ 0 - 62
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/PaymentController.java

@@ -1,62 +0,0 @@
-package com.yonge.cooleshow.admin.controller;
-
-import com.huifu.adapay.core.AdapayCore;
-import com.huifu.adapay.core.util.AdapaySign;
-import com.yonge.cooleshow.admin.service.OmsOrderReturnApplyService;
-import com.yonge.cooleshow.common.controller.BaseController;
-import io.swagger.annotations.Api;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * @Author: liweifan
- * @Data: 2022/3/11 18:16
- */
-@RestController
-@RequestMapping("/payment")
-@Api(value = "付款接口", tags = "付款接口")
-public class PaymentController extends BaseController {
-    private final static Logger log = LoggerFactory.getLogger(PaymentController.class);
-
-    @Autowired
-    private OmsOrderReturnApplyService orderReturnApplyService;
-
-    /**
-     * 汇付回调
-     * 问题:1、成功失败需要回执什么信息 2、回调url地址是否需要加入白名单
-     * @author liweifan
-     * @param: request
-     * @updateTime 2022/3/11 18:35
-     */
-    @PostMapping("/callback")
-    public void callback(HttpServletRequest request) {
-        try {
-            //验签传参data
-            String data = request.getParameter("data");
-            //验签传参sign
-            String sign = request.getParameter("sign");
-            //验签传参publicKey
-            String publicKey = AdapayCore.PUBLIC_KEY;
-            //验签
-            boolean checkSign = AdapaySign.verifySign(data, sign, publicKey);
-            log.info("汇付回调,res is {}", data);
-            if (checkSign) {
-                //验签成功逻辑
-                log.info("验签成功");
-                String type = request.getParameter("type");
-                if (type.contains("refund")) {
-                    orderReturnApplyService.orderCallback(data);
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-}

+ 3 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/UmsAdminController.java

@@ -82,6 +82,9 @@ public class UmsAdminController {
         if (umsAdmin == null) {
             return CommonResult.failed("用户同步失败");
         }
+
+        adminService.updateInfo(umsAdmin.getId(),sysUser);
+
         if (umsAdmin.getStatus() == 0) {
             return CommonResult.failed("用户被禁用");
         }

+ 14 - 5
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/dao/OmsOrderDao.java

@@ -1,13 +1,11 @@
 package com.yonge.cooleshow.admin.dao;
 
-import com.yonge.cooleshow.admin.dto.HomeStatistical;
-import com.yonge.cooleshow.admin.dto.OmsOrderDeliveryParam;
-import com.yonge.cooleshow.admin.dto.OmsOrderDetail;
-import com.yonge.cooleshow.admin.dto.OmsOrderQueryParam;
+import com.yonge.cooleshow.admin.dto.*;
 import com.yonge.cooleshow.admin.dto.search.UserStatisticalSearch;
 import com.yonge.cooleshow.mbg.model.OmsOrder;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -31,10 +29,21 @@ public interface OmsOrderDao {
      */
     OmsOrderDetail getDetail(@Param("id") Long id);
 
-    List<Map<String,Object>> getUserOrderInfoList(Map<String, Object> param);
+    List<Map<String, Object>> getUserOrderInfoList(Map<String, Object> param);
 
     /**
      * 统计订单状态数量
      */
     HomeStatistical selectOrderStatusNum();
+
+    /**
+     * 统计订单完成数量 和订单金额
+     *
+     * @param startTime  开始时间
+     * @param endTime    结束时间
+     * @param dateFormat 时间统计格式   (DAY:按天统计, WEEK:按周统计, MONTH:按月统计)
+     * @return
+     */
+    List<OrderStatistical> selectOrderCountAndAmount(@Param("startTime") Date startTime, @Param("endTime") Date endTime,
+                                                     @Param("dateFormat") String dateFormat);
 }

+ 6 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/dao/PmsProductDao.java

@@ -1,9 +1,13 @@
 package com.yonge.cooleshow.admin.dao;
 
 import com.yonge.cooleshow.admin.dto.HomeStatistical;
+import com.yonge.cooleshow.admin.dto.PmsProductQueryParam;
 import com.yonge.cooleshow.admin.dto.PmsProductResult;
+import com.yonge.cooleshow.mbg.model.PmsProduct;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 
 /**
  * 商品管理自定义Dao
@@ -18,4 +22,6 @@ public interface PmsProductDao {
     HomeStatistical selectLowStockCount();
 
     HomeStatistical selectProductShowStatusCount();
+
+    List<PmsProduct> list(@Param("param") PmsProductQueryParam productQueryParam);
 }

+ 123 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/dto/HomeOrderStatistical.java

@@ -0,0 +1,123 @@
+package com.yonge.cooleshow.admin.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-25
+ */
+@ApiModel("首页订单统计数据")
+public class HomeOrderStatistical {
+
+    @ApiModelProperty("本月订单数")
+    private Integer monthOrderCount;
+
+    @ApiModelProperty("订单数同比上月")
+    private Integer monthOrderCountProportion;
+
+    @ApiModelProperty("本周订单数")
+    private Integer weekOrderCount;
+
+
+    @ApiModelProperty("订单数同比上周")
+    private Integer weekOrderCountProportion;
+
+
+    @ApiModelProperty("本月订单金额")
+    private BigDecimal monthOrderAmount;
+
+
+    @ApiModelProperty("本月订单同比金额")
+    private Integer monthOrderAmountProportion;
+
+
+    @ApiModelProperty("本周订单数")
+    private BigDecimal weekOrderAmount;
+
+
+    @ApiModelProperty("本周订单同比金额")
+    private Integer weekOrderAmountProportion;
+
+    @ApiModelProperty("统计图数据")
+    private List<OrderStatistical> orderStatisticalList;
+
+
+    public Integer getMonthOrderCount() {
+        return monthOrderCount;
+    }
+
+    public void setMonthOrderCount(Integer monthOrderCount) {
+        this.monthOrderCount = monthOrderCount;
+    }
+
+    public Integer getMonthOrderCountProportion() {
+        return monthOrderCountProportion;
+    }
+
+    public void setMonthOrderCountProportion(Integer monthOrderCountProportion) {
+        this.monthOrderCountProportion = monthOrderCountProportion;
+    }
+
+    public Integer getWeekOrderCount() {
+        return weekOrderCount;
+    }
+
+    public void setWeekOrderCount(Integer weekOrderCount) {
+        this.weekOrderCount = weekOrderCount;
+    }
+
+    public Integer getWeekOrderCountProportion() {
+        return weekOrderCountProportion;
+    }
+
+    public void setWeekOrderCountProportion(Integer weekOrderCountProportion) {
+        this.weekOrderCountProportion = weekOrderCountProportion;
+    }
+
+    public BigDecimal getMonthOrderAmount() {
+        return monthOrderAmount;
+    }
+
+    public void setMonthOrderAmount(BigDecimal monthOrderAmount) {
+        this.monthOrderAmount = monthOrderAmount;
+    }
+
+    public Integer getMonthOrderAmountProportion() {
+        return monthOrderAmountProportion;
+    }
+
+    public void setMonthOrderAmountProportion(Integer monthOrderAmountProportion) {
+        this.monthOrderAmountProportion = monthOrderAmountProportion;
+    }
+
+    public BigDecimal getWeekOrderAmount() {
+        return weekOrderAmount;
+    }
+
+    public void setWeekOrderAmount(BigDecimal weekOrderAmount) {
+        this.weekOrderAmount = weekOrderAmount;
+    }
+
+    public Integer getWeekOrderAmountProportion() {
+        return weekOrderAmountProportion;
+    }
+
+    public void setWeekOrderAmountProportion(Integer weekOrderAmountProportion) {
+        this.weekOrderAmountProportion = weekOrderAmountProportion;
+    }
+
+    public List<OrderStatistical> getOrderStatisticalList() {
+        return orderStatisticalList;
+    }
+
+    public void setOrderStatisticalList(List<OrderStatistical> orderStatisticalList) {
+        this.orderStatisticalList = orderStatisticalList;
+    }
+}
+

+ 3 - 3
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/dto/HomeStatistical.java

@@ -24,7 +24,7 @@ public class HomeStatistical {
     private Integer yesterdayOrderNum;
 
     @ApiModelProperty("昨日销售金额")
-    private Integer yesterdayOrderAmount;
+    private BigDecimal yesterdayOrderAmount;
 
 
     @ApiModelProperty("待付款订单")
@@ -90,11 +90,11 @@ public class HomeStatistical {
         this.yesterdayOrderNum = yesterdayOrderNum;
     }
 
-    public Integer getYesterdayOrderAmount() {
+    public BigDecimal getYesterdayOrderAmount() {
         return yesterdayOrderAmount;
     }
 
-    public void setYesterdayOrderAmount(Integer yesterdayOrderAmount) {
+    public void setYesterdayOrderAmount(BigDecimal yesterdayOrderAmount) {
         this.yesterdayOrderAmount = yesterdayOrderAmount;
     }
 

+ 50 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/dto/OrderStatistical.java

@@ -0,0 +1,50 @@
+package com.yonge.cooleshow.admin.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-25
+ */
+@ApiModel("订单统计")
+public class OrderStatistical {
+
+    @ApiModelProperty("日期")
+    private String date;
+
+    @ApiModelProperty("订单数")
+    private Integer orderNum;
+
+    @ApiModelProperty("订单总额")
+    private BigDecimal orderAmount;
+
+
+    public String getDate() {
+        return date;
+    }
+
+    public void setDate(String date) {
+        this.date = date;
+    }
+
+    public Integer getOrderNum() {
+        return orderNum;
+    }
+
+    public void setOrderNum(Integer orderNum) {
+        this.orderNum = orderNum;
+    }
+
+    public BigDecimal getOrderAmount() {
+        return orderAmount;
+    }
+
+    public void setOrderAmount(BigDecimal orderAmount) {
+        this.orderAmount = orderAmount;
+    }
+}

+ 11 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/dto/PmsProductQueryParam.java

@@ -21,6 +21,17 @@ public class PmsProductQueryParam {
     @ApiModelProperty("商品品牌编号")
     private Long brandId;
 
+    @ApiModelProperty("是否缺货 0:否,1;是")
+    private Integer stock;
+
+    public Integer getStock() {
+        return stock;
+    }
+
+    public void setStock(Integer stock) {
+        this.stock = stock;
+    }
+
     public Integer getPublishStatus() {
         return publishStatus;
     }

+ 36 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/dto/search/OrderStatisticalSearch.java

@@ -0,0 +1,36 @@
+package com.yonge.cooleshow.admin.dto.search;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-25
+ */
+@ApiModel("商城首页订单统计")
+public class OrderStatisticalSearch {
+
+    @ApiModelProperty("开始日期 (yyyy-MM-dd)")
+    private String startDate;
+
+    @ApiModelProperty("结束日期(yyyy-MM-dd)")
+    private String endDate;
+
+    public String getStartDate() {
+        return startDate;
+    }
+
+    public void setStartDate(String startDate) {
+        this.startDate = startDate;
+    }
+
+    public String getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(String endDate) {
+        this.endDate = endDate;
+    }
+}

+ 29 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/enums/OrderStatisticalEnum.java

@@ -0,0 +1,29 @@
+package com.yonge.cooleshow.admin.enums;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-25
+ */
+public enum OrderStatisticalEnum {
+
+    DAY("按天统计"),
+    WEEK("按周统计"),
+    MONTH("按月统计"),
+    ;
+
+    private String msg;
+
+    OrderStatisticalEnum(String msg) {
+        this.msg = msg;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+}

+ 0 - 6
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/OmsOrderReturnApplyService.java

@@ -33,12 +33,6 @@ public interface OmsOrderReturnApplyService {
      */
     OmsOrderReturnApplyResult getItem(Long id);
 
-    /**
-     * 退款订单回调
-     *
-     * @param data
-     */
-    void orderCallback(String data);
 
     /**
      * 统计 待处理退款申请 待处理退货订单

+ 10 - 2
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/OmsOrderService.java

@@ -1,9 +1,9 @@
 package com.yonge.cooleshow.admin.service;
 
 import com.yonge.cooleshow.admin.dto.*;
+import com.yonge.cooleshow.admin.dto.search.OrderStatisticalSearch;
 import com.yonge.cooleshow.admin.dto.search.UserStatisticalSearch;
 import com.yonge.cooleshow.mbg.model.OmsOrder;
-import com.yonge.cooleshow.admin.dto.*;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
@@ -80,5 +80,13 @@ public interface OmsOrderService {
     /**
      * 首页统计
      */
-    HomeStatistical statistical();
+    HomeStatistical countStatistical();
+
+    /**
+     * 订单统计
+     *
+     * @param search 条件
+     * @return
+     */
+    HomeOrderStatistical orderStatistical(OrderStatisticalSearch search);
 }

+ 9 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/UmsAdminService.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.admin.service;
 
 import com.yonge.cooleshow.admin.dto.UmsAdminParam;
 import com.yonge.cooleshow.admin.dto.UpdateAdminPasswordParam;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.mbg.model.UmsAdmin;
 import com.yonge.cooleshow.mbg.model.UmsResource;
 import com.yonge.cooleshow.mbg.model.UmsRole;
@@ -85,4 +86,12 @@ public interface UmsAdminService {
      */
     @Transactional
     void saveAdmin();
+
+    /**
+     * 更新登录用户信息
+     *
+     * @param umsAdminId
+     * @param sysUser
+     */
+    void updateInfo(Long umsAdminId, SysUser sysUser);
 }

+ 60 - 83
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/OmsOrderReturnApplyServiceImpl.java

@@ -7,19 +7,21 @@ import com.yonge.cooleshow.admin.dto.HomeStatistical;
 import com.yonge.cooleshow.admin.dto.OmsOrderReturnApplyResult;
 import com.yonge.cooleshow.admin.dto.OmsReturnApplyQueryParam;
 import com.yonge.cooleshow.admin.dto.OmsUpdateStatusParam;
+import com.yonge.cooleshow.mall.common.exception.ApiException;
+import com.yonge.cooleshow.mall.common.service.RedisService;
+import com.yonge.cooleshow.mbg.model.*;
 import com.yonge.toolset.base.exception.BizException;
-import com.yonge.cooleshow.enums.PayStatusEnum;
 import com.yonge.cooleshow.mbg.mapper.OmsOrderReturnApplyMapper;
 import com.yonge.cooleshow.mbg.mapper.UserOrderPaymentMapper;
 import com.yonge.cooleshow.mbg.mapper.UserOrderRefundMapper;
-import com.yonge.cooleshow.mbg.model.OmsOrderReturnApply;
-import com.yonge.cooleshow.mbg.model.OmsOrderReturnApplyExample;
 import com.yonge.cooleshow.admin.service.OmsOrderReturnApplyService;
-import com.yonge.cooleshow.mbg.model.UserOrderPayment;
-import com.yonge.cooleshow.mbg.model.UserOrderRefund;
-import com.yonge.cooleshow.sdk.req.OrderRefundReq;
-import com.yonge.cooleshow.sdk.res.OrderRefundRes;
-import com.yonge.cooleshow.service.PaymentService;
+import com.yonge.toolset.base.result.BaseResult;
+import com.yonge.toolset.payment.base.enums.OpenEnum;
+import com.yonge.toolset.payment.base.enums.PayChannelEnum;
+import com.yonge.toolset.payment.base.enums.PaymentClientEnum;
+import com.yonge.toolset.payment.base.enums.TradeStatusEnum;
+import com.yonge.toolset.payment.base.model.RefundBill;
+import com.yonge.toolset.payment.core.service.PaymentClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -27,6 +29,7 @@ import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
 
@@ -45,7 +48,11 @@ public class OmsOrderReturnApplyServiceImpl implements OmsOrderReturnApplyServic
     private OmsOrderReturnApplyMapper returnApplyMapper;
 
     @Autowired
-    private PaymentService adapayPaymentService;
+    private RedisService redisService;
+    private String REDIS_KEY_ORDER_ID= "redis.key.orderId";
+    private String REDIS_DATABASE = "redis.database";
+    @Autowired
+    private PaymentClient paymentClient;
 
     @Autowired
     private UserOrderPaymentMapper userOrderPaymentMapper;
@@ -55,7 +62,7 @@ public class OmsOrderReturnApplyServiceImpl implements OmsOrderReturnApplyServic
 
     @Override
     public List<OmsOrderReturnApply> list(OmsReturnApplyQueryParam queryParam, Integer pageSize, Integer pageNum) {
-        PageHelper.startPage(pageNum,pageSize);
+        PageHelper.startPage(pageNum, pageSize);
         return returnApplyDao.getList(queryParam);
     }
 
@@ -74,7 +81,7 @@ public class OmsOrderReturnApplyServiceImpl implements OmsOrderReturnApplyServic
             return 1;
         }
         OmsOrderReturnApply returnApply = new OmsOrderReturnApply();
-        if(status.equals(1)){
+        if (status.equals(1)) {
             //确认退货
             returnApply.setId(id);
             returnApply.setStatus(1);
@@ -83,22 +90,22 @@ public class OmsOrderReturnApplyServiceImpl implements OmsOrderReturnApplyServic
             returnApply.setHandleTime(new Date());
             returnApply.setHandleMan(statusParam.getHandleMan());
             returnApply.setHandleNote(statusParam.getHandleNote());
-        }else if(status.equals(2)){
+        } else if (status.equals(2)) {
             //完成退货
             returnApply.setId(id);
             returnApply.setStatus(2);
             returnApply.setReceiveTime(new Date());
             returnApply.setReceiveMan(statusParam.getReceiveMan());
             returnApply.setReceiveNote(statusParam.getReceiveNote());
-            refundAmount(returnApply);
-        }else if(status.equals(3)){
+            refundAmount(omsOrderReturnApply);
+        } else if (status.equals(3)) {
             //拒绝退货
             returnApply.setId(id);
             returnApply.setStatus(3);
             returnApply.setHandleTime(new Date());
             returnApply.setHandleMan(statusParam.getHandleMan());
             returnApply.setHandleNote(statusParam.getHandleNote());
-        }else{
+        } else {
             return 0;
         }
         return returnApplyMapper.updateByPrimaryKeySelective(returnApply);
@@ -112,22 +119,33 @@ public class OmsOrderReturnApplyServiceImpl implements OmsOrderReturnApplyServic
     private void refundAmount(OmsOrderReturnApply returnApply) {
         // 退款
         UserOrderPayment userOrderPayment = userOrderPaymentMapper.selectByOrderNoAndStatusSucceeded(returnApply.getOrderSn());
-        OrderRefundReq refundReq = new OrderRefundReq();
-        refundReq.setOrderNo(returnApply.getOrderSn());
-        refundReq.setRefundAmount(returnApply.getReturnAmount().setScale(2, RoundingMode.HALF_UP).toString());
+        if (userOrderPayment == null) {
+            throw new ApiException("未找到付款信息");
+        }
+        String orderSn = generateOrderSn(returnApply);
+
+        RefundBill refundReq = new RefundBill(OpenEnum.valueOf(userOrderPayment.getOpenType()),
+                PaymentClientEnum.valueOf(userOrderPayment.getPaymentClient()), PayChannelEnum.valueOf(userOrderPayment.getPayChannel()));
+        refundReq.setRefundNo(orderSn);
+        refundReq.setRefundAmt(returnApply.getReturnAmount().setScale(2, RoundingMode.HALF_UP));
+
         refundReq.setReason(returnApply.getProductName());
-        refundReq.setTransNo(userOrderPayment.getTransNo());
-        OrderRefundRes orderRefundRes = adapayPaymentService.orderRefund(refundReq);
-        if (orderRefundRes.isStatus()) {
+        refundReq.setPaymentNo(userOrderPayment.getAdapayNo());
+        refundReq.setTradeNo(userOrderPayment.getTransNo());
+        refundReq.setOrderAmt(userOrderPayment.getPayAmt());
+        BaseResult<RefundBill> refundBillBaseResult = paymentClient.refundPayment(refundReq);
+        if (refundBillBaseResult.getStatus()) {
+            RefundBill refundBill = refundBillBaseResult.getData();
             UserOrderRefund userOrderRefund = new UserOrderRefund();
-            userOrderRefund.setOrderNo(orderRefundRes.getRefundOrderNo());
-            userOrderRefund.setTransNo(orderRefundRes.getTransNo());
-            userOrderRefund.setPayTransNo(orderRefundRes.getPayTransNo());
-            userOrderRefund.setRefundAmt(new BigDecimal(orderRefundRes.getRefundAmount()));
-            userOrderRefund.setStatus(orderRefundRes.getRefundStatus().getCode());
+            userOrderRefund.setReturnId(returnApply.getId());
+            userOrderRefund.setOrderNo(orderSn);
+            userOrderRefund.setPayTransNo(userOrderPayment.getTransNo());
+            userOrderRefund.setRefundAmt(refundBill.getRefundAmt());
+            userOrderRefund.setStatus(TradeStatusEnum.pending.getCode());
+
             userOrderRefundMapper.insert(userOrderRefund);
         } else {
-            throw new BizException(orderRefundRes.getMessage());
+            throw new BizException(refundBillBaseResult.getMsg());
         }
     }
 
@@ -136,26 +154,6 @@ public class OmsOrderReturnApplyServiceImpl implements OmsOrderReturnApplyServic
         return returnApplyDao.getDetail(id);
     }
 
-    @Override
-    public void orderCallback(String data) {
-        JSONObject hfRes = JSONObject.parseObject(data);
-        UserOrderRefund userOrderRefund = userOrderRefundMapper.selectByTransNo(hfRes.getString("id"));
-        if (null == userOrderRefund) {
-            log.error("汇付退款回调,订单未找到。 req is {}", data);
-            return;
-        }
-
-        if (!userOrderRefund.getStatus().equals(PayStatusEnum.pending.getCode())) {
-            log.error("汇付退款回调,订单状态异常。 req is {}", data);
-        }
-        if (PayStatusEnum.succeeded.getCode().equals(hfRes.getString("status"))) {
-            //退款成功
-            refundSuccess(userOrderRefund, hfRes);
-        } else {
-            // 退款失败
-            refundCancel(userOrderRefund,hfRes);
-        }
-    }
 
     @Override
     public HomeStatistical countReturnStatus() {
@@ -163,45 +161,24 @@ public class OmsOrderReturnApplyServiceImpl implements OmsOrderReturnApplyServic
         return returnApplyDao.selectReturnStatusCount();
     }
 
-    /**
-     * 退款失败
-     *
-     * @param userOrderRefund
-     * @param hfRes
-     */
-    private void refundCancel(UserOrderRefund userOrderRefund, JSONObject hfRes) {
-        userOrderRefund.setArrivalTime(new Date());
-        userOrderRefund.setStatus(PayStatusEnum.failed.getCode());
-        if (hfRes != null) {
-            try {
-                userOrderRefund.setPayFailMsg(hfRes.getString("error_msg"));
-            }catch (Exception e) {
-                log.error("退款订单,退款失败参数错误,参数{}", hfRes.toJSONString());
-            }
-        }
-        userOrderRefundMapper.updateByPrimaryKeySelective(userOrderRefund);
-    }
 
     /**
-     * 退款成功
-     *
-     * @param userOrderRefund
-     * @param hfRes
+     * 生成18位退款订单编号:8位日期+2位平台号码+2位支付方式+6位以上自增id
      */
-    private void refundSuccess(UserOrderRefund userOrderRefund, JSONObject hfRes) {
-
-        userOrderRefund.setArrivalTime(new Date());
-        userOrderRefund.setStatus(PayStatusEnum.succeeded.getCode());
-        if (hfRes != null) {
-            try {
-                userOrderRefund.setFeeAmt(hfRes.getBigDecimal("fee_amt"));
-                userOrderRefund.setRefundAmt(hfRes.getBigDecimal("pay_amt"));
-            }catch (Exception e) {
-                log.error("退款订单,金额格式化失败,参数{}", hfRes.toJSONString());
-            }
+    private String generateOrderSn(OmsOrderReturnApply returnApply) {
+        StringBuilder sb = new StringBuilder();
+        String date = new SimpleDateFormat("yyyyMMdd").format(new Date());
+        String key = REDIS_DATABASE+":"+ REDIS_KEY_ORDER_ID + date;
+        Long increment = redisService.incr(key, 1);
+        sb.append(date);
+        sb.append(String.format("%02d", returnApply.getStatus()));
+        sb.append(String.format("%02d", returnApply.getStatus()));
+        String incrementStr = increment.toString();
+        if (incrementStr.length() <= 6) {
+            sb.append(String.format("%06d", increment));
+        } else {
+            sb.append(incrementStr);
         }
-        userOrderRefundMapper.updateByPrimaryKeySelective(userOrderRefund);
-
-
+        return sb.toString();
     }
 }

+ 173 - 7
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/OmsOrderServiceImpl.java

@@ -4,6 +4,7 @@ import com.github.pagehelper.PageHelper;
 import com.yonge.cooleshow.admin.dao.OmsOrderDao;
 import com.yonge.cooleshow.admin.dao.OmsOrderOperateHistoryDao;
 import com.yonge.cooleshow.admin.dto.*;
+import com.yonge.cooleshow.admin.dto.search.OrderStatisticalSearch;
 import com.yonge.cooleshow.admin.dto.search.UserStatisticalSearch;
 import com.yonge.cooleshow.admin.service.OmsOrderReturnApplyService;
 import com.yonge.cooleshow.admin.service.PmsProductService;
@@ -12,11 +13,20 @@ import com.yonge.cooleshow.mbg.mapper.OmsOrderOperateHistoryMapper;
 import com.yonge.cooleshow.mbg.model.OmsOrder;
 import com.yonge.cooleshow.mbg.model.OmsOrderExample;
 import com.yonge.cooleshow.mbg.model.OmsOrderOperateHistory;
-import com.yonge.cooleshow.admin.dto.*;
 import com.yonge.cooleshow.admin.service.OmsOrderService;
+import com.yonge.toolset.utils.date.DateUtil;
+import com.yonge.cooleshow.admin.enums.OrderStatisticalEnum;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.WeekFields;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -173,20 +183,176 @@ public class OmsOrderServiceImpl implements OmsOrderService {
     }
 
     @Override
-    public HomeStatistical statistical() {
-        HomeStatistical  homeStatistical = new HomeStatistical();
+    public HomeStatistical countStatistical() {
         // 订单状态
-        homeStatistical = orderDao.selectOrderStatusNum();
+        HomeStatistical homeStatistical = orderDao.selectOrderStatusNum();
 
         // 缺货登记   库存紧张
-        homeStatistical = productService.countLowStockCount();
+        HomeStatistical stock = productService.countLowStockCount();
+
+        homeStatistical.setOutStock(stock.getOutStock());
+        homeStatistical.setOutStockProduct(stock.getOutStockProduct());
 
         // 待处理退款申请  待处理退货订单
-        homeStatistical = orderReturnApplyService.countReturnStatus();
+        HomeStatistical returnInfo = orderReturnApplyService.countReturnStatus();
+
+        homeStatistical.setWaitDisposeRefund(returnInfo.getWaitDisposeRefund());
+        homeStatistical.setWaitDisposeRefundOrder(returnInfo.getWaitDisposeRefundOrder());
 
         // 已下架 已上架 全部商品
-        homeStatistical = productService.countProductShowStatus();
+        HomeStatistical product = productService.countProductShowStatus();
+
+        homeStatistical.setShelves(product.getShelves());
+        homeStatistical.setDelisted(product.getDelisted());
+        homeStatistical.setProductNum(product.getProductNum());
+
+        Date endTime = Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant());
+        LocalDateTime localDateTime = LocalDateTime.now().plusDays(-1);
+        LocalDate localDate = localDateTime.toLocalDate();
+        Date startTime = Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
+
+        // 今日、昨日 订单总数和销售总额
+        List<OrderStatistical> orderStatistical = orderDao
+                .selectOrderCountAndAmount(startTime, endTime, OrderStatisticalEnum.DAY.name());
+
+        Map<String, List<OrderStatistical>> collect = orderStatistical.stream()
+                              .collect(Collectors.groupingBy(OrderStatistical::getDate));
+        OrderStatistical statistical = getOrderStatistical(collect, DateUtil.format(startTime, "yyyy-MM-dd"));
+        homeStatistical.setYesterdayOrderNum(statistical.getOrderNum());
+        homeStatistical.setYesterdayOrderAmount(statistical.getOrderAmount());
+
+        statistical = getOrderStatistical(collect, DateUtil.format(endTime, "yyyy-MM-dd"));
+        homeStatistical.setTodayOrderNum(statistical.getOrderNum());
+        homeStatistical.setTodayOrderAmount(statistical.getOrderAmount());
 
         return homeStatistical;
     }
+
+    @Override
+    public HomeOrderStatistical orderStatistical(OrderStatisticalSearch search) {
+
+        HomeOrderStatistical homeOrderStatistical = new HomeOrderStatistical();
+
+        // 整理出时间数据
+        LocalDate start = LocalDate.parse(search.getStartDate());
+        Date startTime = Date.from(start.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
+        LocalDate end = LocalDate.parse(search.getEndDate());
+        LocalDateTime localDateTime = end.plusDays(1).atStartOfDay();
+        Date endTime = Date.from( localDateTime.plusSeconds(-1).atZone(ZoneId.systemDefault()).toInstant());
+
+        // 查询每天的订单数据
+        List<OrderStatistical> orderStatistical = orderDao
+                .selectOrderCountAndAmount(startTime, endTime, OrderStatisticalEnum.DAY.name());
+
+        Map<String, List<OrderStatistical>> map = orderStatistical.stream()
+                                      .collect(Collectors.groupingBy(OrderStatistical::getDate));
+
+        // 整理统计数据
+        List<OrderStatistical> statisticalList = new ArrayList<>();
+        while (start.compareTo(end) <=0) {
+            String date = start.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+            OrderStatistical statisticalInfo = getOrderStatistical(map, date);
+            statisticalList.add(statisticalInfo);
+            start = start.plusDays(1);
+        }
+        homeOrderStatistical.setOrderStatisticalList(statisticalList);
+
+        // 本月订单
+
+        LocalDate now = LocalDate.now();
+        endTime =  Date.from( now.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
+        startTime = Date.from( now.plusMonths(-1).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
+        // 查询统计数据
+        orderStatistical = orderDao.selectOrderCountAndAmount(startTime, endTime, OrderStatisticalEnum.MONTH.name());
+
+        map = orderStatistical.stream().collect(Collectors.groupingBy(OrderStatistical::getDate));
+
+        // 本月订单统计数据
+        String date = DateUtil.format(endTime, "yyyy-MM");
+        OrderStatistical statistical = getOrderStatistical(map, date);
+        homeOrderStatistical.setMonthOrderAmount(statistical.getOrderAmount());
+        homeOrderStatistical.setMonthOrderCount(statistical.getOrderNum());
+
+        // 上月订单统计数据
+        date = DateUtil.format(startTime, "yyyy-MM");
+        statistical = getOrderStatistical(map, date);
+
+        // 月 同比 金额
+        homeOrderStatistical.setMonthOrderAmountProportion(getProportion(homeOrderStatistical.getMonthOrderAmount(),
+                                                                         statistical.getOrderAmount()));
+        // 月同比 数量
+        homeOrderStatistical.setMonthOrderCountProportion(getProportion(new BigDecimal(homeOrderStatistical.getMonthOrderCount()),
+                                                          new BigDecimal(statistical.getOrderNum())));
+
+        // 周数据
+        startTime = Date.from( now.plusDays(-7).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
+
+        // 查询统计数据
+        orderStatistical = orderDao.selectOrderCountAndAmount(startTime, endTime, OrderStatisticalEnum.WEEK.name());
+
+        map = orderStatistical.stream().collect(Collectors.groupingBy(obj -> obj.getDate().substring(4)));
+
+        // 本周订单统计数据
+        WeekFields weekFields = WeekFields.ISO;
+        int i = now.get(weekFields.weekOfWeekBasedYear());
+        if (i <10) {
+            date =  "0" + i;
+        } else {
+            date =  "" + i;
+        }
+        statistical = getOrderStatistical(map, date);
+        homeOrderStatistical.setWeekOrderAmount(statistical.getOrderAmount());
+        homeOrderStatistical.setWeekOrderCount(statistical.getOrderNum());
+
+        // 上周订单统计数据
+        i = now.plusDays(-7).get(weekFields.weekOfWeekBasedYear());
+        if (i <10) {
+            date =  "0" + i;
+        } else {
+            date =  "" + i;
+        }
+        statistical = getOrderStatistical(map, date);
+
+        // 月 同比 金额
+        homeOrderStatistical.setWeekOrderAmountProportion(getProportion(homeOrderStatistical.getWeekOrderAmount(),
+                                                                         statistical.getOrderAmount()));
+        // 月同比 数量
+        homeOrderStatistical.setWeekOrderCountProportion(getProportion(new BigDecimal(homeOrderStatistical.getWeekOrderCount()),
+                                                                        new BigDecimal(statistical.getOrderNum())));
+        return homeOrderStatistical;
+
+    }
+
+    private Integer getProportion(BigDecimal now, BigDecimal last) {
+        if (now.compareTo(BigDecimal.ZERO) == 0) {
+            if(last.compareTo(BigDecimal.ZERO) == 0) {
+                return 0;
+            }  else {
+                return -100;
+            }
+        } else {
+            if(last.compareTo(BigDecimal.ZERO) == 0) {
+                return 100;
+            }  else {
+                double monthAmount = now.doubleValue();
+                double lastMonthAmount =last.doubleValue();
+                double v = 100 * (monthAmount / lastMonthAmount - 1);
+                return Double.valueOf(v).intValue();
+            }
+        }
+    }
+
+    private OrderStatistical getOrderStatistical(Map<String, List<OrderStatistical>> map, String date) {
+        OrderStatistical statisticalInfo = new OrderStatistical();
+        statisticalInfo.setDate(date);
+        List<OrderStatistical> orderStatisticals = map.get(date);
+        if (CollectionUtils.isEmpty(orderStatisticals)) {
+            statisticalInfo.setOrderAmount(BigDecimal.ZERO);
+            statisticalInfo.setOrderNum(0);
+        } else {
+            statisticalInfo.setOrderAmount(orderStatisticals.get(0).getOrderAmount());
+            statisticalInfo.setOrderNum(orderStatisticals.get(0).getOrderNum());
+        }
+        return statisticalInfo;
+    }
 }

+ 7 - 27
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/PmsProductServiceImpl.java

@@ -71,12 +71,12 @@ public class PmsProductServiceImpl implements PmsProductService {
     public int create(PmsProductParam productParam) {
         int count;
         //创建商品
-        PmsProduct product = productParam;
-        product.setId(null);
-        product.setVerifyStatus(1);
-        productMapper.insertSelective(product);
+        productParam.setId(null);
+        productParam.setVerifyStatus(1);
+        productParam.setLockStock(0);
+        productMapper.insertSelective(productParam);
         //根据促销类型设置价格:会员价格、阶梯价格、满减价格
-        Long productId = product.getId();
+        Long productId = productParam.getId();
         //会员价格
         relateAndInsertList(memberPriceDao, productParam.getMemberPriceList(), productId);
         //阶梯价格
@@ -209,28 +209,8 @@ public class PmsProductServiceImpl implements PmsProductService {
     @Override
     public List<PmsProduct> list(PmsProductQueryParam productQueryParam, Integer pageSize, Integer pageNum) {
         PageHelper.startPage(pageNum, pageSize);
-        PmsProductExample productExample = new PmsProductExample();
-        PmsProductExample.Criteria criteria = productExample.createCriteria();
-        criteria.andDeleteStatusEqualTo(0);
-        if (productQueryParam.getPublishStatus() != null) {
-            criteria.andPublishStatusEqualTo(productQueryParam.getPublishStatus());
-        }
-        if (productQueryParam.getVerifyStatus() != null) {
-            criteria.andVerifyStatusEqualTo(productQueryParam.getVerifyStatus());
-        }
-        if (!StringUtils.isEmpty(productQueryParam.getKeyword())) {
-            criteria.andNameLike("%" + productQueryParam.getKeyword() + "%");
-        }
-        if (!StringUtils.isEmpty(productQueryParam.getProductSn())) {
-            criteria.andProductSnEqualTo(productQueryParam.getProductSn());
-        }
-        if (productQueryParam.getBrandId() != null) {
-            criteria.andBrandIdEqualTo(productQueryParam.getBrandId());
-        }
-        if (productQueryParam.getProductCategoryId() != null) {
-            criteria.andProductCategoryIdEqualTo(productQueryParam.getProductCategoryId());
-        }
-        return productMapper.selectByExample(productExample);
+        return productDao.list(productQueryParam);
+
     }
 
     @Override

+ 19 - 8
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/UmsAdminServiceImpl.java

@@ -222,14 +222,7 @@ public class UmsAdminServiceImpl implements UmsAdminService {
             List<SysUser> rows = result.getData();
             List<UmsAdmin> adminList = new ArrayList<>();
             for (SysUser row : rows) {
-                UmsAdmin admin = new UmsAdmin();
-                admin.setId(row.getId());
-                admin.setCreateTime(row.getCreateTime());
-                admin.setUsername(row.getPhone());
-                admin.setNickName(row.getUsername());
-                admin.setPassword(row.getPassword());
-                admin.setStatus(1);
-                admin.setIcon(row.getAvatar());
+                UmsAdmin admin = getUmsAdmin(row);
                 adminList.add(admin);
             }
             addRootAdmin(adminList);
@@ -237,6 +230,24 @@ public class UmsAdminServiceImpl implements UmsAdminService {
         configMapper.setConfig(SysConfig.SYNC_TIME,now);
     }
 
+    @Override
+    public void updateInfo(Long umsAdminId, SysUser sysUser) {
+        UmsAdmin umsAdmin = getUmsAdmin(sysUser);
+        adminMapper.updateByPrimaryKeySelective(umsAdmin);
+    }
+
+    private UmsAdmin getUmsAdmin(SysUser row) {
+        UmsAdmin admin = new UmsAdmin();
+        admin.setId(row.getId());
+        admin.setCreateTime(row.getCreateTime());
+        admin.setUsername(row.getUsername());
+        admin.setNickName(row.getUsername());
+        admin.setPassword(row.getPassword());
+        admin.setStatus(1);
+        admin.setIcon(row.getAvatar());
+        return admin;
+    }
+
     /**
      * 添加默认权限
      *

+ 47 - 0
cooleshow-mall/mall-admin/src/main/resources/config/mybatis/OmsOrderDao.xml

@@ -120,4 +120,51 @@
             sum(if(status = 2 and confirm_status = 0,1,0)) as waitReceiptOrder
         from oms_order
     </select>
+
+    <select id="selectOrderCountAndAmount" resultType="com.yonge.cooleshow.admin.dto.OrderStatistical">
+
+        select
+        <choose>
+            <when test="dateFormat == 'DAY'">
+                date_format(create_time,'%Y-%m-%d') as date,
+            </when>
+            <when test="dateFormat == 'WEEK'">
+                YEARWEEK(date_format(create_time,'%Y-%m-%d'),7) as date,
+            </when>
+            <when test="dateFormat == 'MONTH'">
+                date_format(create_time,'%Y-%m')  as date,
+            </when>
+        </choose>
+        count(1) as orderNum,
+        sum(pay_amount) as orderAmount
+        from oms_order
+        where status in (1,2,3) and create_time between #{startTime} and  #{endTime}
+
+        group by
+
+        <choose>
+            <when test="dateFormat == 'DAY'">
+                date_format(create_time,'%Y-%m-%d')
+            </when>
+            <when test="dateFormat == 'WEEK'">
+                YEARWEEK(date_format(create_time,'%Y-%m-%d'),7)
+            </when>
+            <when test="dateFormat == 'MONTH'">
+                date_format(create_time,'%Y-%m')
+            </when>
+        </choose>
+
+        order by
+        <choose>
+            <when test="dateFormat == 'DAY'">
+                date_format(create_time,'%Y-%m-%d')
+            </when>
+            <when test="dateFormat == 'WEEK'">
+                YEARWEEK(date_format(create_time,'%Y-%m-%d'),7)
+            </when>
+            <when test="dateFormat == 'MONTH'">
+                date_format(create_time,'%Y-%m')
+            </when>
+        </choose>
+    </select>
 </mapper>

+ 41 - 0
cooleshow-mall/mall-admin/src/main/resources/config/mybatis/PmsProductDao.xml

@@ -65,4 +65,45 @@
         from pms_product where delete_status = 0
 
     </select>
+
+    <select id="list" resultMap="com.yonge.cooleshow.mbg.mapper.PmsProductMapper.BaseResultMap">
+        select DISTINCT pp.*
+        from
+        pms_product  pp
+        <if test="param.stock  != null">
+            left join
+            (select DISTINCT pss.product_id
+            from  pms_sku_stock pss
+            where pss.stock &lt;= pss.low_stock) b
+            on b.product_id = pp.id
+        </if>
+
+        <where>
+            <if test="param.publishStatus != null">
+                and pp.publish_status = #{param.publishStatus}
+            </if>
+            <if test="param.verifyStatus != null">
+                and pp.verify_status = #{param.verifyStatus}
+            </if>
+            <if test="param.keyword != null">
+                and pp.name like concat('%',#{param.keyword},'%')
+            </if>
+            <if test="param.productSn != null">
+                and pp.product_sn = #{param.productSn}
+            </if>
+            <if test="param.brandId != null">
+                and pp.brand_id = #{param.brandId}
+            </if>
+            <if test="param.productCategoryId != null">
+                and pp.product_category_id = #{param.productCategoryId}
+            </if>
+            <if test="param.stock == 1">
+                and (pp.stock &lt;= pp.low_stock or b.product_id is not null)
+            </if>
+            <if test="param.stock == 0">
+                and (pp.stock &gt; pp.low_stock and b.product_id is null)
+            </if>
+        </where>
+        order by pp.sort desc,pp.id desc
+    </select>
 </mapper>

+ 1 - 1
cooleshow-mall/mall-admin/src/main/resources/logback-spring.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration scan="true" scanPeriod="10 seconds">
 
-	<property name="LOG_HOME" value="/mdata/logs/task-%d{yyyy-MM-dd_HH}-%i.log" />
+	<property name="LOG_HOME" value="/mdata/logs/mall-admin-%d{yyyy-MM-dd_HH}-%i.log" />
 	<property name="CONSOLE_LOG_PATTERN"
 			  value="[%X{username} %X{ip} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}] : %msg%n" />
 

+ 4 - 4
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/enums/OrdeerCacherEnmu.java → cooleshow-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/enums/OrderCacheEnum.java

@@ -1,4 +1,4 @@
-package com.yonge.cooleshow.enums;
+package com.yonge.cooleshow.mall.common.enums;
 
 import com.yonge.cooleshow.common.constant.CommonConstants;
 import org.apache.commons.lang3.StringUtils;
@@ -11,7 +11,7 @@ import java.time.Duration;
  * @author liujunchi
  * @date 2022-04-24
  */
-public enum OrdeerCacherEnmu {
+public enum OrderCacheEnum {
     LOCK_EXECUTE_ORDER("用户下单锁"),
     LOCK_PAY_ORDER("用户付款锁"),
     LOCK_CHANGE_ACCOUNT("账户变更锁"),
@@ -31,11 +31,11 @@ public enum OrdeerCacherEnmu {
      */
     private Duration duration;
 
-    OrdeerCacherEnmu(String msg) {
+    OrderCacheEnum(String msg) {
         this.msg = msg;
     }
 
-    OrdeerCacherEnmu(String msg, Duration duration) {
+    OrderCacheEnum(String msg, Duration duration) {
         this.msg = msg;
         this.duration = duration;
     }

+ 10 - 0
cooleshow-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/exception/GlobalExceptionHandler.java

@@ -1,6 +1,9 @@
 package com.yonge.cooleshow.mall.common.exception;
 
 import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.mall.common.api.IErrorCode;
+import com.yonge.toolset.base.exception.BizException;
+import org.springframework.http.HttpStatus;
 import org.springframework.validation.BindException;
 import org.springframework.validation.BindingResult;
 import org.springframework.validation.FieldError;
@@ -52,4 +55,11 @@ public class GlobalExceptionHandler {
         }
         return CommonResult.validateFailed(message);
     }
+
+
+    @ResponseBody
+    @ExceptionHandler(value = BizException.class)
+    public CommonResult handleBizException(BizException e) {
+        return  CommonResult.failed(e.getMessage());
+    }
 }

+ 4 - 0
cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/mapper/PmsProductMapper.java

@@ -2,7 +2,9 @@ package com.yonge.cooleshow.mbg.mapper;
 
 import com.yonge.cooleshow.mbg.model.PmsProduct;
 import com.yonge.cooleshow.mbg.model.PmsProductExample;
+
 import java.util.List;
+
 import org.apache.ibatis.annotations.Param;
 
 public interface PmsProductMapper {
@@ -33,4 +35,6 @@ public interface PmsProductMapper {
     int updateByPrimaryKeyWithBLOBs(PmsProduct record);
 
     int updateByPrimaryKey(PmsProduct record);
+
+    int lockStock(@Param("productId") Long productId, @Param("sum") int sum);
 }

+ 8 - 0
cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/mapper/UserOrderPaymentMapper.java

@@ -24,4 +24,12 @@ public interface UserOrderPaymentMapper {
     UserOrderPayment selectByOrderNoAndStatusPaying(@Param("orderSn") String orderSn);
 
     UserOrderPayment selectByOrderNoAndStatusSucceeded(@Param("orderSn") String orderSn);
+
+    /**
+     * 查询支付信息
+     *
+     * @param paymentNo 回调支付订单号
+     * @return
+     */
+    UserOrderPayment selectByAdapayNo(String paymentNo);
 }

+ 2 - 0
cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/mapper/UserOrderRefundMapper.java

@@ -38,4 +38,6 @@ public interface UserOrderRefundMapper {
     int updateByPrimaryKey(UserOrderRefund record);
 
     UserOrderRefund selectByTransNo(@Param("transNo") String transNo);
+
+    UserOrderRefund selectByRefundNo(@Param("refundOrderNo") String refundOrderNo);
 }

+ 2 - 0
cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/OmsCartItem.java

@@ -8,8 +8,10 @@ import java.util.Date;
 public class OmsCartItem implements Serializable {
     private Long id;
 
+    @ApiModelProperty("商品id")
     private Long productId;
 
+    @ApiModelProperty("商品属性id")
     private Long productSkuId;
 
     private Long memberId;

+ 11 - 0
cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/OmsOrderItem.java

@@ -60,6 +60,9 @@ public class OmsOrderItem implements Serializable {
     @ApiModelProperty(value = "商品销售属性:[{'key':'颜色','value':'颜色'},{'key':'容量','value':'4G'}]")
     private String productAttr;
 
+    @ApiModelProperty("退货状态:-1 ->未退款;0->待处理;1->退货中;2->已完成;3->已拒绝")
+    private Integer returnStatus;
+
     private static final long serialVersionUID = 1L;
 
     public Long getId() {
@@ -261,4 +264,12 @@ public class OmsOrderItem implements Serializable {
         sb.append("]");
         return sb.toString();
     }
+
+    public Integer getReturnStatus() {
+        return returnStatus;
+    }
+
+    public void setReturnStatus(Integer returnStatus) {
+        this.returnStatus = returnStatus;
+    }
 }

+ 12 - 0
cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/OmsOrderReturnApply.java

@@ -17,6 +17,9 @@ public class OmsOrderReturnApply implements Serializable {
     @ApiModelProperty(value = "退货商品id")
     private Long productId;
 
+    @ApiModelProperty("订单商品id")
+    private Long orderItemId;
+
     @ApiModelProperty(value = "订单编号")
     private String orderSn;
 
@@ -91,6 +94,15 @@ public class OmsOrderReturnApply implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
+
+    public Long getOrderItemId() {
+        return orderItemId;
+    }
+
+    public void setOrderItemId(Long orderItemId) {
+        this.orderItemId = orderItemId;
+    }
+
     public Long getId() {
         return id;
     }

+ 11 - 0
cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/PmsProduct.java

@@ -68,6 +68,9 @@ public class PmsProduct implements Serializable {
     @ApiModelProperty(value = "库存")
     private Integer stock;
 
+    @ApiModelProperty("锁定库存")
+    private Integer lockStock;
+
     @ApiModelProperty(value = "库存预警值")
     private Integer lowStock;
 
@@ -522,4 +525,12 @@ public class PmsProduct implements Serializable {
         sb.append("]");
         return sb.toString();
     }
+
+    public Integer getLockStock() {
+        return lockStock;
+    }
+
+    public void setLockStock(Integer lockStock) {
+        this.lockStock = lockStock;
+    }
 }

+ 23 - 0
cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/UserOrderPayment.java

@@ -25,6 +25,13 @@ public class UserOrderPayment implements Serializable {
     private String adapayNo;
     @ApiModelProperty("交易流水号 ")
     private String transNo;
+
+    @ApiModelProperty("付款应用 STUDENT 学生端 TEACHER 老师端 (对应微信,支付宝平台的应用)")
+    private String paymentClient;
+
+    @ApiModelProperty("服务提供方: ORIGINAL 微信支付宝 ADAPAY 汇付")
+    private String openType;
+
     @ApiModelProperty("支付渠道:  alipay 支付宝  wx_lite 微信 ")
     private String payChannel;
     @ApiModelProperty("交易金额,必须大于0,保留两位小数点,如0.10、100.05等 ")
@@ -63,6 +70,22 @@ public class UserOrderPayment implements Serializable {
     private Date updateTime;
 
 
+    public String getPaymentClient() {
+        return paymentClient;
+    }
+
+    public void setPaymentClient(String paymentClient) {
+        this.paymentClient = paymentClient;
+    }
+
+    public String getOpenType() {
+        return openType;
+    }
+
+    public void setOpenType(String openType) {
+        this.openType = openType;
+    }
+
     public String getCloseStatus() {
         return closeStatus;
     }

+ 11 - 0
cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/UserOrderRefund.java

@@ -19,6 +19,9 @@ public class UserOrderRefund {
     @ApiModelProperty(value = "")
     private Long id;
 
+    @ApiModelProperty("退货id")
+    private Long returnId;
+
     /**
      * 订单号
      */
@@ -73,6 +76,14 @@ public class UserOrderRefund {
     @ApiModelProperty(value = "")
     private Date updateTime;
 
+    public Long getReturnId() {
+        return returnId;
+    }
+
+    public void setReturnId(Long returnId) {
+        this.returnId = returnId;
+    }
+
     public Long getId() {
         return id;
     }

+ 5 - 2
cooleshow-mall/mall-mbg/src/main/resources/config/mybatis/OmsOrderItemMapper.xml

@@ -23,6 +23,7 @@
     <result column="gift_integration" jdbcType="INTEGER" property="giftIntegration" />
     <result column="gift_growth" jdbcType="INTEGER" property="giftGrowth" />
     <result column="product_attr" jdbcType="VARCHAR" property="productAttr" />
+    <result column="returnStatus" jdbcType="INTEGER" property="returnStatus" />
   </resultMap>
   <sql id="Example_Where_Clause">
     <where>
@@ -89,18 +90,20 @@
     gift_integration, gift_growth, product_attr
   </sql>
   <select id="selectByExample" parameterType="com.yonge.cooleshow.mbg.model.OmsOrderItemExample" resultMap="BaseResultMap">
+    select a.*,if(oora.status is null,-1,oora.status) as returnStatus from  (
     select
     <if test="distinct">
       distinct
     </if>
-    <include refid="Base_Column_List" />
+    <include refid="Base_Column_List"/>
     from oms_order_item
     <if test="_parameter != null">
-      <include refid="Example_Where_Clause" />
+      <include refid="Example_Where_Clause"/>
     </if>
     <if test="orderByClause != null">
       order by ${orderByClause}
     </if>
+    ) a left join oms_order_return_apply oora on oora.order_item_id = a.id
   </select>
   <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
     select 

+ 18 - 3
cooleshow-mall/mall-mbg/src/main/resources/config/mybatis/OmsOrderReturnApplyMapper.xml

@@ -6,6 +6,7 @@
     <result column="order_id" jdbcType="BIGINT" property="orderId" />
     <result column="company_address_id" jdbcType="BIGINT" property="companyAddressId" />
     <result column="product_id" jdbcType="BIGINT" property="productId" />
+    <result column="order_item_id" jdbcType="BIGINT" property="orderItemId" />
     <result column="order_sn" jdbcType="VARCHAR" property="orderSn" />
     <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
     <result column="member_username" jdbcType="VARCHAR" property="memberUsername" />
@@ -93,7 +94,7 @@
     id, order_id, company_address_id, product_id, order_sn, create_time, member_username, 
     return_amount, return_name, return_phone, status, handle_time, product_pic, product_name, 
     product_brand, product_attr, product_count, product_price, product_real_price, reason, 
-    description, proof_pics, handle_note, handle_man, receive_man, receive_time, receive_note,delivery_sn
+    description, proof_pics, handle_note, handle_man, receive_man, receive_time, receive_note,delivery_sn,order_item_id
   </sql>
   <select id="selectByExample" parameterType="com.yonge.cooleshow.mbg.model.OmsOrderReturnApplyExample" resultMap="BaseResultMap">
     select
@@ -137,7 +138,7 @@
       product_count, product_price, product_real_price, 
       reason, description, proof_pics, 
       handle_note, handle_man, receive_man, 
-      receive_time, receive_note,delivery_sn)
+      receive_time, receive_note,delivery_sn,order_item_id)
     values (#{orderId,jdbcType=BIGINT}, #{companyAddressId,jdbcType=BIGINT}, #{productId,jdbcType=BIGINT}, 
       #{orderSn,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{memberUsername,jdbcType=VARCHAR}, 
       #{returnAmount,jdbcType=DECIMAL}, #{returnName,jdbcType=VARCHAR}, #{returnPhone,jdbcType=VARCHAR}, 
@@ -146,7 +147,7 @@
       #{productCount,jdbcType=INTEGER}, #{productPrice,jdbcType=DECIMAL}, #{productRealPrice,jdbcType=DECIMAL}, 
       #{reason,jdbcType=VARCHAR}, #{description,jdbcType=VARCHAR}, #{proofPics,jdbcType=VARCHAR}, 
       #{handleNote,jdbcType=VARCHAR}, #{handleMan,jdbcType=VARCHAR}, #{receiveMan,jdbcType=VARCHAR}, 
-      #{receiveTime,jdbcType=TIMESTAMP}, #{receiveNote,jdbcType=VARCHAR},#{deliverySn})
+      #{receiveTime,jdbcType=TIMESTAMP}, #{receiveNote,jdbcType=VARCHAR},#{deliverySn},#{orderItemId})
   </insert>
   <insert id="insertSelective" parameterType="com.yonge.cooleshow.mbg.model.OmsOrderReturnApply">
     <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
@@ -235,6 +236,9 @@
       <if test="deliverySn != null">
         delivery_sn,
       </if>
+      <if test="orderItemId != null">
+        order_item_id,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="orderId != null">
@@ -318,6 +322,9 @@
       <if test="deliverySn != null">
           #{deliverySn,jdbcType=VARCHAR},
       </if>
+      <if test="orderItemId != null">
+        #{orderItemId},
+      </if>
     </trim>
   </insert>
   <select id="countByExample" parameterType="com.yonge.cooleshow.mbg.model.OmsOrderReturnApplyExample" resultType="java.lang.Long">
@@ -413,6 +420,9 @@
       <if test="record.deliverySn != null">
         delivery_sn = #{record.deliverySn,jdbcType=VARCHAR},
       </if>
+      <if test="record.orderItemId != null">
+        order_item_id = #{record.orderItemId},
+      </if>
     </set>
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
@@ -447,6 +457,7 @@
       receive_man = #{record.receiveMan,jdbcType=VARCHAR},
       receive_time = #{record.receiveTime,jdbcType=TIMESTAMP},
       receive_note = #{record.receiveNote,jdbcType=VARCHAR},
+      order_item_id = #{record.orderItemId},
       delivery_sn = #{record.deliverySn,jdbcType=VARCHAR}
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
@@ -536,6 +547,9 @@
       <if test="deliverySn != null">
         delivery_sn = #{deliverySn,jdbcType=VARCHAR},
       </if>
+      <if test="orderItemId != null">
+        order_item_id = #{orderItemId},
+      </if>
     </set>
     where id = #{id,jdbcType=BIGINT}
   </update>
@@ -567,6 +581,7 @@
       receive_man = #{receiveMan,jdbcType=VARCHAR},
       receive_time = #{receiveTime,jdbcType=TIMESTAMP},
       receive_note = #{receiveNote,jdbcType=VARCHAR},
+      order_item_id = #{orderItemId},
       delivery_sn = #{deliverySn,jdbcType=VARCHAR}
     where id = #{id,jdbcType=BIGINT}
   </update>

+ 26 - 3
cooleshow-mall/mall-mbg/src/main/resources/config/mybatis/PmsProductMapper.xml

@@ -25,6 +25,7 @@
     <result column="sub_title" jdbcType="VARCHAR" property="subTitle" />
     <result column="original_price" jdbcType="DECIMAL" property="originalPrice" />
     <result column="stock" jdbcType="INTEGER" property="stock" />
+    <result column="lock_stock" jdbcType="INTEGER" property="lockStock" />
     <result column="low_stock" jdbcType="INTEGER" property="lowStock" />
     <result column="unit" jdbcType="VARCHAR" property="unit" />
     <result column="weight" jdbcType="DECIMAL" property="weight" />
@@ -111,7 +112,7 @@
     verify_status, sort, sale, price, promotion_price, gift_growth, gift_point, use_point_limit, 
     sub_title, original_price, stock, low_stock, unit, weight, preview_status, service_ids, 
     keywords, note, album_pics, detail_title, promotion_start_time, promotion_end_time, 
-    promotion_per_limit, promotion_type, brand_name, product_category_name
+    promotion_per_limit, promotion_type, brand_name, product_category_name,lock_stock
   </sql>
   <sql id="Blob_Column_List">
     description, detail_desc, detail_html, detail_mobile_html
@@ -181,7 +182,7 @@
       detail_title, promotion_start_time, promotion_end_time, 
       promotion_per_limit, promotion_type, brand_name, 
       product_category_name, description, detail_desc, 
-      detail_html, detail_mobile_html)
+      detail_html, detail_mobile_html,lock_stock)
     values (#{brandId,jdbcType=BIGINT}, #{productCategoryId,jdbcType=BIGINT}, #{feightTemplateId,jdbcType=BIGINT}, 
       #{productAttributeCategoryId,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, #{pic,jdbcType=VARCHAR}, 
       #{productSn,jdbcType=VARCHAR}, #{deleteStatus,jdbcType=INTEGER}, #{publishStatus,jdbcType=INTEGER}, 
@@ -195,7 +196,7 @@
       #{detailTitle,jdbcType=VARCHAR}, #{promotionStartTime,jdbcType=TIMESTAMP}, #{promotionEndTime,jdbcType=TIMESTAMP}, 
       #{promotionPerLimit,jdbcType=INTEGER}, #{promotionType,jdbcType=INTEGER}, #{brandName,jdbcType=VARCHAR}, 
       #{productCategoryName,jdbcType=VARCHAR}, #{description,jdbcType=LONGVARCHAR}, #{detailDesc,jdbcType=LONGVARCHAR}, 
-      #{detailHtml,jdbcType=LONGVARCHAR}, #{detailMobileHtml,jdbcType=LONGVARCHAR})
+      #{detailHtml,jdbcType=LONGVARCHAR}, #{detailMobileHtml,jdbcType=LONGVARCHAR},#{lockStock})
   </insert>
   <insert id="insertSelective" parameterType="com.yonge.cooleshow.mbg.model.PmsProduct">
     <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
@@ -326,6 +327,10 @@
       <if test="detailMobileHtml != null">
         detail_mobile_html,
       </if>
+
+      <if test="lockStock != null">
+        lock_stock,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="brandId != null">
@@ -451,6 +456,10 @@
       <if test="detailMobileHtml != null">
         #{detailMobileHtml,jdbcType=LONGVARCHAR},
       </if>
+
+      <if test="lockStock != null">
+        #{lockStock,jdbcType=INTEGER},
+      </if>
     </trim>
   </insert>
   <select id="countByExample" parameterType="com.yonge.cooleshow.mbg.model.PmsProductExample" resultType="java.lang.Long">
@@ -588,6 +597,9 @@
       <if test="record.detailMobileHtml != null">
         detail_mobile_html = #{record.detailMobileHtml,jdbcType=LONGVARCHAR},
       </if>
+      <if test="record.lockStock != null">
+        lock_stock = #{record.lockStock},
+      </if>
     </set>
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
@@ -618,6 +630,7 @@
       sub_title = #{record.subTitle,jdbcType=VARCHAR},
       original_price = #{record.originalPrice,jdbcType=DECIMAL},
       stock = #{record.stock,jdbcType=INTEGER},
+      lock_stock = #{record.lockStock,jdbcType=INTEGER},
       low_stock = #{record.lowStock,jdbcType=INTEGER},
       unit = #{record.unit,jdbcType=VARCHAR},
       weight = #{record.weight,jdbcType=DECIMAL},
@@ -666,6 +679,7 @@
       sub_title = #{record.subTitle,jdbcType=VARCHAR},
       original_price = #{record.originalPrice,jdbcType=DECIMAL},
       stock = #{record.stock,jdbcType=INTEGER},
+      lock_stock = #{record.lockStock,jdbcType=INTEGER},
       low_stock = #{record.lowStock,jdbcType=INTEGER},
       unit = #{record.unit,jdbcType=VARCHAR},
       weight = #{record.weight,jdbcType=DECIMAL},
@@ -811,6 +825,9 @@
       <if test="detailMobileHtml != null">
         detail_mobile_html = #{detailMobileHtml,jdbcType=LONGVARCHAR},
       </if>
+      <if test="lockStock != null">
+        lock_stock = #{lockStock,jdbcType=INTEGER},
+      </if>
     </set>
     where id = #{id,jdbcType=BIGINT}
   </update>
@@ -838,6 +855,7 @@
       sub_title = #{subTitle,jdbcType=VARCHAR},
       original_price = #{originalPrice,jdbcType=DECIMAL},
       stock = #{stock,jdbcType=INTEGER},
+      lock_stock = #{lockStock,jdbcType=INTEGER},
       low_stock = #{lowStock,jdbcType=INTEGER},
       unit = #{unit,jdbcType=VARCHAR},
       weight = #{weight,jdbcType=DECIMAL},
@@ -883,6 +901,7 @@
       sub_title = #{subTitle,jdbcType=VARCHAR},
       original_price = #{originalPrice,jdbcType=DECIMAL},
       stock = #{stock,jdbcType=INTEGER},
+      lock_stock = #{lockStock,jdbcType=INTEGER},
       low_stock = #{lowStock,jdbcType=INTEGER},
       unit = #{unit,jdbcType=VARCHAR},
       weight = #{weight,jdbcType=DECIMAL},
@@ -900,4 +919,8 @@
       product_category_name = #{productCategoryName,jdbcType=VARCHAR}
     where id = #{id,jdbcType=BIGINT}
   </update>
+
+  <update id="lockStock">
+    update pms_product set lock_stock = lock_stock + #{sum} where  id = #{productId} and stock &gt;= ( lock_stock + #{sum})
+  </update>
 </mapper>

+ 33 - 5
cooleshow-mall/mall-mbg/src/main/resources/config/mybatis/UserOrderPaymentMapper.xml

@@ -6,7 +6,9 @@
         <!--@Table user_order_payment-->
         <id column="id_" jdbcType="BIGINT" property="id" />
         <result column="order_no_" jdbcType="VARCHAR" property="orderNo" />
+        <result column="payment_client_" jdbcType="VARCHAR" property="paymentClient" />
         <result column="trans_no_" jdbcType="VARCHAR" property="transNo" />
+        <result column="open_type_" jdbcType="VARCHAR" property="openType" />
         <result column="pay_channel_" jdbcType="VARCHAR" property="payChannel" />
         <result column="pay_amt_" jdbcType="DECIMAL" property="payAmt" />
         <result column="fee_amt_" jdbcType="DECIMAL" property="feeAmt" />
@@ -24,7 +26,7 @@
     <sql id="Base_Column_List">
         <!--@mbg.generated-->
         id_, order_no_, trans_no_, pay_channel_, pay_amt_, fee_amt_, pay_info_, status_,
-        pay_fail_msg_, arrival_time_,close_status_,close_fail_msg_,close_time_,create_time_, update_time_,adapay_no_
+        pay_fail_msg_, arrival_time_,close_status_,close_fail_msg_,close_time_,create_time_, update_time_,adapay_no_,open_type_,payment_client_
     </sql>
     <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
         <!--@mbg.generated-->
@@ -43,12 +45,12 @@
         insert into user_order_payment (order_no_, trans_no_, pay_channel_,
         pay_amt_, fee_amt_, pay_info_,
         status_, pay_fail_msg_, arrival_time_,
-        create_time_, update_time_,close_status_,close_fail_msg_,close_time_,adapay_no_)
+        create_time_, update_time_,close_status_,close_fail_msg_,close_time_,adapay_no_,open_type_,payment_client_)
         values (#{orderNo,jdbcType=VARCHAR}, #{transNo,jdbcType=VARCHAR}, #{payChannel,jdbcType=VARCHAR},
         #{payAmt,jdbcType=DECIMAL}, #{feeAmt,jdbcType=DECIMAL}, #{payInfo,jdbcType=VARCHAR},
         #{status,jdbcType=VARCHAR}, #{payFailMsg,jdbcType=VARCHAR}, #{arrivalTime,jdbcType=TIMESTAMP},
         #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP},#{closeStatus},#{closeFailMsg}
-        ,#{closeTime},#{adapayNo})
+        ,#{closeTime},#{adapayNo},#{openType},#{paymentClient})
     </insert>
     <insert id="insertSelective" keyColumn="id_" keyProperty="id" parameterType="com.yonge.cooleshow.mbg.model.UserOrderPayment" useGeneratedKeys="true">
         <!--@mbg.generated-->
@@ -99,6 +101,12 @@
             <if test="adapayNo != null">
                 adapay_no_,
             </if>
+            <if test="openType != null">
+                open_type_,
+            </if>
+            <if test="paymentClient != null">
+                payment_client_,
+            </if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="orderNo != null">
@@ -146,6 +154,12 @@
             <if test="adapayNo != null">
                 #{adapayNo},
             </if>
+            <if test="openType != null">
+                #{openType},
+            </if>
+            <if test="paymentClient != null">
+                #{paymentClient},
+            </if>
         </trim>
     </insert>
     <update id="updateByPrimaryKeySelective" parameterType="com.yonge.cooleshow.mbg.model.UserOrderPayment">
@@ -195,7 +209,13 @@
                 close_time_ = #{closeTime,jdbcType=TIMESTAMP},
             </if>
             <if test="adapayNo != null">
-                adapay_no_ = #{closeTime,jdbcType=TIMESTAMP},
+                adapay_no_ = #{adapayNo,jdbcType=TIMESTAMP},
+            </if>
+            <if test="openType != null">
+                open_type_ = #{openType},
+            </if>
+            <if test="paymentClient != null">
+                payment_client_ = #{paymentClient},
             </if>
         </set>
         where id_ = #{id,jdbcType=BIGINT}
@@ -218,6 +238,8 @@
         close_fail_msg_ = #{closeFailMsg},
         close_time_ = #{closeTime,jdbcType=TIMESTAMP},
         adapay_no_ = #{adapayNo,jdbcType=TIMESTAMP},
+        open_type_ = #{openType},
+         payment_client_= #{paymentClient}
         where id_ = #{id,jdbcType=BIGINT}
     </update>
 
@@ -236,7 +258,7 @@
     <select id="selectByOrderNoAndStatusPaying" resultMap="BaseResultMap">
         select
         <include refid="Base_Column_List" />
-        from user_order_payment where order_no_ = #{orderSn} and status_ = 'paying'
+        from user_order_payment where order_no_ = #{orderSn} and status_ = 'pending'
     </select>
 
     <select id="selectByOrderNoAndStatus" resultMap="BaseResultMap">
@@ -251,4 +273,10 @@
         <include refid="Base_Column_List" />
         from user_order_payment where order_no_ = #{orderSn} and status_ = 'succeeded'
     </select>
+
+    <select id="selectByAdapayNo" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List" />
+        from user_order_payment where adapay_no_ = #{paymentNo} limit 1
+    </select>
 </mapper>

+ 25 - 3
cooleshow-mall/mall-mbg/src/main/resources/config/mybatis/UserOrderRefundMapper.xml

@@ -5,6 +5,7 @@
     <!--@mbg.generated-->
     <!--@Table user_order_refund-->
     <id column="id_" jdbcType="BIGINT" property="id" />
+    <result column="return_id_" jdbcType="VARCHAR" property="returnId" />
     <result column="order_no_" jdbcType="VARCHAR" property="orderNo" />
     <result column="trans_no_" jdbcType="VARCHAR" property="transNo" />
     <result column="pay_trans_no_" jdbcType="VARCHAR" property="payTransNo" />
@@ -79,7 +80,7 @@
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
     id_, order_no_, trans_no_, pay_trans_no_, refund_amt_, fee_amt_, status_, pay_fail_msg_, 
-    arrival_time_, create_time_, update_time_
+    arrival_time_, create_time_, update_time_,return_id_
   </sql>
   <select id="selectByExample" parameterType="com.yonge.cooleshow.mbg.model.UserOrderRefundExample" resultMap="BaseResultMap">
     <!--@mbg.generated-->
@@ -120,11 +121,11 @@
     insert into user_order_refund (order_no_, trans_no_, pay_trans_no_, 
       refund_amt_, fee_amt_, status_, 
       pay_fail_msg_, arrival_time_, create_time_, 
-      update_time_)
+      update_time_,return_id_)
     values (#{orderNo,jdbcType=VARCHAR}, #{transNo,jdbcType=VARCHAR}, #{payTransNo,jdbcType=VARCHAR}, 
       #{refundAmt,jdbcType=DECIMAL}, #{feeAmt,jdbcType=DECIMAL}, #{status,jdbcType=VARCHAR}, 
       #{payFailMsg,jdbcType=VARCHAR}, #{arrivalTime,jdbcType=TIMESTAMP}, #{createTime,jdbcType=TIMESTAMP}, 
-      #{updateTime,jdbcType=TIMESTAMP})
+      #{updateTime,jdbcType=TIMESTAMP},#{returnId})
   </insert>
   <insert id="insertSelective" keyColumn="id_" keyProperty="id" parameterType="com.yonge.cooleshow.mbg.model.UserOrderRefund" useGeneratedKeys="true">
     <!--@mbg.generated-->
@@ -160,6 +161,9 @@
       <if test="updateTime != null">
         update_time_,
       </if>
+      <if test="returnId != null">
+        return_id_,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="orderNo != null">
@@ -192,6 +196,9 @@
       <if test="updateTime != null">
         #{updateTime,jdbcType=TIMESTAMP},
       </if>
+      <if test="returnId != null">
+        #{returnId},
+      </if>
     </trim>
   </insert>
   <select id="countByExample" parameterType="com.yonge.cooleshow.mbg.model.UserOrderRefundExample" resultType="java.lang.Long">
@@ -238,6 +245,9 @@
       <if test="record.updateTime != null">
         update_time_ = #{record.updateTime,jdbcType=TIMESTAMP},
       </if>
+      <if test="record.returnId != null">
+        return_id_ = #{record.returnId,jdbcType=BIGINT},
+      </if>
     </set>
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
@@ -256,6 +266,7 @@
       pay_fail_msg_ = #{record.payFailMsg,jdbcType=VARCHAR},
       arrival_time_ = #{record.arrivalTime,jdbcType=TIMESTAMP},
       create_time_ = #{record.createTime,jdbcType=TIMESTAMP},
+      return_id_ = #{record.returnId,jdbcType=BIGINT},
       update_time_ = #{record.updateTime,jdbcType=TIMESTAMP}
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
@@ -295,6 +306,9 @@
       <if test="updateTime != null">
         update_time_ = #{updateTime,jdbcType=TIMESTAMP},
       </if>
+      <if test="returnId != null">
+        return_id_ = #{returnId,jdbcType=BIGINT},
+      </if>
     </set>
     where id_ = #{id,jdbcType=BIGINT}
   </update>
@@ -310,6 +324,7 @@
       pay_fail_msg_ = #{payFailMsg,jdbcType=VARCHAR},
       arrival_time_ = #{arrivalTime,jdbcType=TIMESTAMP},
       create_time_ = #{createTime,jdbcType=TIMESTAMP},
+      return_id_ = #{returnId,jdbcType=BIGINT},
       update_time_ = #{updateTime,jdbcType=TIMESTAMP}
     where id_ = #{id,jdbcType=BIGINT}
   </update>
@@ -320,4 +335,11 @@
     from user_order_refund
     where #{transNo} = trans_no_ limit 1
   </select>
+
+  <select id="selectByRefundNo" resultMap="BaseResultMap">
+    select
+    <include refid="Base_Column_List" />
+    from user_order_refund
+    where #{refundOrderNo} = order_no_ limit 1
+    </select>
 </mapper>

+ 0 - 43
cooleshow-mall/mall-pay/pom.xml

@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>com.yonge.cooleshow</groupId>
-        <artifactId>cooleshow-mall</artifactId>
-        <version>1.0</version>
-    </parent>
-
-    <artifactId>mall-pay</artifactId>
-    <version>1.0</version>
-    <name>mall-pay</name>
-    <description>mall-pay</description>
-    <properties>
-        <java.version>1.8</java.version>
-    </properties>
-    <dependencies>
-        <dependency>
-            <groupId>com.huifu.adapay</groupId>
-            <artifactId>adapay-java-sdk</artifactId>
-            <version>1.2.10</version>
-        </dependency>
-        <dependency>
-            <groupId>com.yonge.cooleshow</groupId>
-            <artifactId>mall-common</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.redisson</groupId>
-            <artifactId>redisson</artifactId>
-            <version>3.16.4</version>
-            <scope>compile</scope>
-        </dependency>
-
-        <!-- redisson -->
-        <dependency>
-            <groupId>org.redisson</groupId>
-            <artifactId>redisson-spring-boot-starter</artifactId>
-            <version>3.16.4</version>
-        </dependency>
-    </dependencies>
-
-</project>

+ 0 - 36
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/config/HuifuConfiguration.java

@@ -1,36 +0,0 @@
-package com.yonge.cooleshow.config;
-
-import com.huifu.adapay.Adapay;
-import com.huifu.adapay.model.MerConfig;
-import com.yonge.cooleshow.props.HuifuProperties;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * 路由配置信息
- */
-@Configuration
-@EnableConfigurationProperties({HuifuProperties.class})
-public class HuifuConfiguration {
-	private static HuifuProperties huifuProperties;
-	@Bean
-	public MerConfig merConfig(HuifuProperties authProperties) {
-		this.huifuProperties = authProperties;
-
-		MerConfig merConfig = new MerConfig();
-		merConfig.setApiKey(authProperties.getApiKey());
-		merConfig.setApiMockKey(authProperties.getMockApiKey());
-		merConfig.setRSAPrivateKey(authProperties.getRsaPrivateKey());
-		try {
-			Adapay.initWithMerConfig(merConfig);
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		return merConfig;
-	}
-
-	public static HuifuProperties getHuifuProperties(){
-		return huifuProperties;
-	}
-}

+ 0 - 40
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/enums/OrderStatusEnum.java

@@ -1,40 +0,0 @@
-package com.yonge.cooleshow.enums;
-
-import com.yonge.toolset.base.enums.BaseEnum;
-
-/**
- * 订单状态 WAIT_PAY 待支付 PAYING 支付中  PAID 已付款 CLOSE 已关闭
- * @Author: liweifan
- * @Data: 2022/3/31 14:59
- */
-public enum OrderStatusEnum implements BaseEnum<String, OrderStatusEnum> {
-    WAIT_PAY("WAIT_PAY","待支付"),
-    PAYING("PAYING","支付中"),
-    PAID("PAID","已付款"),
-    CLOSE("CLOSE","已关闭"),
-    FAIL("FAIL","支付失败"),
-    ;
-    private String code;
-    private String msg;
-
-    OrderStatusEnum(String code, String msg) {
-        this.code = code;
-        this.msg = msg;
-    }
-
-    public void setCode(String code) {
-        this.code = code;
-    }
-
-    public String getMsg() {
-        return msg;
-    }
-
-    public void setMsg(String msg) {
-        this.msg = msg;
-    }
-
-    public String getCode() {
-        return this.code;
-    }
-}

+ 0 - 37
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/enums/PayChannelEnum.java

@@ -1,37 +0,0 @@
-package com.yonge.cooleshow.enums;
-
-
-/**
- * 支付渠道
- * @author liweifan
- * @updateTime 2022/3/31 11:30
- */
-public enum PayChannelEnum {
-    alipay("alipay","支付宝APP支付"),
-    wx_lite("wx_lite","微信小程序支付"),
-    alipay_lite("alipay_lite","支付宝小程序支付")
-    ;
-    private String code;
-    private String msg;
-
-    PayChannelEnum(String code, String msg) {
-        this.code = code;
-        this.msg = msg;
-    }
-
-    public void setCode(String code) {
-        this.code = code;
-    }
-
-    public String getMsg() {
-        return msg;
-    }
-
-    public void setMsg(String msg) {
-        this.msg = msg;
-    }
-
-    public String getCode() {
-        return this.code;
-    }
-}

+ 0 - 37
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/enums/PayStatusEnum.java

@@ -1,37 +0,0 @@
-package com.yonge.cooleshow.enums;
-
-
-/**
- * 交易状态 pending 交易处理中 succeeded 交易成功 failed 交易失败
- * @Author: liweifan
- * @Data: 2022/3/31 14:59
- */
-public enum PayStatusEnum{
-    pending("pending","交易处理中"),
-    succeeded("succeeded","交易成功"),
-    failed("failed","交易失败")
-    ;
-    private String code;
-    private String msg;
-
-    PayStatusEnum(String code, String msg) {
-        this.code = code;
-        this.msg = msg;
-    }
-
-    public void setCode(String code) {
-        this.code = code;
-    }
-
-    public String getMsg() {
-        return msg;
-    }
-
-    public void setMsg(String msg) {
-        this.msg = msg;
-    }
-
-    public String getCode() {
-        return this.code;
-    }
-}

+ 0 - 110
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/props/HuifuProperties.java

@@ -1,110 +0,0 @@
-package com.yonge.cooleshow.props;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.cloud.context.config.annotation.RefreshScope;
-
-/**
- * 权限过滤
- */
-@RefreshScope
-@ConfigurationProperties("huifu")
-public class HuifuProperties {
-    /***
-     * 汇付 控制台 主页面应用的app_id
-     * @author liweifan
-     * @updateTime 2022/3/31 11:19
-     */
-    private String appId;
-    /***
-     * 汇付 控制台->商户信息管理->证书管理中的API Key(prod模式的API KEY)
-     * @author liweifan
-     * @updateTime 2022/3/31 11:19
-     */
-    private String apiKey;
-    /***
-     * 汇付 控制台->商户信息管理->证书管理中的API Key(mock模式的API KEY)
-     * @author liweifan
-     * @updateTime 2022/3/31 11:19
-     */
-    private String mockApiKey;
-    /***
-     * 商户发起请求时,用于请求参数加签所需要的RSA私钥
-     * @author liweifan
-     * @updateTime 2022/3/31 11:24
-     */
-    private String rsaPrivateKey;
-    /***
-     * 付款成功回调地址
-     * @author liweifan
-     * @updateTime 2022/3/31 11:24
-     */
-    private String notifyUrl;
-    /***
-     * 微信appid
-     * @author liweifan
-     * @updateTime 2022/3/31 11:24
-     */
-    private String wxAppid;
-    /***
-     * 微信secret
-     * @author liweifan
-     * @updateTime 2022/3/31 11:24
-     */
-    private String wxSecret;
-
-    public String getApiKey() {
-        return apiKey;
-    }
-
-    public void setApiKey(String apiKey) {
-        this.apiKey = apiKey;
-    }
-
-    public String getMockApiKey() {
-        return mockApiKey;
-    }
-
-    public void setMockApiKey(String mockApiKey) {
-        this.mockApiKey = mockApiKey;
-    }
-
-    public String getRsaPrivateKey() {
-        return rsaPrivateKey;
-    }
-
-    public void setRsaPrivateKey(String rsaPrivateKey) {
-        this.rsaPrivateKey = rsaPrivateKey;
-    }
-
-    public String getAppId() {
-        return appId;
-    }
-
-    public void setAppId(String appId) {
-        this.appId = appId;
-    }
-
-    public String getWxAppid() {
-        return wxAppid;
-    }
-
-    public void setWxAppid(String wxAppid) {
-        this.wxAppid = wxAppid;
-    }
-
-    public String getWxSecret() {
-        return wxSecret;
-    }
-
-    public void setWxSecret(String wxSecret) {
-        this.wxSecret = wxSecret;
-    }
-
-    public String getNotifyUrl() {
-        return notifyUrl;
-    }
-
-    public void setNotifyUrl(String notifyUrl) {
-        this.notifyUrl = notifyUrl;
-    }
-}

+ 0 - 260
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/adapay/PaymentSdk.java

@@ -1,260 +0,0 @@
-package com.yonge.cooleshow.sdk.adapay;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.huifu.adapay.core.exception.BaseAdaPayException;
-import com.huifu.adapay.model.Payment;
-import com.huifu.adapay.model.PaymentConfirm;
-import com.huifu.adapay.model.Refund;
-import com.yonge.cooleshow.common.constant.CommonConstants;
-import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.cooleshow.config.HuifuConfiguration;
-import com.yonge.cooleshow.sdk.adapay.dto.PaymentReq;
-import com.yonge.cooleshow.sdk.adapay.dto.RefundReq;
-import com.yonge.toolset.base.exception.ThirdpartyException;
-import com.yonge.toolset.utils.collection.MapUtil;
-import com.yonge.toolset.utils.http.HttpUtil;
-import com.yonge.toolset.utils.string.StringUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-import org.springframework.util.CollectionUtils;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@Component
-public class PaymentSdk {
-    private final static Logger log = LoggerFactory.getLogger(PaymentSdk.class);
-
-    /**
-     * 执行一个支付交易
-     *
-     * @return 创建的支付对象
-     * @throws Exception 异常
-     */
-    public HttpResponseResult<Map<String, Object>> executePayment(PaymentReq paymentReq) {
-        paymentReq.setApp_id(HuifuConfiguration.getHuifuProperties().getAppId());
-        //创建分账对象
-        Map<String, String> div_member = new HashMap<>();
-        div_member.put("member_id", "0");
-        div_member.put("amount", paymentReq.getPay_amt());
-        div_member.put("fee_flag", "Y");
-        List<Map<String, String>> div_members = Arrays.asList(div_member);
-        paymentReq.setDiv_members(JSONObject.toJSONString(div_members));
-
-        log.info("汇付[创建支付对象] Req:{}", JSONObject.toJSONString(paymentReq));
-        //调用sdk方法,创建支付,得到支付对象
-        Map<String, Object> paymentParams = MapUtil.populateMap(new HashMap<>(), paymentReq);
-        Map<String, Object> res;
-        try {
-            res = Payment.create(paymentParams);
-        } catch (BaseAdaPayException e) {
-            return HttpResponseResult.failed(e.getMessage());
-        }
-        if (null == res) {
-            return HttpResponseResult.failed("请求失败");
-        }
-        log.info("汇付[创建支付对象] Resp:{}", res);
-        String errorCode = (String) res.get("error_code");
-        if (null != errorCode) {
-            String errorMsg = (String) res.get("error_msg");
-            return HttpResponseResult.failed(errorMsg);
-        }
-        return HttpResponseResult.succeed(res);
-    }
-
-    /**
-     * 创建确认对象
-     * 创建支付确认对象适用于延时分账的场景
-     *
-     * @return 查询的支付对象
-     * @throws Exception 异常
-     */
-    public Map<String, Object> createConfirm(Map<String, Object> confirm) throws Exception {
-        confirm = PaymentConfirm.create(confirm);
-
-        String error_code = (String) confirm.get("error_code");
-        if (null != error_code) {
-            String errorMsg = (String) confirm.get("error_msg");
-            throw new ThirdpartyException(errorMsg);
-        }
-        return confirm;
-    }
-
-    /**
-     * 关闭一个支付交易
-     *
-     * @param paymentId 要关闭的支付id
-     * @return 关闭的支付对象
-     * @throws Exception 异常
-     */
-    public HttpResponseResult<Map<String, Object>> closePayment(String paymentId, String reason, String expend) {
-        Map<String, Object> paymentParams = new HashMap<>(10);
-        paymentParams.put("payment_id", paymentId);
-        paymentParams.put("reason", reason);
-        paymentParams.put("expend", expend);
-        paymentParams.put("notify_url", HuifuConfiguration.getHuifuProperties().getNotifyUrl());
-
-        Map<String, Object> res;
-        try {
-            res = Payment.close(paymentParams);
-        } catch (BaseAdaPayException e) {
-            return HttpResponseResult.failed(e.getMessage());
-        }
-        if (CollectionUtils.isEmpty(res)) {
-            return HttpResponseResult.failed("请求失败");
-        }
-        log.info("汇付[关闭支付对象] Resp:{}", res);
-        String errorCode = (String) res.get("error_code");
-        if (null != errorCode) {
-            String errorMsg = (String) res.get("error_msg");
-            return HttpResponseResult.failed(errorMsg);
-        }
-        return HttpResponseResult.succeed(res);
-    }
-
-    /**
-     * 查询一个支付交易
-     *
-     * @param paymentId 要查询的支付id
-     * @return 查询的支付对象
-     * @throws Exception 异常
-     */
-    public Map<String, Object> queryPayment(String paymentId) throws Exception {
-        System.out.println("=======query payment begin=======");
-        //查询支付对象的参数,全部参数请参考 https://docs.adapay.tech/api/04-trade.html#id7
-        //调用sdk方法,查询支付交易,得到支付对象
-        Map<String, Object> payment = new HashMap<>();
-        try {
-            System.out.println("支付查询请求参数:" + JSON.toJSONString(paymentId));
-            payment = com.huifu.adapay.model.Payment.query(paymentId);
-        } catch (ThirdpartyException e) {
-            e.printStackTrace();
-        }
-
-        System.out.println("支付查询返回参数:" + JSON.toJSONString(payment));
-
-        String error_code = (String) payment.get("error_code");
-        if (null != error_code) {
-            String error_msg = (String) payment.get("error_msg");
-            System.out.println("error_code:" + error_code + "............." + error_msg);
-        }
-        System.out.println("=======query payment end=======");
-        return payment;
-    }
-    /***
-     * 获取openId
-     * @author liweifan
-     * @param: js_code
-     * @updateTime 2022/4/8 15:49
-     * @return: java.lang.Object
-     */
-    public HttpResponseResult<Map<String, String>> getOpenId(String js_code) {
-        log.info("微信[获取用户openId] Req:{}", js_code);
-        Map<String, Object> param = new HashMap<>();
-        param.put("appid", HuifuConfiguration.getHuifuProperties().getWxAppid());
-        param.put("secret", HuifuConfiguration.getHuifuProperties().getWxSecret());
-        param.put("js_code", js_code);
-        param.put("grant_type", CommonConstants.WECHAT_GRANT_TYPE);
-
-        try {
-            String res = HttpUtil.get("https://api.weixin.qq.com/sns/jscode2session", param);
-            JSONObject jsonObject = JSONObject.parseObject(res);
-            log.info("微信[获取用户openId] Res:{}", jsonObject.toJSONString());
-            String errcode = jsonObject.getString("errcode");
-            if(StringUtil.isEmpty(errcode) || "0".equals(errcode)){
-                Map<String, String> resMap = new HashMap<>();
-                resMap.put("openid", jsonObject.getString("openid"));
-                resMap.put("session_key", jsonObject.getString("session_key"));
-                return HttpResponseResult.succeed(resMap);
-            }else{
-                return HttpResponseResult.failed(jsonObject.getString("errmsg"));
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            return HttpResponseResult.failed("请求失败");
-        }
-    }
-
-
-
-    /**
-     * 退款
-     *
-     * @return 关闭的支付对象
-     */
-    public HttpResponseResult<Map<String, Object>> refundPayment(RefundReq refundReq) {
-
-        refundReq.setFail_fast("Y");
-        //创建分账对象
-        Map<String, String> div_member = new HashMap<>();
-        div_member.put("member_id", "0");
-        div_member.put("amount", refundReq.getRefund_amt());
-        div_member.put("fee_flag", "Y");
-        List<Map<String, String>> div_members = Arrays.asList(div_member);
-        refundReq.setDiv_members(JSONObject.toJSONString(div_members));
-
-        log.info("汇付[退款对象] Req:{}", JSONObject.toJSONString(refundReq));
-        //调用sdk方法,创建退款,得到退款对象
-        Map<String, Object> paymentParams = MapUtil.populateMap(new HashMap<>(), refundReq);
-        Map<String, Object> res;
-        try {
-            res = Refund.create(refundReq.getId(),paymentParams);
-        } catch (BaseAdaPayException e) {
-            return HttpResponseResult.failed(e.getMessage());
-        }
-        if (null == res) {
-            return HttpResponseResult.failed("请求失败");
-        }
-        log.info("汇付[创建退款对象] Resp:{}", res);
-        String errorCode = (String) res.get("error_code");
-        if (null != errorCode) {
-            String errorMsg = (String) res.get("error_msg");
-            return HttpResponseResult.failed(errorMsg);
-        }
-        return HttpResponseResult.succeed(res);
-    }
-
-    /**
-     *  查看退款订单
-     *
-     * @param {
-     *     "status": "succeeded",
-     *     "prod_mode": "true",
-     *     "refunds": [
-     *         {
-     *             "payment_id": "002112019110811022810038712892084113408",
-     *             "refund_id": "0021120191108110337980038713178955902976",
-     *             "refund_order_no": "refundOrderNo00211201911081103379",
-     *             "trans_status": "P",
-     *             "refund_amt": "0.01",
-     *             "fee_amt": ""
-     *         }
-     *     ]
-     * }
-     */
-    public HttpResponseResult<Map<String, Object>> selectRefundPayment(String refundId) {
-
-        Map<String, Object> refundParams = new HashMap<>(2);
-        refundParams.put("refund_id", refundId);
-        Map<String, Object> res;
-        try {
-            res = Refund.query(refundParams);
-        } catch (BaseAdaPayException e) {
-            return HttpResponseResult.failed(e.getMessage());
-        }
-        if (null == res) {
-            return HttpResponseResult.failed("请求失败");
-        }
-        log.info("汇付[查看退款对象] Resp:{}", res);
-        String errorCode = (String) res.get("error_code");
-        if (null != errorCode) {
-            String errorMsg = (String) res.get("error_msg");
-            return HttpResponseResult.failed(errorMsg);
-        }
-        return HttpResponseResult.succeed(res);
-    }
-}

+ 0 - 170
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/adapay/dto/PaymentReq.java

@@ -1,170 +0,0 @@
-package com.yonge.cooleshow.sdk.adapay.dto;
-
-import com.yonge.cooleshow.sdk.req.DeviceInfo;
-
-import java.io.Serializable;
-import java.util.Map;
-
-/**
- * 创建支付对象请求参数
- * @Author: liweifan
- * @Data: 2022/3/31 10:58
- */
-public class PaymentReq implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    /***
-     * 请求订单号,只能为英文、数字或者下划线的一种或多种组合,保证在app_id下唯一
-     * @author liweifan
-     * @updateTime 2022/3/31 11:00
-     */
-    private String order_no;
-    /***
-     * 控制台 主页面应用的app_id
-     * @author liweifan
-     * @updateTime 2022/3/31 11:00
-     */
-    private String app_id;
-    /***
-     * 支付渠道,参见 支付渠道
-     * @author liweifan
-     * @updateTime 2022/3/31 11:01
-     */
-    private String pay_channel;
-    /***
-     * 交易金额,必须大于0,保留两位小数点,如0.10、100.05等
-     * @author liweifan
-     * @updateTime 2022/3/31 11:01
-     */
-    private String pay_amt;
-    /***
-     * 商品标题
-     * @author liweifan
-     * @updateTime 2022/3/31 11:01
-     */
-    private String goods_title;
-    /***
-     * 商品描述信息,微信小程序和微信公众号该字段最大长度42个字符
-     * @author liweifan
-     * @updateTime 2022/3/31 11:01
-     */
-    private String goods_desc;
-    /***
-     * 分账对象信息列表,最多仅支持7个分账方,json 数组形式,详见 分账对象信息列表
-     * @author liweifan
-     * @updateTime 2022/3/31 11:01
-     */
-    private String div_members;
-    /***
-     * 订单附加说明
-     * @author liweifan
-     * @updateTime 2022/3/31 11:01
-     */
-    private String description;
-    /***
-     * 前端设备信息,详见 设备信息
-     * @author liweifan
-     * @updateTime 2022/3/31 11:01
-     */
-    private DeviceInfo device_info;
-    /***
-     * 支付渠道额外参数,JSON格式,条件可输入,详见 支付渠道 expend参数
-     * @author liweifan
-     * @updateTime 2022/3/31 11:01
-     */
-    private Map<String,Object> expend;
-    /***
-     * 异步通知地址,url为http/https路径,服务器POST回调,URL 上请勿附带参数
-     * @author liweifan
-     * @updateTime 2022/3/31 11:01
-     */
-    private String notify_url;
-
-    public String getOrder_no() {
-        return order_no;
-    }
-
-    public void setOrder_no(String order_no) {
-        this.order_no = order_no;
-    }
-
-    public String getApp_id() {
-        return app_id;
-    }
-
-    public void setApp_id(String app_id) {
-        this.app_id = app_id;
-    }
-
-    public String getPay_amt() {
-        return pay_amt;
-    }
-
-    public void setPay_amt(String pay_amt) {
-        this.pay_amt = pay_amt;
-    }
-
-    public String getGoods_title() {
-        return goods_title;
-    }
-
-    public void setGoods_title(String goods_title) {
-        this.goods_title = goods_title;
-    }
-
-    public String getGoods_desc() {
-        return goods_desc;
-    }
-
-    public void setGoods_desc(String goods_desc) {
-        this.goods_desc = goods_desc;
-    }
-
-    public String getDiv_members() {
-        return div_members;
-    }
-
-    public void setDiv_members(String div_members) {
-        this.div_members = div_members;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public DeviceInfo getDevice_info() {
-        return device_info;
-    }
-
-    public void setDevice_info(DeviceInfo device_info) {
-        this.device_info = device_info;
-    }
-
-    public Map<String, Object> getExpend() {
-        return expend;
-    }
-
-    public void setExpend(Map<String, Object> expend) {
-        this.expend = expend;
-    }
-
-    public String getNotify_url() {
-        return notify_url;
-    }
-
-    public void setNotify_url(String notify_url) {
-        this.notify_url = notify_url;
-    }
-
-    public String getPay_channel() {
-        return pay_channel;
-    }
-
-    public void setPay_channel(String pay_channel) {
-        this.pay_channel = pay_channel;
-    }
-}

+ 0 - 139
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/adapay/dto/RefundReq.java

@@ -1,139 +0,0 @@
-package com.yonge.cooleshow.sdk.adapay.dto;
-
-import com.yonge.cooleshow.sdk.req.DeviceInfo;
-
-import java.io.Serializable;
-
-/**
- * Description
- *
- * @author liujunchi
- * @date 2022-04-27
- */
-public class RefundReq implements Serializable {
-
-    /**
-     * 当支付确认成功后进行退款,请传入支付确认对象的id;当实时分账成功后进行退款,请传入支付对象的id。
-     *
-     * Y
-     */
-    private String id;
-
-    /**
-     * 请求订单号,只能为英文、数字或者下划线的一种或多种组合
-     *
-     * Y
-     */
-    private String refund_order_no;
-
-    /**
-     * 退款金额,若退款金额小于原交易金额,则认为是部分退款,必须大于0,保留两位小数点,如0.10、100.05等
-     *
-     * Y
-     */
-    private String refund_amt;
-
-    /**
-     * 退款描述
-     */
-    private String reason;
-
-    /**
-     * 扩展域
-     */
-    private String expend;
-
-    /**
-     * 前端设备信息
-     */
-    private DeviceInfo device_info;
-
-    /**
-     * 分账对象信息列表
-     */
-    private String div_members;
-
-    /**
-     * 异步通知地址,url为http/https路径,服务器POST回调,URL 上请勿附带参数
-     */
-    private String notify_url;
-
-    /**
-     * 快速失败标识:N 或者为空时-退款失败及时返回错误,仅支持实时分账场景;
-     * 为Y时,退款失败会走 Adapay 人工审核流程,核对后再次出款或回账,最晚 T+3 返回终态结果
-     */
-    private String fail_fast;
-
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getRefund_order_no() {
-        return refund_order_no;
-    }
-
-    public void setRefund_order_no(String refund_order_no) {
-        this.refund_order_no = refund_order_no;
-    }
-
-    public String getRefund_amt() {
-        return refund_amt;
-    }
-
-    public void setRefund_amt(String refund_amt) {
-        this.refund_amt = refund_amt;
-    }
-
-    public String getReason() {
-        return reason;
-    }
-
-    public void setReason(String reason) {
-        this.reason = reason;
-    }
-
-    public String getExpend() {
-        return expend;
-    }
-
-    public void setExpend(String expend) {
-        this.expend = expend;
-    }
-
-    public DeviceInfo getDevice_info() {
-        return device_info;
-    }
-
-    public void setDevice_info(DeviceInfo device_info) {
-        this.device_info = device_info;
-    }
-
-    public String getDiv_members() {
-        return div_members;
-    }
-
-    public void setDiv_members(String div_members) {
-        this.div_members = div_members;
-    }
-
-    public String getNotify_url() {
-        return notify_url;
-    }
-
-    public void setNotify_url(String notify_url) {
-        this.notify_url = notify_url;
-    }
-
-    public String getFail_fast() {
-        return fail_fast;
-    }
-
-    public void setFail_fast(String fail_fast) {
-        this.fail_fast = fail_fast;
-    }
-}

+ 0 - 27
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/req/DeviceInfo.java

@@ -1,27 +0,0 @@
-package com.yonge.cooleshow.sdk.req;
-
-import java.io.Serializable;
-
-/**
- * 交易设备信息
- * @Author: liweifan
- * @Data: 2022/3/31 11:36
- */
-public class DeviceInfo implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    /***
-     * 交易设备所在的公网 IP
-     * @author liweifan
-     * @updateTime 2022/3/31 11:07
-     */
-    private String device_ip;
-
-    public String getDevice_ip() {
-        return device_ip;
-    }
-
-    public void setDevice_ip(String device_ip) {
-        this.device_ip = device_ip;
-    }
-}

+ 0 - 55
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/req/DivMember.java

@@ -1,55 +0,0 @@
-package com.yonge.cooleshow.sdk.req;
-
-import java.io.Serializable;
-
-/**
- * 分账对象
- * @Author: liweifan
- * @Data: 2022/3/31 11:26
- */
-public class DivMember implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * 分账用户 Member对象 的 id;若是商户本身时,传入0
-     * @author liweifan
-     * @updateTime 2022/3/31 11:27
-     */
-    private String member_id;
-    /**
-     * 分账金额,精确到分,如0.50,1.00等,分账总金额必须等于主交易金额,金额不能为0.00
-     * @author liweifan
-     * @updateTime 2022/3/31 11:28
-     */
-    private String amount;
-    /**
-     * 是否手续费承担方,N-否,Y-是,手续费承担方有且只能有一个
-     * @author liweifan
-     * @updateTime 2022/3/31 11:28
-     */
-    private String fee_flag;
-
-    public String getMember_id() {
-        return member_id;
-    }
-
-    public void setMember_id(String member_id) {
-        this.member_id = member_id;
-    }
-
-    public String getAmount() {
-        return amount;
-    }
-
-    public void setAmount(String amount) {
-        this.amount = amount;
-    }
-
-    public String getFee_flag() {
-        return fee_flag;
-    }
-
-    public void setFee_flag(String fee_flag) {
-        this.fee_flag = fee_flag;
-    }
-}

+ 0 - 52
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/req/OrderCloseReq.java

@@ -1,52 +0,0 @@
-package com.yonge.cooleshow.sdk.req;
-
-import io.swagger.annotations.ApiModel;
-
-/**
- * Description
- *
- * @author liujunchi
- * @date 2022-05-05
- */
-@ApiModel("关闭订单请求")
-public class OrderCloseReq {
-
-    /**
-     * 支付id
-     */
-    private String paymentId;
-
-    /**
-     * 关单描述
-     */
-    private String reason;
-
-    /**
-     * 扩展域
-     */
-    private String expend;
-
-    public String getPaymentId() {
-        return paymentId;
-    }
-
-    public void setPaymentId(String paymentId) {
-        this.paymentId = paymentId;
-    }
-
-    public String getReason() {
-        return reason;
-    }
-
-    public void setReason(String reason) {
-        this.reason = reason;
-    }
-
-    public String getExpend() {
-        return expend;
-    }
-
-    public void setExpend(String expend) {
-        this.expend = expend;
-    }
-}

+ 0 - 68
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/req/OrderRefundReq.java

@@ -1,68 +0,0 @@
-package com.yonge.cooleshow.sdk.req;
-
-import io.swagger.annotations.ApiModelProperty;
-
-/**
- * Description 退款请求参数
- *
- * @author liujunchi
- * @date 2022-04-27
- */
-public class OrderRefundReq {
-
-    @ApiModelProperty("支付流水号")
-    private String transNo;
-
-
-    @ApiModelProperty("订单号")
-    private String orderNo;
-
-    @ApiModelProperty("退款金额")
-    private String refundAmount;
-
-    @ApiModelProperty("退款描述")
-    private String reason;
-
-    @ApiModelProperty(value = "用户端公网ip ")
-    private String ipAddress;
-
-    public String getTransNo() {
-        return transNo;
-    }
-
-    public void setTransNo(String transNo) {
-        this.transNo = transNo;
-    }
-
-    public String getOrderNo() {
-        return orderNo;
-    }
-
-    public void setOrderNo(String orderNo) {
-        this.orderNo = orderNo;
-    }
-
-    public String getRefundAmount() {
-        return refundAmount;
-    }
-
-    public void setRefundAmount(String refundAmount) {
-        this.refundAmount = refundAmount;
-    }
-
-    public String getReason() {
-        return reason;
-    }
-
-    public void setReason(String reason) {
-        this.reason = reason;
-    }
-
-    public String getIpAddress() {
-        return ipAddress;
-    }
-
-    public void setIpAddress(String ipAddress) {
-        this.ipAddress = ipAddress;
-    }
-}

+ 0 - 73
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/req/PaymentConfirmParam.java

@@ -1,73 +0,0 @@
-package com.yonge.cooleshow.sdk.req;
-
-import java.io.Serializable;
-import java.util.List;
-
-/**
- * @Author: liweifan
- * @Data: 2022/3/11 17:44
- */
-public class PaymentConfirmParam implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    //Adapay生成的支付对象id
-    private String payment_id;
-    //请求订单号,只能为英文、数字或者下划线的一种或多种组合,保证在app_id下唯一
-    private String order_no;
-    //确认金额,必须大于0,保留两位小数点,如0.10、100.05等。必须小于等于原支付金额-已确认金额-已撤销金额。
-    private String confirm_amt;
-    //附加说明
-    private String description;
-    //分账对象信息列表,一次请求最多仅支持7个分账方
-    private List<DivMember> div_members;
-    //手续费收取模式:O-商户手续费账户扣取手续费,I-交易金额中扣取手续费;值为空时,默认值为I;若为O时,分账对象列表中不支持传入手续费承担方
-    private String fee_mode;
-
-    public String getPayment_id() {
-        return payment_id;
-    }
-
-    public void setPayment_id(String payment_id) {
-        this.payment_id = payment_id;
-    }
-
-    public String getOrder_no() {
-        return order_no;
-    }
-
-    public void setOrder_no(String order_no) {
-        this.order_no = order_no;
-    }
-
-    public String getConfirm_amt() {
-        return confirm_amt;
-    }
-
-    public void setConfirm_amt(String confirm_amt) {
-        this.confirm_amt = confirm_amt;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public List<DivMember> getDiv_members() {
-        return div_members;
-    }
-
-    public void setDiv_members(List<DivMember> div_members) {
-        this.div_members = div_members;
-    }
-
-    public String getFee_mode() {
-        return fee_mode;
-    }
-
-    public void setFee_mode(String fee_mode) {
-        this.fee_mode = fee_mode;
-    }
-}

+ 0 - 39
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/res/OrderCloseRes.java

@@ -1,39 +0,0 @@
-package com.yonge.cooleshow.sdk.res;
-
-import io.swagger.annotations.ApiModel;
-
-/**
- * Description
- *
- * @author liujunchi
- * @date 2022-05-05
- */
-@ApiModel("关闭订单信息")
-public class OrderCloseRes {
-
-    /**
-     * 执行状态
-     */
-    private boolean status = true;
-
-    /**
-     * 错误信息
-     */
-    private String failMsg;
-
-    public boolean isStatus() {
-        return status;
-    }
-
-    public void setStatus(boolean status) {
-        this.status = status;
-    }
-
-    public String getFailMsg() {
-        return failMsg;
-    }
-
-    public void setFailMsg(String failMsg) {
-        this.failMsg = failMsg;
-    }
-}

+ 0 - 92
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/res/OrderRefundRes.java

@@ -1,92 +0,0 @@
-package com.yonge.cooleshow.sdk.res;
-
-import com.yonge.cooleshow.enums.PayStatusEnum;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-/**
- * Description
- *
- * @author liujunchi
- * @date 2022-04-27
- */
-@ApiModel("退款返回数据")
-public class OrderRefundRes {
-
-    @ApiModelProperty("退款流水号")
-    private String transNo;
-
-    @ApiModelProperty("支付流水号")
-    private String payTransNo;
-
-    @ApiModelProperty("订单号")
-    private String refundOrderNo;
-
-    @ApiModelProperty("退款金额")
-    private String refundAmount;
-
-    @ApiModelProperty("退款状态")
-    private PayStatusEnum refundStatus;
-
-    @ApiModelProperty("执行状态")
-    private boolean status = true;
-
-    @ApiModelProperty("出错信息")
-    private String message;
-
-    public String getRefundOrderNo() {
-        return refundOrderNo;
-    }
-
-    public void setRefundOrderNo(String refundOrderNo) {
-        this.refundOrderNo = refundOrderNo;
-    }
-
-    public boolean isStatus() {
-        return status;
-    }
-
-    public void setStatus(boolean status) {
-        this.status = status;
-    }
-
-    public String getMessage() {
-        return message;
-    }
-
-    public void setMessage(String message) {
-        this.message = message;
-    }
-
-    public String getTransNo() {
-        return transNo;
-    }
-
-    public void setTransNo(String transNo) {
-        this.transNo = transNo;
-    }
-
-    public String getPayTransNo() {
-        return payTransNo;
-    }
-
-    public void setPayTransNo(String payTransNo) {
-        this.payTransNo = payTransNo;
-    }
-
-    public String getRefundAmount() {
-        return refundAmount;
-    }
-
-    public void setRefundAmount(String refundAmount) {
-        this.refundAmount = refundAmount;
-    }
-
-    public PayStatusEnum getRefundStatus() {
-        return refundStatus;
-    }
-
-    public void setRefundStatus(PayStatusEnum status) {
-        this.refundStatus = status;
-    }
-}

+ 0 - 50
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/service/PaymentService.java

@@ -1,50 +0,0 @@
-package com.yonge.cooleshow.service;
-
-import com.yonge.cooleshow.sdk.req.OrderCloseReq;
-import com.yonge.cooleshow.sdk.req.OrderPayReq;
-import com.yonge.cooleshow.sdk.req.OrderRefundReq;
-import com.yonge.cooleshow.sdk.res.OrderCloseRes;
-import com.yonge.cooleshow.sdk.res.OrderPayRes;
-import com.yonge.cooleshow.sdk.res.OrderRefundRes;
-
-/**
- * Description 支付服务
- *
- * @author liujunchi
- * @date 2022-04-21
- */
-public interface PaymentService {
-
-    /**
-     * 调用支付
-     *
-     * @param payReq
-     * @return
-     */
-    OrderPayRes orderPay(OrderPayReq payReq);
-
-
-    /**
-     * 拉起原有支付信息,继续支付
-     *
-     * @param payReq
-     * @return
-     */
-    OrderPayRes orderContinue(OrderPayReq payReq);
-
-    /**
-     * 退款
-     *
-     * @param refundReq
-     * @return
-     */
-    OrderRefundRes orderRefund(OrderRefundReq refundReq);
-
-    /**
-     * 关闭订单
-     *
-     * @param closeReq 关闭订单
-     * @return
-     */
-    OrderCloseRes orderClose(OrderCloseReq closeReq);
-}

+ 0 - 145
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/service/impl/AdapayPaymentServiceImpl.java

@@ -1,145 +0,0 @@
-package com.yonge.cooleshow.service.impl;
-
-import com.alibaba.fastjson.JSONObject;
-import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.cooleshow.config.HuifuConfiguration;
-import com.yonge.cooleshow.enums.OrderStatusEnum;
-import com.yonge.cooleshow.enums.PayChannelEnum;
-import com.yonge.cooleshow.enums.PayStatusEnum;
-import com.yonge.cooleshow.sdk.adapay.PaymentSdk;
-import com.yonge.cooleshow.sdk.adapay.dto.RefundReq;
-import com.yonge.cooleshow.sdk.req.DeviceInfo;
-import com.yonge.cooleshow.sdk.req.OrderCloseReq;
-import com.yonge.cooleshow.sdk.req.OrderPayReq;
-import com.yonge.cooleshow.sdk.adapay.dto.PaymentReq;
-import com.yonge.cooleshow.sdk.req.OrderRefundReq;
-import com.yonge.cooleshow.sdk.res.OrderCloseRes;
-import com.yonge.cooleshow.sdk.res.OrderRefundRes;
-import com.yonge.cooleshow.sdk.res.OrderPayRes;
-import com.yonge.cooleshow.service.PaymentService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Description
- *
- * @author liujunchi
- * @date 2022-04-21
- */
-@Service("adapayPaymentService")
-public class AdapayPaymentServiceImpl implements PaymentService {
-
-    @Autowired
-    private PaymentSdk paymentSdk;
-
-    @Override
-    public OrderPayRes orderPay(OrderPayReq payReq) {
-        PaymentReq paymentReq = new PaymentReq();
-        paymentReq.setOrder_no(payReq.getOrderNo());
-        paymentReq.setPay_channel(payReq.getPayChannel().getCode());
-        paymentReq.setPay_amt(payReq.getOrderPrice().setScale(2, RoundingMode.HALF_UP).toString());
-        paymentReq.setGoods_title(payReq.getGoodTitle());
-        paymentReq.setGoods_desc(payReq.getGoodDesc());
-
-        DeviceInfo deviceInfo = new DeviceInfo();
-        deviceInfo.setDevice_ip(payReq.getIpAddress());
-
-        paymentReq.setDevice_info(deviceInfo);
-        //异步通知地址
-        paymentReq.setNotify_url(HuifuConfiguration.getHuifuProperties().getNotifyUrl());
-
-        if (PayChannelEnum.alipay_lite.equals(payReq.getPayChannel())) {
-            Map<String, Object> expend = new HashMap<>();
-            expend.put("buyer_id", payReq.getBuyerId());
-            paymentReq.setExpend(expend);
-        } else if (PayChannelEnum.wx_lite.equals(payReq.getPayChannel())) {
-            Map<String, Object> expend = new HashMap<>();
-            expend.put("open_id", payReq.getOpenId());
-            paymentReq.setExpend(expend);
-        }
-        //付款请求
-        HttpResponseResult<Map<String, Object>> responseResult = paymentSdk.executePayment(paymentReq);
-        OrderPayRes orderPayRes = new OrderPayRes();
-        orderPayRes.setOrderNo(payReq.getOrderNo());
-        orderPayRes.setPayChannel(payReq.getPayChannel().getCode());
-
-        if (responseResult.getStatus()) {
-            Map<String, Object> res = responseResult.getData();
-            orderPayRes.setTransNo(res.get("id").toString());
-            orderPayRes.setPay_amt(
-                    new BigDecimal(res.get("pay_amt").toString()).setScale(2, RoundingMode.HALF_UP).toString()
-            );
-            String pay_info = ((JSONObject) res.get("expend")).getString("pay_info");
-            orderPayRes.setPay_info(pay_info);
-            orderPayRes.setPayStatus(PayStatusEnum.pending);
-            return orderPayRes;
-        } else {
-            //入订单付款表,同时修改订单状态
-            orderPayRes.setPayStatus(PayStatusEnum.failed);
-            orderPayRes.setStatus(false);
-            orderPayRes.setMessage(responseResult.getMsg());
-            return orderPayRes;
-        }
-    }
-
-    @Override
-    public OrderPayRes orderContinue(OrderPayReq payReq) {
-        OrderPayRes orderPayRes = new OrderPayRes();
-        orderPayRes.setPay_info(payReq.getPayInfo());
-        orderPayRes.setPayChannel(payReq.getPayChannel().getCode());
-        orderPayRes.setPay_amt(payReq.getOrderPrice().setScale(2, RoundingMode.HALF_UP).toString());
-        return orderPayRes;
-    }
-
-    @Override
-    public OrderRefundRes orderRefund(OrderRefundReq orderRefundReq) {
-        RefundReq refundReq = new RefundReq();
-        refundReq.setRefund_order_no(orderRefundReq.getTransNo());
-        refundReq.setRefund_amt(orderRefundReq.getRefundAmount());
-        refundReq.setId(orderRefundReq.getTransNo());
-        refundReq.setReason(orderRefundReq.getReason());
-        DeviceInfo deviceInfo = new DeviceInfo();
-        deviceInfo.setDevice_ip(orderRefundReq.getIpAddress());
-
-        refundReq.setDevice_info(deviceInfo);
-
-        //异步通知地址
-        refundReq.setNotify_url(HuifuConfiguration.getHuifuProperties().getNotifyUrl());
-        //付款请求
-        HttpResponseResult<Map<String, Object>> responseResult = paymentSdk.refundPayment(refundReq);
-
-        OrderRefundRes  orderRefundRes = new OrderRefundRes();
-        if (responseResult.getStatus()) {
-            Map<String, Object> data = responseResult.getData();
-            orderRefundRes.setTransNo(data.get("id").toString());
-            orderRefundRes.setPayTransNo(data.get("payment_id").toString());
-            orderRefundRes.setRefundOrderNo(data.get("refund_order_no").toString());
-            orderRefundRes.setRefundAmount(new BigDecimal(data.get("refund_amt").toString())
-                                                   .setScale(2,RoundingMode.HALF_UP).toString());
-            orderRefundRes.setRefundStatus(PayStatusEnum.pending);
-
-        } else {
-            orderRefundRes.setStatus(false);
-            orderRefundRes.setMessage(responseResult.getMsg());
-        }
-        return orderRefundRes;
-    }
-
-    @Override
-    public OrderCloseRes orderClose(OrderCloseReq closeReq) {
-        HttpResponseResult<Map<String, Object>> mapHttpResponseResult = paymentSdk.closePayment(closeReq.getPaymentId(),
-                                                                                                closeReq.getReason(),
-                                                                                                closeReq.getExpend());
-        OrderCloseRes closeRes = new OrderCloseRes();
-        if (!mapHttpResponseResult.getStatus()) {
-            closeRes.setFailMsg(mapHttpResponseResult.getMsg());
-            closeRes.setStatus(false);
-        }
-        return closeRes;
-    }
-}

+ 0 - 116
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/util/DistributedLock.java

@@ -1,116 +0,0 @@
-package com.yonge.cooleshow.util;
-
-import org.redisson.api.RLock;
-import org.redisson.api.RedissonClient;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Objects;
-import java.util.concurrent.*;
-
-/**
- * 分布式竞争锁
- *
- * @author hgw
- */
-public class DistributedLock {
-    private final static Logger log = LoggerFactory.getLogger(DistributedLock.class);
-
-    private final RedissonClient redissonClient;
-
-    private static final long DEFAULT_TIMEOUT = 60L;// key过期时间默认1分钟后
-
-    private static final TimeUnit DEFAULT_TIME_UNIT = TimeUnit.SECONDS;//默认过期时间单位-秒钟
-
-    private DistributedLock(RedissonClient redissonClient) {
-        this.redissonClient = redissonClient;
-    }
-
-    public static DistributedLock of(RedissonClient redissonClient) {
-        return new DistributedLock(redissonClient);
-    }
-
-    /**
-     * 分布式锁-默认锁60秒
-     *
-     * @param lockName lockKey
-     * @param runnable 任务
-     * @return true 锁成功  false 锁失败
-     */
-    public boolean runIfLockCanGet(final String lockName, Runnable runnable) {
-        return runIfLockCanGet(lockName, runnable, DEFAULT_TIMEOUT, DEFAULT_TIME_UNIT);
-    }
-
-    /**
-     * 分布式锁
-     *
-     * @param lockName lockKey
-     * @param runnable 任务
-     * @param timeout  超时时间
-     * @param unit     超时时间单位
-     * @return true 锁成功  false 锁失败
-     */
-    public boolean runIfLockCanGet(final String lockName, Runnable runnable, final long timeout, TimeUnit unit) {
-        RLock lock = redissonClient.getLock(lockName);
-        if (Objects.isNull(lock)) {
-            log.info("runIfLockCanGet lock is null lockName : {}", lockName);
-            return false;
-        }
-        try {
-            if (lock.tryLock(0, timeout, unit)) {
-                if (Objects.nonNull(runnable)) {
-                    runnable.run();
-                }
-                return true;
-            } else {
-                return false;
-            }
-        } catch (Exception e) {
-            log.error("runIfLockCanGet error lockName : {}", lockName, e);
-            throw new RuntimeException("runIfLockCanGet error lockName :" + lockName, e);
-        } finally {
-            unlock(lock);
-        }
-    }
-
-    /**
-     * 分布式锁-异步
-     *
-     * @param lockName lockKey
-     * @param callable 任务
-     * @param timeout  超时时间
-     * @param unit     超时时间单位
-     * @return Future 异步任务
-     */
-    public <T> Future<T> callIfLockCanGet(final String lockName, Callable<T> callable, final long timeout, TimeUnit unit) {
-        RLock lock = redissonClient.getLock(lockName);
-        if (Objects.isNull(lock)) {
-            log.info("callIfLockCanGet lock is null lockName : {}", lockName);
-            return null;
-        }
-        ExecutorService executor = Executors.newCachedThreadPool();
-        try {
-            if (lock.tryLock(0, timeout, unit)) {
-                return executor.submit(callable);
-            } else {
-                return null;
-            }
-        } catch (Exception e) {
-            log.error("callIfLockCanGet error lockKey {}", lockName);
-            throw new RuntimeException("任务执行异常");
-        } finally {
-            executor.shutdown();
-            unlock(lock);
-        }
-    }
-
-    /**
-     * 解锁
-     */
-    public void unlock(RLock lock) {
-        if (lock.getHoldCount() != 0) {
-            lock.unlock();
-        }
-    }
-
-}

+ 9 - 4
cooleshow-mall/mall-portal/pom.xml

@@ -32,10 +32,6 @@
             <artifactId>mall-mbg</artifactId>
         </dependency>
         <dependency>
-            <groupId>com.yonge.cooleshow</groupId>
-            <artifactId>mall-pay</artifactId>
-        </dependency>
-        <dependency>
             <groupId>com.yonge.toolset</groupId>
             <artifactId>audit-log</artifactId>
         </dependency>
@@ -46,6 +42,10 @@
         </dependency>
 <!--        <dependency>-->
 <!--            <groupId>com.yonge.cooleshow</groupId>-->
+<!--            <artifactId>mall-pay</artifactId>-->
+<!--        </dependency>-->
+<!--        <dependency>-->
+<!--            <groupId>com.yonge.cooleshow</groupId>-->
 <!--            <artifactId>cooleshow-common</artifactId>-->
 <!--        </dependency>-->
         <!--mongodb依赖配置-->
@@ -79,6 +79,11 @@
             <artifactId>toolset-feign</artifactId>
             <version>1.0</version>
         </dependency>
+        <dependency>
+            <groupId>com.yonge.toolset</groupId>
+            <artifactId>toolset-payment</artifactId>
+            <version>${project.toolset.version}</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 2 - 2
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/MallPortalApplication.java

@@ -9,8 +9,8 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.context.annotation.ComponentScan;
 
 @SpringBootApplication
-@MapperScan({"com.yonge.cooleshow.mbg.mapper", "com.yonge.cooleshow.portal.dao"})
-@ComponentScan(basePackages = {"com.yonge.cooleshow.portal","com.yonge.cooleshow.mbg", "com.yonge.cooleshow.mall.common", "com.yonge.cooleshow.common","com.yonge.toolset","com.yonge.cooleshow"})
+@MapperScan({ "com.yonge.cooleshow.portal.dao", "com.yonge.toolset.payment.core.dao", "com.yonge.cooleshow.mbg.mapper"})
+@ComponentScan(basePackages = {"com.yonge.cooleshow.portal","com.yonge.cooleshow.mbg", "com.yonge.cooleshow.mall.common", "com.yonge.cooleshow.common","com.yonge.toolset.payment","com.yonge.toolset.log"})
 @EnableSwagger2Doc
 @EnableDiscoveryClient
 @EnableFeignClients("com.yonge.cooleshow")

+ 1 - 1
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/component/CancelOrderReceiver.java

@@ -20,7 +20,7 @@ public class CancelOrderReceiver {
     private OmsPortalOrderService portalOrderService;
     @RabbitHandler
     public void handle(Long orderId){
-        portalOrderService.cancelOrder(orderId, "超时取消");
+        portalOrderService.cancelOrder(orderId, "超时取消", null);
         LOGGER.info("process orderId:{}",orderId);
     }
 }

+ 1 - 1
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsPortalOrderController.java

@@ -109,7 +109,7 @@ public class OmsPortalOrderController {
     @RequestMapping(value = "/cancelUserOrder", method = RequestMethod.POST)
     @ResponseBody
     public CommonResult cancelUserOrder(Long orderId) {
-        portalOrderService.cancelOrder(orderId, "用户取消订单");
+        portalOrderService.cancelOrder(orderId, "用户取消订单", null);
         return CommonResult.success(null);
     }
 

+ 3 - 2
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsPortalOrderReturnApplyController.java

@@ -6,6 +6,7 @@ import com.yonge.cooleshow.mbg.model.OmsOrderReturnApply;
 import com.yonge.cooleshow.mbg.model.OmsOrderReturnReason;
 import com.yonge.cooleshow.portal.domain.OmsOrderReturnApplyParam;
 import com.yonge.cooleshow.portal.dto.OmsOrderReturnApplyResult;
+import com.yonge.cooleshow.portal.dto.OmsOrderReturnApplyVo;
 import com.yonge.cooleshow.portal.dto.OmsReturnApplyDto;
 import com.yonge.cooleshow.portal.dto.OmsReturnApplyQueryParam;
 import com.yonge.cooleshow.portal.service.OmsOrderReturnReasonService;
@@ -55,8 +56,8 @@ public class OmsPortalOrderReturnApplyController {
     @ApiOperation("分页查询退货申请")
     @RequestMapping(value = "/list", method = RequestMethod.POST)
     @ResponseBody
-    public CommonResult<CommonPage<OmsOrderReturnApply>> list(@RequestBody OmsReturnApplyQueryParam queryParam) {
-        List<OmsOrderReturnApply> returnApplyList = returnApplyService.list(queryParam, queryParam.getPageSize(), queryParam.getPageNum());
+    public CommonResult<CommonPage<OmsOrderReturnApplyVo>> list(@RequestBody OmsReturnApplyQueryParam queryParam) {
+        List<OmsOrderReturnApplyVo> returnApplyList = returnApplyService.list(queryParam, queryParam.getPageSize(), queryParam.getPageNum());
         return CommonResult.success(CommonPage.restPage(returnApplyList));
     }
 

+ 126 - 67
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/PaymentController.java

@@ -1,18 +1,32 @@
 package com.yonge.cooleshow.portal.controller;
 
-import com.alibaba.fastjson.JSONObject;
-import com.huifu.adapay.core.AdapayCore;
-import com.huifu.adapay.core.util.AdapaySign;
+import com.github.binarywang.wxpay.bean.notify.SignatureHeader;
+import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyV3Result;
+import com.github.binarywang.wxpay.service.WxPayService;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.cooleshow.enums.OrdeerCacherEnmu;
+import com.yonge.cooleshow.mall.common.enums.OrderCacheEnum;
+import com.yonge.cooleshow.mbg.model.UserOrderPayment;
+import com.yonge.cooleshow.portal.dto.OrderPayReq;
+import com.yonge.cooleshow.portal.dto.OrderPayRes;
+import com.yonge.cooleshow.portal.service.OmsPortalOrderReturnApplyService;
 import com.yonge.cooleshow.portal.service.OmsPortalOrderService;
-import com.yonge.cooleshow.sdk.adapay.PaymentSdk;
-import com.yonge.cooleshow.sdk.req.OrderPayReq;
-import com.yonge.cooleshow.sdk.res.OrderPayRes;
+import com.yonge.cooleshow.portal.service.UserOrderPaymentService;
 import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.base.result.BaseResult;
+import com.yonge.toolset.payment.base.enums.MethodNameEnum;
+import com.yonge.toolset.payment.base.enums.OpenEnum;
+import com.yonge.toolset.payment.base.enums.PayChannelEnum;
+import com.yonge.toolset.payment.base.enums.PaymentClientEnum;
+import com.yonge.toolset.payment.base.model.OpenAuth;
+import com.yonge.toolset.payment.base.model.Payment;
+import com.yonge.toolset.payment.base.model.callback.PaymentCallBack;
+import com.yonge.toolset.payment.core.props.PaymentProperties;
+import com.yonge.toolset.payment.core.service.PaymentClient;
+import com.yonge.toolset.payment.core.service.SysConfigPaymentService;
+import com.yonge.toolset.payment.original.wx.constant.WxpayConstant;
 import com.yonge.toolset.utils.web.WebUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -38,68 +52,29 @@ import java.util.concurrent.TimeUnit;
 @Api(value = "付款接口", tags = "付款接口")
 public class PaymentController extends BaseController {
     private final static Logger log = LoggerFactory.getLogger(PaymentController.class);
+
     @Autowired
-    private PaymentSdk paymentSdk;
+    private SysUserFeignService sysUserFeignService;
     @Autowired
-    private OmsPortalOrderService portalOrderService;
+    private PaymentClient paymentClient;
     @Autowired
-    private SysUserFeignService sysUserFeignService;
+    private PaymentProperties paymentProperties;
     @Autowired
-    private RedissonClient redissonClient;
+    private SysConfigPaymentService configPaymentService;
+    @Autowired
+    private WxPayService wxPayService;
 
-    @ApiOperation(value = "查询付款单")
-    @GetMapping("/queryPayment")
-    public HttpResponseResult<Map<String, Object>> queryPayment(String paymentId) throws Exception {
-        return HttpResponseResult.succeed(paymentSdk.queryPayment(paymentId));
-    }
+    @Autowired
+    private OmsPortalOrderService orderService;
 
-    @ApiOperation(value = "微信支付获取openid")
-    @GetMapping("/getOpenId")
-    public HttpResponseResult<Map<String, String>> getOpenId(String js_code) {
-        SysUser user = sysUserFeignService.queryUserInfo();
-        if (user == null || null == user.getId()) {
-            return failed(HttpStatus.FORBIDDEN, "请登录");
-        }
-        HttpResponseResult<Map<String, String>> responseResult = paymentSdk.getOpenId(js_code);
-        if (responseResult.getStatus()) {
-            Map<String, String> data = responseResult.getData();
-            //绑定到用户表
-            user.setWxOpenid(data.get("openid"));
-            log.info("绑定用户openid,param is {}", JSONObject.toJSONString(user));
-            sysUserFeignService.bindOpenId(user);
-        }
-        return responseResult;
-    }
+    @Autowired
+    private UserOrderPaymentService userOrderPaymentService;
 
-    /***
-     * 汇付回调
-     * 问题:1、成功失败需要回执什么信息 2、回调url地址是否需要加入白名单
-     * @author liweifan
-     * @param: request
-     * @updateTime 2022/3/11 18:35
-     */
-    @PostMapping("/callback")
-    public void callback(HttpServletRequest request) {
-        try {
-            //验签传参data
-            String data = request.getParameter("data");
-            //验签传参sign
-            String sign = request.getParameter("sign");
-            //验签传参publicKey
-            String publicKey = AdapayCore.PUBLIC_KEY;
-            //验签
-            boolean checkSign = AdapaySign.verifySign(data, sign, publicKey);
-            log.info("汇付回调,res is {}", data);
-            if (checkSign) {
-                //验签成功逻辑
-                log.info("验签成功");
-                String type = request.getParameter("type");
-                portalOrderService.orderCallback(data,type);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
+    @Autowired
+    private OmsPortalOrderReturnApplyService portalOrderReturnApplyService;
+
+    @Autowired
+    private RedissonClient redissonClient;
 
     @ApiOperation(value = "订单付款")
     @PostMapping("/orderPay")
@@ -111,25 +86,109 @@ public class PaymentController extends BaseController {
         payReq.setUserId(user.getId());
         payReq.setIpAddress(WebUtil.getRemoteIp(request));
 
-        RLock lock = redissonClient.getLock(OrdeerCacherEnmu.LOCK_PAY_ORDER.getRedisKey(user.getId()));
+        RLock lock = redissonClient.getLock(OrderCacheEnum.LOCK_PAY_ORDER.getRedisKey(user.getId()));
         try {
             boolean b = lock.tryLock(60, TimeUnit.SECONDS);
             if (b) {
-                OrderPayRes orderPayRes = portalOrderService.orderPay(payReq);
+                OrderPayRes orderPayRes = orderService.orderPay(payReq);
                 if (orderPayRes.isStatus()) {
                     return succeed(orderPayRes);
-                }  else {
+                } else {
                     return failed(orderPayRes.getMessage());
                 }
             }
             return failed("请求超时");
-        }catch (BizException e) {
+        } catch (BizException e) {
             return failed(e.getMessage());
         } catch (Exception e) {
             e.printStackTrace();
             return HttpResponseResult.failed("付款失败");
-        }finally {
+        } finally {
             lock.unlock();
         }
     }
+
+    @ApiOperation(value = "查询付款单")
+    @GetMapping("/queryPayment")
+    public HttpResponseResult<Payment> queryPayment(String paymentNo) throws Exception {
+        UserOrderPayment userOrderPayment = userOrderPaymentService.getByTranNo(paymentNo);
+        if (null == userOrderPayment) {
+            return HttpResponseResult.succeed();
+        }
+        Payment param = new Payment(OpenEnum.valueOf(userOrderPayment.getOpenType()),
+                PaymentClientEnum.valueOf(userOrderPayment.getPaymentClient()), PayChannelEnum.valueOf(userOrderPayment.getPayChannel()));
+        param.setId(userOrderPayment.getTransNo());
+        param.setPaymentNo(userOrderPayment.getTransNo());
+        BaseResult<Payment> paymentBaseResult = paymentClient.queryPayment(param);
+        return HttpResponseResult.status(paymentBaseResult);
+    }
+
+    @ApiOperation(value = "通过用户给的授权码获取三方支付授权信息")
+    @GetMapping("/getOpenId")
+    public HttpResponseResult<Map<String, Object>> getOpenId(OpenAuth openAuth) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        OpenEnum openType = OpenEnum.valueOf(paymentProperties.getOpenType());
+        openAuth.setOpenType(openType);
+        BaseResult<Map<String, Object>> res = paymentClient.getOpenAuthMsg(openAuth);
+        return HttpResponseResult.status(res);
+    }
+
+    /***
+     * 支付回调
+     * @author liweifan
+     * @param: request
+     * @updateTime 2022/3/11 18:35
+     */
+    @PostMapping("/callback/{openType}/{client}/{payChannel}/{payMethod}")
+    public Object callback(
+            @PathVariable("openType") String openType,
+            @PathVariable("client") String client,
+            @PathVariable("payChannel") String payChannel,
+            @PathVariable("payMethod") String payMethod,
+            HttpServletRequest request
+    ) {
+        BaseResult<PaymentCallBack> res = paymentClient.analysisNotice(
+                OpenEnum.valueOf(openType), PaymentClientEnum.valueOf(client),
+                PayChannelEnum.valueOf(payChannel), MethodNameEnum.valueOf(payMethod), request);
+        if (res.getStatus()) {
+            PaymentCallBack data = res.getData();
+
+            if (MethodNameEnum.executePayment.equals(data.getMethodName())) {
+                //支付交易
+                orderService.executePaymentCallBack(data);
+            } else if (MethodNameEnum.closePayment.equals(data.getMethodName())) {
+                //关闭订单
+                orderService.closePaymentCallBack(data);
+            } else if (MethodNameEnum.refundPayment.equals(data.getMethodName())) {
+                //退款
+                portalOrderReturnApplyService.refundPaymentCallBack(data);
+            }
+        }
+        return res.getData().getResMsg();
+    }
+
+
+    // private Object wxAppCallbackHandle(String payMethod, HttpServletRequest request) throws Exception {
+    //     String merchantId = configPaymentService.getPaymentConfig(OpenEnum.ORIGINAL, WxpayConstant.WX_MERCHANT_ID).getParamValue();
+    //     String apiV3Key = configPaymentService.getPaymentConfig(OpenEnum.ORIGINAL, WxpayConstant.WX_API_V3_KEY).getParamValue();
+    //
+    //     //支付回调
+    //     if ("executePayment".equals(payMethod)) {
+    //         SignatureHeader header = new SignatureHeader();
+    //         header.setTimeStamp(request.getHeader("Wechatpay-Timestamp"));
+    //         header.setNonce(request.getHeader("Wechatpay-Nonce"));
+    //         header.setSerial(request.getHeader("Wechatpay-Serial"));
+    //         header.setSignature(request.getHeader("Wechatpay-Signature"));
+    //
+    //         String params = WebUtil.getBodyData(request);
+    //
+    //         WxPayOrderNotifyV3Result wxPayOrderNotifyV3Result = wxPayService.parseOrderNotifyV3Result(params, header);
+    //
+    //     }
+    //     return null;
+    // }
+
 }

+ 2 - 1
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dao/OmsOrderReturnApplyDao.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.portal.dao;
 
 import com.yonge.cooleshow.mbg.model.OmsOrderReturnApply;
 import com.yonge.cooleshow.portal.dto.OmsOrderReturnApplyResult;
+import com.yonge.cooleshow.portal.dto.OmsOrderReturnApplyVo;
 import com.yonge.cooleshow.portal.dto.OmsReturnApplyQueryParam;
 import org.apache.ibatis.annotations.Param;
 
@@ -15,7 +16,7 @@ public interface OmsOrderReturnApplyDao {
     /**
      * 查询申请列表
      */
-    List<OmsOrderReturnApply> getList(@Param("queryParam") OmsReturnApplyQueryParam queryParam);
+    List<OmsOrderReturnApplyVo> getList(@Param("queryParam") OmsReturnApplyQueryParam queryParam);
 
     /**
      * 获取申请详情

+ 6 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dao/PortalProductDao.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.portal.dao;
 
 import com.yonge.cooleshow.mbg.model.SmsCoupon;
 import com.yonge.cooleshow.portal.domain.CartProduct;
+import com.yonge.cooleshow.portal.domain.ProductStock;
 import com.yonge.cooleshow.portal.domain.PromotionProduct;
 import org.apache.ibatis.annotations.Param;
 
@@ -26,4 +27,9 @@ public interface PortalProductDao {
      * 获取可用优惠券列表
      */
     List<SmsCoupon> getAvailableCouponList(@Param("productId") Long productId, @Param("productCategoryId") Long productCategoryId);
+
+    /**
+     * 改库存
+     */
+    void updateProductStock(@Param("itemList") List<ProductStock> productStockList);
 }

+ 12 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/domain/OmsOrderReturnApplyParam.java

@@ -12,6 +12,10 @@ import java.math.BigDecimal;
 public class OmsOrderReturnApplyParam {
     @ApiModelProperty("订单id")
     private Long orderId;
+
+    @ApiModelProperty("订单商品id")
+    private Long orderItemId;
+
     @ApiModelProperty("退货商品id")
     private Long productId;
     @ApiModelProperty("订单编号")
@@ -171,4 +175,12 @@ public class OmsOrderReturnApplyParam {
     public void setProofPics(String proofPics) {
         this.proofPics = proofPics;
     }
+
+    public Long getOrderItemId() {
+        return orderItemId;
+    }
+
+    public void setOrderItemId(Long orderItemId) {
+        this.orderItemId = orderItemId;
+    }
 }

+ 29 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/domain/ProductStock.java

@@ -0,0 +1,29 @@
+package com.yonge.cooleshow.portal.domain;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-27
+ */
+public class ProductStock {
+    private Long productId;
+
+    private Integer stock;
+
+    public Long getProductId() {
+        return productId;
+    }
+
+    public void setProductId(Long productId) {
+        this.productId = productId;
+    }
+
+    public Integer getStock() {
+        return stock;
+    }
+
+    public void setStock(Integer stock) {
+        this.stock = stock;
+    }
+}

+ 37 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dto/OmsOrderReturnApplyVo.java

@@ -0,0 +1,37 @@
+package com.yonge.cooleshow.portal.dto;
+
+import com.yonge.cooleshow.mbg.model.OmsOrderReturnApply;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-25
+ */
+public class OmsOrderReturnApplyVo extends OmsOrderReturnApply {
+
+    @ApiModelProperty("到账时间")
+    private Date arrivalTime;
+
+    @ApiModelProperty("退款状态 pending 交易处理中 succeeded 交易成功 failed 交易失败")
+    private String refundStatus;
+
+    public Date getArrivalTime() {
+        return arrivalTime;
+    }
+
+    public void setArrivalTime(Date arrivalTime) {
+        this.arrivalTime = arrivalTime;
+    }
+
+    public String getRefundStatus() {
+        return refundStatus;
+    }
+
+    public void setRefundStatus(String refundStatus) {
+        this.refundStatus = refundStatus;
+    }
+}

+ 6 - 6
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dto/OmsReturnApplyQueryParam.java

@@ -13,8 +13,8 @@ public class OmsReturnApplyQueryParam {
     private Long id;
     @ApiModelProperty(value = "收货人姓名/号码")
     private String receiverKeyword;
-    @ApiModelProperty(value = "申请状态:0->待处理;1->退货中;2->已完成;3->已拒绝")
-    private Integer status;
+    @ApiModelProperty(value = "申请状态:0->待处理;1->退货中;2->已完成;3->已拒绝 多个逗号隔开")
+    private String status;
     @ApiModelProperty(value = "申请时间")
     private String createTime;
     @ApiModelProperty(value = "处理人员")
@@ -26,8 +26,8 @@ public class OmsReturnApplyQueryParam {
     private Long memberId;
 
 
-    private Integer pageSize;
-    private Integer pageNum;
+    private Integer pageSize = 20;
+    private Integer pageNum =1;
 
     public Integer getPageSize() {
         return pageSize;
@@ -61,11 +61,11 @@ public class OmsReturnApplyQueryParam {
         this.receiverKeyword = receiverKeyword;
     }
 
-    public Integer getStatus() {
+    public String getStatus() {
         return status;
     }
 
-    public void setStatus(Integer status) {
+    public void setStatus(String status) {
         this.status = status;
     }
 

+ 26 - 63
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/req/OrderPayReq.java → cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dto/OrderPayReq.java

@@ -1,13 +1,11 @@
-package com.yonge.cooleshow.sdk.req;
+package com.yonge.cooleshow.portal.dto;
 
-import com.yonge.cooleshow.enums.OrderStatusEnum;
-import com.yonge.cooleshow.enums.PayChannelEnum;
+import com.yonge.toolset.payment.base.enums.PayChannelEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
-import java.math.BigDecimal;
 
 /**
  * 下单支付请求
@@ -21,7 +19,7 @@ public class OrderPayReq {
     @ApiModelProperty(value = "订单号 ", required = true)
     private String orderNo;
     @NotNull(message = "支付渠道不能为空")
-    @ApiModelProperty(value = "支付渠道:  alipay 支付宝APP支付 alipay_lite 支付宝小程序支付  wx_lite 微信小程序支付 ", required = true)
+    @ApiModelProperty(value = "支付渠道:  alipay 支付宝扫码 ali_app 支付宝APP  wx_app 微信APP wx_lite 微信小程序支付", required = true)
     private PayChannelEnum payChannel;
     @ApiModelProperty(value = "微信用户openId(微信支付必传)")
     private String openId;
@@ -30,64 +28,13 @@ public class OrderPayReq {
     @ApiModelProperty(value = "用户说明 ")
     private String reason;
 
+    @ApiModelProperty(value = "付款应用 STUDENT 学生端 TEACHER 老师端 (对应微信,支付宝平台的应用)",required = true)
+    @NotBlank(message = "付款应用不能为空")
+    private String paymentClient;
 
-    @ApiModelProperty(value = "用户id ")
     private Long userId;
-    @ApiModelProperty(value = "用户端公网ip ")
     private String ipAddress;
 
-    @ApiModelProperty(value = "订单金额",hidden = true)
-    private BigDecimal orderPrice;
-
-    @ApiModelProperty(value = "商品标题",hidden = true)
-    private String goodTitle;
-
-    @ApiModelProperty(value = "商品描述",hidden = true)
-    private String goodDesc;
-
-    @ApiModelProperty(value = "拉起支付信息",hidden = true)
-    private String payInfo;
-
-    public String getBuyerId() {
-        return buyerId;
-    }
-
-    public void setBuyerId(String buyerId) {
-        this.buyerId = buyerId;
-    }
-
-    public String getReason() {
-        return reason;
-    }
-
-    public void setReason(String reason) {
-        this.reason = reason;
-    }
-
-    public BigDecimal getOrderPrice() {
-        return orderPrice;
-    }
-
-    public void setOrderPrice(BigDecimal orderPrice) {
-        this.orderPrice = orderPrice;
-    }
-
-    public String getGoodTitle() {
-        return goodTitle;
-    }
-
-    public void setGoodTitle(String goodTitle) {
-        this.goodTitle = goodTitle;
-    }
-
-    public String getGoodDesc() {
-        return goodDesc;
-    }
-
-    public void setGoodDesc(String goodDesc) {
-        this.goodDesc = goodDesc;
-    }
-
     public String getOrderNo() {
         return orderNo;
     }
@@ -128,11 +75,27 @@ public class OrderPayReq {
         this.openId = openId;
     }
 
-    public String getPayInfo() {
-        return payInfo;
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+
+    public String getBuyerId() {
+        return buyerId;
+    }
+
+    public void setBuyerId(String buyerId) {
+        this.buyerId = buyerId;
+    }
+
+    public String getPaymentClient() {
+        return paymentClient;
     }
 
-    public void setPayInfo(String payInfo) {
-        this.payInfo = payInfo;
+    public void setPaymentClient(String paymentClient) {
+        this.paymentClient = paymentClient;
     }
 }

+ 1 - 13
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/res/OrderPayRes.java → cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dto/OrderPayRes.java

@@ -1,7 +1,6 @@
-package com.yonge.cooleshow.sdk.res;
+package com.yonge.cooleshow.portal.dto;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.yonge.cooleshow.enums.PayStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -24,9 +23,6 @@ public class OrderPayRes {
     @JsonIgnore
     private String message;
 
-    @ApiModelProperty(value = "支付状态",required = true)
-    @JsonIgnore
-    private PayStatusEnum payStatus;
 
 
     @ApiModelProperty(value = "订单编号",required = true)
@@ -72,14 +68,6 @@ public class OrderPayRes {
         this.message = message;
     }
 
-    public PayStatusEnum getPayStatus() {
-        return payStatus;
-    }
-
-    public void setPayStatus(PayStatusEnum payStatus) {
-        this.payStatus = payStatus;
-    }
-
     public String getOrderNo() {
         return orderNo;
     }

+ 5 - 1
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/OmsPortalOrderReturnApplyService.java

@@ -3,8 +3,10 @@ package com.yonge.cooleshow.portal.service;
 import com.yonge.cooleshow.mbg.model.OmsOrderReturnApply;
 import com.yonge.cooleshow.portal.domain.OmsOrderReturnApplyParam;
 import com.yonge.cooleshow.portal.dto.OmsOrderReturnApplyResult;
+import com.yonge.cooleshow.portal.dto.OmsOrderReturnApplyVo;
 import com.yonge.cooleshow.portal.dto.OmsReturnApplyDto;
 import com.yonge.cooleshow.portal.dto.OmsReturnApplyQueryParam;
+import com.yonge.toolset.payment.base.model.callback.PaymentCallBack;
 
 import java.util.List;
 
@@ -26,8 +28,10 @@ public interface OmsPortalOrderReturnApplyService {
 
     OmsOrderReturnApplyResult getItem(Long id);
 
-    List<OmsOrderReturnApply> list(OmsReturnApplyQueryParam queryParam, Integer pageSize, Integer pageNum);
+    List<OmsOrderReturnApplyVo> list(OmsReturnApplyQueryParam queryParam, Integer pageSize, Integer pageNum);
 
     /** 设置退货单号 */
     void setDeliverySn(OmsReturnApplyDto applyDto);
+
+    void refundPaymentCallBack(PaymentCallBack data);
 }

+ 21 - 11
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/OmsPortalOrderService.java

@@ -5,8 +5,9 @@ import com.yonge.cooleshow.mbg.model.OmsOrder;
 import com.yonge.cooleshow.portal.domain.ConfirmOrderResult;
 import com.yonge.cooleshow.portal.domain.OmsOrderDetail;
 import com.yonge.cooleshow.portal.domain.OrderParam;
-import com.yonge.cooleshow.sdk.req.OrderPayReq;
-import com.yonge.cooleshow.sdk.res.OrderPayRes;
+import com.yonge.cooleshow.portal.dto.OrderPayReq;
+import com.yonge.cooleshow.portal.dto.OrderPayRes;
+import com.yonge.toolset.payment.base.model.callback.PaymentCallBack;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
@@ -45,7 +46,7 @@ public interface OmsPortalOrderService {
      * 取消单个超时订单
      */
     @Transactional
-    void cancelOrder(Long orderId,  String message);
+    void cancelOrder(Long orderId, String message, PaymentCallBack data);
 
     /**
      * 发送延迟消息取消订单
@@ -78,19 +79,11 @@ public interface OmsPortalOrderService {
     /**
      * 订单拉起支付
      *
-     */
-    @Transactional
-    void orderCallback(String data, String type);
-
-    /**
-     * 订单拉起支付
-     *
      * @param payReq 支付信息
      * @return
      */
     @Transactional
     OrderPayRes orderPay(OrderPayReq payReq);
-
     /**
      * 获取订单信息
      *
@@ -98,4 +91,21 @@ public interface OmsPortalOrderService {
      * @return
      */
     OmsOrder getOrderById(Long orderId);
+
+    /**
+     * 支付回调
+     *
+     * @param data
+     */
+    @Transactional
+    void executePaymentCallBack(PaymentCallBack data);
+
+    /**
+     * 关闭订单
+     *
+     * @param data
+     */
+    void closePaymentCallBack(PaymentCallBack data);
+
+
 }

+ 12 - 6
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/UserOrderPaymentService.java

@@ -1,8 +1,9 @@
 package com.yonge.cooleshow.portal.service;
 
-import com.yonge.cooleshow.enums.PayChannelEnum;
-import com.yonge.cooleshow.enums.PayStatusEnum;
 import com.yonge.cooleshow.mbg.model.UserOrderPayment;
+import com.yonge.toolset.payment.base.enums.PayChannelEnum;
+import com.yonge.toolset.payment.base.enums.TradeStatusEnum;
+import com.yonge.toolset.payment.base.model.callback.PaymentCallBack;
 
 import java.util.List;
 
@@ -31,7 +32,7 @@ public interface UserOrderPaymentService {
 
     void saveOrUpdate(UserOrderPayment userOrderPayment);
 
-    UserOrderPayment getByOrderNo(String orderSn, PayChannelEnum payChannel, PayStatusEnum pending);
+    UserOrderPayment getByOrderNo(String orderSn, PayChannelEnum payChannel, TradeStatusEnum pending);
 
     /**
      * 根据订单查询 订单支付信息
@@ -43,11 +44,11 @@ public interface UserOrderPaymentService {
 
     /**
      * 关单
-     *
-     * @param orderSn 订单号
+     *  @param orderSn 订单号
      * @param message 信息
+     * @param data
      */
-    void closePayment(String orderSn, String message);
+    void closePayment(String orderSn, String message, PaymentCallBack data);
 
     /**
      * 查询支付中的订单, 最多只有一个
@@ -65,4 +66,9 @@ public interface UserOrderPaymentService {
      * @return
      */
     UserOrderPayment getByOrderNoAndStatusSucceeded(String orderSn);
+
+    /**
+     * 查询回调支付信息
+     */
+    UserOrderPayment getByAdapayNo(String paymentNo);
 }

+ 33 - 6
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsCartItemServiceImpl.java

@@ -2,15 +2,15 @@ package com.yonge.cooleshow.portal.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import com.yonge.cooleshow.mbg.mapper.OmsCartItemMapper;
-import com.yonge.cooleshow.mbg.model.OmsCartItem;
-import com.yonge.cooleshow.mbg.model.OmsCartItemExample;
-import com.yonge.cooleshow.mbg.model.UmsMember;
+import com.yonge.cooleshow.mbg.mapper.PmsProductMapper;
+import com.yonge.cooleshow.mbg.mapper.PmsSkuStockMapper;
+import com.yonge.cooleshow.mbg.model.*;
 import com.yonge.cooleshow.portal.dao.PortalProductDao;
 import com.yonge.cooleshow.portal.domain.CartProduct;
 import com.yonge.cooleshow.portal.domain.CartPromotionItem;
-import com.yonge.cooleshow.portal.service.OmsCartItemService;
-import com.yonge.cooleshow.portal.service.OmsPromotionService;
-import com.yonge.cooleshow.portal.service.UmsMemberService;
+import com.yonge.cooleshow.portal.domain.PmsPortalProductDetail;
+import com.yonge.cooleshow.portal.service.*;
+import com.yonge.toolset.base.exception.BizException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -36,6 +36,12 @@ public class OmsCartItemServiceImpl implements OmsCartItemService {
     @Autowired
     private UmsMemberService memberService;
 
+    @Autowired
+    private PmsProductMapper pmsProductMapper;
+
+    @Autowired
+    private PmsSkuStockMapper skuStockMapper;
+
     @Override
     public int add(OmsCartItem cartItem) {
         int count;
@@ -45,6 +51,27 @@ public class OmsCartItemServiceImpl implements OmsCartItemService {
         cartItem.setDeleteStatus(0);
         OmsCartItem existCartItem = getCartItem(cartItem);
         if (existCartItem == null) {
+            PmsProduct pmsProduct = pmsProductMapper.selectByPrimaryKey(cartItem.getProductId());
+
+            if (pmsProduct == null) {
+                throw new BizException("商品不存在");
+            }
+            cartItem.setProductPic(pmsProduct.getPic());
+            cartItem.setProductName(pmsProduct.getName());
+            cartItem.setProductSubTitle(pmsProduct.getSubTitle());
+            cartItem.setProductCategoryId(pmsProduct.getProductCategoryId());
+            cartItem.setProductBrand(pmsProduct.getName());
+            cartItem.setProductSn(pmsProduct.getProductSn());
+            if (cartItem.getProductSkuId() != null) {
+                PmsSkuStock pmsSkuStock = skuStockMapper.selectByPrimaryKey(cartItem.getProductSkuId());
+
+                if (pmsSkuStock == null) {
+                    throw new BizException("商品规格不存在");
+                }
+                cartItem.setProductSkuCode(pmsSkuStock.getSkuCode());
+                cartItem.setProductAttr(pmsSkuStock.getSpData());
+            }
+
             cartItem.setCreateDate(new Date());
             count = cartItemMapper.insert(cartItem);
         } else {

+ 99 - 4
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderReturnApplyServiceImpl.java

@@ -1,22 +1,33 @@
 package com.yonge.cooleshow.portal.service.impl;
 
 import com.github.pagehelper.PageHelper;
-import com.yonge.cooleshow.mbg.mapper.OmsOrderReturnApplyMapper;
+import com.yonge.cooleshow.mbg.mapper.*;
+import com.yonge.cooleshow.mbg.model.*;
+
 import com.yonge.cooleshow.mbg.model.OmsOrderReturnApply;
 import com.yonge.cooleshow.mbg.model.OmsOrderReturnApplyExample;
-import com.yonge.cooleshow.mbg.model.UmsMember;
+import com.yonge.cooleshow.mbg.model.UserOrderRefund;
+
 import com.yonge.cooleshow.portal.dao.OmsOrderReturnApplyDao;
 import com.yonge.cooleshow.portal.domain.OmsOrderReturnApplyParam;
 import com.yonge.cooleshow.portal.dto.OmsOrderReturnApplyResult;
+import com.yonge.cooleshow.portal.dto.OmsOrderReturnApplyVo;
 import com.yonge.cooleshow.portal.dto.OmsReturnApplyDto;
 import com.yonge.cooleshow.portal.dto.OmsReturnApplyQueryParam;
 import com.yonge.cooleshow.portal.service.OmsPortalOrderReturnApplyService;
 import com.yonge.cooleshow.portal.service.UmsMemberService;
 import com.yonge.toolset.base.exception.BizException;
+
+import com.yonge.toolset.payment.base.enums.TradeStatusEnum;
+import com.yonge.toolset.payment.base.model.callback.PaymentCallBack;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -27,6 +38,9 @@ import java.util.List;
  */
 @Service
 public class OmsPortalOrderReturnApplyServiceImpl implements OmsPortalOrderReturnApplyService {
+
+    private static final Logger log = LoggerFactory.getLogger(OmsPortalOrderReturnApplyService.class);
+
     @Autowired
     private OmsOrderReturnApplyMapper returnApplyMapper;
 
@@ -36,10 +50,46 @@ public class OmsPortalOrderReturnApplyServiceImpl implements OmsPortalOrderRetur
     @Autowired
     private UmsMemberService memberService;
 
+    @Autowired
+    private OmsOrderItemMapper  orderItemMapper;
+
+    @Autowired
+    private PmsProductMapper pmsProductMapper;
+
+    @Autowired
+    private PmsSkuStockMapper skuStockMapper;
+
+    @Autowired
+    private UserOrderRefundMapper userOrderRefundMapper;
+
+    @Autowired
+    private OmsOrderMapper omsOrderMapper;
+
+
     @Override
     public int create(OmsOrderReturnApplyParam returnApply) {
         OmsOrderReturnApply realApply = new OmsOrderReturnApply();
         BeanUtils.copyProperties(returnApply,realApply);
+        OmsOrderItem omsOrderItem = orderItemMapper.selectByPrimaryKey(realApply.getOrderItemId());
+        if (omsOrderItem == null || !omsOrderItem.getOrderId().equals(realApply.getOrderId())) {
+            throw new BizException("当前订单不能退款");
+        }
+        OmsOrder order = omsOrderMapper.selectByPrimaryKey(realApply.getOrderId());
+        if (order == null) {
+            throw new BizException("订单不存在");
+        }
+        realApply.setOrderSn(order.getOrderSn());
+        PmsProduct pmsProduct = pmsProductMapper.selectByPrimaryKey(omsOrderItem.getProductId());
+        realApply.setProductPic(pmsProduct.getPic());
+        realApply.setProductName(pmsProduct.getName());
+        realApply.setProductBrand(pmsProduct.getBrandName());
+        if (omsOrderItem.getProductSkuId() != null) {
+            PmsSkuStock pmsSkuStock = skuStockMapper.selectByPrimaryKey(omsOrderItem.getProductSkuId());
+            realApply.setProductAttr(pmsSkuStock.getSpData());
+        }
+        realApply.setProductPrice(omsOrderItem.getProductPrice());
+        realApply.setProductRealPrice(omsOrderItem.getRealAmount());
+
         realApply.setCreateTime(new Date());
         realApply.setStatus(0);
         return returnApplyMapper.insert(realApply);
@@ -62,7 +112,7 @@ public class OmsPortalOrderReturnApplyServiceImpl implements OmsPortalOrderRetur
     }
 
     @Override
-    public List<OmsOrderReturnApply> list(OmsReturnApplyQueryParam queryParam, Integer pageSize, Integer pageNum) {
+    public List<OmsOrderReturnApplyVo> list(OmsReturnApplyQueryParam queryParam, Integer pageSize, Integer pageNum) {
         PageHelper.startPage(pageNum, pageSize);
         UmsMember currentMember = memberService.getCurrentMember();
         if (currentMember == null) {
@@ -77,6 +127,51 @@ public class OmsPortalOrderReturnApplyServiceImpl implements OmsPortalOrderRetur
         OmsOrderReturnApply omsOrderReturnApply = new OmsOrderReturnApply();
         omsOrderReturnApply.setId(applyDto.getId());
         omsOrderReturnApply.setDeliverySn(applyDto.getDeliverySn());
-        returnApplyMapper.updateByPrimaryKey(omsOrderReturnApply);
+        returnApplyMapper.updateByPrimaryKeySelective(omsOrderReturnApply);
+    }
+
+    @Override
+    public void refundPaymentCallBack(PaymentCallBack data) {
+        if (TradeStatusEnum.succeeded.equals(data.getStatus())) {//退款成功
+            paymentRefundSucceededHandle(data);
+        } else if (TradeStatusEnum.failed.equals(data.getStatus())) {//退款失败
+            paymentRefundFailedHandle(data, data.getErrMsg());
+        }
+    }
+
+    /**
+     * 退款失败
+     */
+    private void paymentRefundFailedHandle(PaymentCallBack data, String errMsg) {
+        if (data == null) {
+            return;
+        }
+        UserOrderRefund userOrderRefund = userOrderRefundMapper.selectByRefundNo(
+                data.getRefundPaymentCallBack().getBillNo());
+        userOrderRefund.setArrivalTime(new Date());
+        userOrderRefund.setStatus(TradeStatusEnum.failed.getCode());
+        userOrderRefund.setPayFailMsg(errMsg);
+        userOrderRefund.setTransNo(data.getRefundPaymentCallBack().getTransNo());
+
+        userOrderRefundMapper.updateByPrimaryKeySelective(userOrderRefund);
+    }
+
+    /**
+     * 退款成功
+     */
+    private void paymentRefundSucceededHandle(PaymentCallBack data) {
+        if (data == null) {
+            return;
+        }
+        UserOrderRefund userOrderRefund = userOrderRefundMapper.selectByRefundNo(
+                data.getRefundPaymentCallBack().getBillNo());
+        userOrderRefund.setArrivalTime(new Date());
+        userOrderRefund.setStatus(TradeStatusEnum.succeeded.getCode());
+        userOrderRefund.setTransNo(data.getRefundPaymentCallBack().getTransNo());
+        userOrderRefund.setFeeAmt(new BigDecimal(data.getRefundPaymentCallBack().getFeeAmt()));
+        userOrderRefund.setRefundAmt(new BigDecimal(data.getRefundPaymentCallBack().getRefundAmt()));
+
+        userOrderRefundMapper.updateByPrimaryKeySelective(userOrderRefund);
     }
 }
+

+ 279 - 128
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java

@@ -2,10 +2,14 @@ package com.yonge.cooleshow.portal.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.github.pagehelper.PageHelper;
+import com.yonge.cooleshow.portal.dao.PortalProductDao;
+import com.yonge.cooleshow.portal.dto.OrderPayReq;
+import com.yonge.cooleshow.portal.dto.OrderPayRes;
 import com.yonge.toolset.base.exception.BizException;
-import com.yonge.cooleshow.enums.PayStatusEnum;
+
 import com.yonge.cooleshow.mall.common.api.CommonPage;
 import com.yonge.cooleshow.mall.common.exception.Asserts;
 import com.yonge.cooleshow.mall.common.service.RedisService;
@@ -17,11 +21,21 @@ import com.yonge.cooleshow.portal.dao.PortalOrderItemDao;
 import com.yonge.cooleshow.portal.dao.SmsCouponHistoryDao;
 import com.yonge.cooleshow.portal.domain.*;
 import com.yonge.cooleshow.portal.service.*;
-import com.yonge.cooleshow.sdk.adapay.PaymentSdk;
-import com.yonge.cooleshow.sdk.req.OrderPayReq;
-import com.yonge.cooleshow.sdk.res.OrderPayRes;
-import com.yonge.cooleshow.service.PaymentService;
+import com.yonge.toolset.payment.base.enums.PaymentClientEnum;
 import com.yonge.toolset.utils.string.StringUtil;
+
+import com.yonge.toolset.base.result.BaseResult;
+import com.yonge.toolset.payment.base.enums.OpenEnum;
+import com.yonge.toolset.payment.base.enums.PayChannelEnum;
+import com.yonge.toolset.payment.base.enums.TradeStatusEnum;
+import com.yonge.toolset.payment.base.model.DeviceInfo;
+import com.yonge.toolset.payment.base.model.DivMember;
+import com.yonge.toolset.payment.base.model.OrderDetil;
+import com.yonge.toolset.payment.base.model.Payment;
+import com.yonge.toolset.payment.base.model.callback.PaymentCallBack;
+import com.yonge.toolset.payment.core.props.PaymentProperties;
+import com.yonge.toolset.payment.core.service.PaymentClient;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -65,7 +79,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
     private SmsCouponHistoryMapper couponHistoryMapper;
     @Autowired
     private RedisService redisService;
-    private String REDIS_KEY_ORDER_ID= "redis.key.orderId";
+    private String REDIS_KEY_ORDER_ID = "redis.key.orderId";
     private String REDIS_DATABASE = "redis.database";
     @Autowired
     private PortalOrderDao portalOrderDao;
@@ -79,18 +93,25 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
     @Autowired
     private UserOrderPaymentService userOrderPaymentService;
 
+    @Autowired(required = true)
+    private PaymentClient paymentClient;
+
     @Autowired
-    private PaymentService adapayPaymentService;
+    private PaymentProperties paymentProperties;
 
     @Autowired
-    private PaymentSdk paymentSdk;
+    private PmsProductMapper pmsProductMapper;
+
+
+    @Autowired
+    private PortalProductDao productDao;
 
     @Override
     public ConfirmOrderResult generateConfirmOrder(List<Long> cartIds) {
         ConfirmOrderResult result = new ConfirmOrderResult();
         //获取购物车信息
         UmsMember currentMember = memberService.getCurrentMember();
-        List<CartPromotionItem> cartPromotionItemList = cartItemService.listPromotion(currentMember.getId(), cartIds,true);
+        List<CartPromotionItem> cartPromotionItemList = cartItemService.listPromotion(currentMember.getId(), cartIds, true);
         result.setCartPromotionItemList(cartPromotionItemList);
         //获取用户收货地址列表
         List<UmsMemberReceiveAddress> memberReceiveAddressList = memberReceiveAddressService.list();
@@ -115,7 +136,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         //获取购物车及优惠信息
         UmsMember currentMember = memberService.getCurrentMember();
         List<CartPromotionItem> cartPromotionItemList = cartItemService.listPromotion(currentMember.getId(), orderParam.getCartIds(),
-                                                                                      true);
+                true);
         for (CartPromotionItem cartPromotionItem : cartPromotionItemList) {
             //生成下单商品信息
             OmsOrderItem orderItem = new OmsOrderItem();
@@ -156,7 +177,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             handleCouponAmount(orderItemList, couponHistoryDetail);
         }
         //判断是否使用积分
-        if (orderParam.getUseIntegration() == null||orderParam.getUseIntegration().equals(0)) {
+        if (orderParam.getUseIntegration() == null || orderParam.getUseIntegration().equals(0)) {
             //不使用积分
             for (OmsOrderItem orderItem : orderItemList) {
                 orderItem.setIntegrationAmount(new BigDecimal(0));
@@ -177,8 +198,12 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         }
         //计算order_item的实付金额
         handleRealAmount(orderItemList);
-        //进行库存锁定
-        lockStock(cartPromotionItemList);
+        //进行sku库存锁定
+        lockSkuStock(cartPromotionItemList);
+
+        // 进行商品库存锁定
+        lockProductStock(cartPromotionItemList);
+
         //根据商品合计、运费、活动优惠、优惠券、积分计算应付金额
         OmsOrder order = new OmsOrder();
         StringBuilder cartIds = new StringBuilder();
@@ -237,10 +262,9 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         order.setOrderSn(generateOrderSn(order));
         //设置自动收货天数
         List<OmsOrderSetting> orderSettings = orderSettingMapper.selectByExample(new OmsOrderSettingExample());
-        if(CollUtil.isNotEmpty(orderSettings)){
+        if (CollUtil.isNotEmpty(orderSettings)) {
             order.setAutoConfirmDay(orderSettings.get(0).getConfirmOvertime());
         }
-        // TODO: 2018/9/3 bill_*,delivery_*
         //插入order表和order_item表
         orderMapper.insert(order);
         for (OmsOrderItem orderItem : orderItemList) {
@@ -278,17 +302,44 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         orderMapper.updateByPrimaryKeySelective(order);
         //恢复所有下单商品的锁定库存,扣减真实库存
         OmsOrderDetail orderDetail = portalOrderDao.getDetail(orderId);
+        // 减sku库存
         int count = portalOrderDao.updateSkuStock(orderDetail.getOrderItemList());
+
+        // 减商品库存
+        updateProductStock(orderDetail);
+
         return count;
     }
 
+    /**
+     *  减商品库存
+     */
+    private void updateProductStock(OmsOrderDetail orderDetail) {
+        Map<Long, List<OmsOrderItem>> collect = orderDetail.getOrderItemList()
+                   .stream().collect(Collectors.groupingBy(OmsOrderItem::getProductId));
+
+        List<ProductStock> productStockList = new ArrayList<>();
+        for (Map.Entry<Long, List<OmsOrderItem>> entry : collect.entrySet()) {
+            ProductStock stock = new ProductStock();
+            stock.setProductId(entry.getKey());
+            List<OmsOrderItem> value = entry.getValue();
+            if(CollectionUtils.isEmpty(value)) {
+                continue;
+            }
+            int sum = value.stream().mapToInt(OmsOrderItem::getProductQuantity).sum();
+            stock.setStock(sum);
+            productStockList.add(stock);
+        }
+        productDao.updateProductStock(productStockList);
+    }
+
     @Override
     public Integer cancelTimeOutOrder() {
-        Integer count=0;
+        Integer count = 0;
         OmsOrderSetting orderSetting = orderSettingMapper.selectByPrimaryKey(1L);
         //查询超时、未支付的订单及订单详情
         List<OmsOrderDetail> timeOutOrders = portalOrderDao.getTimeOutOrders(orderSetting.getNormalOrderOvertime()
-                ,orderSetting.getPayOrderOvertime());
+                , orderSetting.getPayOrderOvertime());
         if (CollectionUtils.isEmpty(timeOutOrders)) {
             return count;
         }
@@ -297,14 +348,14 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             if (timeOutOrder.getStatus() == 0) {
                 payingOrderHandle(timeOutOrder);
             } else if (timeOutOrder.getStatus() == 6) {
-                cancelOrder(timeOutOrder.getId(), "超时取消");
+                cancelOrder(timeOutOrder.getId(), "超时取消", null);
             }
         }
         return timeOutOrders.size();
     }
 
     @Override
-    public void cancelOrder(Long orderId, String message) {
+    public void cancelOrder(Long orderId, String message, PaymentCallBack data) {
         //查询未付款的取消订单
         OmsOrderExample example = new OmsOrderExample();
         example.createCriteria().andIdEqualTo(orderId).andDeleteStatusEqualTo(0);
@@ -313,7 +364,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             return;
         }
         OmsOrder cancelOrder = cancelOrderList.get(0);
-        if (cancelOrder != null && (cancelOrder.getStatus() == 0 || cancelOrder.getStatus() == 6) ) {
+        if (cancelOrder != null && (cancelOrder.getStatus() == 0 || cancelOrder.getStatus() == 6)) {
             //修改订单状态为取消
             cancelOrder.setStatus(4);
             orderMapper.updateByPrimaryKeySelective(cancelOrder);
@@ -332,7 +383,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
                 memberService.updateIntegration(cancelOrder.getMemberId(), member.getIntegration() + cancelOrder.getUseIntegration());
             }
             // 发起关单
-            userOrderPaymentService.closePayment(cancelOrder.getOrderSn(),message);
+            userOrderPaymentService.closePayment(cancelOrder.getOrderSn(),message,data);
 
         }
     }
@@ -350,10 +401,10 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
     public void confirmReceiveOrder(Long orderId) {
         UmsMember member = memberService.getCurrentMember();
         OmsOrder order = orderMapper.selectByPrimaryKey(orderId);
-        if(!member.getId().equals(order.getMemberId())){
+        if (!member.getId().equals(order.getMemberId())) {
             Asserts.fail("不能确认他人订单!");
         }
-        if(order.getStatus()!=2){
+        if (order.getStatus() != 2) {
             Asserts.fail("该订单还未发货!");
         }
         order.setStatus(3);
@@ -364,16 +415,16 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 
     @Override
     public CommonPage<OmsOrderDetail> list(String status, Integer pageNum, Integer pageSize) {
-        if(status.equals("-1")){
+        if (status.equals("-1")) {
             status = null;
         }
         UmsMember member = memberService.getCurrentMember();
-        PageHelper.startPage(pageNum,pageSize);
+        PageHelper.startPage(pageNum, pageSize);
         OmsOrderExample orderExample = new OmsOrderExample();
         OmsOrderExample.Criteria criteria = orderExample.createCriteria();
         criteria.andDeleteStatusEqualTo(0)
                 .andMemberIdEqualTo(member.getId());
-        if(status != null && !StringUtil.isEmpty(status)) {
+        if (status != null && !StringUtil.isEmpty(status)) {
             List<Long> list = StringUtil.toLongList(status);
             List<Integer> collect = list.stream().map(Long::intValue).collect(Collectors.toList());
             criteria.andStatusIn(collect);
@@ -387,7 +438,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         resultPage.setPageSize(orderPage.getPageSize());
         resultPage.setTotal(orderPage.getTotal());
         resultPage.setTotalPage(orderPage.getTotalPage());
-        if(CollUtil.isEmpty(orderList)){
+        if (CollUtil.isEmpty(orderList)) {
             return resultPage;
         }
         //设置数据信息
@@ -398,7 +449,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         List<OmsOrderDetail> orderDetailList = new ArrayList<>();
         for (OmsOrder omsOrder : orderList) {
             OmsOrderDetail orderDetail = new OmsOrderDetail();
-            BeanUtil.copyProperties(omsOrder,orderDetail);
+            BeanUtil.copyProperties(omsOrder, orderDetail);
             List<OmsOrderItem> relatedItemList = orderItemList.stream().filter(item -> item.getOrderId().equals(orderDetail.getId())).collect(Collectors.toList());
             orderDetail.setOrderItemList(relatedItemList);
             orderDetailList.add(orderDetail);
@@ -414,7 +465,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         example.createCriteria().andOrderIdEqualTo(orderId);
         List<OmsOrderItem> orderItemList = orderItemMapper.selectByExample(example);
         OmsOrderDetail orderDetail = new OmsOrderDetail();
-        BeanUtil.copyProperties(omsOrder,orderDetail);
+        BeanUtil.copyProperties(omsOrder, orderDetail);
         orderDetail.setOrderItemList(orderItemList);
         return orderDetail;
     }
@@ -433,7 +484,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         example.createCriteria().andOrderIdEqualTo(omsOrder.getId());
         List<OmsOrderItem> orderItemList = orderItemMapper.selectByExample(example);
         OmsOrderDetail orderDetail = new OmsOrderDetail();
-        BeanUtil.copyProperties(omsOrder,orderDetail);
+        BeanUtil.copyProperties(omsOrder, orderDetail);
         orderDetail.setOrderItemList(orderItemList);
         return orderDetail;
     }
@@ -442,13 +493,13 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
     public void deleteOrder(Long orderId) {
         UmsMember member = memberService.getCurrentMember();
         OmsOrder order = orderMapper.selectByPrimaryKey(orderId);
-        if(!member.getId().equals(order.getMemberId())){
+        if (!member.getId().equals(order.getMemberId())) {
             Asserts.fail("不能删除他人订单!");
         }
-        if(order.getStatus()==3||order.getStatus()==4){
+        if (order.getStatus() == 3 || order.getStatus() == 4) {
             order.setDeleteStatus(1);
             orderMapper.updateByPrimaryKey(order);
-        }else{
+        } else {
             Asserts.fail("只能删除已完成或已关闭的订单!");
         }
     }
@@ -468,56 +519,98 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             orderPayRes.setMessage("订单已付款或已关闭");
             return orderPayRes;
         }
-        payReq.setOrderPrice(detail.getPayAmount());
         UserOrderPayment userOrderPayment = userOrderPaymentService
-                .getByOrderNo(detail.getOrderSn(), payReq.getPayChannel(), PayStatusEnum.pending);
+                .getByOrderNo(detail.getOrderSn(), payReq.getPayChannel(), TradeStatusEnum.pending);
 
-        if (userOrderPayment == null) {
-            // 支付订单号
-            payReq.setOrderNo(generateOrderSn(detail));
-        }else {
+        if (userOrderPayment != null) {
             // 拉起原有的支付
-            payReq.setPayInfo(userOrderPayment.getPayInfo());
-            return adapayPaymentService.orderContinue(payReq);
+            orderPayRes = new OrderPayRes();
+            orderPayRes.setPay_info(userOrderPayment.getPayInfo());
+            orderPayRes.setPayChannel(userOrderPayment.getPayChannel());
+            orderPayRes.setPay_amt(userOrderPayment.getPayAmt().setScale(2, RoundingMode.HALF_UP).toString());
+            return orderPayRes;
+        }
+
+        //构建汇付统一下单请求
+        OpenEnum openType = OpenEnum.valueOf(paymentProperties.getOpenType());
+        Payment payment = new Payment(openType,
+                PaymentClientEnum.valueOf(payReq.getPaymentClient()), payReq.getPayChannel());
+        payment.setPaymentNo(generateOrderSn(detail));
+        payment.setOrderNo(payReq.getOrderNo());
+        payment.setOrderTitle("酷乐秀商城订单编号-" + detail.getOrderSn());
+        payment.setOrderDesc("酷乐秀商城订单编号-" + detail.getOrderSn());
+
+        //封装订单详情
+        List<OrderDetil> orderDetils = new ArrayList<>();
+        for (OmsOrderItem orderDetailVo : detail.getOrderItemList()) {
+            orderDetils.add(new OrderDetil(orderDetailVo.getId().toString(), orderDetailVo.getProductName(),
+                    orderDetailVo.getProductQuantity(), orderDetailVo.getRealAmount().toString()));
+        }
+        payment.setOrderDetils(orderDetils);
+        payment.setPayAmt(detail.getPayAmount().setScale(2, RoundingMode.HALF_UP).toString());
+        payment.setDescription(payReq.getReason());
+
+        if (OpenEnum.ADAPAY.equals(openType)) {
+            //创建分账对象
+            DivMember div_member = new DivMember();
+            div_member.setMember_id("0");
+            div_member.setAmount(detail.getPayAmount().setScale(2, RoundingMode.HALF_UP).toString());
+            div_member.setFee_flag("Y");
+            List<DivMember> div_members = Arrays.asList(div_member);
+            payment.setDivMembers(div_members);
+
+            //前端设备信息
+            DeviceInfo deviceInfo = new DeviceInfo();
+            deviceInfo.setDevice_ip(payReq.getIpAddress());
+            payment.setDeviceInfo(deviceInfo);
+
+            if (PayChannelEnum.wx_lite.equals(payReq.getPayChannel())) {
+                Map<String, Object> expend = new HashMap<>();
+                expend.put("open_id", payReq.getOpenId());
+                payment.setExpend(expend);
+            }
         }
-        payReq.setGoodTitle("酷乐秀商城订单编号-" + detail.getOrderSn());
-        payReq.setGoodDesc("酷乐秀商城订单编号-" + detail.getOrderSn());
         // 支付中的返回拉起信息
-        orderPayRes = adapayPaymentService.orderPay(payReq);
-        if (!orderPayRes.isStatus()) {
+        BaseResult<Payment> executePayment = paymentClient.executePayment(payment);
+        if (!executePayment.getStatus()) {
             // 异常将取消订单
-            cancelOrder(detail.getId(),orderPayRes.getMessage());
-            throw new BizException(orderPayRes.getMessage());
+            cancelOrder(detail.getId(), executePayment.getMsg(), null);
+            throw new BizException(executePayment.getMsg());
         }
-        if (!orderPayRes.getPay_amt().equals(detail.getPayAmount().setScale(2, RoundingMode.HALF_UP).toString())) {
-            cancelOrder(detail.getId(),"订单金额和实际支付金额不符");
+        if (!executePayment.getData().getPayAmt().equals(detail.getPayAmount().setScale(2, RoundingMode.HALF_UP).toString())) {
+            cancelOrder(detail.getId(), "订单金额和实际支付金额不符", null);
             throw new BizException("订单金额和实际支付金额不符");
         }
 
+
+        saveOrderPayment(executePayment.getData(), detail,payReq.getPaymentClient());
+
+        return orderPayRes;
+    }
+
+
+    private void saveOrderPayment(Payment payment, OmsOrderDetail detail,String paymentClient) {
+        UserOrderPayment userOrderPayment;
         OmsOrder omsOrder = new OmsOrder();
         omsOrder.setId(detail.getId());
-        if (orderPayRes.getPayStatus().getCode().equals(PayStatusEnum.pending.getCode())) {
-            omsOrder.setStatus(0);
-            orderMapper.updateByPrimaryKeySelective(omsOrder);
-            // 保存订单支付表
-            userOrderPayment = new UserOrderPayment();
-            userOrderPayment.setOrderNo(detail.getOrderSn());
-            userOrderPayment.setAdapayNo(orderPayRes.getOrderNo());
-            userOrderPayment.setPayChannel(orderPayRes.getPayChannel());
-            userOrderPayment.setTransNo(orderPayRes.getTransNo());
-            userOrderPayment.setPayAmt(new BigDecimal(orderPayRes.getPay_amt()));
-            userOrderPayment.setPayInfo(orderPayRes.getPay_info());
-            userOrderPayment.setStatus(PayStatusEnum.pending.getCode());
-            userOrderPayment.setPayFailMsg(orderPayRes.getMessage());
-            userOrderPayment.setCreateTime(new Date());
-            userOrderPayment.setUpdateTime(new Date());
-            userOrderPaymentService.saveOrUpdate(userOrderPayment);
-        }else {
-            // 异常将取消订单
-            cancelOrder(detail.getId(), orderPayRes.getMessage());
-        }
 
-        return orderPayRes;
+        omsOrder.setStatus(0);
+        orderMapper.updateByPrimaryKeySelective(omsOrder);
+        // 保存订单支付表
+        userOrderPayment = new UserOrderPayment();
+        userOrderPayment.setPaymentClient(paymentClient);
+        userOrderPayment.setOpenType(paymentProperties.getOpenType());
+        userOrderPayment.setOrderNo(detail.getOrderSn());
+        userOrderPayment.setAdapayNo(payment.getPaymentNo());
+        userOrderPayment.setPayChannel(payment.getPayChannel().getCode());
+        userOrderPayment.setTransNo(payment.getId());
+        userOrderPayment.setPayAmt(new BigDecimal(payment.getPayAmt()));
+        userOrderPayment.setPayInfo(payment.getPayInfo());
+        userOrderPayment.setStatus(TradeStatusEnum.pending.getCode());
+        userOrderPayment.setPayFailMsg("");
+        userOrderPayment.setCreateTime(new Date());
+        userOrderPayment.setUpdateTime(new Date());
+        userOrderPaymentService.saveOrUpdate(userOrderPayment);
     }
 
     @Override
@@ -526,20 +619,22 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
     }
 
     @Override
-    public void orderCallback(String data, String type) {
-        JSONObject hfRes = JSONObject.parseObject(data);
-
-        if (type.equals("payment.succeeded")) {//支付成功
-            paymentSucceededHandle(hfRes);
-        } else if (type.equals("payment.failed")) {//支付失败
-            paymentFailedHandle(hfRes);
-        } else if (type.equals("payment.close.succeeded")) {//支付关单成功
-            paymentCloseSucceededHandle(hfRes);
-        } else if (type.equals("payment.close.failed")) {//支付关单失败
-            paymentCloseFailedHandle(hfRes);
+    public void executePaymentCallBack(PaymentCallBack data) {
+        if (TradeStatusEnum.succeeded.equals(data.getStatus())) {//支付成功
+            paymentSucceededHandle(data);
+        } else if (TradeStatusEnum.failed.equals(data.getStatus())) {//支付失败
+            paymentFailedHandle(data);
         }
     }
 
+    @Override
+    public void closePaymentCallBack(PaymentCallBack data) {
+        if (TradeStatusEnum.succeeded.equals(data.getStatus())) {//关单成功
+            paymentCloseSucceededHandle(data);
+        } else if (TradeStatusEnum.failed.equals(data.getStatus())) {//关单失败
+            paymentCloseFailedHandle(data);
+        }
+    }
 
 
     /***
@@ -548,17 +643,18 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
      * @param: hfRes
      * @updateTime 2022/4/27 15:09
      */
-    private void paymentSucceededHandle(JSONObject hfRes) {
+    private void paymentSucceededHandle(PaymentCallBack data) {
         //订单完成
-        OmsOrder detail = detail(hfRes.getString("order_no"));
-        if (null == detail) {
-            log.error("汇付支付回调,订单未找到。 req is {}", hfRes.toJSONString());
+        UserOrderPayment userOrderPayment = userOrderPaymentService.getByAdapayNo(data.getPaymentNo());
+        if (null == userOrderPayment) {
+            log.error("汇付支付回调,订单未找到。 req is {}", JSON.toJSONString(data));
             return;
         }
+        OmsOrderDetail detail = detail(userOrderPayment.getOrderNo());
         if (detail.getStatus() == 0) {
-            orderSuccess(detail, hfRes);
+            orderSuccess(detail, data,data.getId());
         } else {
-            log.error("汇付支付回调,订单状态异常。 req is {}", hfRes.toJSONString());
+            log.error("汇付支付回调,订单状态异常。 req is {}", detail.getOrderSn());
         }
     }
 
@@ -568,19 +664,24 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
      * @param: hfRes
      * @updateTime 2022/4/27 15:09
      */
-    private void paymentFailedHandle(JSONObject hfRes) {
+    private void paymentFailedHandle(PaymentCallBack data) {
         //订单完成
-        OmsOrder detail = detail(hfRes.getString("order_no"));
+        UserOrderPayment userOrderPayment = userOrderPaymentService.getByAdapayNo(data.getPaymentNo());
+        if (null == userOrderPayment) {
+            log.error("汇付支付回调,订单未找到。 req is {}", JSON.toJSONString(data));
+            return;
+        }
 
+        OmsOrderDetail detail = detail(userOrderPayment.getOrderNo());
         if (null == detail) {
-            log.error("汇付支付回调,订单未找到。 req is {}", hfRes.toJSONString());
+            log.error("汇付支付回调,订单未找到。 req is {}", JSON.toJSONString(data));
             return;
         }
         if (detail.getStatus() == 0) {
 
-            cancelOrder(detail.getId(), "支付回调失败");
+            cancelOrder(detail.getId(), data.getErrMsg(),data);
         } else {
-            log.error("汇付支付回调,订单状态异常。 req is {}", hfRes.toJSONString());
+            log.error("汇付支付回调,订单状态异常。 req is {}", JSON.toJSONString(data));
         }
     }
 
@@ -590,13 +691,15 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
      * @param: hfRes
      * @updateTime 2022/4/27 15:33
      */
-    private void paymentCloseSucceededHandle(JSONObject hfRes) {
-        UserOrderPayment orderPayment = userOrderPaymentService.getByTranNo(hfRes.getString("payment_id"));
+    private void paymentCloseSucceededHandle(PaymentCallBack data) {
+        UserOrderPayment orderPayment = userOrderPaymentService.getByAdapayNo(data.getPaymentNo());
         if (null == orderPayment) {
             return;
         }
-        orderPayment.setStatus(PayStatusEnum.succeeded.getCode());
-        orderPayment.setUpdateTime(new Date());
+        orderPayment.setStatus(TradeStatusEnum.failed.getCode());
+        orderPayment.setTransNo(data.getId());
+        orderPayment.setCloseStatus(TradeStatusEnum.succeeded.getCode());
+        orderPayment.setCloseTime(data.getClosePaymentCallBack().getTradeTime());
         userOrderPaymentService.saveOrUpdate(orderPayment);
     }
 
@@ -606,47 +709,60 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
      * @param: hfRes
      * @updateTime 2022/4/27 15:33
      */
-    private void paymentCloseFailedHandle(JSONObject hfRes) {
-        UserOrderPayment orderPayment = userOrderPaymentService.getByTranNo(hfRes.getString("payment_id"));
+    private void paymentCloseFailedHandle(PaymentCallBack data) {
+        UserOrderPayment orderPayment = userOrderPaymentService.getByAdapayNo(data.getPaymentNo());
         if (null == orderPayment) {
             return;
         }
-        orderPayment.setStatus(PayStatusEnum.failed.getCode());
-        orderPayment.setPayFailMsg("支付关单回调失败-" + hfRes.getString("error_msg"));
+        orderPayment.setStatus(TradeStatusEnum.failed.getCode());
+        orderPayment.setCloseStatus(TradeStatusEnum.failed.getCode());
+        orderPayment.setCloseTime(data.getClosePaymentCallBack().getTradeTime());
+        orderPayment.setPayFailMsg("支付关单回调失败-" + data.getErrMsg());
         orderPayment.setUpdateTime(new Date());
         userOrderPaymentService.saveOrUpdate(orderPayment);
     }
 
     /***
      * 处理支付中订单
-     * @author liweifan
-     * @param: userOrder
-     * @updateTime 2022/4/13 16:51
      */
     @Transactional(rollbackFor = Exception.class)
     void payingOrderHandle(OmsOrder userOrder) {
         //判断汇付订单状态
         UserOrderPayment orderPayment = userOrderPaymentService.getByOrderNoAndStatusPaying(userOrder.getOrderSn());
         if (null == orderPayment) {
-            cancelOrder(userOrder.getId(), "支付超时");
+            cancelOrder(userOrder.getId(), "支付超时", null);
         }
+        OmsOrderDetail detail = detail(orderPayment.getOrderNo());
         try {
-            Map<String, Object> resMap = paymentSdk.queryPayment(orderPayment.getTransNo());
+            Payment param = new Payment(OpenEnum.valueOf(orderPayment.getOpenType()),
+                    PaymentClientEnum.valueOf(orderPayment.getPaymentClient()), PayChannelEnum.valueOf(orderPayment.getPayChannel()));
+            param.setId(orderPayment.getTransNo());
+            param.setPaymentNo(orderPayment.getAdapayNo());
+            BaseResult<Payment> res = paymentClient.queryPayment(param);
+            //支付成功
+            if (res.getStatus() && TradeStatusEnum.succeeded.getCode().equals(res.getData().getStatus())
+                    && (detail.getStatus() == 0 || detail.getStatus() == 1)
+            ) {
+                orderSuccess(detail,res.getData().getId());
+                return;
+            }
             //支付失败
-            if (PayStatusEnum.failed.getCode().equals(resMap.get("status").toString())) {
-                cancelOrder(userOrder.getId(), "支付失败");
-            }else if (PayStatusEnum.succeeded.getCode().equals(resMap.get("status").toString())) {
-                // 支付成功
-                orderSuccess(userOrder,null);
-            } else {
-                cancelOrder(userOrder.getId(), "支付超时");
+            if (!res.getStatus()) {
+                cancelOrder(userOrder.getId(), res.getMsg(), null);
+                return;
             }
+            cancelOrder(userOrder.getId(), "支付超时", null);
         } catch (Exception e) {
             e.printStackTrace();
             log.error("轮询处理支付中订单异常,异常参数: {}", JSONObject.toJSONString(userOrder));
         }
     }
 
+
+    void orderSuccess(OmsOrder detail, String tranId) {
+        orderSuccess(detail,null,tranId);
+    }
+
     /**
      * 订单完成
      *
@@ -654,27 +770,38 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
      * @updateTime 2022/4/13 17:17
      */
     @Transactional(rollbackFor = Exception.class)
-    void orderSuccess(OmsOrder detail, JSONObject hfRes) {
+    void orderSuccess(OmsOrder detail, PaymentCallBack data, String tranId) {
         //更新订单
         UserOrderPayment orderPayment = userOrderPaymentService.getByOrderNoAndStatusPaying(detail.getOrderSn());
-        if (orderPayment.getPayChannel().equals("alipay")) {
+
+        if (orderPayment == null) {
+            log.error("支付回调,支付中订单未找到。 orderNo is {}",detail.getOrderSn());
+            return;
+        }
+        if (data != null) {
+            String pay_amt = data.getExecutePaymentCallBack().getPayAmt();
+            if (!pay_amt.equals(detail.getPayAmount().setScale(2, RoundingMode.HALF_UP).toString())) {
+                orderPayment.setPayFailMsg("订单金额和实际支付金额不符");
+            }
+        }
+        if (orderPayment.getPayChannel().equals("alipay") || orderPayment.getPayChannel().equals("ali_app")) {
             paySuccess(detail.getId(),1);
-        } else if (orderPayment.getPayChannel().equals("wx_lite")) {
+        } else if (orderPayment.getPayChannel().equals("wx_lite") || orderPayment.getPayChannel().equals("wx_app")) {
             paySuccess(detail.getId(),2);
         }
-        String pay_amt = hfRes.getString("pay_amt");
-        if (!pay_amt.equals(detail.getPayAmount().setScale(2, RoundingMode.HALF_UP).toString())) {
-            orderPayment.setPayFailMsg("订单金额和实际支付金额不符");
-        }
-        orderPayment.setStatus(PayStatusEnum.succeeded.getCode());
+
+        orderPayment.setStatus(TradeStatusEnum.succeeded.getCode());
         orderPayment.setArrivalTime(new Date());
-        if (null != hfRes) {
+        orderPayment.setTransNo(tranId);
+        if (null != data) {
             try {
-                orderPayment.setPayAmt(new BigDecimal(pay_amt));
-                orderPayment.setFeeAmt(new BigDecimal(hfRes.getString("fee_amt")));
+                orderPayment.setArrivalTime(data.getExecutePaymentCallBack().getTradeTime());
+                orderPayment.setTransNo(data.getId());
+                orderPayment.setPayAmt(new BigDecimal(data.getExecutePaymentCallBack().getPayAmt()));
+                orderPayment.setFeeAmt(new BigDecimal(data.getExecutePaymentCallBack().getFeeAmt()));
             } catch (Exception e) {
                 e.printStackTrace();
-                log.error("完成订单,付款单金额格式化失败,参数{}", hfRes.toJSONString());
+                log.error("完成订单,付款单金额格式化失败,参数{}", JSON.toJSONString(data));
             }
         }
         userOrderPaymentService.saveOrUpdate(orderPayment);
@@ -687,7 +814,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
     private String generateOrderSn(OmsOrder order) {
         StringBuilder sb = new StringBuilder();
         String date = new SimpleDateFormat("yyyyMMdd").format(new Date());
-        String key = REDIS_DATABASE+":"+ REDIS_KEY_ORDER_ID + date;
+        String key = REDIS_DATABASE + ":" + REDIS_KEY_ORDER_ID + date;
         Long increment = redisService.incr(key, 1);
         sb.append(date);
         sb.append(String.format("%02d", order.getSourceType()));
@@ -972,11 +1099,35 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
     /**
      * 锁定下单商品的所有库存
      */
-    private void lockStock(List<CartPromotionItem> cartPromotionItemList) {
+    private void lockSkuStock(List<CartPromotionItem> cartPromotionItemList) {
         for (CartPromotionItem cartPromotionItem : cartPromotionItemList) {
+            if (cartPromotionItem.getProductSkuId() == null) {
+                continue;
+            }
             int i = skuStockMapper.lockStock(cartPromotionItem.getProductSkuId(),cartPromotionItem.getQuantity());
             if (i == 0) {
-                Asserts.fail("库存不足,无法下单");
+                Asserts.fail("库存不足");
+            }
+        }
+    }
+
+    /**
+     * 锁定下单商品的所有库存
+     */
+    private void lockProductStock(List<CartPromotionItem> cartPromotionItemList) {
+        Map<Long, List<CartPromotionItem>> collect = cartPromotionItemList.stream()
+                                  .collect(Collectors.groupingBy(CartPromotionItem::getProductId));
+        for (Map.Entry<Long, List<CartPromotionItem>> entry : collect.entrySet()) {
+            List<CartPromotionItem> value = entry.getValue();
+            if(CollectionUtils.isEmpty(value)) {
+                continue;
+            }
+            int sum = value.stream().mapToInt(CartPromotionItem::getQuantity).sum();
+            if (sum >0 ) {
+                int i = pmsProductMapper.lockStock(entry.getKey(),sum);
+                if (i == 0) {
+                    Asserts.fail("库存不足");
+                }
             }
         }
     }
@@ -986,7 +1137,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
      */
     private boolean hasStock(List<CartPromotionItem> cartPromotionItemList) {
         for (CartPromotionItem cartPromotionItem : cartPromotionItemList) {
-            if (cartPromotionItem.getRealStock()==null||cartPromotionItem.getRealStock() <= 0) {
+            if (cartPromotionItem.getRealStock() == null || cartPromotionItem.getRealStock() <= 0) {
                 return false;
             }
         }

+ 39 - 10
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPromotionServiceImpl.java

@@ -45,12 +45,18 @@ public class OmsPromotionServiceImpl implements OmsPromotionService {
                     BeanUtils.copyProperties(item,cartPromotionItem);
                     cartPromotionItem.setPromotionMessage("单品促销");
                     //商品原价-促销价
+                    BigDecimal originalPrice = promotionProduct.getPrice();
                     PmsSkuStock skuStock = getOriginalPrice(promotionProduct, item.getProductSkuId());
-                    BigDecimal originalPrice = skuStock.getPrice();
-                    //单品促销使用原价
-                    cartPromotionItem.setPrice(originalPrice);
-                    cartPromotionItem.setReduceAmount(originalPrice.subtract(skuStock.getPromotionPrice()));
-                    cartPromotionItem.setRealStock(skuStock.getStock()-skuStock.getLockStock());
+                    if (skuStock  != null) {
+                        //单品促销使用原价
+                        cartPromotionItem.setPrice(originalPrice);
+                        cartPromotionItem.setReduceAmount(originalPrice.subtract(skuStock.getPromotionPrice()));
+                        cartPromotionItem.setRealStock(skuStock.getStock() - skuStock.getLockStock());
+                    } else {
+                        cartPromotionItem.setReduceAmount(originalPrice.subtract(promotionProduct.getPromotionPrice()));
+                        cartPromotionItem.setRealStock(promotionProduct.getStock() - promotionProduct.getLockStock());
+
+                    }
                     cartPromotionItem.setIntegration(promotionProduct.getGiftPoint());
                     cartPromotionItem.setGrowth(promotionProduct.getGiftGrowth());
                     cartPromotionItemList.add(cartPromotionItem);
@@ -66,11 +72,17 @@ public class OmsPromotionServiceImpl implements OmsPromotionService {
                         String message = getLadderPromotionMessage(ladder);
                         cartPromotionItem.setPromotionMessage(message);
                         //商品原价-折扣*商品原价
+                        BigDecimal originalPrice = promotionProduct.getPrice();
                         PmsSkuStock skuStock = getOriginalPrice(promotionProduct,item.getProductSkuId());
-                        BigDecimal originalPrice = skuStock.getPrice();
+                        if (skuStock  != null) {
+                            //单品促销使用原价
+                            originalPrice = skuStock.getPrice();
+                            cartPromotionItem.setRealStock(skuStock.getStock()-skuStock.getLockStock());
+                        } else {
+                            cartPromotionItem.setRealStock(promotionProduct.getStock() - promotionProduct.getLockStock());
+                        }
                         BigDecimal reduceAmount = originalPrice.subtract(ladder.getDiscount().multiply(originalPrice));
                         cartPromotionItem.setReduceAmount(reduceAmount);
-                        cartPromotionItem.setRealStock(skuStock.getStock()-skuStock.getLockStock());
                         cartPromotionItem.setIntegration(promotionProduct.getGiftPoint());
                         cartPromotionItem.setGrowth(promotionProduct.getGiftGrowth());
                         cartPromotionItemList.add(cartPromotionItem);
@@ -89,11 +101,17 @@ public class OmsPromotionServiceImpl implements OmsPromotionService {
                         String message = getFullReductionPromotionMessage(fullReduction);
                         cartPromotionItem.setPromotionMessage(message);
                         //(商品原价/总价)*满减金额
+                        BigDecimal originalPrice = promotionProduct.getPrice();
                         PmsSkuStock skuStock= getOriginalPrice(promotionProduct, item.getProductSkuId());
-                        BigDecimal originalPrice = skuStock.getPrice();
+                        if (skuStock  != null) {
+                            //单品促销使用原价
+                            originalPrice = skuStock.getPrice();
+                            cartPromotionItem.setRealStock(skuStock.getStock()-skuStock.getLockStock());
+                        } else {
+                            cartPromotionItem.setRealStock(promotionProduct.getStock() - promotionProduct.getLockStock());
+                        }
                         BigDecimal reduceAmount = originalPrice.divide(totalAmount,RoundingMode.HALF_EVEN).multiply(fullReduction.getReducePrice());
                         cartPromotionItem.setReduceAmount(reduceAmount);
-                        cartPromotionItem.setRealStock(skuStock.getStock()-skuStock.getLockStock());
                         cartPromotionItem.setIntegration(promotionProduct.getGiftPoint());
                         cartPromotionItem.setGrowth(promotionProduct.getGiftGrowth());
                         cartPromotionItemList.add(cartPromotionItem);
@@ -165,6 +183,8 @@ public class OmsPromotionServiceImpl implements OmsPromotionService {
             PmsSkuStock skuStock = getOriginalPrice(promotionProduct,item.getProductSkuId());
             if(skuStock!=null){
                 cartPromotionItem.setRealStock(skuStock.getStock()-skuStock.getLockStock());
+            } else {
+                cartPromotionItem.setRealStock(promotionProduct.getStock() - promotionProduct.getLockStock());
             }
             cartPromotionItem.setIntegration(promotionProduct.getGiftPoint());
             cartPromotionItem.setGrowth(promotionProduct.getGiftGrowth());
@@ -242,7 +262,13 @@ public class OmsPromotionServiceImpl implements OmsPromotionService {
             //计算出商品原价
             PromotionProduct promotionProduct = getPromotionProductById(item.getProductId(), promotionProductList);
             PmsSkuStock skuStock = getOriginalPrice(promotionProduct,item.getProductSkuId());
-            amount = amount.add(skuStock.getPrice().multiply(new BigDecimal(item.getQuantity())));
+            BigDecimal price = BigDecimal.ZERO;
+            if (skuStock != null) {
+                price = skuStock.getPrice();
+            } else if (promotionProduct != null){
+                price = promotionProduct.getPrice();
+            }
+            amount = amount.add(price.multiply(new BigDecimal(item.getQuantity())));
         }
         return amount;
     }
@@ -251,6 +277,9 @@ public class OmsPromotionServiceImpl implements OmsPromotionService {
      * 获取商品的原价
      */
     private PmsSkuStock getOriginalPrice(PromotionProduct promotionProduct, Long productSkuId) {
+        if (productSkuId == null) {
+            return null;
+        }
         for (PmsSkuStock skuStock : promotionProduct.getSkuStockList()) {
             if (productSkuId.equals(skuStock.getId())) {
                 return skuStock;

+ 31 - 19
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/UserOrderPaymentServiceImpl.java

@@ -1,13 +1,16 @@
 package com.yonge.cooleshow.portal.service.impl;
 
-import com.yonge.cooleshow.enums.PayChannelEnum;
-import com.yonge.cooleshow.enums.PayStatusEnum;
 import com.yonge.cooleshow.mbg.mapper.UserOrderPaymentMapper;
 import com.yonge.cooleshow.mbg.model.UserOrderPayment;
 import com.yonge.cooleshow.portal.service.UserOrderPaymentService;
-import com.yonge.cooleshow.sdk.req.OrderCloseReq;
-import com.yonge.cooleshow.sdk.res.OrderCloseRes;
-import com.yonge.cooleshow.service.PaymentService;
+import com.yonge.toolset.base.result.BaseResult;
+import com.yonge.toolset.payment.base.enums.OpenEnum;
+import com.yonge.toolset.payment.base.enums.PayChannelEnum;
+import com.yonge.toolset.payment.base.enums.PaymentClientEnum;
+import com.yonge.toolset.payment.base.enums.TradeStatusEnum;
+import com.yonge.toolset.payment.base.model.ClosePayment;
+import com.yonge.toolset.payment.base.model.callback.PaymentCallBack;
+import com.yonge.toolset.payment.core.service.PaymentClient;
 import com.yonge.toolset.utils.string.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -27,8 +30,8 @@ public class UserOrderPaymentServiceImpl implements UserOrderPaymentService {
     @Autowired
     private UserOrderPaymentMapper userOrderPaymentMapper;
 
-    @Autowired
-    private PaymentService adapayPaymentService;
+    @Autowired(required = true)
+    private PaymentClient paymentClient;
 
     @Override
     public UserOrderPayment getByTranNo(String orderNo) {
@@ -50,9 +53,9 @@ public class UserOrderPaymentServiceImpl implements UserOrderPaymentService {
     }
 
     @Override
-    public UserOrderPayment getByOrderNo(String orderSn, PayChannelEnum payChannel, PayStatusEnum payStatus) {
+    public UserOrderPayment getByOrderNo(String orderSn, PayChannelEnum payChannel, TradeStatusEnum payStatus) {
 
-        return userOrderPaymentMapper.selectByOrderNoAndStatus(orderSn,payChannel.getCode(),payStatus.getCode());
+        return userOrderPaymentMapper.selectByOrderNoAndStatus(orderSn, payChannel.getCode(), payStatus.getCode());
     }
 
     @Override
@@ -61,26 +64,30 @@ public class UserOrderPaymentServiceImpl implements UserOrderPaymentService {
     }
 
     @Override
-    public void closePayment(String orderSn, String message) {
+    public void closePayment(String orderSn, String message, PaymentCallBack data) {
         UserOrderPayment orderPayment = userOrderPaymentMapper.selectByOrderNoAndStatusPaying(orderSn);
 
         if (orderPayment != null) {
             //更新付款单
-            orderPayment.setStatus(PayStatusEnum.failed.getCode());
+            orderPayment.setStatus(TradeStatusEnum.failed.getCode());
             orderPayment.setPayFailMsg(StringUtil.isEmpty(message) ? "交易取消" : message);
             orderPayment.setUpdateTime(new Date());
+            orderPayment.setTransNo(data.getId());
 
             //发送支付关单请求
             if (!StringUtil.isEmpty(orderPayment.getTransNo())) {
-                OrderCloseReq orderCloseReq = new OrderCloseReq();
-                orderCloseReq.setPaymentId(orderPayment.getTransNo());
-                orderCloseReq.setReason(message);
-                OrderCloseRes closeRes = adapayPaymentService.orderClose(orderCloseReq);
-                if (!closeRes.isStatus()) {
-                    orderPayment.setCloseStatus(PayStatusEnum.failed.getCode());
-                    orderPayment.setCloseFailMsg(closeRes.getFailMsg());
+                ClosePayment closePayment = new ClosePayment(OpenEnum.valueOf(orderPayment.getOpenType()),
+                        PaymentClientEnum.valueOf(orderPayment.getPaymentClient()),
+                        PayChannelEnum.valueOf(orderPayment.getPayChannel()));
+                closePayment.setId(orderPayment.getTransNo());
+                closePayment.setReason(message);
+                closePayment.setPaymentNo(orderPayment.getAdapayNo());
+                BaseResult<ClosePayment> closePaymentBaseResult = paymentClient.closePayment(closePayment);
+                if (!closePaymentBaseResult.getStatus()) {
+                    orderPayment.setCloseStatus(TradeStatusEnum.failed.getCode());
+                    orderPayment.setCloseFailMsg(closePaymentBaseResult.getMsg());
                 } else {
-                    orderPayment.setCloseStatus(PayStatusEnum.pending.getCode());
+                    orderPayment.setCloseStatus(TradeStatusEnum.pending.getCode());
                 }
             }
             userOrderPaymentMapper.updateByPrimaryKeySelective(orderPayment);
@@ -96,4 +103,9 @@ public class UserOrderPaymentServiceImpl implements UserOrderPaymentService {
     public UserOrderPayment getByOrderNoAndStatusSucceeded(String orderSn) {
         return userOrderPaymentMapper.selectByOrderNoAndStatusSucceeded(orderSn);
     }
+
+    @Override
+    public UserOrderPayment getByAdapayNo(String paymentNo) {
+        return userOrderPaymentMapper.selectByAdapayNo(paymentNo);
+    }
 }

+ 13 - 14
cooleshow-mall/mall-portal/src/main/resources/config/mybatis/OmsOrderReturnApplyDao.xml

@@ -4,29 +4,28 @@
     <resultMap id="returnApplyDetailResultMap" type="com.yonge.cooleshow.portal.dto.OmsOrderReturnApplyResult" extends="com.yonge.cooleshow.mbg.mapper.OmsOrderReturnApplyMapper.BaseResultMap">
         <association property="companyAddress" resultMap="com.yonge.cooleshow.mbg.mapper.OmsCompanyAddressMapper.BaseResultMap" columnPrefix="ca_"/>
     </resultMap>
-    <select id="getList" resultMap="com.yonge.cooleshow.mbg.mapper.OmsOrderReturnApplyMapper.BaseResultMap">
+
+    <resultMap id="returnApplyDetailResult" type="com.yonge.cooleshow.portal.dto.OmsOrderReturnApplyVo" extends="com.yonge.cooleshow.mbg.mapper.OmsOrderReturnApplyMapper.BaseResultMap">
+
+        <result column="arrival_time_" jdbcType="VARCHAR" property="arrivalTime" />
+        <result column="refundStatus" jdbcType="VARCHAR" property="refundStatus" />
+    </resultMap>
+    <select id="getList" resultMap="returnApplyDetailResult">
         SELECT
-        oora.id,
-        oora.create_time,
-        oora.member_username,
-        oora.product_real_price,
-        oora.product_count,
-        oora.return_name,
-        oora.status,
-        oora.handle_time
+        oora.*,
+        uor.arrival_time_,
+        uor.status_ as refundStatus
         FROM
         oms_order_return_apply oora
         left join oms_order oo on oo.id = order_id
+        left join user_order_refund uor on uor.return_id_ = oora.id
         WHERE
         1 = 1
         <if test="queryParam.id!=null">
             AND oora.id = #{queryParam.id}
         </if>
-        <if test="queryParam.status!=null">
-            AND oora.status = #{queryParam.status}
-        </if>
-        <if test="queryParam.status!=null">
-            AND oora.status = #{queryParam.status}
+        <if test="queryParam.status != null and queryParam.status != ''">
+            AND find_in_set( oora.status , #{queryParam.status})
         </if>
         <if test="queryParam.handleMan!=null and queryParam.handleMan!=''">
             AND oora.handle_man = #{queryParam.handleMan}

+ 1 - 0
cooleshow-mall/mall-portal/src/main/resources/config/mybatis/PortalOrderDao.xml

@@ -15,6 +15,7 @@
             o.integration,
             o.member_id,
             ot.id ot_id,
+        ot.product_id ot_product_id,
             ot.product_name ot_product_name,
             ot.product_sku_id ot_product_sku_id,
             ot.product_sku_code ot_product_sku_code,

+ 21 - 5
cooleshow-mall/mall-portal/src/main/resources/config/mybatis/PortalProductDao.xml

@@ -44,11 +44,7 @@
     </select>
     <select id="getPromotionProductList" resultMap="promotionProductMap">
         SELECT
-            p.id,
-            p.`name`,
-            p.promotion_type,
-            p.gift_growth,
-            p.gift_point,
+            p.*,
             sku.id sku_id,
             sku.price sku_price,
             sku.sku_code sku_sku_code,
@@ -99,4 +95,24 @@
               AND cp.product_id = #{productId}
         )
     </select>
+
+    <update id="updateProductStock">
+        UPDATE pms_product
+        SET
+        stock = CASE id
+        <foreach collection="itemList" item="item">
+            WHEN #{item.productId} THEN stock - #{item.stock}
+        </foreach>
+        END,
+        lock_stock = CASE id
+        <foreach collection="itemList" item="item">
+            WHEN #{item.productId} THEN lock_stock - #{item.stock}
+        </foreach>
+        END
+        WHERE
+        id IN
+        <foreach collection="itemList" item="item" separator="," open="(" close=")">
+            #{item.productId}
+        </foreach>
+    </update>
 </mapper>

+ 1 - 1
cooleshow-mall/mall-portal/src/main/resources/logback-spring.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration scan="true" scanPeriod="10 seconds">
 
-	<property name="LOG_HOME" value="/mdata/logs/task-%d{yyyy-MM-dd_HH}-%i.log" />
+	<property name="LOG_HOME" value="/mdata/logs/mall-portal-%d{yyyy-MM-dd_HH}-%i.log" />
 	<property name="CONSOLE_LOG_PATTERN"
 			  value="[%X{username} %X{ip} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}] : %msg%n" />
 

+ 0 - 1
cooleshow-mall/pom.xml

@@ -90,6 +90,5 @@
         <module>mall-admin</module>
         <module>mall-common</module>
         <module>mall-portal</module>
-        <module>mall-pay</module>
     </modules>
 </project>

+ 5 - 4
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/SmsCodeController.java

@@ -38,7 +38,7 @@ public class SmsCodeController extends BaseController {
 
     @ApiOperation(value = "发送登录短信验证码")
     @ApiImplicitParams({  @ApiImplicitParam(name = "mobile", value = "手机号", required = true, dataType = "String"),
-                          @ApiImplicitParam(name = "type", value = "类型(PASSWD:修改密码,LOGIN:登录,REGISTER:注册,BANK:绑定银行卡)", required = true, dataType = "String") })
+                          @ApiImplicitParam(name = "type", value = "类型(PASSWD:修改密码,LOGIN:登录或注册,BANK:绑定银行卡,PHONE:修改手机号)", required = true, dataType = "String") })
     @PostMapping(value = "/sendSmsCode")
     public Object sendLoginVerifyCode(String mobile,String type) throws Exception {
         smsCodeService.sendValidCode(mobile, type, ClientEnum.SYSTEM);
@@ -47,13 +47,14 @@ public class SmsCodeController extends BaseController {
 
     @ApiOperation(value = "校验短信验证码")
     @ApiImplicitParams({ @ApiImplicitParam(name = "phone", value = "手机号", required = true, dataType = "String"),
-            @ApiImplicitParam(name = "code", value = "短信验证码", required = true, dataType = "String") })
+            @ApiImplicitParam(name = "code", value = "短信验证码", required = true, dataType = "String"),
+                         @ApiImplicitParam(name = "type", value = "类型(PASSWD:修改密码,LOGIN:登录或注册,BANK:绑定银行卡,PHONE:修改手机号)", required = true, dataType = "String") })
     @PostMapping(value = "/verifySmsCode")
-    public Object verifySmsCode(String phone,String code) {
+    public Object verifySmsCode(String phone,String code,String type) {
         if(StringUtils.isEmpty(phone) || StringUtils.isEmpty(code)){
             return failed(SecurityConstants.PARAM_VERIFY_EXCEPTION);
         }
-        if(smsCodeService.verifyValidCode(phone,code)){
+        if(smsCodeService.verifyValidCode(phone,code,type)){
             return succeed();
         }
         return failed("验证码校验失败");

+ 2 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderRefundController.java

@@ -6,6 +6,7 @@ import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.req.AuthOperaReq;
 import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundSearch;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefundBill;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -54,7 +55,7 @@ public class UserOrderRefundController extends BaseController {
 	@PostMapping("/doAuth")
 	@ApiOperation(value = "审核", notes = "传入authOperaReq")
 	@PreAuthorize("@pcs.hasPermissions('userOrderRefunds/doAuth')")
-	public HttpResponseResult<RefundBill> doAuth(@Valid @RequestBody AuthOperaReq authOperaReq) throws Exception {
+	public HttpResponseResult<UserOrderRefundBill> doAuth(@Valid @RequestBody AuthOperaReq authOperaReq) throws Exception {
 		SysUser user = sysUserFeignService.queryUserInfo();
 		if (user == null || null == user.getId()) {
 			return failed(HttpStatus.FORBIDDEN, "请登录");

+ 42 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/VipCardRecordController.java

@@ -0,0 +1,42 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.dto.search.VipCardRecordSearch;
+import com.yonge.cooleshow.biz.dal.service.VipCardRecordService;
+import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/vipCardRecord")
+@Api(value = "购买会员卡记录表", tags = "购买会员卡记录表")
+public class VipCardRecordController extends BaseController {
+
+    @Autowired
+    private VipCardRecordService vipCardRecordService;
+
+	/**
+     * 查询单条
+     */
+    @GetMapping("/detail/{id}")
+    @ApiOperation(value = "详情", notes = "传入id")
+    public HttpResponseResult<VipCardRecordVo> detail(@PathVariable("id") Long id) {
+    	return succeed(vipCardRecordService.detail(id));
+	}
+    
+    /**
+     * 查询分页
+     */
+    @PostMapping("/page")
+    @ApiOperation(value = "查询分页", notes = "传入vipCardRecordSearch")
+    public HttpResponseResult<PageInfo<VipCardRecordVo>> page(@RequestBody VipCardRecordSearch query) {
+		IPage<VipCardRecordVo> pages = vipCardRecordService.selectPage(PageUtil.getPage(query), query);
+        return succeed(PageUtil.pageInfo(pages));
+	}
+}

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/convert/AudioTypeConverter.java

@@ -28,7 +28,7 @@ public class AudioTypeConverter implements Converter<AudioTypeEnum> {
     @Override
     public AudioTypeEnum convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
         try {
-            if ("MAP".equals(cellData.getStringValue())) {
+            if ("MP3".equals(cellData.getStringValue())) {
                 return AudioTypeEnum.MP3;
             } else if ("MIDI".equals(cellData.getStringValue())){
                 return AudioTypeEnum.MIDI;

+ 7 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java

@@ -211,13 +211,18 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
     //查询老师声部价格
     BigDecimal selectPrice(@Param("teacherId") Long teacherId, @Param("subjectId") Long subjectId);
 
+    //查询课程
     List<CourseSchedule> selectSchedule(Integer courseId);
 
-    void updateStartTime();
+    //更新课程状态
+    void updateStartTime(List<CourseSchedule> list);
 
-    void updateEndTime();
+    //更新课程状态
+    void updateEndTime(List<CourseSchedule> list);
 
+    //根据日期查课程id
     List<Long> selectIdList(String day);
 
+    //更新老师课酬
     void updateTeacherSalary(List<Long> list);
 }

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleRepliedDao.java

@@ -39,6 +39,8 @@ public interface CourseScheduleRepliedDao extends BaseMapper<CourseScheduleRepli
 
     List<Long> selectAll();
 
+    List<Long> selectAllClass();
+
 	/**
 	 * @Description: 查询我的评价
 	 * @Author: cy

+ 15 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleStudentDao.java

@@ -0,0 +1,15 @@
+package com.yonge.cooleshow.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudent;
+
+import java.util.List;
+
+/**
+ * @Author: cy
+ * @Date: 2022/5/27
+ */
+public interface CourseScheduleStudentDao extends BaseMapper<CourseScheduleStudent> {
+    //批量添加学员
+    void insertBatch(List<CourseScheduleStudent> list);
+}

+ 14 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/PinaoRoomTimeDao.java

@@ -0,0 +1,14 @@
+package com.yonge.cooleshow.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yonge.cooleshow.biz.dal.entity.PinaoRoomTime;
+import com.yonge.cooleshow.biz.dal.vo.PinaoRoomTimeVo;
+
+/**
+ * @Author: cy
+ * @Date: 2022/5/26
+ */
+public interface PinaoRoomTimeDao extends BaseMapper<PinaoRoomTime> {
+    //查询琴房剩余时长、冻结时长、统计学员人数
+    PinaoRoomTimeVo selectRemainTime(Long teacherId);
+}

+ 19 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserBindingTeacherDao.java

@@ -0,0 +1,19 @@
+package com.yonge.cooleshow.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yonge.cooleshow.biz.dal.entity.UserBindingTeacher;
+import com.yonge.cooleshow.biz.dal.vo.CourseStudentVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Map;
+
+/**
+ * @Author: cy
+ * @Date: 2022/5/26
+ */
+public interface UserBindingTeacherDao extends BaseMapper<UserBindingTeacher> {
+    //查询学员
+    IPage<CourseStudentVo> selectStudent(Page<CourseStudentVo> pageInfo,@Param("param") Map<String, Object> param);
+}

+ 19 - 16
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderRefundDao.java

@@ -11,28 +11,31 @@ import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo;
 import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundSearch;
 
 
-public interface UserOrderRefundDao extends BaseMapper<UserOrderRefund>{
-	/**
-	 * 查询详情
+public interface UserOrderRefundDao extends BaseMapper<UserOrderRefund> {
+    /**
+     * 查询详情
+     *
      * @author liweifan
      * @date 2022-05-09 17:14:30
      * @return: com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo
-	 */
-	UserOrderRefundVo detail(@Param("id") Long id);
+     */
+    UserOrderRefundVo detail(@Param("id") Long id, @Param("userId") Long userId);
 
-	/**
-	 * 分页查询
+    /**
+     * 分页查询
+     *
      * @author liweifan
      * @date 2022-05-09 17:14:30
      * @return: com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo
-	 */
-	List<UserOrderRefundVo> selectPage(@Param("page") IPage page, @Param("param") UserOrderRefundSearch userOrderRefund);
-	/***
-	 * 查询订单中,未退费的商品
-	 * @author liweifan
-	 * @param: bizId
-	 * @updateTime 2022/5/9 18:05
-	 * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.UserOrderDetail>
-	 */
+     */
+    List<UserOrderRefundVo> selectPage(@Param("page") IPage page, @Param("param") UserOrderRefundSearch userOrderRefund);
+
+    /***
+     * 查询订单中,未退费的商品
+     * @author liweifan
+     * @param: bizId
+     * @updateTime 2022/5/9 18:05
+     * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.UserOrderDetail>
+     */
     List<UserOrderDetail> selectOrderRefundDetils(@Param("orderId") Long orderId);
 }

+ 26 - 23
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VipCardRecordDao.java

@@ -10,35 +10,38 @@ import com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo;
 import com.yonge.cooleshow.biz.dal.dto.search.VipCardRecordSearch;
 
 
-public interface VipCardRecordDao extends BaseMapper<VipCardRecord>{
-	/**
-	 * 查询详情
+public interface VipCardRecordDao extends BaseMapper<VipCardRecord> {
+    /**
+     * 查询详情
+     *
      * @author liweifan
      * @date 2022-03-30 13:53:51
      * @return: com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo
-	 */
-	VipCardRecordVo detail(@Param("id") Long id);
+     */
+    VipCardRecordVo detail(@Param("id") Long id, @Param("userId") Long userId);
 
-	/**
-	 * 分页查询
+    /**
+     * 分页查询
+     *
      * @author liweifan
      * @date 2022-03-30 13:53:51
      * @return: com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo
-	 */
-	List<VipCardRecordVo> selectPage(@Param("page") IPage page, @Param("param") VipCardRecordSearch vipCardRecord);
+     */
+    List<VipCardRecordVo> selectPage(@Param("page") IPage page, @Param("param") VipCardRecordSearch vipCardRecord);
 
-	/***
-	 * 查询临期3天会员
-	 * @author liweifan
-	 * @updateTime 2022/5/5 19:33
-	 * @return: java.util.List<com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo>
-	 */
-	List<VipCardRecordVo> selectTemporaryRecord();
-	/***
-	 * 查询到期会员
-	 * @author liweifan
-	 * @updateTime 2022/5/5 20:18
-	 * @return: java.util.List<com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo>
-	 */
-	List<VipCardRecordVo> selectExpireRecord();
+    /***
+     * 查询临期3天会员
+     * @author liweifan
+     * @updateTime 2022/5/5 19:33
+     * @return: java.util.List<com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo>
+     */
+    List<VipCardRecordVo> selectTemporaryRecord();
+
+    /***
+     * 查询到期会员
+     * @author liweifan
+     * @updateTime 2022/5/5 20:18
+     * @return: java.util.List<com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo>
+     */
+    List<VipCardRecordVo> selectExpireRecord();
 }

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