From 7865a1010be2f95faab151d99ecdb095f44c2a08 Mon Sep 17 00:00:00 2001
From: lisy <linlangsur163@163.com>
Date: 星期五, 14 七月 2023 16:30:34 +0800
Subject: [PATCH] 修复了积分商城详情页面的门店列表查询;兑换支付todo

---
 cloud-server-account/src/main/java/com/dsh/account/controller/UseBenefitsController.java                 |   76 +++++
 cloud-server-activity/src/main/java/com/dsh/activity/feignclient/MerChandiseClient.java                  |   14 
 cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java                    |   10 
 cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java                       |    4 
 cloud-server-activity/src/main/java/com/dsh/activity/entity/UserPointsMerchandise.java                   |   15 +
 cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java             |   48 +++
 cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/ProductDetailsVo.java             |    7 
 cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/StoreResponse.java         |   15 +
 cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/PointsMerchandise.java     |    2 
 cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/MerChandiseStoreClient.java      |   17 +
 cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/StuAndStoreResponse.java   |   28 +
 cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/UserCoupon.java            |   49 +++
 cloud-server-activity/src/main/java/com/dsh/activity/controller/UserCouponController.java                |   30 +
 cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java                 |  228 ++++++++++++++
 cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/MerChandiseClient.java           |   20 +
 cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/UserConponClient.java            |    6 
 cloud-server-activity/src/main/java/com/dsh/activity/feignclient/MerChandiseStoreClient.java             |   17 +
 cloud-server-activity/src/main/java/com/dsh/activity/util/UUIDUtil.java                                  |  101 ++++++
 cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/ProductDetailsVo.java      |    8 
 cloud-server-account/src/main/java/com/dsh/account/controller/PaymentCallbackController.java             |   60 ++++
 cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java                          |    7 
 cloud-server-activity/src/main/java/com/dsh/activity/feignclient/UserConponClient.java                   |    8 
 cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/UserPointsMerchandise.java |   93 ++++++
 23 files changed, 837 insertions(+), 26 deletions(-)

diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/PaymentCallbackController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/PaymentCallbackController.java
index 84d79ba..f38af27 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/controller/PaymentCallbackController.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/controller/PaymentCallbackController.java
@@ -2,12 +2,14 @@
 
 
 import com.dsh.account.service.RechargeRecordsService;
+import com.dsh.account.service.TAppUserService;
 import com.dsh.account.service.TStudentService;
 import com.dsh.account.util.PayMoneyUtil;
 import com.dsh.account.util.ResultUtil;
 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.ResponseBody;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletRequest;
@@ -32,6 +34,9 @@
     private TStudentService tstuService;
     @Autowired
     private RechargeRecordsService recordsService;
