puzhibing
2023-07-12 134d13688e4b6677133ba2d362d2978d8bda2b87
Merge remote-tracking branch 'origin/master'
32个文件已修改
10个文件已添加
1853 ■■■■■ 已修改文件
cloud-server-account/src/main/java/com/dsh/account/controller/PaymentCallbackController.java 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/controller/UseBenefitsController.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/MerChandiseClient.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/UserConponClient.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/CommodityRequest.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/PointsMerchandise.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/competition/DeductionCompetitionsClient.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/competition/model/PaymentCompetition.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePackageClient.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/CoursePackage.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/PlayPaiGoldCoursePackage.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/TCoursePackagePayment.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/model/dto/Coupon.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/model/vo/classDetails/ClasspaymentRequest.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/IndexOfUserBenefirVo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/PointMallDetailsResponse.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/RechargeRecordsService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/TStudentService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/impl/RechargeRecordsServiceImpl.java 206 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java 217 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java 196 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/util/OssUploadUtil.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/entity/Coupon.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/MerChandiseClient.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/UserConponClient.java 10 ●●●●● 补丁 | 查看 | 原始文档 | 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/model/request/CommodityRequest.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/feignclient/DeductionCompetitionsClient.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java 124 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/model/vo/RegisterCourseVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/model/vo/request/ClasspaymentRequest.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/model/vo/request/PlayPaiGoldCoursePackage.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/model/vo/response/CourseDetailsResponse.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java 115 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/controller/PaymentCallbackController.java
@@ -1,9 +1,19 @@
package com.dsh.account.controller;
import com.dsh.account.service.RechargeRecordsService;
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.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.util.Map;
/**
 * 支付回调控制器
@@ -15,22 +25,108 @@
public class PaymentCallbackController {
    /**
     * 支付宝支付回调接口
     */
    @PostMapping("/v1")
    public void alipayCallback(){
    @Autowired
    private PayMoneyUtil payMoneyUtil;
    @Autowired
    private TStudentService tstuService;
    @Autowired
    private RechargeRecordsService recordsService;
    /**
     * 课包续课支付宝支付回调接口
     */
    @PostMapping("/base/coursePackage/alipayPaymentCallback")
    public void alipayCallback(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 transaction_id = map.get("transaction_id");
                ResultUtil resultUtil = tstuService.insertVipPaymentCallback(out_trade_no, transaction_id);
                if(resultUtil.getCode() == 200){
                    PrintWriter out = response.getWriter();
                    out.write("success");
                    out.flush();
                    out.close();
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    /**
     * 微信支付回调接口
     * 课包续课微信支付回调接口
     */
    @PostMapping("/v2")
    public void weChatCallback(){
    @PostMapping("/base/coursePackage/wechatPaymentCallback")
    public void weChatCallback(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 = tstuService.insertVipPaymentCallback(out_trade_no, transaction_id);
                if(resultUtil.getCode() == 200){
                    PrintWriter out = response.getWriter();
                    out.write(result);
                    out.flush();
                    out.close();
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    /**
     * 充值玩湃币支付宝支付回调接口
     */
    @PostMapping("/base/recharge/alipayRechargeCallback")
    public void alipayRechargeCallback(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 transaction_id = map.get("transaction_id");
                ResultUtil resultUtil = recordsService.addRechargeCallbackPay(out_trade_no, transaction_id);
                if(resultUtil.getCode() == 200){
                    PrintWriter out = response.getWriter();
                    out.write("success");
                    out.flush();
                    out.close();
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    /**
     * 课包续课微信支付回调接口
     */
    @PostMapping("/base/recharge/wechatRechargeCallback")
    public void wechatRechargeCallback(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 = recordsService.addRechargeCallbackPay(out_trade_no, transaction_id);
                if(resultUtil.getCode() == 200){
                    PrintWriter out = response.getWriter();
                    out.write(result);
                    out.flush();
                    out.close();
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
cloud-server-account/src/main/java/com/dsh/account/controller/UseBenefitsController.java
@@ -17,8 +17,10 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.List;
@@ -92,6 +94,26 @@
                detailsVo.setMemberLifespan(format1.format(tAppUser.getVipEndTime()));
            }
            return ResultUtil.success(detailsVo);
        }catch (Exception e){
            return ResultUtil.runErr();
        }
    }
    @ResponseBody
    @PostMapping("/api/useBenefit/uploadImage")
    @ApiOperation(value = "上传用户头像", tags = {"APP-使用福利"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
            @ApiImplicitParam(name = "file",value = "图片字节",dataType = "MultipartFile")
    })
    public ResultUtil uploadAppUserProfile(MultipartFile file, HttpServletRequest request){
        try {
            Integer appUserId = tokenUtil.getUserIdFormRedis();
            if(null == appUserId){
                return ResultUtil.tokenErr();
            }
            return ResultUtil.success(tauService.uploadAppUserHeadImg(appUserId,file,request));
        }catch (Exception e){
            return ResultUtil.runErr();
        }
@@ -247,8 +269,7 @@
            if(null == userIdFormRedis){
                return ResultUtil.tokenErr();
            }
            // TODO: 2023/7/10 积分商品列表查询
            return ResultUtil.success();
            return ResultUtil.success(tauService.queryAppUserIntegral(request,userIdFormRedis));
        }catch (Exception e){
            return ResultUtil.runErr();
        }
cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/MerChandiseClient.java
@@ -1,9 +1,12 @@
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 org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
@@ -14,4 +17,10 @@
    public List<IntegralCommodity> getConvertibleGoods();
    @PostMapping("/base/pointMerchars/getCommoditys")
    public List<PointsMerchandise> getVicinityGoods(@RequestBody CommodityRequest request);
    @PostMapping("/base/pointMerchars/getRedeemedNums")
    public int getRedeemedQuantity(@RequestBody Integer goodId);
}
cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/UserConponClient.java
@@ -1,8 +1,11 @@
package com.dsh.account.feignclient.activity;
import com.dsh.account.feignclient.activity.model.CommodityRequest;
import com.dsh.account.model.dto.Coupon;
import com.dsh.account.model.vo.sourceDetail.CouponStuAvailableVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
@@ -14,4 +17,12 @@
    @PostMapping("/base/userConpon/getStuOfConpons")
    public List<CouponStuAvailableVo> queryUserWithConponList(@RequestParam("appUserId") Integer appUserId);
    @PostMapping("/base/coupon/getAllCoupons")
    public List<Coupon> getAllCoupons(@RequestBody CommodityRequest request);
    @PostMapping("/base/coupon/getRedeemedNums")
    public int getRedeemedQuantity(@RequestBody Integer id);
}
cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/CommodityRequest.java
New file
@@ -0,0 +1,16 @@
package com.dsh.account.feignclient.activity.model;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class CommodityRequest {
    @ApiModelProperty(value = "经度")
    private String lon;
    @ApiModelProperty(value = "纬度")
    private String lat;
}
cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/PointsMerchandise.java
New file
@@ -0,0 +1,108 @@
package com.dsh.account.feignclient.activity.model;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class PointsMerchandise {
    /**
     * 主键
     */
    private Integer id;
    /**
     * 类型(1=实体商品,2=课包商品,3=门票商品)
     */
    private Integer type;
    /**
     * 商品名称
     */
    private String name;
    /**
     * 课包id
     */
    private Integer coursePackageId;
    /**
     * 原价
     */
    private BigDecimal price;
    /**
     * 兑换方式(1=积分,2=现金+积分)
     */
    private Integer redemptionMethod;
    /**
     * 所需现金
     */
    private BigDecimal cash;
    /**
     * 所属积分
     */
    private BigDecimal integral;
    /**
     * 商品封面
     */
    private String cover;
    /**
     * 商品图片
     */
    private String productImages;
    /**
     * 用户人群(1=全部用户,2=年度会员,3=已有学员用户)
     */
    private Integer userPopulation;
    /**
     * 发放数量
     */
    private Integer quantityIssued;
    /**
     * 限领数量
     */
    private Integer pickUpQuantity;
    /**
     * 开始时间
     */
    private Date startTime;
    /**
     * 结束时间
     */
    private Date endTime;
    /**
     * 使用范围(1=全国,2=指定城市,3=指定门店)
     */
    private Integer useScope;
    /**
     * 省
     */
    private String province;
    /**
     * 省编号
     */
    private String provinceCode;
    /**
     * 市
     */
    private String city;
    /**
     * 市编号
     */
    private String cityCode;
    /**
     * 兑换说明
     */
    private String redemptionInstructions;
    /**
     * 排序
     */
    private Integer sort;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    private Integer state;
    /**
     * 添加时间
     */
    private Date insertTime;
}
cloud-server-account/src/main/java/com/dsh/account/feignclient/competition/DeductionCompetitionsClient.java
@@ -2,6 +2,7 @@
import com.dsh.account.feignclient.competition.model.GetStuSourseList;
import com.dsh.account.feignclient.competition.model.PaymentCompetition;
import com.dsh.account.feignclient.competition.model.PurchaseRecordVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
@@ -14,4 +15,12 @@
    @PostMapping("/base/competition/getCompetitionsDetails")
    List<PurchaseRecordVo> getStuSourseList(@RequestBody GetStuSourseList getStuSourseList);
    @PostMapping("/base/competition/getPayedCompetitions")
    List<PaymentCompetition> getAllCompetitionPayRecord(@RequestBody Integer appUserId);
    @PostMapping("/base/competition/getCancelOrderOfUserPay")
    public List<PaymentCompetition> getCancelOrderOfUserPayRecord(@RequestBody Integer appUserId);
    @PostMapping("/base/competition/getPlayPaiFGoldPayRecord")
    List<PaymentCompetition> getPlayPaiFGoldPayRecord(@RequestBody Integer appUserId);
}
cloud-server-account/src/main/java/com/dsh/account/feignclient/competition/model/PaymentCompetition.java
New file
@@ -0,0 +1,65 @@
package com.dsh.account.feignclient.competition.model;
import lombok.Data;
import java.util.Date;
/**
 * @author zhibing.pu
 * @date 2023/7/6 16:30
 */
@Data
public class PaymentCompetition {
    /**
     * 主键
     */
    private Long id;
    /**
     * 业务流水号
     */
    private String code;
    /**
     * 赛事id
     */
    private Integer competitionId;
    /**
     * 用户id
     */
    private Integer appUserId;
    /**
     * 支付方式(1=微信,2=支付宝,3=玩湃币,4=课时)
     */
    private Integer payType;
    /**
     * 支付金额
     */
    private Double amount;
    /**
     * 支付状态(1=待支付,2=已支付,3=已退款)
     */
    private Integer payStatus;
    /**
     * 支付时间
     */
    private Date payTime;
    /**
     * 第三方支付流水号
     */
    private String payOrderNo;
    /**
     * 退款时间
     */
    private Date refundTime;
    /**
     * 第三方退款流水
     */
    private String refundOrderNo;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    private Integer state;
    /**
     * 添加时间
     */
    private Date insertTime;
}
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePackageClient.java
New file
@@ -0,0 +1,22 @@
package com.dsh.account.feignclient.course;
import com.dsh.account.feignclient.course.model.CoursePackage;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
/**
 * @author zhibing.pu
 * @date 2023/7/5 9:55
 */
@FeignClient("mb-cloud-course")
public interface CoursePackageClient {
    /**
     * 根据id获取课包
     * @param id
     * @return
     */
    @PostMapping("/coursePackage/queryCoursePackageById")
    CoursePackage queryCoursePackageById(Integer id);
}
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java
@@ -33,4 +33,23 @@
    @PostMapping("/base/coursePack/allPaymentCourseList")
    public List<TCoursePackagePayment> getAppuserCourseList(@RequestBody Integer appUserId);
    @PostMapping("/coursePackagePayment/courseRenewPlayPaiPay")
    public int paymentWanpaiRenewCourse(@RequestBody PlayPaiGoldCoursePackage coursePackage);
    @PostMapping("/base/coursePack/getPaymentCoursePackage")
    public TCoursePackagePayment getCoursePackagePaymentByCode(@RequestBody String code);
    @PostMapping("/base/coursePack/delPaymentCoursePackage")
    public boolean delPaymentCoursePackage(@RequestBody Integer payId);
    @PostMapping("/base/coursePack/updatePaymentCoursePackage")
    void updatePaymentCoursePackage(TCoursePackagePayment coursePackagePayment);
    @PostMapping("/base/coursePack/savePaymentCoursePackage")
    public boolean savePaymentCoursePackage(@RequestBody TCoursePackagePayment packagePayment);
    @PostMapping("/base/coursePack/allAmountPayRecordOfUser")
    public List<TCoursePackagePayment> getAmountPayRecord(@RequestBody Integer appUserId);
}
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/CoursePackage.java
New file
@@ -0,0 +1,128 @@
package com.dsh.account.feignclient.course.model;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
 * @author zhibing.pu
 * @date 2023/7/5 9:56
 */
@Data
public class CoursePackage {
    private Integer id;
    /**
     * 省
     */
    private String province;
    /**
     * 省编号
     */
    private String provinceCode;
    /**
     * 市
     */
    private String city;
    /**
     * 市编号
     */
    private String cityCode;
    /**
     * 门店id
     */
    private Integer storeId;
    /**
     * 课包类型id
     */
    private Integer coursePackageTypeId;
    /**
     * 课包名称
     */
    private String name;
    /**
     * 上课场地id
     */
    private Integer siteId;
    /**
     * 教练id
     */
    private Integer coachId;
    /**
     * 最多预约人数
     */
    private Integer maxSubscribeNumber;
    /**
     * 上课开始时间
     */
    private String classStartTime;
    /**
     * 上课结束时段
     */
    private String classEndTime;
    /**
     * 上课周,多个分号分隔
     */
    private String classWeeks;
    /**
     * 封面图
     */
    private String coverDrawing;
    /**
     * 详情图
     */
    private String detailDrawing;
    /**
     * 介绍图
     */
    private String introduceDrawing;
    /**
     * 排序
     */
    private Integer sort;
    /**
     * 支付方式(1=现金,2=玩湃币)
     */
    private Integer payType;
    /**
     * 有效天数
     */
    private Integer validDays;
    /**
     * 课后练习课程id
     */
    private Integer courseId;
    /**
     * 课后练习视频介绍
     */
    private String introduce;
    /**
     * 完成课后练习获取积分
     */
    private Integer integral;
    /**
     * 课程状态(1=未开始,2=进行中,3=已结束,4=已取消)
     */
    private Integer status;
    /**
     * 审核状态(1=待审核,2=已同意,3=已拒绝)
     */
    private Integer auditStatus;
    /**
     * 审核人id
     */
    private Integer auditUserId;
    /**
     * 审核备注
     */
    private String authRemark;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    private Integer state;
    /**
     * 添加时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date insertTime;
}
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/PlayPaiGoldCoursePackage.java
New file
@@ -0,0 +1,22 @@
package com.dsh.account.feignclient.course.model;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class PlayPaiGoldCoursePackage {
    @ApiModelProperty(value = "支付配置id")
    Integer coursePayConfigId;
    @ApiModelProperty(value = "学员id")
    Integer stuId;
    @ApiModelProperty(value = "课包id")
    Integer coursePackageId;
    @ApiModelProperty(value = "code")
    String code;
}
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/TCoursePackagePayment.java
@@ -25,7 +25,7 @@
     */
    private Integer coursePackageId;
    /**
     * 支付方式(1=现金,2=玩湃币)
     * 支付方式(1=微信 2=支付宝 3=玩湃币)
     */
    private Integer payType;
    /**
@@ -88,5 +88,13 @@
     * 添加时间
     */
    private Date insertTime;
    /**
     * 业务编号
     */
    private String code;
    /**
     * 原价
     */
    private Double originalPrice;
}
cloud-server-account/src/main/java/com/dsh/account/model/dto/Coupon.java
New file
@@ -0,0 +1,119 @@
package com.dsh.account.model.dto;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class Coupon {
    /**
     * 主键
     */
    private Integer id;
    /**
     * 优惠券名称
     */
    private String name;
    /**
     * 优惠券类型(1=满减券,2=代金券,3=体验券)
     */
    private Integer type;
    /**
     * 优惠券规则JSON
     */
    private String content;
    /**
     * 优惠券说明
     */
    private String illustrate;
    /**
     * 发放方式(1=积分购买,2=注册赠送,3=自动发券)
     */
    private Integer distributionMethod;
    /**
     * 兑换方式(1=积分,2=积分+现金)
     */
    private Integer redemptionMethod;
    /**
     * 所需现金
     */
    private BigDecimal cash;
    /**
     * 所属积分
     */
    private BigDecimal integral;
    /**
     * 用户人群(1=全部用户,2=年度会员,3=已有学员用户)
     */
    private Integer userPopulation;
    /**
     * 发放数量
     */
    private Integer quantityIssued;
    /**
     * 限领数量
     */
    private Integer pickUpQuantity;
    /**
     * 开始时间
     */
    private Date startTime;
    /**
     * 结束时间
     */
    private Date endTime;
    /**
     * 使用范围(1=全国,2=指定城市,3=指定门店)
     */
    private Integer useScope;
    /**
     * 省
     */
    private String province;
    /**
     * 省编号
     */
    private String provinceCode;
    /**
     * 市
     */
    private String city;
    /**
     * 市编号
     */
    private String cityCode;
    /**
     * 审核状态(1=待审核,2=已通过,3=已拒绝)
     */
    private Integer auditStatus;
    /**
     * 审核人id
     */
    private Integer auditUserId;
    /**
     * 审核备注
     */
    private String auditRemark;
    /**
     * 状态(1=未开始,2=已开始,3=已结束,4=已取消)
     */
    private Integer status;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    private Integer state;
    /**
     * 添加时间
     */
    private Date insertTime;
    /**
     * 封面图
     */
    private String cover;
    /**
     * 图片
     */
    private String productImages;
}
cloud-server-account/src/main/java/com/dsh/account/model/vo/classDetails/ClasspaymentRequest.java
@@ -25,7 +25,7 @@
    private Integer conponId;
    @ApiModelProperty(value = "课时id")
    private Long courseConfigId;
    private Integer courseConfigId;
    @ApiModelProperty(value = "支付金额")
    private BigDecimal payAmount;
cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/IndexOfUserBenefirVo.java
@@ -16,7 +16,7 @@
    @ApiModelProperty(value = "用户名称")
    private String userName;
    @ApiModelProperty(value = "是否年度会员")
    @ApiModelProperty(value = "是否年度会员(字符:年度会员 或者 普通用户)")
    private String isMember;
    @ApiModelProperty(value = "玩湃币")
cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/PointMallDetailsResponse.java
@@ -35,18 +35,24 @@
        @ApiModelProperty(value = "商品名称")
        private String goodName;
        @ApiModelProperty(value = "1积分 2现金+积分")
        private Integer condition;
        @ApiModelProperty(value = "金额")
        private BigDecimal amount;
        @ApiModelProperty(value = "积分")
        private Integer integral;
        @ApiModelProperty(value = "适用范围: 1 仅限会员 2仅限学员 3全部用户")
        @ApiModelProperty(value = "适用范围: 1全部用户 2仅限会员 3仅限学员")
        private Integer belongsType;
        @ApiModelProperty(value = "商品类型: 1实物 2课包 3门票 4优惠券")
        private Integer goodsType;
        @ApiModelProperty(value = "已兑换数量")
        private Integer nums;
    }
}
cloud-server-account/src/main/java/com/dsh/account/service/RechargeRecordsService.java
@@ -20,4 +20,5 @@
    ResultUtil rechargeCenPayment(Integer userIdFormRedis, RechargePayRequest request);
    ResultUtil addRechargeCallbackPay(String code, String orderNumber);
}
cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java
@@ -7,11 +7,11 @@
import com.dsh.account.model.LoginSMSCodeVo;
import com.dsh.account.model.LoginWeChatVo;
import com.dsh.account.model.vo.classDetails.classInsVo.ClassInfoVo;
import com.dsh.account.model.vo.userBenefitDetail.BillingDetailsVo;
import com.dsh.account.model.vo.userBenefitDetail.IndexOfUserBenefirVo;
import com.dsh.account.model.vo.userBenefitDetail.RechargeCentVo;
import com.dsh.account.model.vo.userBenefitDetail.*;
import com.dsh.account.util.ResultUtil;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
@@ -107,7 +107,7 @@
    /**
     * 获取用户账单列表
     * @param yearMonth 年月
     * @param recordId 记录id
     * @param recordId 记录
     * @return
     */
    BillingDetailsVo queryUserBillingDetails(String yearMonth, Integer recordId,Integer appUserId);
