puzhibing
2023-07-17 0f5d963e3c906983574fe537b0956e96628087a9
Merge remote-tracking branch 'origin/master'
24个文件已修改
9个文件已添加
1091 ■■■■■ 已修改文件
cloud-server-account/src/main/java/com/dsh/account/controller/PaymentCallbackController.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/controller/UseBenefitsController.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/MerChandiseClient.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/MerChandiseStoreClient.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/UserConponClient.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/PointsMerchandise.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/UserCoupon.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/UserPointsMerchandise.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePackageConfigClient.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/CoursePackagePaymentConfig.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/TCoursePackagePayment.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/ProductDetailsVo.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/StoreResponse.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/StuAndStoreResponse.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/impl/RechargeRecordsServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java 386 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/controller/UserCouponController.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/entity/PointsMerchandise.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/entity/UserPointsMerchandise.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/MerChandiseClient.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/MerChandiseStoreClient.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/UserConponClient.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/model/CoursePackage.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/ProductDetailsVo.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/util/UUIDUtil.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java 补丁 | 查看 | 原始文档 | blame | 历史
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/pointMer/exchangeGoodPaymentWeChatCallback")
    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/pointMer/exchangeGoodPaymentAliCallback")
    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();
        }
    }
}
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,stuIds);
        }catch (Exception e){
            return ResultUtil.runErr();
        }
    }
    /**
     * 积分明细
     */
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);
}
cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/MerChandiseStoreClient.java
New file
@@ -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);
}
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);
}
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;
    /**
@@ -104,5 +104,9 @@
     * 添加时间
     */
    private Date insertTime;
    /**
     * 课包支付配置id
     */
    private Integer coursePackageConfigId;
}
cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/UserCoupon.java
New file
@@ -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;
}
cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/UserPointsMerchandise.java
New file
@@ -0,0 +1,69 @@
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 UserPointsMerchandise{
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    private Long id;
    /**
     * 优惠券id
     */
    private Integer pointsMerchandiseId;
    /**
     * 用户id
     */
    private Integer userId;
    /**
     * 核销人员id
     */
    private Integer verificationUserId;
    /**
     * 核销门店id
     */
    private Integer verifiStoreId;
    /**
     * 核销时间
     */
    private Date verificationTime;
    /**
     * 状态(1=待核销,2=已核销)
     */
    private Integer status;
    /**
     * 领取时间
     */
    private Date insertTime;
    /**
     * 现金支付方式(1=微信2支付宝)
     */
    private Integer payType;
    /**
     * 现金支付的交易凭证
     */
    private String code;
    /**
     * 现金支付的交易订单号
     */
    private String orderNumber;
    /**
     * 现金的支付状态(1=待支付 2=已支付)
     */
    private Integer payStatus;
}
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePackageConfigClient.java
New file
@@ -0,0 +1,18 @@
package com.dsh.account.feignclient.course;
import com.dsh.account.feignclient.course.model.CoursePackagePaymentConfig;
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-course")
public interface CoursePackageConfigClient {
    @PostMapping("/base/coursePack/getCoursePackageConfig")
    List<CoursePackagePaymentConfig> getCourseConfigList(@RequestBody Integer coursePackageId);
}
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java
@@ -55,4 +55,8 @@
    @PostMapping("/base/coursePack/obtainStudentClassDetails")
    List<RecordAppoint> obtainStudentClassDetailsData(@RequestBody Integer stuId);
    @PostMapping("/base/coursePack/getCoursePackagePaymentOfCode")
    List<TCoursePackagePayment> getCoursePackagePaymentOfCode(@RequestBody String code);
}
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/CoursePackagePaymentConfig.java
New file
@@ -0,0 +1,31 @@
package com.dsh.account.feignclient.course.model;
import lombok.Data;
/**
 * @author zhibing.pu
 * @date 2023/6/29 10:42
 */
