cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java
@@ -382,8 +382,6 @@ } return ResultUtil.success(istuService.updateById(tStudent)); // return ResultUtil.success(istuService.commitEditStudentInfo(stu,userIdFormRedis)); } catch (Exception e) { return ResultUtil.runErr(); } cloud-server-account/src/main/java/com/dsh/account/controller/UseBenefitsController.java
@@ -8,6 +8,7 @@ import com.dsh.account.service.RechargeRecordsService; import com.dsh.account.service.TAppUserService; import com.dsh.account.service.UserIntegralChangesService; import com.dsh.account.util.PayMoneyUtil; import com.dsh.account.util.ResultUtil; import com.dsh.account.util.TokenUtil; import com.dsh.account.util.ToolUtil; @@ -20,8 +21,11 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.List; import java.util.Map; /** * 使用福利 控制器 @@ -48,6 +52,9 @@ private UserIntegralChangesService uicService; private final SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd"); @Autowired private PayMoneyUtil payMoneyUtil; @ResponseBody @@ -407,7 +414,7 @@ @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public synchronized ResultUtil productRedemptionOperation(GoodsExchangeVo exchangeType) { public ResultUtil productRedemptionOperation(GoodsExchangeVo exchangeType) { try { Integer userIdFormRedis = tokenUtil.getUserIdFormRedis(); if (null == userIdFormRedis) { @@ -420,6 +427,59 @@ } @ResponseBody @PostMapping("/base/coupon/weChatPaymentCouponCallback") public void weChatPaymentCouponCallback(HttpServletRequest request, HttpServletResponse response){ try { Map<String, String> map = payMoneyUtil.weixinpayCallback(request); if(null != map){ String code = map.get("out_trade_no"); String trade_no = map.get("transaction_id"); String result = map.get("result"); ResultUtil resultUtil = tauService.paymentCouponCallback(code, trade_no); if(resultUtil.getCode() == 200){ PrintWriter out = response.getWriter(); out.print(result); out.flush(); out.close(); } } }catch (Exception e){ e.printStackTrace(); } } @ResponseBody @PostMapping("/base/coupon/aliPaymentCouponCallback") public void aliPaymentCouponCallback(HttpServletRequest request, HttpServletResponse response){ try { Map<String, String> map = payMoneyUtil.alipayCallback(request); if(null != map){ String code = map.get("out_trade_no"); String trade_no = map.get("trade_no"); ResultUtil resultUtil = tauService.paymentCouponCallback(code, trade_no); if(resultUtil.getCode() == 200){ PrintWriter out = response.getWriter(); out.print("success"); out.flush(); out.close(); } } }catch (Exception e){ e.printStackTrace(); } } /** * 积分明细 */ cloud-server-account/src/main/java/com/dsh/account/entity/TStudent.java
@@ -104,6 +104,11 @@ */ @TableField("isDefault") private Integer isDefault; /** * 所有课时有效期 */ @TableField("validity") private Date validity; } cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/UserCouponPaymentClient.java
New file @@ -0,0 +1,37 @@ package com.dsh.account.feignclient.activity; import com.dsh.account.feignclient.activity.model.UserCouponPayment; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; /** * @author zhibing.pu * @Date 2023/11/28 11:10 */ @FeignClient(value = "mb-cloud-activity") public interface UserCouponPaymentClient { /** * 添加数据 * @param userCouponPayment */ @PostMapping("/userCouponPayment/addUserCouponPayment") void addUserCouponPayment(UserCouponPayment userCouponPayment); /** * 获取数据 * @param code * @return */ @PostMapping("/userCouponPayment/getUserCouponPayment") UserCouponPayment getUserCouponPayment(String code); /** * 修改数据 * @param userCouponPayment */ @PostMapping("/userCouponPayment/updateUserCouponPayment") void updateUserCouponPayment(UserCouponPayment userCouponPayment); } cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/UserCouponPayment.java
New file @@ -0,0 +1,64 @@ package com.dsh.account.feignclient.activity.model; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.util.Date; /** * @author zhibing.pu * @Date 2023/11/28 10:38 */ @Data public class UserCouponPayment { /** * 主键 */ private Long id; /** * 优惠券id */ private Integer couponId; /** * 用户id */ private Integer userId; /** * 支付状态(1=待支付,2=已支付) */ private Integer status; /** * 流水号 */ private String code; /** * 支付方式(1=积分兑换,2=积分+现金) */ private Integer payType; /** * 积分支付数量 */ private Integer integral; /** * 现金支付金额 */ private Double cash; /** * 现金支付方式(1=微信,2=支付宝) */ private Integer cashPayType; /** * 第三方支付流水号 */ private String orderNumber; /** * 支付时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date paymentTime; /** * 添加时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date insertTime; } cloud-server-account/src/main/java/com/dsh/account/model/Student.java
@@ -70,4 +70,9 @@ * 是否默认 1默认 2不是默认 */ private Integer isDefault; /** * 所有课时有效期 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date validity; } cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java
@@ -150,6 +150,16 @@ ResultUtil productRedemptionOperation(Integer userIdFormRedis, GoodsExchangeVo exchangeVo); /** * 优惠券支付回调处理 * @param code * @param orderNumber * @return */ ResultUtil paymentCouponCallback(String code, String orderNumber); ResultUtil exchangeAddPaymentCallback(String code, String orderNumber, Integer payType); List<StoreResponse> queryStoresOfExchange(Integer goodsType, Integer pointsMerId); cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
@@ -1,7 +1,6 @@ package com.dsh.account.service.impl; import com.alibaba.fastjson.JSONObject; import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.DefaultAlipayClient; @@ -19,15 +18,10 @@ import com.dsh.account.dto.*; import com.dsh.account.entity.*; import com.dsh.account.enums.RechargeRecordEnum; import com.dsh.account.feignclient.activity.IntroduceRewardsClient; import com.dsh.account.feignclient.activity.MerChandiseClient; import com.dsh.account.feignclient.activity.MerChandiseStoreClient; import com.dsh.account.feignclient.activity.UserConponClient; import com.dsh.account.feignclient.activity.*; import com.dsh.account.feignclient.activity.model.*; import com.dsh.account.feignclient.competition.DeductionCompetitionsClient; import com.dsh.account.feignclient.competition.model.BillingDataRequestVo; import com.dsh.account.feignclient.competition.model.PaymentCompetition; import com.dsh.account.feignclient.competition.model.PurchaseRecordVo; import com.dsh.account.feignclient.course.CoursePackageClient; import com.dsh.account.feignclient.course.CoursePackageConfigClient; import com.dsh.account.feignclient.course.CoursePaymentClient; @@ -37,7 +31,6 @@ import com.dsh.account.feignclient.other.RechargeConfigClient; import com.dsh.account.feignclient.other.SiteClient; import com.dsh.account.feignclient.other.StoreClient; import com.dsh.account.feignclient.other.model.SiteBooking; import com.dsh.account.feignclient.other.model.Store; import com.dsh.account.feignclient.other.model.StoreDetailOfCourse; import com.dsh.account.feignclient.other.model.TImgConfig; @@ -46,7 +39,6 @@ import com.dsh.account.model.AppUserByNameAndPhoneDTO; import com.dsh.account.model.dto.Coupon; import com.dsh.account.model.query.appUserQuery.QueryAppUser; import com.dsh.account.model.vo.DetailsListVo; import com.dsh.account.model.vo.QueryAppUserVO; import com.dsh.account.model.vo.classDetails.CourseVenue; import com.dsh.account.model.vo.classDetails.ExerciseVideo; @@ -156,9 +148,6 @@ private CoursePackageConfigClient cpconClient; @Resource private PayMoneyUtil payMoneyUtil; @Resource private SiteClient stClient; @Autowired private TAppUserMapper appUserMapper; @@ -182,6 +171,16 @@ private TAppUserService appUserService; @Resource private MerChandiseClient merChandiseClient; @Autowired private PayMoneyUtil payMoneyUtil; @Resource private UserCouponPaymentClient userCouponPaymentClient; // 对数据进行分页处理的方法 private static Page<Goods> getPage(List<Goods> dataList, Pageable pageable) { @@ -1281,9 +1280,6 @@ @Override @Transactional public synchronized ResultUtil productRedemptionOperation(Integer userIdFormRedis, GoodsExchangeVo exchangeType) { System.out.println("exchangeType:--->"); ReturnModel returnModel = new ReturnModel(); Long returnId = null; //如果是兑换优惠卷 @@ -1295,7 +1291,7 @@ queryIds.add(coupon.getId()); queryIds.add(userIdFormRedis); Integer counts = userConponClient.queryCounts(queryIds); if (coupon.getQuantityIssued() - counts == 0) { if (coupon.getQuantityIssued().compareTo(counts) == 0) { return new ResultUtil(0, "当前数量不足"); } //查询该用户是否超出限领数量 @@ -1304,40 +1300,56 @@ if (usercounts == coupon.getPickUpQuantity()) { return new ResultUtil<>(0, "限领数量已达最大"); } // userConponClient.queryCouponById(exchangeType.getGoodId()); UserCoupon userCoupon = new UserCoupon(); userCoupon.setCouponId(exchangeType.getGoodId()); userCoupon.setUserId(userIdFormRedis); userCoupon.setStatus(1); userCoupon.setInsertTime(new Date()); userConponClient.insertToAppuserCoupon(userCoupon); //扣积分 TAppUser user = appUserService.getById(userIdFormRedis); if (user.getIntegral() < coupon.getIntegral().intValue()) { return new ResultUtil<>(0, "当前用户积分不足"); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5); //生成支付订单 UserCouponPayment userCouponPayment = new UserCouponPayment(); userCouponPayment.setCouponId(exchangeType.getGoodId()); userCouponPayment.setUserId(userIdFormRedis); userCouponPayment.setStatus(1); userCouponPayment.setCode(code); userCouponPayment.setPayType(coupon.getRedemptionMethod()); userCouponPayment.setIntegral(coupon.getIntegral().intValue()); userCouponPayment.setCash(coupon.getCash().doubleValue()); userCouponPayment.setCashPayType(exchangeType.getPayType()); userCouponPayment.setInsertTime(new Date()); //积分兑换 if(coupon.getRedemptionMethod() == 1){ UserCoupon userCoupon = new UserCoupon(); userCoupon.setCouponId(exchangeType.getGoodId()); userCoupon.setUserId(userIdFormRedis); userCoupon.setStatus(1); userCoupon.setInsertTime(new Date()); userConponClient.insertToAppuserCoupon(userCoupon); //扣积分 TAppUser user = appUserService.getById(userIdFormRedis); if (user.getIntegral() < coupon.getIntegral().intValue()) { return new ResultUtil<>(0, "当前用户积分不足"); } user.setIntegral(user.getIntegral() - coupon.getIntegral().intValue()); appUserService.updateById(user); userCouponPayment.setStatus(2); userCouponPayment.setPaymentTime(new Date()); userCouponPaymentClient.addUserCouponPayment(userCouponPayment); return ResultUtil.success(returnId); } user.setIntegral(user.getIntegral() - coupon.getIntegral().intValue()); appUserService.updateById(user); //记录 // UserPointsMerchandise pointsMerchandise = new UserPointsMerchandise(); // pointsMerchandise.setPointsMerchandiseId(exchangeType.getGoodId()); // pointsMerchandise.setUserId(userIdFormRedis); // pointsMerchandise.setStatus(1); // pointsMerchandise.setState(1); // pointsMerchandise.setPayStatus(1); //// if (merchandise.getUseScope() == 3){ //// if (exchangeType.getGoodsType() == 2){ //// CoursePackage coursePackage = cpageClient.queryCoursePackageById(merchandise.getCoursePackageId()); //// pointsMerchandise.setStoreId(coursePackage.getStoreId()); //// }else { //// pointsMerchandise.setStoreId(exchangeType.getStoreId()); //// } //// } //// pointsMerchandise.setCode(code); // returnId = mcClient.saveDetailsUserPointMercase(pointsMerchandise); return ResultUtil.success(returnId); //积分+现金 if(coupon.getRedemptionMethod() == 1){ userCouponPaymentClient.addUserCouponPayment(userCouponPayment); try { if(exchangeType.getPayType() == 1){ return weChatPaymentCoupon("购买优惠券", userCouponPayment); } if(exchangeType.getPayType() == 2){ return aliPaymentCoupon("购买优惠券", userCouponPayment); } } catch (Exception e) { e.printStackTrace(); } } } @@ -1558,6 +1570,205 @@ } /** * 优惠券微信支付 * @param body * @param userCouponPayment * @return * @throws Exception */ public ResultUtil weChatPaymentCoupon(String body, UserCouponPayment userCouponPayment) throws Exception { String code = userCouponPayment.getCode(); Double cash = userCouponPayment.getCash(); ResultUtil weixinpay = payMoneyUtil.weixinpay(body, "", code, cash.toString(), "/base/coupon/weChatPaymentCouponCallback", "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); UserCouponPayment userCouponPayment1 = userCouponPaymentClient.getUserCouponPayment(code); if (userCouponPayment1.getStatus() == 2) { break; } ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryWXOrder(code, ""); if (resultUtil.getCode() == 200 && userCouponPayment1.getStatus() == 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) { //有待支付的订单,这里不处理 userCouponPayment1.setStatus(-1); userCouponPaymentClient.updateUserCouponPayment(userCouponPayment1); break; } if ("SUCCESS".equals(s)) { userCouponPayment1.setStatus(2); userCouponPayment1.setPaymentTime(new Date()); userCouponPayment1.setOrderNumber(transaction_id); userCouponPaymentClient.updateUserCouponPayment(userCouponPayment1); UserCoupon userCoupon = new UserCoupon(); userCoupon.setCouponId(userCouponPayment1.getCouponId()); userCoupon.setUserId(userCouponPayment1.getUserId()); userCoupon.setStatus(1); userCoupon.setInsertTime(new Date()); userConponClient.insertToAppuserCoupon(userCoupon); if(null != userCouponPayment1.getIntegral() && 0 != userCouponPayment1.getIntegral()){ //扣积分 TAppUser user = appUserService.getById(userCouponPayment1.getUserId()); user.setIntegral(user.getIntegral() - userCouponPayment1.getIntegral().intValue()); appUserService.updateById(user); } break; } if ("USERPAYING".equals(s)) { num++; } } } } catch (Exception e) { e.printStackTrace(); } } }).start(); } return weixinpay; } /** * 优惠券支付宝支付 * * @param uid * @param paymentPrice * @param paymentCourseVo * @return * @throws Exception */ public ResultUtil aliPaymentCoupon(String body, UserCouponPayment userCouponPayment) throws Exception { String code = userCouponPayment.getCode(); Double cash = userCouponPayment.getCash(); ResultUtil alipay = payMoneyUtil.alipay(body, body, "", code, cash.toString(), "/base/coupon/aliPaymentCouponCallback"); if (alipay.getCode() == 200) { new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(1000); int num = 1; int wait = 0; while (num <= 10) { int min = 5000; wait += (min * num); Thread.sleep(wait); UserCouponPayment userCouponPayment1 = userCouponPaymentClient.getUserCouponPayment(code); if (userCouponPayment1.getStatus() == 2) { break; } AlipayTradeQueryResponse alipayTradeQueryResponse = payMoneyUtil.queryALIOrder(code); if (null != alipayTradeQueryResponse) { /** * WAIT_BUYER_PAY(交易创建,等待买家付款)、 * TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、 * TRADE_SUCCESS(交易支付成功)、 * TRADE_FINISHED(交易结束,不可退款) */ String s = alipayTradeQueryResponse.getTradeStatus(); String tradeNo = alipayTradeQueryResponse.getTradeNo(); if ("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10) { //有待支付的订单,这里不处理 userCouponPayment1.setStatus(-1); userCouponPaymentClient.updateUserCouponPayment(userCouponPayment1); break; } if ("TRADE_SUCCESS".equals(s)) { userCouponPayment1.setStatus(2); userCouponPayment1.setPaymentTime(new Date()); userCouponPayment1.setOrderNumber(tradeNo); userCouponPaymentClient.updateUserCouponPayment(userCouponPayment1); UserCoupon userCoupon = new UserCoupon(); userCoupon.setCouponId(userCouponPayment1.getCouponId()); userCoupon.setUserId(userCouponPayment1.getUserId()); userCoupon.setStatus(1); userCoupon.setInsertTime(new Date()); userConponClient.insertToAppuserCoupon(userCoupon); if(null != userCouponPayment1.getIntegral() && 0 != userCouponPayment1.getIntegral()){ //扣积分 TAppUser user = appUserService.getById(userCouponPayment1.getUserId()); user.setIntegral(user.getIntegral() - userCouponPayment1.getIntegral().intValue()); appUserService.updateById(user); } break; } if ("WAIT_BUYER_PAY".equals(s)) { num++; } } } } catch (Exception e) { e.printStackTrace(); } } }).start(); } return alipay; } /** * 支付回调 * @param code * @param orderNumber * @return */ @Override public ResultUtil paymentCouponCallback(String code, String orderNumber) { UserCouponPayment userCouponPayment1 = userCouponPaymentClient.getUserCouponPayment(code); if (userCouponPayment1.getStatus() == 2) { return ResultUtil.success(); } userCouponPayment1.setStatus(2); userCouponPayment1.setPaymentTime(new Date()); userCouponPayment1.setOrderNumber(orderNumber); userCouponPaymentClient.updateUserCouponPayment(userCouponPayment1); UserCoupon userCoupon = new UserCoupon(); userCoupon.setCouponId(userCouponPayment1.getCouponId()); userCoupon.setUserId(userCouponPayment1.getUserId()); userCoupon.setStatus(1); userCoupon.setInsertTime(new Date()); userConponClient.insertToAppuserCoupon(userCoupon); if(null != userCouponPayment1.getIntegral() && 0 != userCouponPayment1.getIntegral()){ //扣积分 TAppUser user = appUserService.getById(userCouponPayment1.getUserId()); user.setIntegral(user.getIntegral() - userCouponPayment1.getIntegral().intValue()); appUserService.updateById(user); } return ResultUtil.success(); } public boolean dealAppUserIntegral(Integer appUserId, TAppUser appUser, Integer points) { try { if (ToolUtil.isEmpty(appUser.getIntegral()) || (ToolUtil.isNotEmpty(appUser.getIntegral()) && appUser.getIntegral() < points)) { cloud-server-activity/pom.xml
@@ -84,7 +84,6 @@ <artifactId>geodesy</artifactId> <version>1.1.3</version> </dependency> </dependencies> <build> cloud-server-activity/src/main/java/com/dsh/activity/controller/UserCouponPaymentController.java
New file @@ -0,0 +1,53 @@ package com.dsh.activity.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.dsh.activity.model.UserCouponPayment; import com.dsh.activity.service.IUserCouponPaymentService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; /** * @author zhibing.pu * @Date 2023/11/28 11:12 */ @RestController @RequestMapping("") public class UserCouponPaymentController { @Autowired private IUserCouponPaymentService userCouponPaymentService; /** * 添加数据 * @param userCouponPayment */ @ResponseBody @PostMapping("/userCouponPayment/addUserCouponPayment") public void addUserCouponPayment(@RequestBody UserCouponPayment userCouponPayment){ userCouponPaymentService.save(userCouponPayment); } /** * 获取数据 * @param code * @return */ @ResponseBody @PostMapping("/userCouponPayment/getUserCouponPayment") public UserCouponPayment getUserCouponPayment(@RequestBody String code){ return userCouponPaymentService.getOne(new QueryWrapper<UserCouponPayment>().eq("code", code)); } /** * 修改数据 * @param userCouponPayment */ @ResponseBody @PostMapping("/userCouponPayment/updateUserCouponPayment") public void updateUserCouponPayment(@RequestBody UserCouponPayment userCouponPayment){ userCouponPaymentService.updateById(userCouponPayment); } } cloud-server-activity/src/main/java/com/dsh/activity/mapper/UserCouponPaymentMapper.java
New file @@ -0,0 +1,11 @@ package com.dsh.activity.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dsh.activity.model.UserCouponPayment; /** * @author zhibing.pu * @Date 2023/11/28 10:44 */ public interface UserCouponPaymentMapper extends BaseMapper<UserCouponPayment> { } cloud-server-activity/src/main/java/com/dsh/activity/model/UserCouponPayment.java
New file @@ -0,0 +1,78 @@ package com.dsh.activity.model; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.util.Date; /** * @author zhibing.pu * @Date 2023/11/28 10:38 */ @Data @TableName("t_user_coupon_payment") public class UserCouponPayment { /** * 主键 */ @TableId(value = "id", type = IdType.NONE) private Long id; /** * 优惠券id */ @TableField("couponId") private Integer couponId; /** * 用户id */ @TableField("userId") private Integer userId; /** * 支付状态(1=待支付,2=已支付) */ @TableField("status") private Integer status; /** * 流水号 */ @TableField("code") private String code; /** * 支付方式(1=积分兑换,2=积分+现金) */ @TableField("payType") private Integer payType; /** * 积分支付数量 */ @TableField("integral") private Integer integral; /** * 现金支付金额 */ @TableField("cash") private Double cash; /** * 现金支付方式(1=微信,2=支付宝) */ @TableField("cashPayType") private Integer cashPayType; /** * 第三方支付流水号 */ @TableField("orderNumber") private String orderNumber; /** * 支付时间 */ @TableField("paymentTime") private Date paymentTime; /** * 添加时间 */ @TableField("insertTime") private Date insertTime; } cloud-server-activity/src/main/java/com/dsh/activity/service/IUserCouponPaymentService.java
New file @@ -0,0 +1,11 @@ package com.dsh.activity.service; import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.activity.model.UserCouponPayment; /** * @author zhibing.pu * @Date 2023/11/28 10:45 */ public interface IUserCouponPaymentService extends IService<UserCouponPayment> { } cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserCouponPaymentServiceImpl.java
New file @@ -0,0 +1,15 @@ package com.dsh.activity.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dsh.activity.mapper.UserCouponPaymentMapper; import com.dsh.activity.model.UserCouponPayment; import com.dsh.activity.service.IUserCouponPaymentService; import org.springframework.stereotype.Service; /** * @author zhibing.pu * @Date 2023/11/28 10:45 */ @Service public class UserCouponPaymentServiceImpl extends ServiceImpl<UserCouponPaymentMapper, UserCouponPayment> implements IUserCouponPaymentService { } cloud-server-activity/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java
@@ -89,8 +89,13 @@ props3.setProperty("algorithm-expression", "t_user_benefits_videos$->{appUserId % 5 + 1}"); result1.getShardingAlgorithms().put("t_user_benefits_videos-inline", new AlgorithmConfiguration("INLINE", props3)); result1.getKeyGenerators().put("t_user_benefits_videos-snowflake", new AlgorithmConfiguration("SNOWFLAKE", new Properties())); linkedList.add(result1); result1.getTables().add(getUserCouponTableRulePaymentConfiguration()); Properties props4 = new Properties(); props4.setProperty("algorithm-expression", "t_user_coupon_payment$->{userId % 5 + 1}"); result1.getShardingAlgorithms().put("t_user_coupon_payment-inline", new AlgorithmConfiguration("INLINE", props4)); result1.getKeyGenerators().put("t_user_coupon_payment-snowflake", new AlgorithmConfiguration("SNOWFLAKE", new Properties())); linkedList.add(result1); return linkedList; } @@ -132,4 +137,16 @@ return result; } /** * 分片算法配置 * * @return */ private ShardingTableRuleConfiguration getUserCouponTableRulePaymentConfiguration() { ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("t_user_coupon_payment", "m_$->{0}.t_user_coupon_payment$->{1..5}");//50 result.setTableShardingStrategy(new StandardShardingStrategyConfiguration("userId", "t_user_coupon_payment-inline")); result.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("id", "t_user_coupon_payment-snowflake")); return result; } } cloud-server-activity/src/main/resources/mapper/UserCouponPaymentMapper.xml
New file @@ -0,0 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dsh.activity.mapper.UserCouponPaymentMapper"> </mapper> cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
@@ -672,6 +672,7 @@ List<Integer> appUserIds = list.stream().map(CoursePackageOrderStudent::getAppUserId).collect(Collectors.toList()); List<CoursePackageOrderStudent> list1 = coursePackageOrderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>() .in("appUserId", appUserIds) .in("studentId", recordTimeRequest.getStuId()) .eq("coursePackageId", recordTimeRequest.getLessionId()) .eq("state", 1) ); @@ -896,7 +897,6 @@ Set<BaseVo> set = new HashSet<>(list); List<BaseVo> back = new ArrayList<>(set); return ResultUtil.success(back); } catch (Exception e) { e.printStackTrace(); @@ -914,25 +914,11 @@ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil<List<AppUserVideoResponse>> queryAfterSourceList(CourseOfAfterRequest search) throws Exception { // try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if (null == appUserId) { return ResultUtil.tokenErr(); } // // List<Integer> courseIds = new ArrayList<>(); // QueryWrapper<TCoursePackagePayment> queryWrapper = new QueryWrapper<TCoursePackagePayment>().eq("appUserId", appUserId) // .groupBy("coursePackageId"); // if (ToolUtil.isNotEmpty(search.getCourseTypeId())){ // queryWrapper.eq("coursePackageId",search.getCourseTypeId()); // } // List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.list(queryWrapper); // if (tCoursePackagePayments.size() > 0 ){ // courseIds = tCoursePackagePayments.stream().map(TCoursePackagePayment::getCoursePackageId).collect(Collectors.toList()); // } QueryWrapper<CoursePackageStudent> queryWrapper1 = new QueryWrapper<CoursePackageStudent>().eq("studentId", search.getStuId()); if (ToolUtil.isNotEmpty(search.getCourseTypeId())) { queryWrapper1.eq("coursePackageId", search.getCourseTypeId()); @@ -945,7 +931,6 @@ } System.out.println("======longs========" + longs); // List<CoursePackageScheduling> coursePackageSchedulings = coursePackageSchedulingService.list(new QueryWrapper<CoursePackageScheduling>().in("id",longs).isNotNull("courseId")); List<AppUserVideoResponse> coursePackageSchedulings1 = coursePackageSchedulingService.queryAll(longs); if (search.getSearch() != null) { @@ -960,11 +945,6 @@ } return ResultUtil.success(coursePackageSchedulings1); // }catch (Exception e){ // return ResultUtil.runErr(); // } } /** @@ -2266,7 +2246,9 @@ map.put("lon", lon); map.put("lat", lat); // 找出门店的所有课程 排出体验 List<TCoursePackage> list = tcpService.list(new LambdaQueryWrapper<TCoursePackage>().eq(TCoursePackage::getStoreId, courseDetailReq.getStoreId()).ne(TCoursePackage::getType, 3).eq(TCoursePackage::getState, 1).like(TCoursePackage::getClassWeeks, week)); List<TCoursePackage> list = tcpService.list(new LambdaQueryWrapper<TCoursePackage>() .eq(TCoursePackage::getStoreId, courseDetailReq.getStoreId()).ne(TCoursePackage::getType, 3) .eq(TCoursePackage::getState, 1).like(TCoursePackage::getClassWeeks, week)); List<Integer> collect = list.stream().map(TCoursePackage::getId).collect(Collectors.toList()); if (collect.size() == 0) { collect.add(-1); @@ -2278,14 +2260,14 @@ .in(CoursePackageScheduling::getCoursePackageId, collect) ); List<Integer> collect1 = list8.stream().map(CoursePackageScheduling::getCoursePackageId).collect(Collectors.toList()); // 找出购买的课包 List<CoursePackageOrderStudent> list1 = coursePackageOrderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>() .eq("appUserId", courseDetailReq.getAppUserId()) .eq("studentId", courseDetailReq.getStuId()) .in("coursePackageId", collect1) .eq("status", 1) .eq("state", 1) ); // // 找出购买的课包 // List<CoursePackageOrderStudent> list1 = coursePackageOrderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>() // .eq("appUserId", courseDetailReq.getAppUserId()) // .eq("studentId", courseDetailReq.getStuId()) // .in("coursePackageId", collect1) // .eq("status", 1) // .eq("state", 1) // ); cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java
@@ -421,8 +421,7 @@ @ResponseBody public void toClass(@RequestBody ToClassDto toClassDto) throws ParseException { System.out.println("===========到达getSelect=======" + toClassDto); TCoursePackagePayment orinPay = paymentService.getOne(new QueryWrapper<TCoursePackagePayment>().eq("id", toClassDto.getId())); TCoursePackagePayment orinPay = paymentService.getOne(new QueryWrapper<TCoursePackagePayment>().eq("id", toClassDto.getId())); TCoursePackagePayment studentPay = paymentService.getOne (new QueryWrapper<TCoursePackagePayment>() .eq("studentId", toClassDto.getToStudentId()) cloud-server-course/src/main/java/com/dsh/course/feignclient/account/UserIntegralChangesClient.java
New file @@ -0,0 +1,22 @@ package com.dsh.course.feignclient.account; import com.dsh.course.feignclient.account.model.SaveUserIntegralChangesVo; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; /** * @author zhibing.pu * @date 2023/7/12 11:40 */ @FeignClient("mb-cloud-account") public interface UserIntegralChangesClient { /** * 保存用户积分变动记录 * * @param vo */ @PostMapping("/userIntegralChanges/saveUserIntegralChanges") void saveUserIntegralChanges(SaveUserIntegralChangesVo vo); } cloud-server-course/src/main/java/com/dsh/course/feignclient/account/model/SaveUserIntegralChangesVo.java
New file @@ -0,0 +1,23 @@ package com.dsh.course.feignclient.account.model; import lombok.Data; /** * @author zhibing.pu * @date 2023/7/12 11:26 */ @Data public class SaveUserIntegralChangesVo { /** * 用户id */ private Integer appUserId; /** * 积分类型(1=赠送积分,2=兑换商品,3=完成课后练习,4=观看教学视频) */ private Integer type; /** * 积分 */ private Integer integral; } cloud-server-course/src/main/java/com/dsh/course/model/vo/request/UpdateCourseVideoStatusRequest.java
@@ -14,6 +14,9 @@ @ApiModelProperty(value = "课包id") private Integer coursePackageId; @ApiModelProperty(value = "排课id") private Long scId; @ApiModelProperty(value = "是否看完 1是 2否") private Integer isOver; cloud-server-course/src/main/java/com/dsh/course/service/ICoursePackageSchedulingService.java
@@ -34,7 +34,6 @@ List<AppUserVideoResponse> queryAll(List<Long> longs); void cancel(); /** cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java
@@ -84,36 +84,6 @@ * 定时修改状态 */ @Override public void cancel() { new Thread(new Runnable() { @Override public void run() { List<TCoursePackagePayment> list = packagePaymentService.list(); Date now = new Date(); List<Long> pays = new ArrayList<>(); for (TCoursePackagePayment coursePackagePayment : list) { if (now.before(coursePackagePayment.getUseTime())) { pays.add(coursePackagePayment.getId()); } } List<CoursePackageStudent> coursePackagePaymentId = coursePackageStudentService.list(new QueryWrapper<CoursePackageStudent>().in("coursePackagePaymentId", pays)); List<Long> scs = new ArrayList<>(); for (CoursePackageStudent coursePackageStudent : coursePackagePaymentId) { scs.add(coursePackageStudent.getCoursePackageSchedulingId()); } coursePackageStudentService.remove(new QueryWrapper<CoursePackageStudent>().in("coursePackagePaymentId", pays)); coursePackageSchedulingMapper.delete(new QueryWrapper<CoursePackageScheduling>().in("id", scs)); } }).start(); } /** * 定时修改状态 */ @Override public void taskSetStatus() { new Thread(new Runnable() { @Override cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java
@@ -18,10 +18,8 @@ import com.dsh.course.feignclient.account.AppUserClient; import com.dsh.course.feignclient.account.CoachClient; import com.dsh.course.feignclient.account.StudentClient; import com.dsh.course.feignclient.account.model.AppUser; import com.dsh.course.feignclient.account.model.Coach; import com.dsh.course.feignclient.account.model.Student; import com.dsh.course.feignclient.account.model.TCourseInfoRecord; import com.dsh.course.feignclient.account.UserIntegralChangesClient; import com.dsh.course.feignclient.account.model.*; import com.dsh.course.feignclient.activity.BenefitVideoClient; import com.dsh.course.feignclient.activity.CouponClient; import com.dsh.course.feignclient.activity.model.BenefitsVideos; @@ -118,9 +116,11 @@ @Autowired private ICoursePackageSchedulingService coursePackageSchedulingService; @Autowired private RestTemplate internalRestTemplate; @Resource private UserIntegralChangesClient userIntegralChangesClient; @Override @@ -326,7 +326,6 @@ @Override public CourseOfVideoResponse queryVideoDetails(CourseWithDetailsRequest detailsRequest, Integer appUserId) { CourseOfVideoResponse response = new CourseOfVideoResponse(); // BenefitsVideos videosWithIds = bfvoClient.getVideosWithIds(detailsRequest.getVideoId()); TCourse byId = courseService.getById(detailsRequest.getVideoId()); TCoursePackage coursePackage = tcpmapper.selectById(detailsRequest.getCoursePackageId()); CoursePackageScheduling byId1 = new CoursePackageScheduling(); @@ -373,6 +372,17 @@ userVideoDetails.setState(2); userVideoDetails.setUpdateTime(new Date()); uvdmapper.updateById(userVideoDetails); CoursePackageScheduling coursePackageScheduling = coursePackageSchedulingService.getById(detailsRequest.getScId()); //添加积分 AppUser appUser = appuClient.queryAppUser(coursePackageScheduling.getAppUserId()); appUser.setIntegral((null == appUser.getIntegral() ? 0 : appUser.getIntegral()) + (null == coursePackageScheduling.getIntegral() ? 0 : coursePackageScheduling.getIntegral())); appuClient.updateAppUser(appUser); SaveUserIntegralChangesVo vo = new SaveUserIntegralChangesVo(); vo.setAppUserId(coursePackageScheduling.getAppUserId()); vo.setIntegral(coursePackageScheduling.getIntegral()); vo.setType(4); userIntegralChangesClient.saveUserIntegralChanges(vo); return "SUCCESS"; } return "ERROR"; cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java
@@ -607,7 +607,6 @@ String[] split = coursePackage.getClassWeeks().split(";"); coursePackageInfo.setWeeks(Arrays.asList(split)); // 2.0 String classStartTime = coursePackage.getClassStartTime(); String classEndTime = coursePackage.getClassEndTime(); ArrayList<String> classTime = new ArrayList<>(); @@ -643,7 +642,6 @@ coursePackagePaymentConfigVo.setPayType(2); } // coursePackagePaymentConfigVo.setPayType(coursePackage.getPayType()); //会员显示原价和支付价(会员价)。非会员显示会员价和支付价(最低) // if(appUser.getIsVip() == 0){//非会员 List<TCoursePackageDiscount> list2 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId()) @@ -981,6 +979,9 @@ coursePackageOrder1.setOrderNumber(transaction_id); coursePackageOrder1.setAppUserId(null); coursePackageOrderService.updateById(coursePackageOrder1); //修改课时有效期 addCoursePackageOrderStudent(coursePackageOrder1.getId(), coursePackagePaymentConfig); break; } cloud-server-course/src/main/java/com/dsh/course/util/TaskUtil.java
@@ -91,15 +91,6 @@ /** * 零时任务 */ @Scheduled(cron = "0 0 23 * * *") public void zeroTask() { coursePackageSchedulingService.cancel(); } /** * 每周一执行的定时任务 */ @Scheduled(cron = "0 0 0 * * 2") cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackageStudent.js
@@ -42,16 +42,7 @@ } } } }, {title: '预定状态', field: 'reservationStatus', align: 'center', valign: 'middle',hidden:true, formatter: function (v) { if (v == 0) { return '已取消'; } else { return '正常'; } } }, } ]; return columns; }; cloud-server-other/src/main/java/com/dsh/other/controller/BannerController.java
@@ -85,25 +85,8 @@ @ApiImplicitParam(value = "位置(1=首页,2=首页底部,3=线上课得积分,4=看视频得奖励,5=常见问题)", name = "position", dataType = "int", required = true), }) public ResultUtil<List<BannerVo>> queryBannerList(Integer position) { // try { // List<Banner> list = bannerService.list(new QueryWrapper<Banner>().eq("position", position).eq("state", 1).orderByAsc("sort")); // if (position == 4) { List<BannerVo> list2 = bannerService.list1(position); return ResultUtil.success(list2); // } // List<BannerVo> list1 = new ArrayList<>(); // for (Banner banner : list) { // BannerVo bannerVo = new BannerVo(); // BeanUtils.copyProperties(banner, bannerVo); // list1.add(bannerVo); // } // return ResultUtil.success(list1); // }catch (Exception e){ // e.printStackTrace(); // return ResultUtil.runErr(); // } } cloud-server-other/src/main/java/com/dsh/other/model/BannerVo.java
@@ -25,4 +25,6 @@ private Integer turnId; @ApiModelProperty("跳转模块") private String model; @ApiModelProperty("跳转列表类型id") private Integer typeId; } cloud-server-other/src/main/resources/mapper/BannerMapper.xml
@@ -49,9 +49,10 @@ where position = 6 </select> <select id="list1" resultType="com.dsh.other.model.BannerVo"> select tb.id as id,tb.img as img, tb.page as page,tb.name as name,tb.type as type,tb.turnId as turnId , tb.model as model from t_banner tb where tb.position = #{position} and tb.state =1 select tb.id as id,tb.img as img, tb.page as page,tb.name as name,tb.type as type, tb.turnId as turnId , tb.model as model, tb.typeId from t_banner tb where tb.position = #{position} and tb.state =1 </select> </mapper>