@@ -119,4 +119,9 @@
    void cancellation(Integer appUserId);
    List<RechargeCentVo> getSysRechargeConfig(Integer appUserId);
    PointMallDetailsResponse queryAppUserIntegral(MallRequest request, Integer userIdFormRedis);
    ResultUtil uploadAppUserHeadImg(Integer appUserId, MultipartFile file, HttpServletRequest request);
}
cloud-server-account/src/main/java/com/dsh/account/service/TStudentService.java
@@ -73,4 +73,6 @@
    ResultUtil renewClassPayment(Integer userIdFormRedis, ClasspaymentRequest request);
    ResultUtil insertVipPaymentCallback(String outTradeNo, String transactionId);
}
cloud-server-account/src/main/java/com/dsh/account/service/impl/RechargeRecordsServiceImpl.java
@@ -5,15 +5,20 @@
import com.dsh.account.entity.RechargeRecords;
import com.dsh.account.entity.TAppUser;
import com.dsh.account.enums.RechargeRecordEnum;
import com.dsh.account.feignclient.competition.DeductionCompetitionsClient;
import com.dsh.account.feignclient.competition.model.PaymentCompetition;
import com.dsh.account.feignclient.course.CoursePaymentClient;
import com.dsh.account.feignclient.course.model.TCoursePackagePayment;
import com.dsh.account.feignclient.other.RechargeConfigClient;
import com.dsh.account.mapper.RechargeRecordsMapper;
import com.dsh.account.mapper.TAppUserMapper;
import com.dsh.account.model.vo.userBenefitDetail.RechargeDetailsVo;
import com.dsh.account.model.vo.userBenefitDetail.RechargePayRequest;
import com.dsh.account.service.RechargeRecordsService;
import com.dsh.account.util.DateTimeHelper;
import com.dsh.account.util.PayMoneyUtil;
import com.dsh.account.util.ResultUtil;
import com.dsh.account.util.UUIDUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
@@ -24,6 +29,7 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * <p>
@@ -45,6 +51,16 @@
    @Autowired
    private CoursePaymentClient cpClient;
    @Autowired
    private DeductionCompetitionsClient deducClient;
    @Autowired
    private PayMoneyUtil payMoneyUtil;
    @Resource
    private RechargeConfigClient reconMapper;
    @Override