+
+    @Autowired
+    private TAppUserService tappService;
 
     /**
      * 课包续课支付宝支付回调接口
@@ -129,4 +134,59 @@
         }
     }
 
+
+    /**
+     * 兑换商品支付的微信回调
+     * @param request
+     * @param response
+     */
+    @ResponseBody
+    @PostMapping("/base/appUser/addVipPaymentWeChatCallback")
+    public void addVipPaymentWeChatCallback(HttpServletRequest request, HttpServletResponse response){
+        try {
+            Map<String, String> map = payMoneyUtil.weixinpayCallback(request);
+            if(null != map){
+                String out_trade_no = map.get("out_trade_no");
+                String transaction_id = map.get("transaction_id");
+                String result = map.get("result");
+                ResultUtil resultUtil = tappService.exchangeAddPaymentCallback(out_trade_no, transaction_id,1);
+                if(resultUtil.getCode() == 200){
+                    PrintWriter out = response.getWriter();
+                    out.write(result);
+                    out.flush();
+                    out.close();
+                }
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+
+    /**
+     * 兑换商品支付的支付宝回调
+     * @param request
+     * @param response
+     */
+    @ResponseBody
+    @PostMapping("/base/appUser/addVipPaymentAliCallback")
+    public void addVipPaymentAliCallback(HttpServletRequest request, HttpServletResponse response){
+        try {
+            Map<String, String> map = payMoneyUtil.alipayCallback(request);
+            if(null != map){
+                String out_trade_no = map.get("out_trade_no");
+                String trade_no = map.get("trade_no");
+                ResultUtil resultUtil = tappService.exchangeAddPaymentCallback(out_trade_no, trade_no,2);
+                if(resultUtil.getCode() == 200){
+                    PrintWriter out = response.getWriter();
+                    out.write("success");
+                    out.flush();
+                    out.close();
+                }
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
 }
diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/UseBenefitsController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/UseBenefitsController.java
index cc1e617..76219ff 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/controller/UseBenefitsController.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/controller/UseBenefitsController.java
@@ -296,6 +296,82 @@
     }
 
 
+
+    /**
+     * 实体、门票、优惠券为默认门店|课包为默认学员
+     */
+    @ResponseBody
+    @PostMapping("/api/useBenefit/goodsOfCourseStore")
+    @ApiOperation(value = "积分商城-实体、门票、优惠券为默认门店|课包为默认学员", tags = {"APP-使用福利"})
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
+            @ApiImplicitParam(value = "纬度", name = "lat", required = false, dataType = "String"),
+            @ApiImplicitParam(value = "经度", name = "lon", required = false, dataType = "String"),
+            @ApiImplicitParam(value = "是否为课包商品(1=是 2=否)", name = "isCourse", required = true, dataType = "int"),
+            @ApiImplicitParam(value = "商品id", name = "pointsMerId", required = true, dataType = "int"),
+    })
+    public ResultUtil<StuAndStoreResponse> goodsOfCourseStore(String lat, String lon,Integer isCourse,Integer pointsMerId){
+        try {
+            Integer userIdFormRedis = tokenUtil.getUserIdFormRedis();
+            if(null == userIdFormRedis){
+                return ResultUtil.tokenErr();
+            }
+            return ResultUtil.success(tauService.queryAppUserDefaultStuAndStore(userIdFormRedis,pointsMerId,lat,lon,isCourse));
+        }catch (Exception e){
+            return ResultUtil.runErr();
+        }
+    }
+
+
+    /**
+     * 兑换详情(实体、门票、优惠券)中的门店列表
+     */
+    @ResponseBody
+    @PostMapping("/api/useBenefit/exchangeStoreIds")
+    @ApiOperation(value = "积分商城-兑换详情(实体、门票、优惠券)中的门店列表", tags = {"APP-使用福利"})
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
+            @ApiImplicitParam(value = "商品类型 1实物 2课包 3门票 4优惠券", name = "lat", required = true, dataType = "String"),
+            @ApiImplicitParam(value = "商品id", name = "pointsMerId", required = true, dataType = "int"),
+    })
+    public ResultUtil<List<StoreResponse>> getExchangeStoreIds( Integer goodsType,Integer pointsMerId){
+        try {
+            return ResultUtil.success(tauService.queryStoresOfExchange(goodsType,pointsMerId));
+        }catch (Exception e){
+            return ResultUtil.runErr();
+        }
+    }
+
+
+
+    /**
+     * 商品兑换
+     */
+    @ResponseBody
+    @PostMapping("/api/useBenefit/productRedemptionOperation")
+    @ApiOperation(value = "积分商城-商品兑换", tags = {"APP-使用福利"})
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
+            @ApiImplicitParam(value = "商品id", name = "goodId", required = true, dataType = "int"),
+            @ApiImplicitParam(value = "商品类型 1实物 2课包 3门票 4优惠券", name = "goodsType", required = true, dataType = "int"),
+            @ApiImplicitParam(value = "兑换数量", name = "nums", required = false, dataType = "int"),
+            @ApiImplicitParam(value = "兑换方式(1=积分,2=积分+现金)", name = "exchangeType", required = true, dataType = "int"),
+            @ApiImplicitParam(value = "现金支付方式(1=微信 2=支付宝)", name = "payType", required = false, dataType = "int"),
+            @ApiImplicitParam(value = "学员id列表", name = "stuIds", required = false),
+    })
+    public ResultUtil productRedemptionOperation(Integer goodId, Integer goodsType,Integer nums,Integer exchangeType,Integer payType,List<Integer> stuIds){
+        try {
+            Integer userIdFormRedis = tokenUtil.getUserIdFormRedis();
+            if(null == userIdFormRedis){
+                return ResultUtil.tokenErr();
+            }
+            return tauService.productRedemptionOperation(userIdFormRedis,goodId,goodsType,nums,exchangeType,payType);
+        }catch (Exception e){
+            return ResultUtil.runErr();
+        }
+    }
+
+
     /**
      * 积分明细
      */
diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/MerChandiseClient.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/MerChandiseClient.java
index ba61917..b7e381a 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/MerChandiseClient.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/MerChandiseClient.java
@@ -1,10 +1,7 @@
 package com.dsh.account.feignclient.activity;
 
 
-import com.dsh.account.feignclient.activity.model.CommodityRequest;
-import com.dsh.account.feignclient.activity.model.IntegralCommodity;
-import com.dsh.account.feignclient.activity.model.PointsMerchandise;
-import com.dsh.account.feignclient.activity.model.ProductDetailRequest;
+import com.dsh.account.feignclient.activity.model.*;
 import com.dsh.account.model.vo.userBenefitDetail.ExchangeDetailsResponse;
 import com.dsh.account.model.vo.userBenefitDetail.PointDetailsVo;
 import com.dsh.account.model.vo.userBenefitDetail.ProductDetailsVo;
@@ -36,4 +33,19 @@
 
     @PostMapping("/base/pointMerchars/getSpecificsOfGoods")
     public PointDetailsVo getSpecificsOfGoods(@RequestBody Integer speMercharsId);
+
+    @PostMapping("/base/pointMerchars/selectPointsMerchandiseById")
+    public PointsMerchandise selectPointsMerchandiseById(@RequestBody Integer speMercharsId);
+
+
+    @PostMapping("/base/pointMerchars/saveDetailsUserPointMercase")
+    public void saveDetailsUserPointMercase(@RequestBody UserPointsMerchandise merchandise);
+
+
+    @PostMapping("/base/pointMerchars/updateDetailsUserPointMercase")
+    public void updateDetailsUserPointMercase(@RequestBody UserPointsMerchandise merchandise);
+
+
+    @PostMapping("/base/pointMerchars/queryUserPointMerchaseByCode")
+    public List<UserPointsMerchandise> queryUserPointMerchaseByCode(@RequestBody String code);
 }
diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/MerChandiseStoreClient.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/MerChandiseStoreClient.java
new file mode 100644
index 0000000..3967755
--- /dev/null
+++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/MerChandiseStoreClient.java
@@ -0,0 +1,17 @@
+package com.dsh.account.feignclient.activity;
+
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
+
+@FeignClient(value = "mb-cloud-activity")
+public interface MerChandiseStoreClient {
+
+    @PostMapping("/base/pointMerchars/queryStoreIdsOfMerchandise")
+    List<Integer> queryPointMerStoreIds(@RequestBody Integer pointMerId);
+
+
+}
diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/UserConponClient.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/UserConponClient.java
index ec8eae1..9845e9c 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/UserConponClient.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/UserConponClient.java
@@ -1,6 +1,7 @@
 package com.dsh.account.feignclient.activity;
 
 import com.dsh.account.feignclient.activity.model.CommodityRequest;