@Data
public class CoursePackagePaymentConfig {
    /**
     * 主键
     */
    private Integer id;
    /**
     * 课包id
     */
    private Integer coursePackageId;
    /**
     * 课时数
     */
    private Integer classHours;
    /**
     * 现金支付价格
     */
    private Double cashPayment;
    /**
     * 玩湃币价格
     */
    private Integer playPaiCoin;
}
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/TCoursePackagePayment.java
@@ -25,7 +25,7 @@
     */
    private Integer coursePackageId;
    /**
     * 支付方式(1=微信 2=支付宝 3=玩湃币)
     * 支付方式(1=微信,2=支付宝,3=玩湃币,4=积分,5=积分+微信,6=积分+支付宝)
     */
    private Integer payType;
    /**
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;
cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/StoreResponse.java
New file
@@ -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;
}
cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/StuAndStoreResponse.java
New file
@@ -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;
}
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,List<Integer> stuIds);
    ResultUtil exchangeAddPaymentCallback(String code, String orderNumber,Integer payType);
    List<StoreResponse> queryStoresOfExchange(Integer goodsType,Integer pointsMerId);
}
cloud-server-account/src/main/java/com/dsh/account/service/impl/RechargeRecordsServiceImpl.java
@@ -108,6 +108,8 @@
            }
        }
//            3.场地预约
        // TODO: 2023/7/14  充值明细的场地预约查询
//            4.智慧球场
//            5.充值
cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
@@ -3,30 +3,25 @@
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;
import com.dsh.account.feignclient.course.CoursePackageConfigClient;
import com.dsh.account.feignclient.course.CoursePaymentClient;
import com.dsh.account.feignclient.course.model.*;
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.StoreDetailOfCourse;
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.mapper.*;
import com.dsh.account.model.AddAppUserVo;
import com.dsh.account.model.JoinPlayPaiVo;
import com.dsh.account.model.LoginSMSCodeVo;
@@ -50,6 +45,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 +109,18 @@
    @Resource
    private DeductionCompetitionsClient deducClient;
    @Resource
    private UserIntegralChangesMapper uicMapper;
    @Resource
    private MerChandiseStoreClient mcsClient;
    @Resource
    private CoursePackageConfigClient cpconClient;
    @Autowired
    private PayMoneyUtil payMoneyUtil;
    @Override
    public ClassInfoVo queryUserOfStus(Integer id,String latitude,String longitude) {
@@ -537,6 +545,8 @@
            }
        }
//            4.场地预约
        // TODO: 2023/7/14 账单的场地预约查询
//            5.智慧球场
//            6.年度会员
        List<VipPayment> vipPayments = vipPaymentMapper.selectList(new QueryWrapper<VipPayment>()
@@ -748,4 +758,358 @@
        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,List<Integer> stuIds) {
        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 == 2) {
            switch (goodsType) {
                case 2:
                    for (int i = 0; i < stuIds.size(); i++) {
                        List<CoursePackagePaymentConfig> courseConfigList = cpconClient.getCourseConfigList(merchandise.getCoursePackageId());
                        TCoursePackagePayment packagePayment = new TCoursePackagePayment();
                        packagePayment.setAppUserId(userIdFormRedis);
                        packagePayment.setStudentId(stuIds.get(i));
                        packagePayment.setCoursePackageId(merchandise.getCoursePackageId());
                        for (CoursePackagePaymentConfig coursePackagePaymentConfig : courseConfigList) {
                            if (Objects.equals(coursePackagePaymentConfig.getId(),merchandise.getCoursePackageConfigId())){
                                packagePayment.setClassHours(coursePackagePaymentConfig.getClassHours());
                                packagePayment.setTotalClassHours(coursePackagePaymentConfig.getClassHours());
                                packagePayment.setLaveClassHours(coursePackagePaymentConfig.getClassHours());
                                packagePayment.setOriginalPrice(coursePackagePaymentConfig.getCashPayment());
                                break;
                            }
                        }
                        packagePayment.setPlayPaiCoin(merchandise.getIntegral());
                        packagePayment.setAbsencesNumber(0);
                        packagePayment.setPayUserType(1);
                        packagePayment.setPayStatus(1);
                        packagePayment.setPayUserId(userIdFormRedis);
                        packagePayment.setStatus(1);
                        packagePayment.setState(1);
                        packagePayment.setInsertTime(new Date());
                        packagePayment.setCode(code);
                        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;
            }
            switch (payType){
                case 1:
                    try {
                        if (merchandise.getType() == 2){
                            return WechatPayment(merchandise.getCash().multiply(new BigDecimal(stuIds.size())),code);
                        }else {
                            return WechatPayment(merchandise.getCash().multiply(new BigDecimal(nums)),code);
                        }
                    }catch (Exception e){
                        return ResultUtil.runErr();
                    }
                case 2:
                    if (merchandise.getType() == 2){
                        AlipayPayment(merchandise.getCash().multiply(new BigDecimal(stuIds.size())),code);
                    }else {
                        AlipayPayment(merchandise.getCash().multiply(new BigDecimal(nums)),code);
                    }
                    break;
                default:
                    break;
            }
        }
        return ResultUtil.success();
    }
    private ResultUtil AlipayPayment(BigDecimal cash, String code) {
        ResultUtil alipay = payMoneyUtil.alipay("课包续费", "", "", code, cash.toString(),
                "/base/pointMer/exchangeGoodPaymentAliCallback");
        if(alipay.getCode() == 200){
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        int num = 1;
                        int wait = 0;
                        while (num <= 10){
                            int min = 5000;
                            wait += (min * num);
                            Thread.sleep(wait);
                            List<UserPointsMerchandise> userPointsMerchandises = mcClient.queryUserPointMerchaseByCode(code);
                            if(userPointsMerchandises.get(0).getPayStatus() == 2){
                                break;
                            }
                            ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryALIOrder(code);
                            if(resultUtil.getCode() == 200 && userPointsMerchandises.get(0).getPayStatus() == 1){
                                /**
                                 * WAIT_BUYER_PAY(交易创建,等待买家付款)、
                                 * TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、
                                 * TRADE_SUCCESS(交易支付成功)、
                                 * TRADE_FINISHED(交易结束,不可退款)
                                 */
                                Map<String, String> data1 = resultUtil.getData();
                                String s = data1.get("tradeStatus");
                                String tradeNo = data1.get("tradeNo");