@@ -70,7 +86,16 @@
            vo.setWpGold(0);
        }
//            1.赛事报名
        List<PaymentCompetition> playPaiFGoldPayRecord = deducClient.getPlayPaiFGoldPayRecord(appUserId);
        if (playPaiFGoldPayRecord.size() > 0 ){
            for (PaymentCompetition competition : playPaiFGoldPayRecord) {
                RechargeDetailsVo.RechargesDetail consumeDetail = new RechargeDetailsVo.RechargesDetail();
                consumeDetail.setConsumeName(RechargeRecordEnum.EVENT_REGISTRATION.getMsg() );
                consumeDetail.setConsumeTime(simpleDateFormat.format(competition.getInsertTime()));
                consumeDetail.setConsumeAmount("-" + competition.getAmount());
                details.add(consumeDetail);
            }
        }
//            2.课包购买
        List<TCoursePackagePayment> appuserCourseList = cpClient.getAppuserCourseList(appUserId);
        if (appuserCourseList.size() > 0){
@@ -86,7 +111,7 @@
//            4.智慧球场
//            5.充值
        List<RechargeRecords> rechargeRecords = rereMapper.selectList(new QueryWrapper<RechargeRecords>()
        List<RechargeRecords> rechargeRecords = this.baseMapper.selectList(new QueryWrapper<RechargeRecords>()
                .eq("payStatus", 2)
                .eq("appUserId", appUserId)
                .between("insertTime", monthStart, monthEnd));
@@ -105,27 +130,178 @@
    @Override
    public ResultUtil rechargeCenPayment(Integer userIdFormRedis, RechargePayRequest request) {
        // TODO: 2023/7/10 充值支付
        switch (request.getPayType()){
            case 1:
                WeChatPayment(request.getPayAmount());
                break;
            case 2:
                AlipayPayment(request.getPayAmount());
                break;
            default:
                break;
        TAppUser tAppUser = tappMapper.selectById(userIdFormRedis);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
        RechargeRecords rechargeRecords = new RechargeRecords();
        rechargeRecords.setCode(code);
        rechargeRecords.setAppUserId(userIdFormRedis);
        rechargeRecords.setAmount(request.getPayAmount());
        List<Map<String, Object>> rechargeConfig = reconMapper.getRechargeConfig();
        if (rechargeConfig.size() > 0){
            for (Map<String, Object> stringObjectMap : rechargeConfig) {
                Object o = stringObjectMap.get("money");
                if (o.equals(request.getPayAmount())){
                    if (tAppUser.getIsVip() == 1){
                        rechargeRecords.setPlayPaiCoins((Integer) stringObjectMap.get("MemberCoins"));
                    }else {
                        rechargeRecords.setPlayPaiCoins((Integer) stringObjectMap.get("usersCoins"));
                    }
                }
            }
        }
        rechargeRecords.setPayStatus(1);
        rechargeRecords.setState(1);
        rechargeRecords.setInsertTime(new Date());
        this.baseMapper.insert(rechargeRecords);
        try {
            switch (request.getPayType()){
                case 1:
                    return WeChatPayment(code,request.getPayAmount());
                case 2:
                    return AlipayPayment(code,request.getPayAmount());
                default:
                    break;
            }
        }catch (Exception e){
            ResultUtil.runErr();
        }
        return ResultUtil.success();
    }
    private void AlipayPayment(BigDecimal payAmount) {
    private ResultUtil AlipayPayment(String code,BigDecimal amount) {
        ResultUtil alipay = payMoneyUtil.alipay("玩湃币充值", "", "", code, amount.toString(),
                "/base/recharge/alipayRechargeCallback");
        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);
                            RechargeRecords records = rereMapper.selectOne(new QueryWrapper<RechargeRecords>()
                                    .eq("code",code));
                            if(records.getPayStatus() == 2){
                                break;
                            }
                            ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryALIOrder(code);
                            if(resultUtil.getCode() == 200 && records.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){
                                    records.setState(3);
                                    rereMapper.deleteById(records.getId());
                                    break;
                                }
                                if("TRADE_SUCCESS".equals(s)){
                                    records.setPayStatus(2);
                                    records.setOrderNumber(tradeNo);
                                    rereMapper.updateById(records);
                                    break;
                                }
                                if("WAIT_BUYER_PAY".equals(s)){
                                    num++;
                                }
                            }
                        }
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            }).start();
        }
        return alipay;
    }
    private ResultUtil WeChatPayment(String code,BigDecimal amount) throws Exception {
        ResultUtil weixinpay = payMoneyUtil.weixinpay("玩湃币充值", "", code, amount.toString(),
                "/base/recharge/wechatRechargeCallback", "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);
                            RechargeRecords records = rereMapper.selectOne(new QueryWrapper<RechargeRecords>()
                                    .eq("code",code));
                            if(records.getPayStatus() == 2){
                                break;
                            }
                            ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryWXOrder(code, "");
                            if(resultUtil.getCode() == 200 && records.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){
                                    records.setState(3);
                                    rereMapper.deleteById(records.getId());
                                    break;
                                }
                                if("SUCCESS".equals(s)){
                                    records.setPayStatus(2);
                                    records.setOrderNumber(transaction_id);
                                    rereMapper.updateById(records);
                                    break;
                                }
                                if("USERPAYING".equals(s)){
                                    num++;
                                }
                            }
                        }
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            }).start();
        }
        return weixinpay;
    }
    private void WeChatPayment(BigDecimal payAmount) {
    @Override
    public ResultUtil addRechargeCallbackPay(String code, String orderNumber) {
        RechargeRecords rechargeRecords = this.baseMapper.selectOne(new QueryWrapper<RechargeRecords>()
                .eq("code", code));
        if (rechargeRecords.getPayStatus() == 2){
            return  ResultUtil.success();
        }
        rechargeRecords.setPayStatus(2);
        rechargeRecords.setPayTime(new Date());
        rechargeRecords.setOrderNumber(orderNumber);
        this.baseMapper.updateById(rechargeRecords);
        TAppUser tAppUser = tappMapper.selectById(rechargeRecords.getAppUserId());
        tAppUser.setPlayPaiCoins(null == tAppUser.getPlayPaiCoins()? rechargeRecords.getPlayPaiCoins(): tAppUser.getPlayPaiCoins() +rechargeRecords.getPlayPaiCoins() );
        tappMapper.updateById(tAppUser);
        return null;
    }
}
cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
@@ -9,10 +9,14 @@
import com.dsh.account.entity.VipPayment;
import com.dsh.account.enums.RechargeRecordEnum;
import com.dsh.account.feignclient.activity.MerChandiseClient;
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.competition.DeductionCompetitionsClient;
import com.dsh.account.feignclient.competition.model.PaymentCompetition;
import com.dsh.account.feignclient.course.CoursePackageClient;
import com.dsh.account.feignclient.course.CoursePaymentClient;
import com.dsh.account.feignclient.course.model.CourseOfStoreVo;
import com.dsh.account.feignclient.course.model.QueryStoreList;
import com.dsh.account.feignclient.course.model.StuCourseResp;
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;
@@ -26,14 +30,13 @@
import com.dsh.account.model.JoinPlayPaiVo;
import com.dsh.account.model.LoginSMSCodeVo;
import com.dsh.account.model.LoginWeChatVo;
import com.dsh.account.model.dto.Coupon;
import com.dsh.account.model.vo.classDetails.CourseVenue;
import com.dsh.account.model.vo.classDetails.ExerciseVideo;
import com.dsh.account.model.vo.classDetails.RegisteredCourse;
import com.dsh.account.model.vo.classDetails.WeekedCourse;
import com.dsh.account.model.vo.classDetails.classInsVo.ClassInfoVo;
import com.dsh.account.model.vo.userBenefitDetail.BillingDetailsVo;
import com.dsh.account.model.vo.userBenefitDetail.IndexOfUserBenefirVo;
import com.dsh.account.model.vo.userBenefitDetail.RechargeCentVo;
import com.dsh.account.model.vo.userBenefitDetail.*;
import com.dsh.account.service.TAppUserService;
import com.dsh.account.util.*;
import com.dsh.account.util.akeylogin.Md5Util;
@@ -41,13 +44,13 @@
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -100,6 +103,15 @@
    @Resource
    private RechargeConfigClient reconMapper;
    @Resource
    private UserConponClient ucponClient;
    @Resource
    private CoursePackageClient cpageClient;
    @Resource
    private DeductionCompetitionsClient deducClient;
    @Override
    public ClassInfoVo queryUserOfStus(Integer id,String latitude,String longitude) {
@@ -490,11 +502,41 @@
            monthEnd = DateTimeHelper.getCurrentMouthEnd();
        }