+import com.dsh.account.feignclient.activity.model.UserCoupon;
 import com.dsh.account.model.dto.Coupon;
 import com.dsh.account.model.vo.sourceDetail.CouponStuAvailableVo;
 import org.springframework.cloud.openfeign.FeignClient;
@@ -25,4 +26,9 @@
     @PostMapping("/base/coupon/getRedeemedNums")
     public int getRedeemedQuantity(@RequestBody Integer id);
 
+    @PostMapping("/base/coupon/insertToAppuserCoupon")
+    public void insertToAppuserCoupon(@RequestBody UserCoupon coupon);
+
+    @PostMapping("/userCoupon/queryCouponOfStore")
+    List<Integer> getCouponStoreIds(@RequestBody Integer couponId);
 }
diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/PointsMerchandise.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/PointsMerchandise.java
index 84177d7..d915b1a 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/PointsMerchandise.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/PointsMerchandise.java
@@ -13,7 +13,7 @@
      */
     private Integer id;
     /**
-     * 类型(1=实体商品,2=课包商品,3=门票商品)
+     * 类型(1=实体商品,2=课包商品,3=门票商品,4=优惠券)
      */
     private Integer type;
     /**
diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/UserCoupon.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/UserCoupon.java
new file mode 100644
index 0000000..eabc8c2
--- /dev/null
+++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/UserCoupon.java
@@ -0,0 +1,49 @@
+package com.dsh.account.feignclient.activity.model;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 用户优惠券领取记录
+ * </p>
+ *
+ * @author jqs
+ * @since 2023-06-29
+ */
+@Data
+public class UserCoupon {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+    /**
+     * 优惠券id
+     */
+    private Integer couponId;
+    /**
+     * 用户id
+     */
+    private Integer userId;
+    /**
+     * 状态(1=待核销,2=已核销)
+     */
+    private Integer status;
+    /**
+     * 核销人员id
+     */
+    private Integer verificationUserId;
+    /**
+     * 核销时间
+     */
+    private Date verificationTime;
+    /**
+     * 领取时间
+     */
+    private Date insertTime;
+
+}
diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/UserPointsMerchandise.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/UserPointsMerchandise.java
new file mode 100644
index 0000000..4f9b6d5
--- /dev/null
+++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/UserPointsMerchandise.java
@@ -0,0 +1,93 @@
+package com.dsh.account.feignclient.activity.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 用户积分商品领取记录
+ * </p>
+ *
+ * @author jqs
+ * @since 2023-06-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("t_user_points_merchandise")
+public class UserPointsMerchandise extends Model<UserPointsMerchandise> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.INPUT)
+    private Long id;
+    /**
+     * 优惠券id
+     */
+    @TableField("pointsMerchandiseId")
+    private Integer pointsMerchandiseId;
+    /**
+     * 用户id
+     */
+    @TableField("userId")
+    private Integer userId;
+    /**
+     * 核销人员id
+     */
+    @TableField("verificationUserId")
+    private Integer verificationUserId;
+    /**
+     * 核销门店id
+     */
+    @TableField("verifiStoreId")
+    private Integer verifiStoreId;
+    /**
+     * 核销时间
+     */
+    @TableField("verificationTime")
+    private Date verificationTime;
+    /**
+     * 状态(1=待核销,2=已核销)
+     */
+    @TableField("status")
+    private Integer status;
+    /**
+     * 领取时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+    /**
+     * 现金支付方式(1=微信2支付宝)
+     */
+    @TableField("payType")
+    private Integer payType;
+    /**
+     * code
+     */
+    @TableField("code")
+    private String code;
+    /**
+     * orderNumber
+     */
+    @TableField("orderNumber")
+    private String orderNumber;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}
diff --git a/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/ProductDetailsVo.java b/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/ProductDetailsVo.java
index 52e811f..fa0b756 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/ProductDetailsVo.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/ProductDetailsVo.java
@@ -19,7 +19,7 @@
     @ApiModelProperty(value = "商品名称")
     private String goodName;
 
-    @ApiModelProperty(value = "适用人群")
+    @ApiModelProperty(value = "适用人群(1=全部用户,2=年度会员,3=已有学员用户)")
     private Integer belongsScope;
 
     @ApiModelProperty(value = "已兑换数量")
@@ -33,6 +33,9 @@
 
     @ApiModelProperty(value = "所需类型(积分/积分+现金)")
     private String requiredType;
+
+    @ApiModelProperty(value = "兑换方式(1=积分,2=积分+现金)")
+    private Integer exchangeType;
 
     @ApiModelProperty(value = "价值")
     private BigDecimal cost;
@@ -52,6 +55,9 @@
     @ApiModelProperty(value = "兑换说明")
     private String contents;
 
+    @ApiModelProperty(value = "兑换地点类型 1=全国 2=指定城市 3指定门店")
+    private Integer exchangeAddrType;
+
     @ApiModelProperty(value = "商品类型 1实物 2课包 3门票 4优惠券")
     private Integer goodType;
 
