ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppCouponFallbackFactory.java
@@ -1,5 +1,6 @@ package com.ruoyi.account.api.factory; import com.ruoyi.account.api.dto.GrantCouponDto; import com.ruoyi.account.api.feignClient.AppCouponClient; import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.query.ExchangeRecordGoodsQuery; @@ -42,6 +43,11 @@ public R<PageInfo<ExchangeRecordVO>> getExchangeRecordByCouponId(ExchangeRecordGoodsQuery couponId) { return R.fail("根据优惠券id查询领取记录:"+throwable.getMessage()); } @Override public R grantCoupon(GrantCouponDto dto) { return null; } }; } } ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppCoupon.java
@@ -77,6 +77,10 @@ @TableField("orderId") private Long orderId; @ApiModelProperty(value = "当前领取优惠卷的json记录") @TableField("coupon_json") private String couponJson; } ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserVipDetail.java
@@ -9,6 +9,7 @@ import lombok.EqualsAndHashCode; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; /** @@ -38,6 +39,16 @@ @TableField("charge_num") private Integer chargeNum; @ApiModelProperty(value = "购买时折扣金额") @TableField("discount_money") private BigDecimal discountMoney; @ApiModelProperty(value = "该会员记录应赠送的充电次数") @TableField("send_charge_num") private Integer sendChargeNum; @ApiModelProperty(value = "会员id") @TableField("vip_id") private Integer vipId; @@ -55,7 +66,12 @@ @ApiModelProperty(value = "已赠送的月份") @TableField("send_month") private String sendMonth; private Integer sendMonth; @ApiModelProperty(value = "要赠送的优惠卷") @TableField("coupon_ids") private String couponIds; } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OtherFallbackFactory.java
@@ -6,6 +6,7 @@ import com.ruoyi.account.api.vo.CouponListVOVO; import com.ruoyi.common.core.domain.R; import com.ruoyi.other.api.domain.TCompany; import com.ruoyi.other.api.domain.TCoupon; import com.ruoyi.other.api.domain.TUserTag; import com.ruoyi.other.api.feignClient.OtherClient; import org.slf4j.Logger; @@ -85,6 +86,11 @@ public R<List<CouponListVOVO>> getCouponInfoByCouponIds(List<CouponListVOVO> list) { return R.fail("我的优惠券列表获取信息:"+throwable.getMessage()); } @Override public R<TCoupon> getCouponById(Integer id) { return R.fail("查询优惠卷:"+throwable.getMessage()); } }; } } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OtherClient.java
@@ -7,6 +7,7 @@ import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.other.api.domain.TCompany; import com.ruoyi.other.api.domain.TCoupon; import com.ruoyi.other.api.domain.TUserTag; import com.ruoyi.other.api.factory.OtherFallbackFactory; import org.springframework.cloud.openfeign.FeignClient; @@ -64,6 +65,10 @@ R<List<CouponListVOVO>> getCouponInfoByCouponIds(@RequestBody List<CouponListVOVO> list); @PostMapping(value = "/t-coupon/getCouponById") R<TCoupon> getCouponById(@RequestParam Integer id); ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
@@ -315,11 +315,11 @@ int plusDay = 0; if (giveVipDto.getType() == 1) { plusDay = 31; plusDay = 1; } else if (giveVipDto.getType() == 2) { plusDay = 93; plusDay = 3; } else if (giveVipDto.getType() == 3) { plusDay = 365; plusDay = 12; } //增加vipDetail giveVipUtil.sendVip(nowUser, giveVipDto.getVipId(),plusDay); ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/TAppUserVipDetailService.java
@@ -13,5 +13,5 @@ */ public interface TAppUserVipDetailService extends IService<TAppUserVipDetail> { void giveVipCoupun(Long appUserId, Integer vipId); void giveVipCoupun(Long appUserId, Integer vipId,Long recordId,Integer monthNum); } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppUserVipDetailServiceImpl.java
@@ -3,17 +3,24 @@ import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.account.api.dto.SendCouponDto; import com.ruoyi.account.api.feignClient.AppCouponClient; import com.ruoyi.account.api.model.TAppCoupon; import com.ruoyi.account.api.model.TAppUserVipDetail; import com.ruoyi.account.mapper.TAppUserVipDetailMapper; import com.ruoyi.account.service.TAppCouponService; import com.ruoyi.account.service.TAppUserVipDetailService; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.other.api.domain.TCoupon; import com.ruoyi.other.api.domain.TVip; import com.ruoyi.other.api.feignClient.OtherClient; import com.ruoyi.other.api.feignClient.VipClient; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; /** @@ -28,20 +35,45 @@ public class TAppUserVipDetailServiceImpl extends ServiceImpl<TAppUserVipDetailMapper, TAppUserVipDetail> implements TAppUserVipDetailService { @Resource private VipClient vipClient; @Resource private OtherClient otherClient; @Resource private TAppCouponService appCouponService; @Resource private TAppUserVipDetailService tAppUserVipDetailService; @Override public void giveVipCoupun(Long appUserId, Integer vipId) { //给这个用户发放对应vip的优惠卷以及充电次数加满 ,重置抵扣金额 R<TVip> info = vipClient.getInfo(vipId); TVip data = info.getData(); String coupon = data.getCoupon(); if (coupon!=null) { List<SendCouponDto> sendList = JSON.parseArray(coupon).toJavaList(SendCouponDto.class); for (SendCouponDto sendCouponDto : sendList) { public void giveVipCoupun(Long appUserId, Integer vipId,Long recordId,Integer monthNum) { //如果不包含,则更新sendNum,并且赠送优惠卷 TAppUserVipDetail byId = tAppUserVipDetailService.getById(recordId); if (byId.getStartTime().toLocalDate().plusMonths(byId.getSendMonth()).compareTo(LocalDate.now())==0&&LocalDate.now().isBefore(byId.getEndTime().toLocalDate())){ byId.setSendMonth(byId.getSendMonth()+1); //给这个用户发放对应vip的优惠卷以及充电次数加满 if (byId.getCouponIds()!=null) { String[] sendList = byId.getCouponIds().split(","); for (String sendCouponDto : sendList) { R<TCoupon> couponById = otherClient.getCouponById(Integer.valueOf(sendCouponDto)); TCoupon coupon = couponById.getData(); //将该优惠卷添加到用户优惠卷中 TAppCoupon tAppCoupon = new TAppCoupon(); tAppCoupon.setAppUserId(appUserId); tAppCoupon.setCouponId(Integer.valueOf(sendCouponDto)); if (coupon.getValidityPeriodMode() == 1) { tAppCoupon.setEndTime(coupon.getEndTime()); } else { tAppCoupon.setEndTime(LocalDateTime.now().plusDays(coupon.getDays())); } tAppCoupon.setWaysToObtain(4); tAppCoupon.setStatus(1); tAppCoupon.setCouponJson(JSON.toJSONString(coupon)); appCouponService.save(tAppCoupon); } } byId.setChargeNum(byId.getSendChargeNum()); tAppUserVipDetailService.updateById(byId); } } } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/task/TaskUtil.java
@@ -39,23 +39,10 @@ .orderByDesc(TAppUserVipDetail::getStartTime).list(); //判断sendNum是否包括当前月份 for (TAppUserVipDetail recentDetail : recentDetails) { if (recentDetail.getSendMonth()!=null&&recentDetail.getSendMonth().contains(monthNum+"")){ //如果包含,则不执行操作 continue; }else { //如果不包含,则更新sendNum,并且赠送优惠卷 TAppUserVipDetail byId = tAppUserVipDetailService.getById(recentDetail.getId()); if (byId==null){ byId.setSendMonth(byId.getSendMonth()+monthNum); }else{ byId.setSendMonth(","+byId.getSendMonth()+monthNum); } tAppUserVipDetailService.updateById(byId); //赠送优惠卷 tAppUserVipDetailService.giveVipCoupun(recentDetail.getAppUserId(), recentDetail.getVipId()); } tAppUserVipDetailService.giveVipCoupun(recentDetail.getAppUserId(), recentDetail.getVipId(),recentDetail.getId(),monthNum); } } catch (Exception e) { ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/GiveVipUtil.java
@@ -1,30 +1,54 @@ package com.ruoyi.account.util; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.ruoyi.account.api.dto.SendCouponDto; import com.ruoyi.account.api.model.TAppUser; import com.ruoyi.account.api.model.TAppUserVipDetail; import com.ruoyi.account.service.TAppUserVipDetailService; import com.ruoyi.common.core.domain.R; import com.ruoyi.other.api.domain.TVip; import com.ruoyi.other.api.feignClient.VipClient; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.List; @Component public class GiveVipUtil { @Resource private VipClient vipClient; @Resource private TAppUserVipDetailService tAppUserVipDetailService; public void sendVip(TAppUser nowUser,Integer vipId,Integer plusDay){ if (nowUser.getVipEndTime()==null||nowUser.getVipEndTime().isBefore(LocalDateTime.now())) { nowUser.setVipEndTime(LocalDateTime.now().plusDays(plusDay)); nowUser.setVipEndTime(LocalDateTime.now().plusMonths(plusDay)); //直接再detail里新增数据,因为不是续费 TAppUserVipDetail tAppUserVipDetail = new TAppUserVipDetail(); tAppUserVipDetail.setAppUserId(nowUser.getId()); tAppUserVipDetail.setStartTime(LocalDateTime.now()); tAppUserVipDetail.setEndTime(LocalDateTime.now().plusDays(plusDay)); tAppUserVipDetail.setEndTime(LocalDateTime.now().plusMonths(plusDay).minusDays(1)); tAppUserVipDetail.setVipId(vipId); R<TVip> info = vipClient.getInfo(vipId); TVip vip = info.getData(); List<SendCouponDto> javaList = JSON.parseArray(vip.getCoupon()).toJavaList(SendCouponDto.class); tAppUserVipDetail.setCouponIds(vip.getCoupon()); tAppUserVipDetail.setSendChargeNum(vip.getDiscountTimes()); tAppUserVipDetail.setChargeNum(vip.getDiscountTimes()); tAppUserVipDetail.setDiscountMoney(vip.getMaximumDeduction()); tAppUserVipDetailService.save(tAppUserVipDetail); //直接赠送优惠卷 }else { nowUser.setVipEndTime(nowUser.getVipEndTime().plusDays(plusDay)); //获取detail里结束时间大于当前时间的数据,并将enttime延长 @@ -33,8 +57,7 @@ TAppUserVipDetail newAppUser = new TAppUserVipDetail(); newAppUser.setAppUserId(nowUser.getId()); newAppUser.setStartTime(tAppUserVipDetail.getEndTime()); newAppUser.setEndTime(tAppUserVipDetail.getEndTime().plusDays(plusDay)); newAppUser.setEndTime(tAppUserVipDetail.getEndTime().plusMonths(plusDay).minusDays(1)); newAppUser.setVipId(vipId); tAppUserVipDetailService.save(newAppUser); // tAppUserVipDetail.setEndTime(tAppUserVipDetail.getEndTime().plusDays(plusDay)); ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TCouponController.java
@@ -115,6 +115,11 @@ return AjaxResult.ok(tCouponService.pageList(dto)); } @PostMapping(value = "/getCouponById") public R<TCoupon> getCouponById(@RequestParam Integer id) { return R.ok(tCouponService.getById(id)); } /** * 小程序远程调用 获取优惠券信息 */