//            1.赛事报名
//            2.课包购买
//            3.场地预约
//            4.智慧球场
//            5.年度会员
        List<PaymentCompetition> allCompetitionPayRecord = deducClient.getAllCompetitionPayRecord(appUserId);
        if (allCompetitionPayRecord.size() > 0 ){
            for (PaymentCompetition paymentCompetition : allCompetitionPayRecord) {
                BillingDetailsVo.ConsumeDetail consumeDetail = new BillingDetailsVo.ConsumeDetail();
                consumeDetail.setConsumeName(RechargeRecordEnum.EVENT_REGISTRATION.getMsg());
                consumeDetail.setConsumeTime(simpleDateFormat.format(paymentCompetition.getInsertTime()));
                consumeDetail.setConsumeAmount("-" + paymentCompetition.getAmount());
                details.add(consumeDetail);
            }
        }
//            2.取消赛事报名
        List<PaymentCompetition> cancelOrderOfUserPayRecord = deducClient.getCancelOrderOfUserPayRecord(appUserId);
        if (cancelOrderOfUserPayRecord.size() > 0 ){
            for (PaymentCompetition paymentCompetition : cancelOrderOfUserPayRecord) {
                BillingDetailsVo.ConsumeDetail consumeDetail = new BillingDetailsVo.ConsumeDetail();
                consumeDetail.setConsumeName(RechargeRecordEnum.CANCEL_EVENT_REGISTRATION.getMsg());
                consumeDetail.setConsumeTime(simpleDateFormat.format(paymentCompetition.getInsertTime()));
                consumeDetail.setConsumeAmount("+" + paymentCompetition.getAmount());
                details.add(consumeDetail);
            }
        }
//            3.课包购买
        List<TCoursePackagePayment> amountPayRecord = paymentClient.getAmountPayRecord(appUserId);
        if (amountPayRecord.size() > 0 ){
            for (TCoursePackagePayment coursePackagePayment : amountPayRecord) {
                BillingDetailsVo.ConsumeDetail consumeDetail = new BillingDetailsVo.ConsumeDetail();
                consumeDetail.setConsumeName(RechargeRecordEnum.COURSE_PACKAGE_PURCHASE.getMsg());
                consumeDetail.setConsumeTime(simpleDateFormat.format(coursePackagePayment.getInsertTime()));
                consumeDetail.setConsumeAmount("-" + coursePackagePayment.getCashPayment());
                details.add(consumeDetail);
            }
        }
//            4.场地预约
//            5.智慧球场
//            6.年度会员
        List<VipPayment> vipPayments = vipPaymentMapper.selectList(new QueryWrapper<VipPayment>()
                .eq("payStatus", 2)
                .eq("appUserId", appUserId)
@@ -504,11 +546,10 @@
                BillingDetailsVo.ConsumeDetail consumeDetail = new BillingDetailsVo.ConsumeDetail();
                consumeDetail.setConsumeName(RechargeRecordEnum.ANNUAL_MEMBERSHIP.getMsg());
                consumeDetail.setConsumeTime(simpleDateFormat.format(vipPayment.getInsertTime()));
                consumeDetail.setConsumeAmount("+" + vipPayment.getAmount());
                consumeDetail.setConsumeAmount("-" + vipPayment.getAmount());
                details.add(consumeDetail);
            }
        }
//            6.续课
//            7.充值
        List<RechargeRecords> rechargeRecords = rrMapper.selectList(new QueryWrapper<RechargeRecords>()
                .eq("payStatus", 2)
@@ -519,7 +560,7 @@
                BillingDetailsVo.ConsumeDetail consumeDetail = new BillingDetailsVo.ConsumeDetail();
                consumeDetail.setConsumeName(RechargeRecordEnum.RECHARGE.getMsg() + ":" + rechargeRecord.getPlayPaiCoins());
                consumeDetail.setConsumeTime(simpleDateFormat.format(rechargeRecord.getInsertTime()));
                consumeDetail.setConsumeAmount("+" + rechargeRecord.getAmount());
                consumeDetail.setConsumeAmount("-" + rechargeRecord.getAmount());
                details.add(consumeDetail);
            }
        }