//                                if("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10){
//                                    coursePackagePayment.setState(3);
//                                    couPayClient.delPaymentCoursePackage(coursePackagePayment.getId());
//                                    break;
//                                }
                                if("TRADE_SUCCESS".equals(s)){
                                    for (UserPointsMerchandise userPointsMerchandise : userPointsMerchandises) {
                                        userPointsMerchandise.setPayStatus(2);
                                        userPointsMerchandise.setOrderNumber(tradeNo);
                                        userPointsMerchandise.setPayType(2);
                                        mcClient.updateDetailsUserPointMercase(userPointsMerchandise);
                                    }
                                    break;
                                }
                                if("WAIT_BUYER_PAY".equals(s)){
                                    num++;
                                }
                            }
                        }
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            }).start();
        }
        return alipay;
    }
    private ResultUtil WechatPayment(BigDecimal cash, String code) throws Exception {
        ResultUtil weixinpay = payMoneyUtil.weixinpay("课包", "", code, cash.toString(),
                "/base/pointMer/exchangeGoodPaymentWeChatCallback", "APP", "");
        if(weixinpay.getCode() == 200){
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        int num = 1;
                        int wait = 0;
                        while (num <= 10){
                            int min = 5000;
                            wait += (min * num);
                            Thread.sleep(wait);
                            List<UserPointsMerchandise> userPointsMerchandises = mcClient.queryUserPointMerchaseByCode(code);
                            if(userPointsMerchandises.get(0).getPayStatus() == 2){
                                break;
                            }
                            ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryWXOrder(code, "");
                            if(resultUtil.getCode() == 200 && userPointsMerchandises.get(0).getPayStatus() == 1){
                                /**
                                 * SUCCESS—支付成功,
                                 * REFUND—转入退款,
                                 * NOTPAY—未支付,
                                 * CLOSED—已关闭,
                                 * REVOKED—已撤销(刷卡支付),
                                 * USERPAYING--用户支付中,
                                 * PAYERROR--支付失败(其他原因,如银行返回失败)
                                 */
                                Map<String, String> data1 = resultUtil.getData();
                                String s = data1.get("trade_state");
                                String transaction_id = data1.get("transaction_id");
//                                if("REFUND".equals(s) || "NOTPAY".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10){
//                                    coursePackagePayment.setState(3);
//                                    couPayClient.delPaymentCoursePackage(coursePackagePayment.getId());
//                                    break;
//                                }
                                if("SUCCESS".equals(s)){
                                    for (UserPointsMerchandise userPointsMerchandise : userPointsMerchandises) {
                                        userPointsMerchandise.setPayStatus(2);
                                        userPointsMerchandise.setOrderNumber(transaction_id);
                                        userPointsMerchandise.setPayType(1);
                                        mcClient.updateDetailsUserPointMercase(userPointsMerchandise);
                                    }
                                    break;
                                }
                                if("USERPAYING".equals(s)){
                                    num++;
                                }
                            }
                        }
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            }).start();
        }
        return weixinpay;
    }
    @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));
                userPointsMerchandises.get(i).setPayType(payType);
                userPointsMerchandises.get(i).setPayStatus(2);
                mcClient.updateDetailsUserPointMercase(userPointsMerchandises.get(i));
                Integer pointsMerchandiseId = userPointsMerchandises.get(i).getPointsMerchandiseId();
                PointsMerchandise pointsMerchandise = mcClient.selectPointsMerchandiseById(pointsMerchandiseId);
                switch (pointsMerchandise.getType()){
                    case 2:
                        List<TCoursePackagePayment> coursePackagePaymentOfCode = paymentClient.getCoursePackagePaymentOfCode(code);
                        for (TCoursePackagePayment coursePackagePayment : coursePackagePaymentOfCode) {
                            coursePackagePayment.setPayStatus(2);
                            coursePackagePayment.setPayType(payType);
                            coursePackagePayment.setOrderNumber(orderNumber);
                            coursePackagePayment.setCashPayment(pointsMerchandise.getCash());
                            paymentClient.updatePaymentCoursePackage(coursePackagePayment);
                        }
                        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);
            userPointsMerchandises.get(0).setPayType(payType);
            userPointsMerchandises.get(0).setPayStatus(2);
            mcClient.updateDetailsUserPointMercase(userPointsMerchandises.get(0));
            Integer pointsMerchandiseId = userPointsMerchandises.get(0).getPointsMerchandiseId();
            PointsMerchandise pointsMerchandise = mcClient.selectPointsMerchandiseById(pointsMerchandiseId);
            switch (pointsMerchandise.getType()){
                case 2:
                    List<TCoursePackagePayment> coursePackagePaymentOfCode = paymentClient.getCoursePackagePaymentOfCode(code);
                    TCoursePackagePayment packagePayment =coursePackagePaymentOfCode.get(0);
                    packagePayment.setPayStatus(2);
                    packagePayment.setPayType(payType);
                    packagePayment.setOrderNumber(orderNumber);
                    packagePayment.setCashPayment(pointsMerchandise.getCash());
                    paymentClient.updatePaymentCoursePackage(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;
    }
}
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);
    }
}
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);
@@ -161,12 +171,13 @@
                    detailsVo.setBelongs(courseOfStore.getStoreName()+"可用");
                }
                List<CoursePackagePaymentConfig> courseConfigList = cpcfigClient.getCourseConfigList(coursePackage.getId());
                int redul = 0;
                for (CoursePackagePaymentConfig coursePackagePaymentConfig : courseConfigList) {
                    redul = redul + coursePackagePaymentConfig.getClassHours();
                    if (Objects.equals(coursePackagePaymentConfig.getId(), merchandise.getCoursePackageConfigId())){
                        detailsVo.setCourseHours(coursePackagePaymentConfig.getClassHours());
                        break;
                }
                detailsVo.setCourseHours(redul);
                }
                detailsVo.setStartTime(format.format(merchandise.getStartTime()));
                detailsVo.setEndTime(format.format(merchandise.getEndTime()));