diff --git a/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/StoreResponse.java b/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/StoreResponse.java
new file mode 100644
index 0000000..ea119a2
--- /dev/null
+++ b/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/StoreResponse.java
@@ -0,0 +1,15 @@
+package com.dsh.account.model.vo.userBenefitDetail;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+@Data
+public class StoreResponse {
+
+    @ApiModelProperty(value = "门店id")
+    private Integer storeId;
+
+    @ApiModelProperty(value = "门店名称")
+    private String storeName;
+}
diff --git a/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/StuAndStoreResponse.java b/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/StuAndStoreResponse.java
new file mode 100644
index 0000000..13ee6ed
--- /dev/null
+++ b/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/StuAndStoreResponse.java
@@ -0,0 +1,28 @@
+package com.dsh.account.model.vo.userBenefitDetail;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class StuAndStoreResponse {
+
+    @ApiModelProperty(value = "门店id")
+    private Integer storeId;
+
+    @ApiModelProperty(value = "门店名称")
+    private String storeName;
+
+    @ApiModelProperty(value = "学员id")
+    private Integer stuId;
+
+    @ApiModelProperty(value = "学员姓名")
+    private String stuName;
+
+    @ApiModelProperty(value = "学员联系方式")
+    private String stuPhone;
+
+    @ApiModelProperty(value = "学员年龄")
+    private Integer stuAge;
+
+}
diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java b/cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java
index b8cf145..e626a91 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java
@@ -126,4 +126,11 @@
 
     ProductDetailsVo productDetails(Integer goodId, Integer goodsType );
 
+    StuAndStoreResponse queryAppUserDefaultStuAndStore(Integer userIdFormRedis ,Integer pointsMerId, String lat, String lon,Integer isCourse);
+
+    ResultUtil productRedemptionOperation(Integer userIdFormRedis, Integer goodId, Integer goodsType,Integer nums,Integer exchangeType,Integer payType);
+
+    ResultUtil exchangeAddPaymentCallback(String code, String orderNumber,Integer payType);
+
+    List<StoreResponse> queryStoresOfExchange(Integer goodsType,Integer pointsMerId);
 }
diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
index 5119fd7..840eb67 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
@@ -3,16 +3,12 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.dsh.account.entity.RechargeRecords;
-import com.dsh.account.entity.TAppUser;
-import com.dsh.account.entity.TStudent;
-import com.dsh.account.entity.VipPayment;
+import com.dsh.account.entity.*;
 import com.dsh.account.enums.RechargeRecordEnum;
 import com.dsh.account.feignclient.activity.MerChandiseClient;
+import com.dsh.account.feignclient.activity.MerChandiseStoreClient;
 import com.dsh.account.feignclient.activity.UserConponClient;
-import com.dsh.account.feignclient.activity.model.CommodityRequest;
-import com.dsh.account.feignclient.activity.model.PointsMerchandise;
-import com.dsh.account.feignclient.activity.model.ProductDetailRequest;
+import com.dsh.account.feignclient.activity.model.*;
 import com.dsh.account.feignclient.competition.DeductionCompetitionsClient;
 import com.dsh.account.feignclient.competition.model.PaymentCompetition;
 import com.dsh.account.feignclient.course.CoursePackageClient;
@@ -21,12 +17,8 @@
 import com.dsh.account.feignclient.other.ImgConfigClient;
 import com.dsh.account.feignclient.other.RechargeConfigClient;
 import com.dsh.account.feignclient.other.StoreClient;
-import com.dsh.account.feignclient.other.model.Store;
-import com.dsh.account.feignclient.other.model.TImgConfig;
-import com.dsh.account.mapper.RechargeRecordsMapper;
-import com.dsh.account.mapper.TAppUserMapper;
-import com.dsh.account.mapper.TStudentMapper;
-import com.dsh.account.mapper.VipPaymentMapper;
+import com.dsh.account.feignclient.other.model.*;
+import com.dsh.account.mapper.*;
 import com.dsh.account.model.AddAppUserVo;
 import com.dsh.account.model.JoinPlayPaiVo;
 import com.dsh.account.model.LoginSMSCodeVo;
@@ -50,6 +42,7 @@
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -113,6 +106,12 @@
 
     @Resource
     private DeductionCompetitionsClient deducClient;
+
+    @Resource
+    private UserIntegralChangesMapper uicMapper;
+
+    @Resource
+    private MerChandiseStoreClient mcsClient;
 
     @Override
     public ClassInfoVo queryUserOfStus(Integer id,String latitude,String longitude) {
@@ -748,4 +747,207 @@
         return mcClient.getGoodDetailsWithId(detailsVo);
     }
 