@@ -557,4 +598,144 @@
        return centVos;
    }
    @Override
    public PointMallDetailsResponse queryAppUserIntegral(MallRequest request, Integer userIdFormRedis) {
        PointMallDetailsResponse detailsResponse = new PointMallDetailsResponse();
        List<PointMallDetailsResponse.Goods> goods = new ArrayList<>();
        TAppUser tAppUser = this.baseMapper.selectById(userIdFormRedis);
        detailsResponse.setName(tAppUser.getName());
        detailsResponse.setIntegral(tAppUser.getIntegral());
        detailsResponse.setHeadImg(tAppUser.getHeadImg());
        CommodityRequest commodityRequest = new CommodityRequest();
        commodityRequest.setLon(request.getLon());
        commodityRequest.setLat(request.getLat());
        List<PointsMerchandise> vicinityGoods = mcClient.getVicinityGoods(commodityRequest);
        if (vicinityGoods.size() > 0) {
            for (PointsMerchandise vicinityGood : vicinityGoods) {
                PointMallDetailsResponse.Goods commodity = new PointMallDetailsResponse.Goods();
                switch (vicinityGood.getType()) {
                    case 1:
                        commodity.setGoodId(vicinityGood.getId());
                        commodity.setGoodName(vicinityGood.getName());
                        commodity.setGoodImg(vicinityGood.getCover());
                        commodity.setCondition(vicinityGood.getRedemptionMethod());
                        if (vicinityGood.getRedemptionMethod() == 1) {
                            commodity.setIntegral(vicinityGood.getIntegral().intValue());
                        } else {
                            commodity.setIntegral(vicinityGood.getIntegral().intValue());
                            commodity.setAmount(vicinityGood.getCash());
                        }
                        commodity.setBelongsType(vicinityGood.getUserPopulation());
                        commodity.setGoodsType(1);
                        commodity.setNums(mcClient.getRedeemedQuantity(vicinityGood.getId()));
                        break;
                    case 2:
                        commodity.setGoodId(vicinityGood.getCoursePackageId());
                        CoursePackage coursePackage = cpageClient.queryCoursePackageById(vicinityGood.getCoursePackageId());
                        commodity.setGoodImg(coursePackage.getCoverDrawing());
                        commodity.setGoodName(coursePackage.getName());
                        commodity.setCondition(vicinityGood.getRedemptionMethod());
                        if (vicinityGood.getRedemptionMethod() == 1) {
                            commodity.setIntegral(vicinityGood.getIntegral().intValue());
                        } else {
                            commodity.setIntegral(vicinityGood.getIntegral().intValue());
                            commodity.setAmount(vicinityGood.getCash());
                        }
                        commodity.setBelongsType(vicinityGood.getUserPopulation());
                        commodity.setGoodsType(2);
                        commodity.setNums(mcClient.getRedeemedQuantity(vicinityGood.getId()));
                        break;
                    case 3:
                        commodity.setGoodId(vicinityGood.getId());
                        commodity.setGoodName(vicinityGood.getName());
                        commodity.setGoodImg(vicinityGood.getCover());
                        commodity.setCondition(vicinityGood.getRedemptionMethod());
                        if (vicinityGood.getRedemptionMethod() == 1) {
                            commodity.setIntegral(vicinityGood.getIntegral().intValue());
                        } else {
                            commodity.setIntegral(vicinityGood.getIntegral().intValue());
                            commodity.setAmount(vicinityGood.getCash());
                        }
                        commodity.setBelongsType(vicinityGood.getUserPopulation());
                        commodity.setGoodsType(3);
                        commodity.setNums(mcClient.getRedeemedQuantity(vicinityGood.getId()));
                        break;
                    default:
                        break;
                }
                goods.add(commodity);
            }
        }
        List<Coupon> allCoupons = ucponClient.getAllCoupons(commodityRequest);
        if (allCoupons.size() > 0) {
            for (Coupon allCoupon : allCoupons) {
                PointMallDetailsResponse.Goods commodity = new PointMallDetailsResponse.Goods();
                commodity.setGoodId(allCoupon.getId());
                commodity.setGoodName(allCoupon.getName());
                commodity.setCondition(allCoupon.getRedemptionMethod());
                commodity.setGoodImg(allCoupon.getCover());
                if (allCoupon.getRedemptionMethod() == 1) {
                    commodity.setIntegral(allCoupon.getIntegral().intValue());
                } else {
                    commodity.setIntegral(allCoupon.getIntegral().intValue());
                    commodity.setAmount(allCoupon.getCash());
                }
                commodity.setBelongsType(allCoupon.getUserPopulation());
                commodity.setGoodsType(4);
                commodity.setNums(ucponClient.getRedeemedQuantity(allCoupon.getId()));
                goods.add(commodity);
            }
        }
        if (StringUtils.hasText(request.getSearch())){
            goods = goods.stream()
                    .filter(merchandise -> merchandise.getGoodName().contains(request.getSearch()))
                    .collect(Collectors.toList());
        }
        if (null != request.getRank()){
            switch (request.getRank()){
                case 1:
                    goods = goods.stream()
                            .sorted(Comparator.comparing(PointMallDetailsResponse.Goods::getIntegral).reversed())
                            .collect(Collectors.toList());
                    break;
                case 2:
                    goods = goods.stream()
                            .sorted(Comparator.comparing(PointMallDetailsResponse.Goods::getIntegral))
                            .collect(Collectors.toList());
                    break;
                case 3:
                    goods = goods.stream()
                            .sorted(Comparator.comparing(PointMallDetailsResponse.Goods::getNums).reversed())
                            .collect(Collectors.toList());
                    break;
                default:
                    break;
            }
        }
        if (null != request.getGoodsType()){
            goods = goods.stream()
                    .filter(merchandise -> merchandise.getGoodsType().equals(request.getGoodsType()))
                    .collect(Collectors.toList());
        }
        detailsResponse.setGoods(goods);
        return detailsResponse;
    }
    @Override
    public ResultUtil uploadAppUserHeadImg(Integer appUserId, MultipartFile file, HttpServletRequest request) {
        try {
            String filePath = OssUploadUtil.ossUpload(request,file);
            TAppUser tAppUser = this.baseMapper.selectById(appUserId);
            tAppUser.setHeadImg(filePath);
            this.baseMapper.updateById(tAppUser);
        } catch (IOException e) {
            ResultUtil.error("头像上传失败!");
        }
        return ResultUtil.success();
    }
}
cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java
@@ -37,10 +37,8 @@
import com.dsh.account.model.vo.sourceDetail.CourseDetailsOfContinuationResp;
import com.dsh.account.model.vo.sourceDetail.RecordTimeRequest;
import com.dsh.account.service.TStudentService;
import com.dsh.account.util.DateTimeHelper;
import com.dsh.account.util.DateUtil;
import com.dsh.account.util.ResultUtil;
import com.dsh.account.util.ToolUtil;
import com.dsh.account.util.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -99,6 +97,10 @@
    @Resource
    private ParticipantClient participantClient;
    @Autowired
    private PayMoneyUtil payMoneyUtil;