@@ -394,4 +405,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;
    }
}
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;
        }
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/entity/PointsMerchandise.java
@@ -149,7 +149,11 @@
     */
    @TableField("insertTime")
    private Date insertTime;
    /**
     * 课包支付配置id
     */
    @TableField("coursePackageConfigId")
    private Integer coursePackageConfigId;
    @Override
    protected Serializable pkVal() {
cloud-server-activity/src/main/java/com/dsh/activity/entity/UserPointsMerchandise.java
@@ -68,7 +68,26 @@
     */
    @TableField("insertTime")
    private Date insertTime;
    /**
     * 现金支付方式(1=微信2支付宝)
     */
    @TableField("payType")
    private Integer payType;
    /**
     * code
     */
    @TableField("code")
    private String code;
    /**
     * orderNumber
     */
    @TableField("orderNumber")
    private String orderNumber;
    /**
     * 现金的支付状态
     */
    @TableField("payStatus")
    private Integer payStatus;
    @Override
    protected Serializable pkVal() {
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);
}
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/MerChandiseStoreClient.java
New file
@@ -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);
}
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);
}
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/model/CoursePackage.java
@@ -81,7 +81,7 @@
     */
    private Integer sort;
    /**
     * 支付方式(1=微信 2=支付宝 3=玩湃币)
     * 支付方式(1=微信,2=支付宝,3=玩湃币,4=积分,5=积分+微信,6=积分+支付宝)
     */
    private Integer payType;
    /**
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;
cloud-server-activity/src/main/java/com/dsh/activity/util/UUIDUtil.java
New file
@@ -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();
    }
}
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
@@ -700,4 +700,12 @@
                .eq("coursePackageId",coursePackageId));
    }
    @PostMapping("/base/coursePack/getCoursePackagePaymentOfCode")
    public List<TCoursePackagePayment> getCoursePackagePaymentOfCode(@RequestBody String code){
        return packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>()
                .eq("code",code));
    }
}
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;
cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java
@@ -61,4 +61,8 @@
    @PostMapping("/base/coursePack/obtainStudentClassDetails")
    List<RecordAppoint> obtainStudentClassDetailsData(@RequestBody Integer stuId);
    @PostMapping("/base/coursePack/getCoursePackagePaymentOfCode")
    List<TCoursePackagePayment> getCoursePackagePaymentOfCode(@RequestBody String code);
}
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java