+    @Override
+    public StuAndStoreResponse queryAppUserDefaultStuAndStore(Integer userIdFormRedis,Integer pointsMerId, String lat, String lon,Integer isCourse) {
+        StuAndStoreResponse response = new StuAndStoreResponse();
+        if (isCourse == 1){
+            List<TStudent> tStudents = tsmapper.selectList(new QueryWrapper<TStudent>()
+                    .eq("appUserId",userIdFormRedis)
+                    .eq("state",1)
+                    .eq("isDefault",1));
+            if (tStudents.size() > 0 ){
+                response.setStuId(tStudents.get(0).getId());
+                response.setStuName(tStudents.get(0).getName());
+                response.setStuPhone(tStudents.get(0).getPhone());
+                response.setStuAge(DateUtil.age(tStudents.get(0).getBirthday()));
+            }
+            return response;
+        }else {
+            PointsMerchandise pointsMerchandise = mcClient.selectPointsMerchandiseById(pointsMerId);
+            if (pointsMerchandise.getType() == 4){
+                List<Integer> couponStoreIds = ucponClient.getCouponStoreIds(pointsMerId);
+                StoreDetailOfCourse courseOfStore = storeClient.getCourseOfStore(couponStoreIds.get(0));
+                if(ToolUtil.isNotEmpty(courseOfStore)){
+                    response.setStoreId(couponStoreIds.get(0));
+                    response.setStoreName(courseOfStore.getStoreName());
+                }
+            }else {
+                List<Integer> integers = mcsClient.queryPointMerStoreIds(pointsMerId);
+                StoreDetailOfCourse courseOfStore = storeClient.getCourseOfStore(integers.get(0));
+                if(ToolUtil.isNotEmpty(courseOfStore)){
+                    response.setStoreId(integers.get(0));
+                    response.setStoreName(courseOfStore.getStoreName());
+                }
+            }
+            return response;
+        }
+    }
+
+    @Override
+    public ResultUtil productRedemptionOperation(Integer userIdFormRedis, Integer goodId, Integer goodsType,Integer nums,Integer exchangeType,Integer payType) {
+        PointsMerchandise merchandise = mcClient.selectPointsMerchandiseById(goodId);
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+        String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
+        for (int i = 0; i < nums; i++) {
+            UserPointsMerchandise pointsMerchandise = new UserPointsMerchandise();
+            pointsMerchandise.setPointsMerchandiseId(goodId);
+            pointsMerchandise.setUserId(userIdFormRedis);
+            pointsMerchandise.setCode(code);
+            mcClient.saveDetailsUserPointMercase(pointsMerchandise);
+        }
+
+//        扣减积分
+        TAppUser tAppUser = this.baseMapper.selectById(userIdFormRedis);
+
+
+//        积分变更记录
+        UserIntegralChanges userIntegralChanges = new UserIntegralChanges();
+        userIntegralChanges.setAppUserId(userIdFormRedis);
+        userIntegralChanges.setOldIntegral(tAppUser.getIntegral());
+        userIntegralChanges.setType(2);
+        tAppUser.setIntegral(null == tAppUser.getIntegral() ? merchandise.getIntegral() : tAppUser.getIntegral() +merchandise.getIntegral());
+        userIntegralChanges.setNewIntegral(tAppUser.getIntegral());
+        userIntegralChanges.setInsertTime(new Date());
+        uicMapper.insert(userIntegralChanges);
+
+        this.baseMapper.updateById(tAppUser);
+//        现金支付
+        if (exchangeType == 1){
+//            积分兑换
+            switch (goodsType){
+                case 2:
+                    for (int i = 0; i < nums; i++) {
+                        TCoursePackagePayment packagePayment = new TCoursePackagePayment();
+//                        packagePayment.setAppUserId();
+                        // TODO: 2023/7/14
+                        paymentClient.savePaymentCoursePackage(packagePayment);
+                    }
+                    break;
+                case 4:
+                    for (int i = 0; i < nums; i++) {
+                        UserCoupon coupon = new UserCoupon();
+                        coupon.setCouponId(goodId);
+                        coupon.setUserId(userIdFormRedis);
+                        coupon.setStatus(1);
+                        coupon.setInsertTime(new Date());
+                        ucponClient.insertToAppuserCoupon(coupon);
+                    }
+                    break;
+                default:
+                    break;
+            }
+        }else {
+            switch (payType){
+                case 1:
+                    return WechatPayment(merchandise.getCash(),code);
+                case 2:
+                    return AlipayPayment(merchandise.getCash(),code);
+                default:
+                    break;
+            }
+        }
+
+        return null;
+    }
+
+
+    private ResultUtil AlipayPayment(BigDecimal cash, String code) {
+
+        return ResultUtil.success();
+    }
+
+    private ResultUtil WechatPayment(BigDecimal cash, String code) {
+
+        return ResultUtil.success();
+    }
+
+    @Override
+    public ResultUtil exchangeAddPaymentCallback(String code, String orderNumber,Integer payType) {
+        List<UserPointsMerchandise> userPointsMerchandises = mcClient.queryUserPointMerchaseByCode(code);
+        if (userPointsMerchandises.size() > 1){
+            for (int i = 0; i < userPointsMerchandises.size(); i++) {
+                userPointsMerchandises.get(i).setOrderNumber(orderNumber+ "-" + (i+1));
+                mcClient.updateDetailsUserPointMercase(userPointsMerchandises.get(i));
+
+                Integer pointsMerchandiseId = userPointsMerchandises.get(i).getPointsMerchandiseId();
+                PointsMerchandise pointsMerchandise = mcClient.selectPointsMerchandiseById(pointsMerchandiseId);
+                switch (pointsMerchandise.getType()){
+                    case 2:
+                        TCoursePackagePayment packagePayment = new TCoursePackagePayment();
+
+//                        packagePayment.setAppUserId();
+
+                        paymentClient.savePaymentCoursePackage(packagePayment);
+                        break;
+                    case 4:
+                        UserCoupon coupon = new UserCoupon();
+                        coupon.setCouponId(userPointsMerchandises.get(0).getPointsMerchandiseId());
+                        coupon.setUserId(userPointsMerchandises.get(0).getUserId());
+                        coupon.setStatus(1);
+                        coupon.setInsertTime(new Date());
+                        ucponClient.insertToAppuserCoupon(coupon);
+                        break;
+                    default:
+                        break;
+                }
+            }
+        }else {
+            userPointsMerchandises.get(0).setOrderNumber(orderNumber);
+            mcClient.updateDetailsUserPointMercase(userPointsMerchandises.get(0));
+            Integer pointsMerchandiseId = userPointsMerchandises.get(0).getPointsMerchandiseId();
+            PointsMerchandise pointsMerchandise = mcClient.selectPointsMerchandiseById(pointsMerchandiseId);
+            switch (pointsMerchandise.getType()){
+                case 2:
+                    TCoursePackagePayment packagePayment = new TCoursePackagePayment();
+
+//                    packagePayment.setAppUserId();
+
+                    paymentClient.savePaymentCoursePackage(packagePayment);
+                    break;
+                case 4:
+                    UserCoupon coupon = new UserCoupon();
+                    coupon.setCouponId(userPointsMerchandises.get(0).getPointsMerchandiseId());
+                    coupon.setUserId(userPointsMerchandises.get(0).getUserId());
+                    coupon.setStatus(1);
+                    coupon.setInsertTime(new Date());
+                    ucponClient.insertToAppuserCoupon(coupon);
+                    break;
+                default:
+                    break;
+            }
+
+        }
+        return ResultUtil.success();
+    }
+
+    @Override
+    public List<StoreResponse> queryStoresOfExchange(Integer goodsType,Integer pointsMerId) {
+        List<StoreResponse> responses = new ArrayList<>();
+        if (goodsType == 4){
+            List<Integer> couponStoreIds = ucponClient.getCouponStoreIds(pointsMerId);
+            for (Integer couponStoreId : couponStoreIds) {
+                StoreDetailOfCourse courseOfStore = storeClient.getCourseOfStore(couponStoreId);
+                if(ToolUtil.isNotEmpty(courseOfStore)){
+                    StoreResponse response = new StoreResponse();
+                    response.setStoreId(couponStoreId);
+                    response.setStoreName(courseOfStore.getStoreName());
+                    responses.add(response);
+                }
+            }
+        }else {
+            List<Integer> integers = mcsClient.queryPointMerStoreIds(pointsMerId);
+            for (Integer integer : integers) {
+                StoreDetailOfCourse courseOfStore = storeClient.getCourseOfStore(integer);
+                if(ToolUtil.isNotEmpty(courseOfStore)){
+                    StoreResponse response = new StoreResponse();
+                    response.setStoreId(integer);
+                    response.setStoreName(courseOfStore.getStoreName());
+                    responses.add(response);
+                }
+            }
+        }
+        return responses;
+    }
+
+
 }
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java b/cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java
index a3feebf..ab641e5 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java
@@ -155,4 +155,14 @@
                 .eq("couponId",id));
     }
 