@@ -374,35 +376,183 @@
    @Override
    public ResultUtil renewClassPayment(Integer userIdFormRedis, ClasspaymentRequest request) {
        // TODO: 2023/7/5 续课支付
        switch (request.getPayType()){
            case 1:
                WeChatPayment();
                break;
            case 2:
                AlipayPayment();
                break;
            case 3:
                PlaypaiGoldPayment();
                break;
            default:
                break;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
        TCoursePackagePayment packagePayment = new TCoursePackagePayment();
        packagePayment.setCode(code);
        packagePayment.setAppUserId(userIdFormRedis);
        packagePayment.setStudentId(request.getStuId());
        packagePayment.setCoursePackageId(request.getLessonId());
        packagePayment.setPayType(request.getPayType());
        packagePayment.setAbsencesNumber(0);
        packagePayment.setPayUserType(1);
        packagePayment.setPayStatus(1);
        packagePayment.setPayUserId(userIdFormRedis);
        packagePayment.setStatus(1);
        packagePayment.setState(1);
        packagePayment.setInsertTime(new Date());
        couPayClient.savePaymentCoursePackage(packagePayment);
        try {
            switch (request.getPayType()) {
                case 1:
                    return WeChatPayment(code,request.getPayAmount());
                case 2:
                    return AlipayPayment(code,request.getPayAmount());
                case 3:
                    int i = PlaypaiGoldPayment(code,request);
                    switch (i){
                        case 1:
                            return ResultUtil.success();
                        case 2:
                            return ResultUtil.error("用户未登录!");
                        case 3:
                            return ResultUtil.error("续课失败,玩湃币不足,请充值");
                        case 4:
                            return ResultUtil.error("续课失败,请联系管理员");
                    }
                default:
                    break;
            }
        }catch (Exception e){
            ResultUtil.runErr();
        }
        return ResultUtil.success();
    }
    public void WeChatPayment(){
    public ResultUtil WeChatPayment(String code,BigDecimal amount) throws Exception {
        ResultUtil weixinpay = payMoneyUtil.weixinpay("课包续费", "", code, amount.toString(),
                "/base/coursePackage/wechatPaymentCallback", "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);
                            TCoursePackagePayment coursePackagePayment = couPayClient.getCoursePackagePaymentByCode(code);
                            if(coursePackagePayment.getPayStatus() == 2){
                                break;
                            }
                            ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryWXOrder(code, "");
                            if(resultUtil.getCode() == 200 && coursePackagePayment.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)){
                                    coursePackagePayment.setPayStatus(2);
                                    coursePackagePayment.setOrderNumber(transaction_id);
                                    couPayClient.updatePaymentCoursePackage(coursePackagePayment);
                                    break;
                                }
                                if("USERPAYING".equals(s)){
                                    num++;
                                }
                            }
                        }
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            }).start();
        }
        return weixinpay;
    }
    public void AlipayPayment(){
    public ResultUtil AlipayPayment(String code,BigDecimal amount){
        ResultUtil alipay = payMoneyUtil.alipay("课包续费", "", "", code, amount.toString(),
                "/base/coursePackage/alipayPaymentCallback");
        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);
                            TCoursePackagePayment coursePackagePayment = couPayClient.getCoursePackagePaymentByCode(code);
                            if(coursePackagePayment.getPayStatus() == 2){
                                break;
                            }
                            ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryALIOrder(code);
                            if(resultUtil.getCode() == 200 && coursePackagePayment.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)){
                                    coursePackagePayment.setPayStatus(2);
                                    coursePackagePayment.setOrderNumber(tradeNo);
                                    couPayClient.updatePaymentCoursePackage(coursePackagePayment);
                                    break;
                                }
                                if("WAIT_BUYER_PAY".equals(s)){
                                    num++;
                                }
                            }
                        }
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            }).start();
        }
        return alipay;
    }
    public void PlaypaiGoldPayment(){
    public int PlaypaiGoldPayment(String code,ClasspaymentRequest request){
        PlayPaiGoldCoursePackage paiGoldCoursePackage = new PlayPaiGoldCoursePackage();
        paiGoldCoursePackage.setCoursePackageId(request.getLessonId());
        paiGoldCoursePackage.setStuId(request.getStuId());
        paiGoldCoursePackage.setCoursePayConfigId(request.getCourseConfigId());
        paiGoldCoursePackage.setCode(code);
        return couPayClient.paymentWanpaiRenewCourse(paiGoldCoursePackage);
    }
    @Override
    public ResultUtil insertVipPaymentCallback(String code, String orderNumber) {
        TCoursePackagePayment coursePackagePayment = couPayClient.getCoursePackagePaymentByCode(code);
        if(coursePackagePayment.getPayStatus() != 1){
            return ResultUtil.success();
        }
        coursePackagePayment.setPayStatus(2);
        coursePackagePayment.setOrderNumber(orderNumber);
        couPayClient.updatePaymentCoursePackage(coursePackagePayment);
        return ResultUtil.success();
    }
}
cloud-server-account/src/main/java/com/dsh/account/util/OssUploadUtil.java
New file
@@ -0,0 +1,39 @@
package com.dsh.account.util;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.ObjectMetadata;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
public class OssUploadUtil {
    //OSS图片访问域名
    public static String oss_domain = "https://newok.oss-cn-shenzhen.aliyuncs.com/";
    public static String accessKeyId = "LTAI4G9Zez9H4B36vakPXGy4";
    public static String accessKeySecret = "BOVPUeZndKVbrPOq6Ef5j6oiydB3XZ";
    public static String bucketName="newok";
    public static String endpoint = "oss-cn-shenzhen.aliyuncs.com";
    public static OSSClient ossClient = new OSSClient(endpoint, accessKeyId,accessKeySecret);
    public static String ossUpload(HttpServletRequest request, MultipartFile file) throws IOException{
        //CommonsMultipartFile file = (CommonsMultipartFile)multipartFile;
        String fileName = "";
            if(file!=null && !"".equals(file.getOriginalFilename()) && file.getOriginalFilename()!=null){
                InputStream content = file.getInputStream();//获得指定文件的输入流
                ObjectMetadata meta = new ObjectMetadata();// 创建上传Object的Metadata
                meta.setContentLength(file.getSize());  // 必须设置ContentLength
                String originalFilename = file.getOriginalFilename();
                fileName =  UUID.randomUUID().toString().replaceAll("-","") + originalFilename.subSequence(originalFilename.lastIndexOf("."), originalFilename.length());
                ossClient.putObject(bucketName,"img/"+fileName,content,meta);// 上传Object.
                if(fileName != null && !"".equals(fileName)){
                    System.out.println(fileName);
                    fileName = oss_domain+"img/"+fileName;
                }
            }
        return fileName;
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java
@@ -1,11 +1,15 @@
package com.dsh.activity.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dsh.activity.entity.Coupon;
import com.dsh.activity.entity.UserCoupon;
import com.dsh.activity.model.CouponListVo;
import com.dsh.activity.model.request.CommodityRequest;
import com.dsh.activity.model.request.CouponPackageReq;
import com.dsh.activity.model.response.CouponPackageResp;
import com.dsh.activity.service.ICouponService;
import com.dsh.activity.service.UserCouponService;
import com.dsh.activity.util.GDMapGeocodingUtil;
import com.dsh.activity.util.ResultUtil;
import com.dsh.activity.util.TokenUtil;
import io.swagger.annotations.ApiImplicitParam;
@@ -14,7 +18,10 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
 * @author zhibing.pu
@@ -32,6 +39,9 @@
    @Autowired
    private UserCouponService ucService;
    @Autowired
    private GDMapGeocodingUtil gdMapGeocodingUtil;
@@ -103,4 +113,46 @@
        }
    }
    @PostMapping("/base/coupon/getAllCoupons")
    public List<Coupon> getAllCoupons(@RequestBody CommodityRequest request){
        String provinceCode = "";
        String cityCode = "";
        try {
            Map<String, String> geocode = gdMapGeocodingUtil.geocode(request.getLon(), request.getLat());
            provinceCode = geocode.get("provinceCode");
            cityCode = geocode.get("cityCode");
        }catch (Exception e){
            e.printStackTrace();
        }
        try {
            Integer userAppId = tokenUtil.getUserIdFormRedis();
            List<UserCoupon> list = ucService.list(new QueryWrapper<UserCoupon>()
                    .eq("userId",userAppId ));
            List<Coupon> couponList = couponService.list(new QueryWrapper<Coupon>()
                    .eq("auditStatus",2)
                    .eq("state",1)
                    .eq("status",2));
            if (couponList.size() > 0 ){
                Iterator<Coupon> iterator = couponList.iterator();
                while (iterator.hasNext()) {
                    Coupon merchandise = iterator.next();
                    if (merchandise.getUseScope() == 2 && (!Objects.equals(merchandise.getCityCode(), cityCode) && !Objects.equals(merchandise.getProvinceCode(), provinceCode))) {
                        iterator.remove(); // 移除符合条件的商品
                    }
                }
            }
            return couponList;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    @PostMapping("/base/coupon/getRedeemedNums")
    public int getRedeemedQuantity(@RequestBody Integer id){
        return ucService.count(new QueryWrapper<UserCoupon>()
                .eq("couponId",id));
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java
@@ -3,16 +3,19 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dsh.activity.entity.PointsMerchandise;
import com.dsh.activity.entity.UserPointsMerchandise;
import com.dsh.activity.feignclient.model.IntegralCommodity;
import com.dsh.activity.model.request.CommodityRequest;
import com.dsh.activity.service.PointsMerchandiseService;
import com.dsh.activity.service.UserPointsMerchandiseService;
import com.dsh.activity.util.GDMapGeocodingUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.*;
@RestController
@RequestMapping("")
@@ -21,6 +24,12 @@
    @Autowired
    private PointsMerchandiseService pmdsService;
    @Autowired
    private GDMapGeocodingUtil gdMapGeocodingUtil;
    @Autowired
    private UserPointsMerchandiseService upmseService;
@@ -43,4 +52,37 @@
        return commodity;
    }
    @PostMapping("/base/pointMerchars/getCommoditys")
    public List<PointsMerchandise> getVicinityGoods(@RequestBody CommodityRequest request){
        String provinceCode = "";
        String cityCode = "";
        try {
            Map<String, String> geocode = gdMapGeocodingUtil.geocode(request.getLon(), request.getLat());
            provinceCode = geocode.get("provinceCode");
            cityCode = geocode.get("cityCode");
        }catch (Exception e){
            e.printStackTrace();
        }
        List<PointsMerchandise> list = pmdsService.list(new QueryWrapper<PointsMerchandise>()
                .eq("state", 1));
        if (list.size() > 0 ){
            Iterator<PointsMerchandise> iterator = list.iterator();
            while (iterator.hasNext()) {
                PointsMerchandise merchandise = iterator.next();
                if (merchandise.getUseScope() == 2 && (!Objects.equals(merchandise.getCityCode(), cityCode) && !Objects.equals(merchandise.getProvinceCode(), provinceCode))) {
                    iterator.remove(); // 移除符合条件的商品
                }
            }
        }
        return list;
    }
    @PostMapping("/base/pointMerchars/getRedeemedNums")
    public int getRedeemedQuantity(@RequestBody Integer goodId){
        return upmseService.count(new QueryWrapper<UserPointsMerchandise>()
                .eq("pointsMerchandiseId",goodId));
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/entity/Coupon.java
@@ -158,6 +158,16 @@
    @TableField("insertTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date insertTime;
    /**
     * 封面图
     */
    @TableField("cover")
    private String cover;
    /**
     * 图片
     */
    @TableField("productImages")
    private String productImages;
    @Override
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/MerChandiseClient.java
@@ -1,9 +1,12 @@
package com.dsh.activity.feignclient;
import com.dsh.activity.entity.PointsMerchandise;
import com.dsh.activity.feignclient.model.IntegralCommodity;
import com.dsh.activity.model.request.CommodityRequest;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
@@ -13,5 +16,10 @@
    @PostMapping("/base/pointMerchars/convertGoods")
    public List<IntegralCommodity> getConvertibleGoods();
    @PostMapping("/base/pointMerchars/getCommoditys")
    public List<PointsMerchandise> getVicinityGoods(@RequestBody CommodityRequest request);
    @PostMapping("/base/pointMerchars/getRedeemedNums")
    public int getRedeemedQuantity(@RequestBody Integer goodId);
}
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/UserConponClient.java
@@ -1,8 +1,11 @@
package com.dsh.activity.feignclient;
import com.dsh.activity.entity.Coupon;
import com.dsh.activity.feignclient.model.CouponStuAvailableVo;
import com.dsh.activity.model.request.CommodityRequest;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
@@ -14,4 +17,11 @@
    @PostMapping("/base/userConpon/getStuOfConpons")
    public List<CouponStuAvailableVo> queryUserWithConponList(@RequestParam("appUserId") Integer appUserId);
    @PostMapping("/base/coupon/getAllCoupons")
    public List<Coupon> getAllCoupons(@RequestBody CommodityRequest request);
    @PostMapping("/base/coupon/getRedeemedNums")
    public int getRedeemedQuantity(@RequestBody Integer id);
}
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/model/CoursePackage.java
@@ -81,7 +81,7 @@
     */
    private Integer sort;
    /**
     * 支付方式(1=现金,2=玩湃币)
     * 支付方式(1=微信 2=支付宝 3=玩湃币)
     */
    private Integer payType;
    /**
cloud-server-activity/src/main/java/com/dsh/activity/model/request/CommodityRequest.java
New file
@@ -0,0 +1,18 @@
package com.dsh.activity.model.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class CommodityRequest {
    @ApiModelProperty(value = "经度")
    private String lon;
    @ApiModelProperty(value = "纬度")
    private String lat;
}
cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java
@@ -63,8 +63,38 @@
    private IPaymentCompetitionService paymentCompetitionService;
    @PostMapping("/base/competition/getPayedCompetitions")
    public List<PaymentCompetition> getAllCompetitionPayRecord(@RequestBody Integer appUserId){
        List<Integer> integers = new ArrayList<>();
        integers.add(1);
        integers.add(2);
        return paymentCompetitionService.list(new QueryWrapper<PaymentCompetition>()
                .in("payType",integers)
                .eq("appUserId",appUserId)
                .eq("payStatus",2));
    }
    @PostMapping("/base/competition/getCancelOrderOfUserPay")
    public List<PaymentCompetition> getCancelOrderOfUserPayRecord(@RequestBody Integer appUserId){
        List<Integer> integers = new ArrayList<>();
        integers.add(1);
        integers.add(2);
        return paymentCompetitionService.list(new QueryWrapper<PaymentCompetition>()
                .in("payType",integers)
                .eq("appUserId",appUserId)
                .eq("payStatus",3));
    }
    @PostMapping("/base/competition/getPlayPaiFGoldPayRecord")
    public List<PaymentCompetition> getPlayPaiFGoldPayRecord(@RequestBody Integer appUserId){
        return paymentCompetitionService.list(new QueryWrapper<PaymentCompetition>()
                .eq("payType",3)
                .eq("appUserId",appUserId)
                .eq("payStatus",3));
    }
    @PostMapping("/base/competition/getCompetitionsDetails")
cloud-server-competition/src/main/java/com/dsh/competition/feignclient/DeductionCompetitionsClient.java
@@ -1,6 +1,7 @@
package com.dsh.competition.feignclient;
import com.dsh.competition.entity.PaymentCompetition;
import com.dsh.competition.feignclient.model.GetStuSourseList;
import com.dsh.competition.feignclient.model.PurchaseRecordVo;
import org.springframework.cloud.openfeign.FeignClient;
@@ -15,4 +16,13 @@
    @PostMapping("/base/competition/getCompetitionsDetails")
    public List<PurchaseRecordVo> getStuSourseList(@RequestBody GetStuSourseList sourseList);
    @PostMapping("/base/competition/getPayedCompetitions")
    List<PaymentCompetition> getAllCompetitionPayRecord(@RequestBody Integer appUserId);
    @PostMapping("/base/competition/getCancelOrderOfUserPay")
    public List<PaymentCompetition> getCancelOrderOfUserPayRecord(@RequestBody Integer appUserId);
    @PostMapping("/base/competition/getPlayPaiFGoldPayRecord")
    List<PaymentCompetition> getPlayPaiFGoldPayRecord(@RequestBody Integer appUserId);
}
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java
@@ -56,7 +56,9 @@
    @ApiOperation(value = "本周福利-限时折扣列表", tags = {"APP-使用福利"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
            @ApiImplicitParam(name = "discountType",value = "默认显示 限时折扣 (1限时折扣 2赠送课时)")
            @ApiImplicitParam(name = "discountType",value = "默认显示 限时折扣 (1限时折扣 2赠送课时)",dataType = "int"),
            @ApiImplicitParam(name = "lon",value = "经度",dataType = "String"),
            @ApiImplicitParam(name = "lat",value = "纬度",dataType = "String"),
    })
    public ResultUtil<WeekLimitedResponse> thisWeeksBenefitList(Integer discountType,String lon,String lat){
        try {
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
@@ -2,29 +2,20 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dsh.course.entity.TCoursePackage;
import com.dsh.course.entity.TCoursePackageDiscount;
import com.dsh.course.entity.TCoursePackagePayment;
import com.dsh.course.entity.TCoursePackageType;
import com.dsh.course.entity.*;
import com.dsh.course.feignclient.account.StudentClient;
import com.dsh.course.feignclient.account.AppUserClient;
import com.dsh.course.feignclient.account.model.AppUser;
import com.dsh.course.feignclient.model.*;
import com.dsh.course.model.BaseVo;
import com.dsh.course.model.dto.DiscountJsonDto;
import com.dsh.course.model.vo.CourseDetailRequest;
import com.dsh.course.model.vo.RegisterCourseVo;
import com.dsh.course.model.vo.request.ClasspaymentRequest;
import com.dsh.course.model.vo.request.CourseOfAfterRequest;
import com.dsh.course.model.vo.request.CourseWithDetailsRequest;
import com.dsh.course.model.vo.request.UpdateCourseVideoStatusRequest;
import com.dsh.course.model.vo.request.*;
import com.dsh.course.model.vo.response.AppUserVideoResponse;
import com.dsh.course.model.vo.response.CourseDetailsResponse;
import com.dsh.course.model.vo.response.CourseOfVideoResponse;
import com.dsh.course.service.*;
import com.dsh.course.util.DateUtil;
import com.dsh.course.util.ResultUtil;
import com.dsh.course.util.StrUtils;
import com.dsh.course.util.TokenUtil;
import com.dsh.course.util.*;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.Api;
@@ -72,6 +63,17 @@
    private CancelledClassesService cacService;
    @Autowired
    private ICoursePackagePaymentConfigService icppcService;
    @Autowired
    private UserVideoDetailsService uvdsService;
    @Autowired
    private TCourseService tcService;
    @Autowired
    private TCoursePackageTypeService coursePackageTypeService;
    @Autowired
@@ -79,6 +81,9 @@
    @Autowired
    private CancelledClassesService cancelledClassesService;
    @Autowired
    private AppUserClient appuClient;
    private final SimpleDateFormat format = new SimpleDateFormat("MM-dd HH:mm");
@@ -304,11 +309,23 @@
    @PostMapping("/base/coursePack/afterCourseTwos")
    public List<AfterVideoVo> getAfterCourseTwos(@RequestParam("appUserId") Integer appUserId){
        List<AfterVideoVo> videoVos = new ArrayList<>();
        List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>()
                .eq("appUserId", appUserId));
        List<Integer> coursePackageIds = tCoursePackagePayments.stream().map(TCoursePackagePayment::getCoursePackageId).collect(Collectors.toList());
//        List<PostCourseVideo> videoList = pcvService.queryAllVideoNoneShow(coursePackageIds);
        // TODO: 2023/7/6 两个课后视频
        List<UserVideoDetails> list = uvdsService.list(new QueryWrapper<UserVideoDetails>()
                .eq("appUserId",appUserId)
                .eq("state",1));
        if (list.size() > 0 ){
            List<Integer> courseIds = list.stream().map(UserVideoDetails::getCourseId).collect(Collectors.toList());
            List<TCourse> courseList = tcService.list(new QueryWrapper<TCourse>()
                    .in("id",courseIds)
                    .eq("type",1)
                    .eq("state",1)
                    .last("ORDER BY insertTime desc LIMIT 2"));
            for (TCourse tCourse : courseList) {
                AfterVideoVo videoVo = new AfterVideoVo();
                videoVo.setCourseId(tCourse.getId());
                videoVo.setCourseUrl(tCourse.getCourseVideo());
                videoVos.add(videoVo);
            }
        }
        return videoVos;
    }
@@ -317,6 +334,15 @@
        return packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>()
                .eq("appUserId",appUserId)
                .eq("payType",3)
                .eq("payStatus",2)
                .eq("state",1));
    }
    @PostMapping("/base/coursePack/allAmountPayRecordOfUser")
    public List<TCoursePackagePayment> getAmountPayRecord(@RequestBody Integer appUserId){
        return packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>()
                .eq("appUserId",appUserId)
                .notIn("payType",3)
                .eq("payStatus",2)
                .eq("state",1));
    }
@@ -478,14 +504,15 @@
    @ApiOperation(value = "已报名课程详情", tags = {"APP-开始上课"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
            @ApiImplicitParam(name = "coursePayId" ,value = "课包记录id",dataType = "long"),
    })
    public ResultUtil<CourseDetailsResponse> getRegisteredData( Integer coursePackageId){
    public ResultUtil<CourseDetailsResponse> getRegisteredData( Integer coursePayId){
        try {
            Integer appUserId = tokenUtil.getUserIdFormRedis();
            if(null == appUserId){
                return ResultUtil.tokenErr();
            }
            return ResultUtil.success(packagePaymentService.queryRegisteredCourseDetails(coursePackageId,appUserId));
            return ResultUtil.success(packagePaymentService.queryRegisteredCourseDetails(coursePayId,appUserId));
        }catch (Exception e){
            return ResultUtil.runErr();
        }
@@ -605,4 +632,61 @@
            e.printStackTrace();
        }
    }
    /**
     * 课包续费玩湃币支付
     * @param
     */
    @PostMapping("/coursePackagePayment/courseRenewPlayPaiPay")
    public int paymentWanpaiRenewCourse(@RequestBody PlayPaiGoldCoursePackage coursePackage){
        try {
            Integer userIdFormRedis = tokenUtil.getUserIdFormRedis();
            if (null == userIdFormRedis){
                return 2;
            }
            CoursePackagePaymentConfig paymentConfig = icppcService.getById(coursePackage.getCoursePayConfigId());
            AppUser appUser = appuClient.queryAppUser(userIdFormRedis);
            if (appUser.getPlayPaiCoins() < paymentConfig.getPlayPaiCoin()){
                return 3;
            }
            TCoursePackagePayment packagePayment = packagePaymentService.getOne(new QueryWrapper<TCoursePackagePayment>()
                    .eq("code",coursePackage.getCode() ));
            packagePayment.setPayStatus(2);
            packagePayment.setPayUserId(userIdFormRedis);
            packagePayment.setClassHours(paymentConfig.getClassHours());
            packagePayment.setPlayPaiCoin(paymentConfig.getPlayPaiCoin());
            packagePayment.setTotalClassHours(paymentConfig.getClassHours());
            packagePayment.setLaveClassHours(paymentConfig.getClassHours());
            packagePaymentService.updateById(packagePayment);
            appUser.setPlayPaiCoins(appUser.getPlayPaiCoins()-paymentConfig.getPlayPaiCoin());
            appuClient.updateAppUser(appUser);
        } catch (Exception e) {
            return 4;
        }
        return 1;
    }
    @PostMapping("/base/coursePack/getPaymentCoursePackage")
    public TCoursePackagePayment getCoursePackagePaymentByCode(@RequestBody String code){
        return packagePaymentService.getOne(new QueryWrapper<TCoursePackagePayment>()
                .eq("code",code));
    }
    @PostMapping("/base/coursePack/delPaymentCoursePackage")
    public boolean delPaymentCoursePackage(@RequestBody Integer payId){
        return packagePaymentService.removeById(payId);
    }
    @PostMapping("/base/coursePack/updatePaymentCoursePackage")
    public boolean updatePaymentCoursePackage(@RequestBody TCoursePackagePayment packagePayment){
        return packagePaymentService.update(packagePayment,new QueryWrapper<TCoursePackagePayment>()
                .eq("id",packagePayment.getId()));
    }
    @PostMapping("/base/coursePack/savePaymentCoursePackage")
    public boolean savePaymentCoursePackage(@RequestBody TCoursePackagePayment packagePayment){
        return packagePaymentService.save(packagePayment);
    }
}
cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java
@@ -3,6 +3,7 @@
import com.dsh.course.entity.TCoursePackagePayment;
import com.dsh.course.feignclient.model.*;
import com.dsh.course.model.vo.request.PlayPaiGoldCoursePackage;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -35,4 +36,26 @@
    @PostMapping("/base/coursePack/allPaymentCourseList")
    public List<TCoursePackagePayment> getAppuserCourseList(@RequestBody Integer appUserId);
    @PostMapping("/coursePackagePayment/courseRenewPlayPaiPay")
    public int paymentWanpaiRenewCourse(@RequestBody PlayPaiGoldCoursePackage coursePackage);
    @PostMapping("/base/coursePack/getPaymentCoursePackage")
    public TCoursePackagePayment getCoursePackagePaymentByCode(@RequestBody String payId);
    @PostMapping("/base/coursePack/delPaymentCoursePackage")
    public boolean delPaymentCoursePackage(@RequestBody Integer payId);
    @PostMapping("/base/coursePack/updatePaymentCoursePackage")
    public boolean updatePaymentCoursePackage(@RequestBody TCoursePackagePayment packagePayment);
    @PostMapping("/base/coursePack/savePaymentCoursePackage")
    public boolean savePaymentCoursePackage(@RequestBody TCoursePackagePayment packagePayment);
    @PostMapping("/base/coursePack/allAmountPayRecordOfUser")
    public List<TCoursePackagePayment> getAmountPayRecord(@RequestBody Integer appUserId);
}
cloud-server-course/src/main/java/com/dsh/course/model/vo/RegisterCourseVo.java
@@ -10,6 +10,9 @@
    @ApiModelProperty(value = "课包id")
    private Integer coursePackageId;
    @ApiModelProperty(value = "课包记录id")
    private Long coursePayId;
    @ApiModelProperty(value = "课包封面图")
    private String packageImg;
