Sfoglia il codice sorgente

商城订单优惠券

liujunchi 2 anni fa
parent
commit
1e7674eda1
16 ha cambiato i file con 220 aggiunte e 94 eliminazioni
  1. 15 0
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/AdminFeignService.java
  2. 25 0
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/dto/CouponInfoApi.java
  3. 12 0
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/fallback/AdminFeignServiceFallback.java
  4. 3 3
      cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/OmsOrder.java
  5. 15 3
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/domain/OrderParam.java
  6. 49 28
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java
  7. 0 40
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/coupon/CouponInfoController.java
  8. 68 8
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/open/AdminClient.java
  9. 2 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CouponInfoService.java
  10. 3 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CouponInfoServiceImp.java
  11. 5 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CouponIssueServiceImp.java
  12. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  13. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  14. 8 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/io/request/CouponInfoVO.java
  15. 1 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/MusicSheetController.java
  16. 5 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/io/request/CouponInfoVO.java

+ 15 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/AdminFeignService.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.api.feign;
 
+import com.yonge.cooleshow.api.feign.dto.CouponInfoApi;
 import com.yonge.cooleshow.api.feign.dto.EmployeeApi;
 import com.yonge.cooleshow.api.feign.dto.StudentApi;
 import com.yonge.cooleshow.api.feign.dto.TeacherApi;
@@ -16,7 +17,9 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
+import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Description
@@ -113,4 +116,16 @@ public interface AdminFeignService {
 
     @GetMapping(value = "/open/adminClient/getEmployee")
     HttpResponseResult<EmployeeApi> getEmployee(@RequestParam("userId") Long userId);
+
+
+    @PostMapping(value = "/open/adminClient/orderUpdate", consumes="application/json", produces="application/json")
+    HttpResponseResult<Boolean> updateCouponOrderInfo(@RequestParam("couponIssueId") String couponIssueId,
+                                                      @RequestParam("returnCoupon") Boolean returnCoupon,
+                                                      @RequestParam("orderNo") String orderNo);
+
+    @PostMapping(value = "/open/adminClient/orderInfo", consumes="application/json", produces="application/json")
+    HttpResponseResult<CouponInfoApi> queryCouponOrderPageInfo(@RequestParam("userId") Long userId,
+                                                               @RequestParam("issueIds") String issueIds,
+                                                               @RequestParam("orderAmount") BigDecimal orderAmount,
+                                                               @RequestParam("client") String client);
 }

+ 25 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/dto/CouponInfoApi.java

@@ -0,0 +1,25 @@
+package com.yonge.cooleshow.api.feign.dto;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-09-07
+ */
+public class CouponInfoApi implements Serializable {
+
+
+    private BigDecimal discountedPrices;
+
+    public BigDecimal getDiscountedPrices() {
+        return discountedPrices;
+    }
+
+    public void setDiscountedPrices(BigDecimal discountedPrices) {
+        this.discountedPrices = discountedPrices;
+    }
+}

+ 12 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/fallback/AdminFeignServiceFallback.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.api.feign.fallback;
 
 import com.yonge.cooleshow.api.feign.AdminFeignService;
+import com.yonge.cooleshow.api.feign.dto.CouponInfoApi;
 import com.yonge.cooleshow.api.feign.dto.EmployeeApi;
 import com.yonge.cooleshow.api.feign.dto.StudentApi;
 import com.yonge.cooleshow.api.feign.dto.TeacherApi;
@@ -9,6 +10,7 @@ import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.entity.MallOrderItemDto;
 import com.yonge.cooleshow.common.enums.UserFirstTimeTypeEnum;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -94,4 +96,14 @@ public class AdminFeignServiceFallback implements AdminFeignService {
     public HttpResponseResult<EmployeeApi> getEmployee(Long userId) {
         return null;
     }
+
+    @Override
+    public HttpResponseResult<Boolean> updateCouponOrderInfo(String couponIssueId, Boolean returnCoupon, String orderNo) {
+        return null;
+    }
+
+    @Override
+    public HttpResponseResult<CouponInfoApi> queryCouponOrderPageInfo(Long userId, String issueIds, BigDecimal orderAmount, String client) {
+        return null;
+    }
 }