+
+    @PostMapping("/base/coupon/insertToAppuserCoupon")
+    public void insertToAppuserCoupon(@RequestBody UserCoupon coupon){
+        ucService.save(coupon);
+    }
+
+
+
+
+
 }
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java b/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java
index 26c9023..898ee0c 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java
@@ -14,6 +14,7 @@
 import com.dsh.activity.service.*;
 import com.dsh.activity.util.GDMapGeocodingUtil;
 import com.dsh.activity.util.StrUtils;
+import com.dsh.activity.util.TokenUtil;
 import com.dsh.activity.util.ToolUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -23,6 +24,7 @@
 
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @RestController
 @RequestMapping("")
@@ -58,6 +60,9 @@
 
     @Autowired
     private CouponStoreService cstoreService;
+
+    @Autowired
+    private TokenUtil tokenUtil;
 
 
     @PostMapping("/base/pointMerchars/convertGoods")
@@ -121,7 +126,7 @@
         switch (detailRequest.getGoodsType()){
             case 2:
 //                课包
-                CoursePackage coursePackage = cpClient.queryCoursePackageById(detailRequest.getGoodId());
+                CoursePackage coursePackage = cpClient.queryCoursePackageById(merchandise.getCoursePackageId());
 
                 detailsVo.setGoodId(coursePackage.getId());
                 List<String> list1 = Arrays.asList(StrUtils.splitStr2StrArr(coursePackage.getDetailDrawing(), ","));
@@ -144,16 +149,21 @@
                 detailsVo.setResidueNum(merchandise.getQuantityIssued() - coursePackageNums);
                 detailsVo.setPerLimit(merchandise.getPickUpQuantity());
                 if (merchandise.getRedemptionMethod() == 1){
+                    detailsVo.setExchangeType(1);
                     detailsVo.setRequiredType(merchandise.getIntegral() + "积分");
                 }else {
+                    detailsVo.setExchangeType(2);
                     detailsVo.setRequiredType(merchandise.getIntegral() + "积分+¥"+merchandise.getCash());
                 }
                 detailsVo.setCost(merchandise.getPrice());
                 if (merchandise.getUseScope() == 1){
+                    detailsVo.setExchangeAddrType(1);
                     detailsVo.setBelongs("全国通用");
                 }else if (merchandise.getUseScope() == 2){
+                    detailsVo.setExchangeAddrType(2);
                     detailsVo.setBelongs(merchandise.getProvince()+"|"+merchandise.getCity() + "用户可用");
                 }else {
+                    detailsVo.setExchangeAddrType(3);
                     List<PointsMerchandiseStore> list = pmdstoService.list(new QueryWrapper<PointsMerchandiseStore>()
                             .eq("pointsMerchandiseId",merchandise.getId() ));
                     PointsMerchandiseStore pointsMerchandiseStore = list.get(0);
@@ -394,4 +404,40 @@
         return detailsVo;
     }
 
+
+    @PostMapping("/base/pointMerchars/selectPointsMerchandiseById")
+    public PointsMerchandise selectPointsMerchandiseById(@RequestBody Integer speMercharsId){
+        return pmdsService.getById(speMercharsId);
+    }
+
+
+    @PostMapping("/base/pointMerchars/saveDetailsUserPointMercase")
+    public void saveDetailsUserPointMercase(@RequestBody UserPointsMerchandise merchandise){
+        upmseService.save(merchandise);
+    }
+
+
+    @PostMapping("/base/pointMerchars/updateDetailsUserPointMercase")
+    public void updateDetailsUserPointMercase(@RequestBody UserPointsMerchandise merchandise){
+        upmseService.updateById(merchandise);
+    }
+
+    @PostMapping("/base/pointMerchars/queryUserPointMerchaseByCode")
+    public List<UserPointsMerchandise> queryUserPointMerchaseByCode(@RequestBody String code){
+        return upmseService.list(new QueryWrapper<UserPointsMerchandise>()
+                .eq("code",code));
+    }
+
+
+    @PostMapping("/base/pointMerchars/queryStoreIdsOfMerchandise")
+    public List<Integer> queryPointMerStoreIds(@RequestBody Integer pointMerId){
+        List<Integer> storeIds = new ArrayList<>();
+        List<PointsMerchandiseStore> list = pmdstoService.list(new QueryWrapper<PointsMerchandiseStore>()
+                .eq("pointsMerchandiseId",pointMerId));
+        if (list.size() >  0){
+            storeIds = list.stream().map(PointsMerchandiseStore::getStoreId).collect(Collectors.toList());
+        }
+        return storeIds;
+    }
+
 }
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/controller/UserCouponController.java b/cloud-server-activity/src/main/java/com/dsh/activity/controller/UserCouponController.java
index cfb00ef..49d2b80 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/controller/UserCouponController.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/controller/UserCouponController.java
@@ -2,9 +2,11 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.dsh.activity.entity.Coupon;
+import com.dsh.activity.entity.CouponStore;
 import com.dsh.activity.entity.UserCoupon;
 import com.dsh.activity.feignclient.model.CouponStuAvailableVo;
 import com.dsh.activity.model.CouponListVo;