cloud-server-course/src/main/java/com/dsh/course/model/vo/request/ClasspaymentRequest.java
@@ -22,8 +22,8 @@
    @ApiModelProperty(value = "优惠券Id")
    private Integer conponId;
    @ApiModelProperty(value = "课时id")
    private Long courseConfigId;
    @ApiModelProperty(value = "支付记录id")
    private Long coursePayId;
}
cloud-server-course/src/main/java/com/dsh/course/model/vo/request/PlayPaiGoldCoursePackage.java
New file
@@ -0,0 +1,22 @@
package com.dsh.course.model.vo.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class PlayPaiGoldCoursePackage {
    @ApiModelProperty(value = "支付配置id")
    Integer coursePayConfigId;
    @ApiModelProperty(value = "学员id")
    Integer stuId;
    @ApiModelProperty(value = "课包id")
    Integer coursePackageId;
    @ApiModelProperty(value = "课包id")
    String code;
}
cloud-server-course/src/main/java/com/dsh/course/model/vo/response/CourseDetailsResponse.java
@@ -10,6 +10,9 @@
    @ApiModelProperty(value = "课包id")
    private Integer coursePackageId;
    @ApiModelProperty(value = "支付记录id")
    private Long coursePayId;
    @ApiModelProperty(value = "课包封面图")
    private String coverDrawing;
cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java
@@ -67,11 +67,11 @@
    /**
     * 获取已报名课包详情
     * @param coursePackageId
     * @param coursePayId
     * @param appUserId
     * @return
     */
    CourseDetailsResponse queryRegisteredCourseDetails(Integer coursePackageId, Integer appUserId);
    CourseDetailsResponse queryRegisteredCourseDetails(Integer coursePayId, Integer appUserId);
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java
@@ -6,7 +6,9 @@
import com.dsh.course.feignclient.account.CoachClient;
import com.dsh.course.feignclient.account.model.Coach;
import com.dsh.course.feignclient.activity.BenefitVideoClient;
import com.dsh.course.feignclient.activity.CouponClient;
import com.dsh.course.feignclient.activity.model.BenefitsVideos;
import com.dsh.course.feignclient.activity.model.Coupon;
import com.dsh.course.feignclient.other.StoreClient;
import com.dsh.course.feignclient.other.model.Store;
import com.dsh.course.mapper.*;
@@ -20,8 +22,10 @@
import com.dsh.course.model.vo.response.CourseDetailsResponse;
import com.dsh.course.model.vo.response.CourseOfVideoResponse;
import com.dsh.course.service.TCoursePackagePaymentService;
import com.dsh.course.util.PayMoneyUtil;
import com.dsh.course.util.ResultUtil;
import com.dsh.course.util.StrUtils;
import com.dsh.course.util.UUIDUtil;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
@@ -29,6 +33,7 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -74,6 +79,11 @@
    @Resource
    private TCoursePackageDiscountMapper tcpdMapper;
    @Resource
    private CouponClient client;
    @Autowired
    private PayMoneyUtil payMoneyUtil;
    /**
@@ -178,6 +188,7 @@
                TCoursePackage coursePackage = tcpmapper.selectById(tCoursePackagePayment.getCoursePackageId());
                Store store = stoClient.queryStoreById(coursePackage.getStoreId());
                RegisterCourseVo registerCourseVo = new RegisterCourseVo();
                registerCourseVo.setCoursePayId(tCoursePackagePayment.getId());
                registerCourseVo.setCoursePackageId(tCoursePackagePayment.getCoursePackageId());
                registerCourseVo.setPackageImg(coursePackage.getCoverDrawing());
                String storeAndCourse = coursePackage.getName()+"("+ store.getName() +")";
@@ -197,18 +208,16 @@
    }
    @Override
    public CourseDetailsResponse queryRegisteredCourseDetails(Integer coursePackageId, Integer appUserId) {
    public CourseDetailsResponse queryRegisteredCourseDetails(Integer coursePayId, Integer appUserId) {
        CourseDetailsResponse response = new CourseDetailsResponse();
        List<TCoursePackagePayment> tCoursePackagePayments = this.list(new QueryWrapper<TCoursePackagePayment>()
                .eq("coursePackageId",coursePackageId )
                .eq("appUserId",appUserId));
        TCoursePackagePayment tCoursePackagePayment = this.baseMapper.selectById(coursePayId);
        if (tCoursePackagePayments.size() > 0){
            TCoursePackagePayment tCoursePackagePayment = tCoursePackagePayments.get(0);
        if (null != tCoursePackagePayment){
            TCoursePackage coursePackage = tcpmapper.selectById(tCoursePackagePayment.getCoursePackageId());
            response.setCoursePackageId(tCoursePackagePayment.getCoursePackageId());
            response.setCoverDrawing(coursePackage.getCoverDrawing());
            response.setCoursePackageName(coursePackage.getName());
            response.setCoursePayId(tCoursePackagePayment.getId());
            List<Integer> integers = StrUtils.dealStrToList(coursePackage.getClassWeeks());
            if (integers.size() > 0){
                StringBuilder courWeeks = new StringBuilder("每");
@@ -282,16 +291,39 @@
    @Override
    public ResultUtil ContinuationOrpaymentCourse(Integer userIdFormRedis, ClasspaymentRequest request) {
        // TODO: 2023/7/5 报名课程支付
        TCoursePackagePayment tCoursePackagePayment = this.baseMapper.selectById(request.getCoursePayId());
        String code = "";
        if (tCoursePackagePayment.getPayStatus() == 1){
            code = tCoursePackagePayment.getCode();
        }else {
            TCoursePackagePayment newPayment = new TCoursePackagePayment();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
            newPayment.setCode(sdf.format(new Date()) + UUIDUtil.getNumberRandom(5));
            newPayment.setAppUserId(userIdFormRedis);
            newPayment.setStudentId(request.getStuId());
            newPayment.setCoursePackageId(request.getLessonId());
            newPayment.setClassHours(tCoursePackagePayment.getClassHours());
            newPayment.setOriginalPrice(tCoursePackagePayment.getOriginalPrice());
            newPayment.setTotalClassHours(tCoursePackagePayment.getTotalClassHours());
            newPayment.setLaveClassHours(tCoursePackagePayment.getTotalClassHours());
            newPayment.setAbsencesNumber(0);
            newPayment.setPayUserType(1);
            newPayment.setPayStatus(1);
            newPayment.setStatus(1);
            newPayment.setState(1);
            newPayment.setInsertTime(new Date());
            this.baseMapper.insert(newPayment);
            code = newPayment.getCode();
        }
        switch (request.getPayType()){
            case 1:
                WeChatPayment();
                WeChatPayment(code,request);
                break;
            case 2:
                AlipayPayment();
                AlipayPayment(code,request);
                break;
            case 3:
                PlaypaiGoldPayment();
                PlaypaiGoldPayment(code,request);
                break;
            default:
                break;
@@ -300,15 +332,72 @@
    }
    public void WeChatPayment(){
    public void WeChatPayment(String code, ClasspaymentRequest request){
    }
    public void AlipayPayment(){
    public ResultUtil AlipayPayment(String code, ClasspaymentRequest request){
        BigDecimal amount = BigDecimal.ZERO;
        if (request.getUseConpon() == 1){
            Coupon coupon = client.queryCouponById(request.getConponId());
            // TODO: 2023/7/11 课包购买的微信支付
        }
        ResultUtil alipay = payMoneyUtil.alipay("课包购买", "", "", code, amount.toString(),
                "/base/coursePackage/alipayNewPaymentCallback");
//        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);
//                            TCoursePackagePayment coursePackagePayment = couPayClient.getCoursePackagePaymentByCode(code);
//                            if(coursePackagePayment.getPayStatus() == 2){
//                                break;
//                            }
//                            ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryALIOrder(code);
//                            if(resultUtil.getCode() == 200 && coursePackagePayment.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)){
//                                    coursePackagePayment.setPayStatus(2);
//                                    coursePackagePayment.setOrderNumber(tradeNo);
//                                    couPayClient.updatePaymentCoursePackage(coursePackagePayment);
//                                    break;
//                                }
//                                if("WAIT_BUYER_PAY".equals(s)){
//                                    num++;
//                                }
//                            }
//                        }
//                    }catch (Exception e){
//                        e.printStackTrace();
//                    }
//                }
//            }).start();
//        }
        return alipay;
    }
    public void PlaypaiGoldPayment(){
    public void PlaypaiGoldPayment(String code, ClasspaymentRequest request){
    }