+ 3 - 3
cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/OmsOrder.java

@@ -11,7 +11,7 @@ public class OmsOrder implements Serializable {
 
     private Long memberId;
 
-    private Long couponId;
+    private String couponId;
 
     @ApiModelProperty("下单平台 STUDENT TEACHER")
     private String platformType;
@@ -180,11 +180,11 @@ public class OmsOrder implements Serializable {
         this.memberId = memberId;
     }
 
-    public Long getCouponId() {
+    public String getCouponId() {
         return couponId;
     }
 
-    public void setCouponId(Long couponId) {
+    public void setCouponId(String couponId) {
         this.couponId = couponId;
     }
 

+ 15 - 3
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/domain/OrderParam.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.portal.domain;
 
 import io.swagger.annotations.ApiModelProperty;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -13,7 +14,7 @@ public class OrderParam {
     @ApiModelProperty("收货地址ID")
     private Long memberReceiveAddressId;
     @ApiModelProperty("优惠券ID")
-    private Long couponId;
+    private String couponId;
     @ApiModelProperty("使用的积分数")
     private Integer useIntegration;
     @ApiModelProperty("支付方式 :0->未支付;1->支付宝;2->微信")
@@ -24,6 +25,17 @@ public class OrderParam {
     @ApiModelProperty("平台类型 STUDENT:学生端  TEACHER:老师端")
     private String platformType;
 
+    @ApiModelProperty("订单金额")
+    private BigDecimal orderAmount;
+
+    public BigDecimal getOrderAmount() {
+        return orderAmount;
+    }
+
+    public void setOrderAmount(BigDecimal orderAmount) {
+        this.orderAmount = orderAmount;
+    }
+
     public String getPlatformType() {
         return platformType;
     }
@@ -40,11 +52,11 @@ public class OrderParam {
         this.memberReceiveAddressId = memberReceiveAddressId;
     }
 
-    public Long getCouponId() {
+    public String getCouponId() {
         return couponId;
     }
 
-    public void setCouponId(Long couponId) {
+    public void setCouponId(String couponId) {
         this.couponId = couponId;
     }
 

+ 49 - 28
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil;
 import com.alibaba.fastjson.JSON;
 import com.github.pagehelper.PageHelper;
 import com.yonge.cooleshow.api.feign.AdminFeignService;
+import com.yonge.cooleshow.api.feign.dto.CouponInfoApi;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.entity.MallOrderItemDto;
 import com.yonge.cooleshow.common.enums.PostStatusEnum;
@@ -148,6 +149,9 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 
     @Override
     public Map<String, Object> generateOrder(OrderParam orderParam) {
+        if (orderParam.getOrderAmount() == null) {
+            throw new BizException("订单金额校验不通过");
+        }
         List<OmsOrderItem> orderItemList = new ArrayList<>();
         //获取购物车及优惠信息
         UmsMember currentMember = memberService.getCurrentMember();
@@ -179,19 +183,27 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             Asserts.fail("库存不足,无法下单");
         }
         //判断使用使用了优惠券
-        if (orderParam.getCouponId() == null) {
+        if (StringUtil.isEmpty(orderParam.getCouponId())) {
             //不用优惠券
             for (OmsOrderItem orderItem : orderItemList) {
                 orderItem.setCouponAmount(new BigDecimal(0));
             }
         } else {
-            //使用优惠券
-            SmsCouponHistoryDetail couponHistoryDetail = getUseCoupon(cartPromotionItemList, orderParam.getCouponId());
-            if (couponHistoryDetail == null) {
-                Asserts.fail("该优惠券不可用");
-            }
+            // todo 使用优惠券 远程调用获取优惠券金额
+            // SmsCouponHistoryDetail couponHistoryDetail = getUseCoupon(cartPromotionItemList, orderParam.getCouponId());
+            //     if (couponHistoryDetail == null) {
+            //         Asserts.fail("该优惠券不可用");
+            // }
             //对下单商品的优惠券进行处理
-            handleCouponAmount(orderItemList, couponHistoryDetail);
+            HttpResponseResult<CouponInfoApi> couponInfoApiHttpResponseResult = adminFeignService.queryCouponOrderPageInfo(
+                    currentMember.getId(), orderParam.getCouponId(), orderParam.getOrderAmount(),
+                    orderParam.getPlatformType());
+            CouponInfoApi data = couponInfoApiHttpResponseResult.getData();
+            BigDecimal couponAmount = BigDecimal.ZERO;
+            if(data != null) {
+                couponAmount = data.getDiscountedPrices();
+            }
+            handleCouponAmount(orderItemList, couponAmount);
         }
         //判断是否使用积分
         if (orderParam.getUseIntegration() == null || orderParam.getUseIntegration().equals(0)) {
@@ -234,7 +246,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         order.setPromotionAmount(calcPromotionAmount(orderItemList));
         order.setPromotionInfo(getOrderPromotionInfo(orderItemList));
         order.setPlatformType(orderParam.getPlatformType());
-        if (orderParam.getCouponId() == null) {
+        if (StringUtil.isEmpty(orderParam.getCouponId())) {
             order.setCouponAmount(new BigDecimal(0));
         } else {
             order.setCouponId(orderParam.getCouponId());
@@ -247,7 +259,11 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             order.setIntegration(orderParam.getUseIntegration());
             order.setIntegrationAmount(calcIntegrationAmount(orderItemList));
         }
-        order.setPayAmount(calcPayAmount(order));
+        BigDecimal payAmount = calcPayAmount(order);
+        if (payAmount.compareTo(orderParam.getOrderAmount()) != 0) {
+            throw new BizException("订单金额校验不通过");
+        }
+        order.setPayAmount(payAmount);
         //转化为订单信息并插入数据库
         order.setMemberId(currentMember.getId());
         order.setCreateTime(new Date());
@@ -292,7 +308,9 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         orderItemDao.insertList(orderItemList);
         //如使用优惠券更新优惠券使用状态
         if (orderParam.getCouponId() != null) {
-            updateCouponStatus(orderParam.getCouponId(), currentMember.getId(), 1);
+            // updateCouponStatus(orderParam.getCouponId(), currentMember.getId(), 1);
+            // todo 远程调用更新优惠券使用
+            adminFeignService.updateCouponOrderInfo(orderParam.getCouponId(),false,order.getOrderSn());
         }
         //如使用积分需要扣除积分
         if (orderParam.getUseIntegration() != null) {
@@ -474,7 +492,10 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
                 portalOrderDao.releaseProductStockLock(orderItemList);
             }
             //修改优惠券使用状态
-            updateCouponStatus(cancelOrder.getCouponId(), cancelOrder.getMemberId(), 0);
+            // updateCouponStatus(cancelOrder.getCouponId(), cancelOrder.getMemberId(), 0);
+            // todo 退回优惠券
+
+            adminFeignService.updateCouponOrderInfo(cancelOrder.getCouponId(),true,cancelOrder.getOrderSn());
             //返还使用积分
             if (cancelOrder.getUseIntegration() != null) {
                 UmsMember member = memberService.getById(cancelOrder.getMemberId());
@@ -1259,22 +1280,22 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
      * @param orderItemList       order_item列表
      * @param couponHistoryDetail 可用优惠券详情
      */
-    private void handleCouponAmount(List<OmsOrderItem> orderItemList, SmsCouponHistoryDetail couponHistoryDetail) {
-        SmsCoupon coupon = couponHistoryDetail.getCoupon();
-        if (coupon.getUseType().equals(0)) {
+    private void handleCouponAmount(List<OmsOrderItem> orderItemList, BigDecimal couponAmount) {
+        // SmsCoupon coupon = couponHistoryDetail.getCoupon();
+        // if (coupon.getUseType().equals(0)) {
             //全场通用
-            calcPerCouponAmount(orderItemList, coupon);
-        } else if (coupon.getUseType().equals(1)) {
-            //指定分类
-            List<OmsOrderItem> couponOrderItemList = getCouponOrderItemByRelation(couponHistoryDetail, orderItemList,
-                                                                                  0);
-            calcPerCouponAmount(couponOrderItemList, coupon);
-        } else if (coupon.getUseType().equals(2)) {
-            //指定商品
-            List<OmsOrderItem> couponOrderItemList = getCouponOrderItemByRelation(couponHistoryDetail, orderItemList,
-                                                                                  1);
-            calcPerCouponAmount(couponOrderItemList, coupon);
-        }
+            calcPerCouponAmount(orderItemList, couponAmount);
+        // } else if (coupon.getUseType().equals(1)) {
+        //     //指定分类
+        //     List<OmsOrderItem> couponOrderItemList = getCouponOrderItemByRelation(couponHistoryDetail, orderItemList,
+        //                                                                           0);
+        //     calcPerCouponAmount(couponOrderItemList, coupon);
+        // } else if (coupon.getUseType().equals(2)) {
+        //     //指定商品
+        //     List<OmsOrderItem> couponOrderItemList = getCouponOrderItemByRelation(couponHistoryDetail, orderItemList,
+        //                                                                           1);
+        //     calcPerCouponAmount(couponOrderItemList, coupon);
+        // }
     }
 
     /**
@@ -1282,13 +1303,13 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
      *
      * @param orderItemList 可用优惠券的下单商品商品
      */
-    private void calcPerCouponAmount(List<OmsOrderItem> orderItemList, SmsCoupon coupon) {
+    private void calcPerCouponAmount(List<OmsOrderItem> orderItemList, BigDecimal coupon) {
         BigDecimal totalAmount = calcTotalAmount(orderItemList);
         for (OmsOrderItem orderItem : orderItemList) {
             //(商品价格/可用商品总价)*优惠券面额
             BigDecimal couponAmount = orderItem.getProductPrice()
                                                .divide(totalAmount, 3, RoundingMode.HALF_EVEN)
-                                               .multiply(coupon.getAmount());
+                                               .multiply(coupon);
             orderItem.setCouponAmount(couponAmount);
         }
     }

+ 0 - 40
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/coupon/CouponInfoController.java

@@ -235,44 +235,4 @@ public class CouponInfoController extends BaseController {
         return succeed(PageUtil.getPageInfo(wrapper, pageInfos));
     }
 
-    /**
-     * 订单优惠券信息
-     * @param request CouponOrderVO.PageRequest
-     * @return HttpResponseResult<CouponOrderVO.CouponPageInfo>
-     */
-    @PostMapping(value = "/orderInfo", consumes="application/json", produces="application/json")
-    @ApiOperation(value = "查询订单优惠券信息", notes = "CouponOrderVO.PageRequest")
-    public HttpResponseResult<CouponOrderVO.CouponPageInfo> queryCouponOrderPageInfo(@RequestBody CouponOrderVO.PageRequest request) {
-
-        // 校验请求参数
-        if (request.invalidRequestParam()) {
-            return failed("无效的请求参数");
-        }
-
-        // 订单优惠券信息
-        CouponOrderWrapper wrapper = couponInfoService.queryUserOrderCouponInfo(request.getUserId(),
-                CouponInfoQuery.CouponOrderQuery.from(request.jsonString()));
-
-        return succeed(JSON.parseObject(wrapper.jsonString(), CouponOrderVO.CouponPageInfo.class));
-    }
-
-    /**
-     * 更新订单优惠券信息
-     * @param request CouponOrderVO.CouponUpdateRequest
-     * @return HttpResponseResult<Boolean>
-     */
-    @PostMapping(value = "/orderUpdate", consumes="application/json", produces="application/json")
-    @ApiOperation(value = "更新订单优惠券信息", notes = "CouponOrderVO.CouponUpdateRequest")
-    public HttpResponseResult<Boolean> updateCouponOrderInfo(@RequestBody CouponOrderVO.CouponUpdateRequest request) {
-
-        // 校验请求参数
-        if (request.invalidRequestParam()) {
-            return failed("无效的请求参数");
-        }
-
-        // 更新受影响优惠券数据
-        int ret = couponInfoService.updateCouponOrderInfo(request.getUserId(), CouponOrderWrapper.from(request.jsonString()));
-
-        return succeed(ret > 0);
-    }
 }

+ 68 - 8
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/open/AdminClient.java

@@ -1,5 +1,8 @@
 package com.yonge.cooleshow.admin.controller.open;
 
+import com.alibaba.fastjson.JSON;
+import com.yonge.cooleshow.admin.io.request.coupon.CouponOrderVO;
+import com.yonge.cooleshow.api.feign.dto.CouponInfoApi;
 import com.yonge.cooleshow.api.feign.dto.EmployeeApi;
 import com.yonge.cooleshow.api.feign.dto.StudentApi;
 import com.yonge.cooleshow.api.feign.dto.TeacherApi;
@@ -7,23 +10,28 @@ import com.yonge.cooleshow.biz.dal.entity.Employee;
 import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
-import com.yonge.cooleshow.biz.dal.service.EmployeeService;
-import com.yonge.cooleshow.biz.dal.service.StudentService;
-import com.yonge.cooleshow.biz.dal.service.TeacherService;
-import com.yonge.cooleshow.biz.dal.service.UserFirstTimeService;
+import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.coupon.CouponCategoryEnum;
+import com.yonge.cooleshow.biz.dal.enums.coupon.CouponUseStateEnum;
+import com.yonge.cooleshow.biz.dal.queryInfo.CouponInfoQuery;
+import com.yonge.cooleshow.biz.dal.service.*;
+import com.yonge.cooleshow.biz.dal.wrapper.coupon.CouponOrderWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.ContractDto;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.enums.UserFirstTimeTypeEnum;
 import io.swagger.annotations.ApiOperation;
+import org.joda.time.DateTime;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import java.math.BigDecimal;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
 
 @RestController
 @RequestMapping("/open/adminClient")
@@ -42,6 +50,9 @@ public class AdminClient extends BaseController {
     @Autowired
     private EmployeeService employeeService;
 
+    @Autowired
+    private CouponInfoService couponInfoService;
+
     @GetMapping("/recordTime")
     public HttpResponseResult<Boolean> recordTime(
             @RequestParam("userId") Long userId,
@@ -80,4 +91,53 @@ public class AdminClient extends BaseController {
         return succeed(employeeApi);
     }
 
+    /**
+     * 订单优惠券信息
+     * @return HttpResponseResult<CouponOrderVO.CouponPageInfo>
+     */
+    @PostMapping(value = "/orderInfo", consumes="application/json", produces="application/json")
+    @ApiOperation(value = "查询订单优惠券信息", notes = "CouponOrderVO.PageRequest")
+    public HttpResponseResult<CouponInfoApi> queryCouponOrderPageInfo(@RequestParam Long userId, @RequestParam String issueIds, @RequestParam BigDecimal orderAmount, @RequestParam ClientEnum client) {
+
+        List<Long> collect = Arrays.stream(issueIds.split(","))
+                                   .map(Long::valueOf)
+                                   .collect(Collectors.toList());
+
+        CouponOrderVO.PageRequest request = new CouponOrderVO.PageRequest();
+        request.setClientType(client);
+        request.setCouponTypes(CouponCategoryEnum.getCategory("MALL"));
+        request.setIssueIds(collect);
+        request.setUseState(CouponUseStateEnum.USABLE);
+        request.setTimestamp(DateTime.now().getMillis());
+        request.setAmount(orderAmount.doubleValue());
+
+        // 订单优惠券信息
+        CouponOrderWrapper wrapper = couponInfoService.queryUserOrderCouponInfo(request.getUserId(),
+                                                                                CouponInfoQuery.CouponOrderQuery.from(request.jsonString()));
+        CouponInfoApi couponInfoApi = new CouponInfoApi();
+        couponInfoApi.setDiscountedPrices(BigDecimal.valueOf(wrapper.getDiscountedPrices()));
+
+        return succeed(couponInfoApi);
+    }
+
+    /**
+     * 更新订单优惠券信息
+     * @return HttpResponseResult<Boolean>
+     */
+    @PostMapping(value = "/orderUpdate", consumes="application/json", produces="application/json")
+    @ApiOperation(value = "更新订单优惠券信息")
+    public HttpResponseResult<Boolean> updateCouponOrderInfo(@RequestParam String couponIssueId,@RequestParam Boolean returnCoupon,@RequestParam String orderNo) {
+
+        CouponOrderVO.CouponUpdateRequest  request = new CouponOrderVO.CouponUpdateRequest();
+        request.setOrderNo(orderNo);
+        request.setReset(returnCoupon);
+        List<Long> collect = Arrays.stream(couponIssueId.split(","))
+                                   .map(Long::valueOf)
+                                   .collect(Collectors.toList());
+        request.setIssueIds(collect);
+        // 更新受影响优惠券数据
+        int ret = couponInfoService.updateCouponOrderInfo(CouponOrderWrapper.from(request.jsonString()));
+
+        return succeed(ret > 0);
+    }
 }

+ 2 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CouponInfoService.java

@@ -63,19 +63,17 @@ public interface CouponInfoService extends IService<CouponInfo> {
 
     /**
      * 更新用户订单优惠券状态
-     * @param userId 用户ID
      * @param wrapper CouponOrderWrapper
      * @return int 受影响的行数
      */
-    int updateUserOrderCouponInfo(Long userId, CouponOrderWrapper wrapper);
+    int updateUserOrderCouponInfo(CouponOrderWrapper wrapper);
 
     /**
      * 更新用户订单优惠券状态
-     * @param userId 用户ID
      * @param wrapper CouponOrderWrapper
      * @return int 受影响的行数
      */
-    int updateCouponOrderInfo(Long userId, CouponOrderWrapper wrapper);
+    int updateCouponOrderInfo( CouponOrderWrapper wrapper);
 
     /**
      * 新增优惠券库存量调整信息

+ 3 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CouponInfoServiceImp.java

@@ -232,12 +232,11 @@ public class CouponInfoServiceImp extends ServiceImpl<CouponInfoMapper, CouponIn
     /**
      * 更新用户订单优惠券状态
      *
-     * @param userId  用户ID
      * @param wrapper CouponOrderWrapper
      * @return int 受影响的行数
      */
     @Override
-    public int updateUserOrderCouponInfo(Long userId, CouponOrderWrapper wrapper) {
+    public int updateUserOrderCouponInfo( CouponOrderWrapper wrapper) {
 
         // 更新数据信息
         List<CouponOrderWrapper.CouponIssue> couponIssues = Lists.newArrayList();
@@ -246,7 +245,6 @@ public class CouponInfoServiceImp extends ServiceImpl<CouponInfoMapper, CouponIn
 
             // 重置订单优惠券使用状态
             List<CouponIssue> issues = couponIssueMapper.selectList(Wrappers.<CouponIssue>lambdaQuery()
-                            .eq(CouponIssue::getUserId, userId)
                     .eq(CouponIssue::getOrderNo, wrapper.getOrderNo()));
 
             for (CouponIssue item : issues) {
@@ -284,15 +282,14 @@ public class CouponInfoServiceImp extends ServiceImpl<CouponInfoMapper, CouponIn
     /**
      * 更新用户订单优惠券状态
      * 1、增加批量更新事务边界
-     * @param userId  用户ID
      * @param wrapper CouponOrderWrapper
      * @return int 受影响的行数
      */
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public int updateCouponOrderInfo(Long userId, CouponOrderWrapper wrapper) {
+    public int updateCouponOrderInfo(CouponOrderWrapper wrapper) {
 
-        return updateUserOrderCouponInfo(userId, wrapper);
+        return updateUserOrderCouponInfo(wrapper);
     }
 
     /**

+ 5 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CouponIssueServiceImp.java

@@ -126,6 +126,11 @@ public class CouponIssueServiceImp extends ServiceImpl<CouponIssueMapper, Coupon
     @Override
     @Transactional
     public Boolean withdrawCoupon(Long couponIssueId) {
+
+        // 测回退库存
+        CouponIssue couponIssue = getById(couponIssueId);
+        couponInfoService.updateStock(couponIssue.getCouponId(),1,InOrOutEnum.IN);
+
         return this.lambdaUpdate()
                 .eq(CouponIssue::getId,couponIssueId)
                 .set(CouponIssue::getStatus, EStatus.DISABLE.getValue())

+ 7 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java

@@ -22,6 +22,7 @@ import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
+import com.yonge.cooleshow.biz.dal.wrapper.coupon.CouponOrderWrapper;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.enums.PostStatusEnum;
@@ -100,6 +101,9 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
     @Autowired
     private TeacherService teacherService;
 
+    @Autowired
+    private CouponInfoService couponInfoService;
+
     @Override
     public CourseGroupDao getDao() {
         return this.baseMapper;
@@ -1206,6 +1210,9 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         for (String orderNo : orderNoList) {
             try {
                 userOrderRefundService.orderRefund(orderNo, "直播课成课失败退款");
+
+                //退还优惠券
+                couponInfoService.updateUserOrderCouponInfo(CouponOrderWrapper.builder().orderNo(orderNo).reset(true).build());
             } catch (Exception e) {
                 log.warn("直播课成课失败退款 退款失败,退款订单号 {}", orderNo);
                 log.error("直播课成课失败退款 退款失败", e.getCause());

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java

@@ -372,7 +372,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         // 更新用户订单优惠券使用状态
         if (CollectionUtils.isNotEmpty(couponOrderWrapper.getCouponInfos())) {
 
-            couponInfoService.updateUserOrderCouponInfo(orderReq.getUserId(), couponOrderWrapper.orderNo(orderReq.getOrderNo()));
+            couponInfoService.updateUserOrderCouponInfo(couponOrderWrapper.orderNo(orderReq.getOrderNo()));
         }
 
         List<UserOrderDetailVo> orderDetailList = orderVo.getOrderDetailList();
@@ -776,7 +776,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         baseMapper.updateById(userOrder);
 
         // 重置优惠券状态
-        couponInfoService.updateUserOrderCouponInfo(userOrder.getUserId(), CouponOrderWrapper.builder()
+        couponInfoService.updateUserOrderCouponInfo(CouponOrderWrapper.builder()
                         .orderNo(userOrder.getOrderNo())
                         .reset(true)
                 .build());

+ 8 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/io/request/CouponInfoVO.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.student.io.request;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.annotation.JSONField;
 import com.yonge.cooleshow.biz.dal.enums.coupon.CouponCategoryEnum;
 import com.yonge.cooleshow.biz.dal.enums.coupon.CouponUseStateEnum;
 import com.yonge.toolset.base.page.QueryInfo;
@@ -97,10 +98,17 @@ public class CouponInfoVO {
         private Long useTime;
 
         @ApiModelProperty("生效时间")
+        @JSONField(format = "yyyy-MM-dd")
         private Long startTime;
 
         @ApiModelProperty("失效时间")
+        @JSONField(format = "yyyy-MM-dd")
         private Long endTime;
+
+
+        @ApiModelProperty("可用品类 UNIVERSAL:全场通用 VIP:小酷Ai PIANO:云酷琴房 MALL:商场购物券 MUSIC:单曲点播券 SPARRING:陪练课购买券 LIVE:直播课购买券  VIDEO:视频课购买券")
+        private CouponCategoryEnum couponCategory;
+
     }
 
 

+ 1 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/MusicSheetController.java

@@ -144,6 +144,7 @@ public class MusicSheetController extends BaseController {
                 query.setState(YesOrNoEnum.NO);
                 query.setAuditStatus(AuthStatusEnum.PASS);
             }
+            query.setSubjectIds(null);
             query.setSourceType(SourceTypeEnum.TEACHER);
             query.setMyself(true);
         } else {

+ 5 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/io/request/CouponInfoVO.java

@@ -103,6 +103,11 @@ public class CouponInfoVO {
         @ApiModelProperty("失效时间")
         @JSONField(format = "yyyy-MM-dd")
         private Long endTime;
+
+
+        @ApiModelProperty("可用品类 UNIVERSAL:全场通用 VIP:小酷Ai PIANO:云酷琴房 MALL:商场购物券 MUSIC:单曲点播券 SPARRING:陪练课购买券 LIVE:直播课购买券  VIDEO:视频课购买券")
+        private CouponCategoryEnum couponCategory;
+
     }
 
     /**