+import com.dsh.activity.service.CouponStoreService;
 import com.dsh.activity.service.ICouponService;
 import com.dsh.activity.service.UserCouponService;
 import com.dsh.activity.util.ResultUtil;
@@ -29,9 +31,6 @@
 public class UserCouponController {
 
     @Autowired
-    private UserCouponService uconService;
-
-    @Autowired
     private ICouponService cService;
 
     @Autowired
@@ -39,6 +38,10 @@
 
     @Autowired
     private UserCouponService userCouponService;
+
+
+    @Autowired
+    private CouponStoreService csServie;
 
 
 
@@ -50,7 +53,7 @@
 
         List<CouponStuAvailableVo> availableVos = new ArrayList<>();
 
-        List<UserCoupon> list = uconService.list(new QueryWrapper<UserCoupon>()
+        List<UserCoupon> list = userCouponService.list(new QueryWrapper<UserCoupon>()
                 .eq("userId", appUserId)
                 .eq("status",1));
         if (list.size() > 0){
@@ -127,4 +130,23 @@
             return null;
         }
     }
+    
+    
+    
+    @PostMapping("/userCoupon/queryCouponOfStore")
+    public List<Integer> getCouponStoreIds(@RequestBody Integer couponId){
+        try {
+            List<Integer> storeIds = new ArrayList<>();
+            List<CouponStore> list = csServie.list(new QueryWrapper<CouponStore>()
+                    .eq("couponId",couponId));
+            if (list.size() > 0 ){
+                storeIds = list.stream().map(CouponStore::getStoreId).collect(Collectors.toList());
+            }
+            return storeIds;
+        }catch (Exception e){
+            e.printStackTrace();
+            return null;
+        }
+    }
+    
 }
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/entity/UserPointsMerchandise.java b/cloud-server-activity/src/main/java/com/dsh/activity/entity/UserPointsMerchandise.java
index 81c510f..0a663d1 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/entity/UserPointsMerchandise.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/entity/UserPointsMerchandise.java
@@ -68,6 +68,21 @@
      */
     @TableField("insertTime")
     private Date insertTime;
+    /**
+     * 现金支付方式(1=微信2支付宝)
+     */
+    @TableField("payType")
+    private Integer payType;
+    /**
+     * code
+     */
+    @TableField("code")
+    private String code;
+    /**
+     * orderNumber
+     */
+    @TableField("orderNumber")
+    private String orderNumber;
 
 
     @Override
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/MerChandiseClient.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/MerChandiseClient.java
index d6937db..2ffb151 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/MerChandiseClient.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/MerChandiseClient.java
@@ -2,6 +2,7 @@
 
 
 import com.dsh.activity.entity.PointsMerchandise;
+import com.dsh.activity.entity.UserPointsMerchandise;
 import com.dsh.activity.feignclient.model.*;
 import com.dsh.activity.model.request.CommodityRequest;
 import org.springframework.cloud.openfeign.FeignClient;
@@ -34,4 +35,17 @@
     public PointDetailsVo getSpecificsOfGoods(@RequestBody Integer speMercharsId);
 
 
+    @PostMapping("/base/pointMerchars/selectPointsMerchandiseById")
+    public PointsMerchandise selectPointsMerchandiseById(@RequestBody Integer speMercharsId);
+
+
+    @PostMapping("/base/pointMerchars/saveDetailsUserPointMercase")
+    public void saveDetailsUserPointMercase(@RequestBody UserPointsMerchandise merchandise);
+
+    @PostMapping("/base/pointMerchars/updateDetailsUserPointMercase")
+    public void updateDetailsUserPointMercase(@RequestBody UserPointsMerchandise merchandise);
+
+    @PostMapping("/base/pointMerchars/queryUserPointMerchaseByCode")
+    public List<UserPointsMerchandise> queryUserPointMerchaseByCode(@RequestBody String code);
+
 }
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/MerChandiseStoreClient.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/MerChandiseStoreClient.java
new file mode 100644
index 0000000..515328e
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/MerChandiseStoreClient.java
@@ -0,0 +1,17 @@
+package com.dsh.activity.feignclient;
+
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
+
+@FeignClient(value = "mb-cloud-activity")
+public interface MerChandiseStoreClient {
+
+    @PostMapping("/base/pointMerchars/queryStoreIdsOfMerchandise")
+    List<Integer> queryPointMerStoreIds(@RequestBody Integer pointMerId);
+
+
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/UserConponClient.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/UserConponClient.java
index 496b9c8..5ded3e7 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/UserConponClient.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/UserConponClient.java
@@ -1,6 +1,7 @@
 package com.dsh.activity.feignclient;
 
 import com.dsh.activity.entity.Coupon;
+import com.dsh.activity.entity.UserCoupon;
 import com.dsh.activity.feignclient.model.CouponStuAvailableVo;
 import com.dsh.activity.model.request.CommodityRequest;
 import org.springframework.cloud.openfeign.FeignClient;
@@ -24,4 +25,11 @@
     @PostMapping("/base/coupon/getRedeemedNums")
     public int getRedeemedQuantity(@RequestBody Integer id);
 
+
+    @PostMapping("/base/coupon/insertToAppuserCoupon")
+    public void insertToAppuserCoupon(@RequestBody UserCoupon coupon);
+
+
+    @PostMapping("/userCoupon/queryCouponOfStore")
+    List<Integer> getCouponStoreIds(@RequestBody Integer couponId);
 }
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/ProductDetailsVo.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/ProductDetailsVo.java
index db38c2a..a64ef25 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/ProductDetailsVo.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/ProductDetailsVo.java
@@ -34,6 +34,10 @@
     @ApiModelProperty(value = "所需类型(积分/积分+现金)")
     private String requiredType;
 
+
+    @ApiModelProperty(value = "兑换方式(1=积分,2=积分+现金)")
+    private Integer exchangeType;
+
     @ApiModelProperty(value = "价值")
     private BigDecimal cost;
 
@@ -52,6 +56,9 @@
     @ApiModelProperty(value = "兑换说明")
     private String contents;
 
+    @ApiModelProperty(value = "兑换地点类型 1=全国 2=指定城市 3指定门店")
+    private Integer exchangeAddrType;
+
     @ApiModelProperty(value = "商品类型 1实物 2课包 3门票 4优惠券")
     private Integer goodType;
 
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/util/UUIDUtil.java b/cloud-server-activity/src/main/java/com/dsh/activity/util/UUIDUtil.java
new file mode 100644
index 0000000..7390847
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/util/UUIDUtil.java
@@ -0,0 +1,101 @@
+package com.dsh.activity.util;
+
+
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.UUID;
+
+/**
+ * 定义生成随机码的工具类
+ */
+public class UUIDUtil {
+
+    private int i = 1;
+
+
+    /**
+     * 定义生成原生的UUID随机码
+     * @return
+     */
+    public static String getNativeUUID(){
+        return UUID.randomUUID().toString();
+    }
+
+
+    /**
+     * 生成32位随机码
+     * @return
+     */
+    public static String getRandomCode(){
+        return UUIDUtil.getNativeUUID().replaceAll("-", "");
+    }
+
+
+    /**
+     * 获取给定长度的随机码
+     * @param num
+     * @return
+     * @throws Exception
+     */
+    public static String getRandomCode(Integer num) throws Exception{
+        String str = null;
+        if(0 < num){
+            if(num % 32 > 0){
+                Integer s = num / 32;
+                Integer l = num % 32;
+                StringBuffer sb = new StringBuffer();
+                for(int i = 0; i < s; i++){
+                    sb.append(UUIDUtil.getRandomCode());
+                }
+                sb.append(UUIDUtil.getRandomCode().substring(0, l));
+                str = sb.toString();
+            }else if(num % 32 == 0){
+                Integer s = num / 32;
+                StringBuffer sb = new StringBuffer();
+                for(int i = 0; i < s; i++){
+                    sb.append(UUIDUtil.getRandomCode());
+                }
+                str = sb.toString();
+            }else{
+                str = UUIDUtil.getRandomCode().substring(0, num);
+            }
+        }else{
+            throw new Exception("参数只能大于0");
+        }
+        return str;
+    }
+
+
+    /**
+     * 获取根据当前时间的字符串数据
+     * @return
+     */
+    public synchronized static String getTimeStr(){
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddhhmmssS");
+        return simpleDateFormat.format(new Date());
+    }
+
+
+    /**
+     * @Description: 获取数字随机码
+     * @Author pzb
+     * @Date 2021/8/11 16:52
+     * @Param
+     * @Return
+     * @Exception
+     */
+    public static String getNumberRandom(Integer num){
+        if(null == num){
+            num = 32;
+        }
+        StringBuffer sb = new StringBuffer();
+        for(int i = 0; i < num; i++){
+            sb.append(Double.valueOf(Math.random() * 10).intValue());
+        }
+        return sb.toString();
+    }
+
+
+
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java b/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java
index 8c176a1..1e30a7c 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java
@@ -52,7 +52,7 @@
     @TableField("coursePackageId")
     private Integer coursePackageId;
     /**
-     * 支付方式(1=微信,2=支付宝,3=玩湃币)
+     * 支付方式(1=微信,2=支付宝,3=玩湃币,4=积分,5=积分+微信,6=积分+支付宝)
      */
     @TableField("payType")
     private Integer payType;
@@ -77,7 +77,7 @@
     @TableField("cashPayment")
     private BigDecimal cashPayment;
     /**
-     * 玩湃币价格
+     * 玩湃币价格/积分
      */
     @TableField("playPaiCoin")
     private Integer playPaiCoin;

--
Gitblit v1.7.1