ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/CouponListDto.java
New file @@ -0,0 +1,20 @@ package com.ruoyi.account.api.dto; import com.ruoyi.common.core.web.domain.BasePojo; import com.ruoyi.common.core.web.page.BasePage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; @Data @ApiModel("小程序扫一扫获取优惠券列表DTO") public class CouponListDto extends BasePage { @ApiModelProperty("用户id 前端忽略") private Long userId; @ApiModelProperty("预付价格") private BigDecimal payMoney; } ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/GrantCouponDto.java
@@ -13,7 +13,7 @@ private String userIds; @ApiModelProperty("优惠券id") private Integer couponId; @ApiModelProperty("发放方式 1积分 2现金") @ApiModelProperty("发放方式 1积分 2现金 3=后台赠送前端忽略") private Integer waysToObtain; @ApiModelProperty("结束时间 前端忽略") private LocalDateTime endTime; ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppCouponClient.java
@@ -1,5 +1,6 @@ package com.ruoyi.account.api.feignClient; import com.ruoyi.account.api.dto.GrantCouponDto; import com.ruoyi.account.api.factory.AppCouponFallbackFactory; import com.ruoyi.account.api.factory.AppUserFallbackFactory; import com.ruoyi.account.api.query.ExchangeRecordGoodsQuery; @@ -40,4 +41,9 @@ */ @PostMapping("/t-app-coupon/getExchangeRecordByCouponId") R<PageInfo<ExchangeRecordVO>> getExchangeRecordByCouponId(@RequestBody ExchangeRecordGoodsQuery couponId); /** * 后台远程调用 给用户发放优惠券 */ @PostMapping("/t-app-coupon/grantCoupon") R grantCoupon(@RequestBody GrantCouponDto dto); } ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/CouponListVOVO.java
New file @@ -0,0 +1,41 @@ package com.ruoyi.account.api.vo; import com.ruoyi.common.core.web.domain.BasePojo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.beans.factory.annotation.Autowired; import java.math.BigDecimal; import java.time.LocalDateTime; @Data @ApiModel("管理后台 优惠券兑换记录列表返回VO") public class CouponListVOVO extends BasePojo { @ApiModelProperty(value = "优惠券名称") private String couponName; @ApiModelProperty(value = "优惠方式 1满减 2折扣") private Integer preferentialMode; @ApiModelProperty(value = "满减--优惠金额") private BigDecimal discountAmount; @ApiModelProperty(value = "满减--使用门槛 满减条件") private BigDecimal meetTheConditions; @ApiModelProperty(value = "折扣--折扣") private BigDecimal discount; @ApiModelProperty(value = "折扣--最高折扣金额") private BigDecimal maximumDiscountAmount; @ApiModelProperty(value = "优惠券数量") private Integer couponCount; @ApiModelProperty(value = "有效期") private String validityTime; @ApiModelProperty(value = "结束时间 前端忽略") private LocalDateTime endTime; @ApiModelProperty(value = "是否可用") private Integer isUse; @ApiModelProperty(value = "优惠券id") private Long couponId; @ApiModelProperty(value = "优惠券id") private BigDecimal payMoney; @ApiModelProperty(value = "最高折扣金额 用于判断哪一张优惠券优惠力度最大 前端忽略") private BigDecimal money; } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OtherFallbackFactory.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.account.api.dto.TagListQueryDto; import com.ruoyi.account.api.dto.UnitListQueryDto; 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.TUserTag; @@ -79,6 +80,11 @@ public R<Map<Integer, String>> getVipMap(List<Integer> ids) { return R.fail("获取会员map:" + throwable.getMessage()); } @Override public R<List<CouponListVOVO>> getCouponInfoByCouponIds(List<CouponListVOVO> list) { return R.fail("我的优惠券列表获取信息:"+throwable.getMessage()); } }; } } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OtherClient.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.account.api.dto.TagListQueryDto; import com.ruoyi.account.api.dto.UnitListQueryDto; import com.ruoyi.account.api.vo.CouponListVOVO; import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.other.api.domain.TCompany; @@ -56,7 +57,11 @@ @PostMapping(value = "/vip/getVipMap") R<Map<Integer, String>> getVipMap(@RequestBody List<Integer> ids); /** * 小程序远程调用 获取优惠券信息 */ @PostMapping(value = "/t-coupon/getCouponInfoByCouponIds") R<List<CouponListVOVO>> getCouponInfoByCouponIds(@RequestBody List<CouponListVOVO> list); ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java
@@ -2,15 +2,20 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.account.api.dto.CouponListDto; import com.ruoyi.account.api.dto.GrantCouponDto; import com.ruoyi.account.api.model.TAppCoupon; import com.ruoyi.account.api.query.ExchangeRecordGoodsQuery; import com.ruoyi.account.api.vo.CouponListVOVO; import com.ruoyi.account.api.vo.ExchangeRecordVO; import com.ruoyi.account.service.TAppCouponService; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.BasePage; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.other.api.domain.TCoupon; import com.ruoyi.other.api.feignClient.OtherClient; import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; @@ -35,6 +40,24 @@ public class TAppCouponController { @Autowired private TAppCouponService tAppCouponService; @Autowired private OtherClient otherClient; /** * 查询用户可用优惠券数量 * @param dto * @return */ @ApiOperation(value = "选择优惠券分页查询", tags = {"小程序-扫一扫"}) @PostMapping(value = "/scan/couponList") public AjaxResult<PageInfo<CouponListVOVO>> couponList(@RequestBody CouponListDto dto) { // todo token获取用户id Long userId = 11L; dto.setUserId(userId); PageInfo<CouponListVOVO> res = tAppCouponService.couponList(dto); return AjaxResult.ok(res); } /** * 管理后台远程调用 根据优惠券ids 查询对应的发放数量 @@ -46,11 +69,11 @@ List<Integer> res = new ArrayList<>(); String[] split = couponIds.split(","); // 查询每个优惠券的发放数量 List<TAppCoupon> couponId = tAppCouponService.list(new QueryWrapper<TAppCoupon>() .in("coupon_id", Arrays.asList(split))); for (String s : split) { res.add(tAppCouponService.list(new QueryWrapper<TAppCoupon>() .eq("coupon_id", s)).size()); .eq("coupon_id", s) .eq("del_flag",0) ).size()); } return R.ok(res); } @@ -80,7 +103,7 @@ * 后台远程调用 给用户发放优惠券 */ @PostMapping("/grantCoupon") public R getExchangeRecordByCouponId(@RequestBody GrantCouponDto dto){ public R grantCoupon(@RequestBody GrantCouponDto dto){ List<TAppCoupon> res = new ArrayList<>(); for (String s : dto.getUserIds().split(",")) { TAppCoupon tAppCoupon = new TAppCoupon(); ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
@@ -7,11 +7,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.account.api.dto.*; import com.ruoyi.account.api.model.*; import com.ruoyi.account.api.vo.CouponListVOVO; import com.ruoyi.account.service.*; import com.ruoyi.account.util.GiveVipUtil; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.bean.BeanUtils; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.domain.BasePojo; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.order.api.feignClient.ChargingOrderClient; import com.ruoyi.order.api.feignClient.ExchangeOrderClient; @@ -67,10 +70,11 @@ @Resource private ExchangeOrderClient exchangeOrderClient; @ApiOperation(value = "管理后台-根据手机号查询用户ids", tags = {"管理后台-活动费用统计"}) @PostMapping(value = "/user/getUserIdsByPhone") public R<List<Long>> getUserIdsByPhone(@RequestParam("phone") String phone) { return R.ok(appUserService.list(new QueryWrapper<TAppUser>().like("phone",phone)).stream().map(TAppUser::getId).collect(Collectors.toList())); } @Resource ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/mapper/TAppCouponMapper.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.account.api.model.TAppCoupon; import com.ruoyi.account.api.query.ExchangeRecordGoodsQuery; import com.ruoyi.account.api.vo.CouponListVOVO; import com.ruoyi.account.api.vo.ExchangeRecordVO; import com.ruoyi.common.core.web.page.PageInfo; import org.apache.ibatis.annotations.Param; @@ -20,4 +21,7 @@ public interface TAppCouponMapper extends BaseMapper<TAppCoupon> { List<ExchangeRecordVO> pageList(@Param("pageInfo")PageInfo<ExchangeRecordVO> pageInfo,@Param("req") ExchangeRecordGoodsQuery dto); List<CouponListVOVO> couponList(@Param("pageInfo")PageInfo<CouponListVOVO> pageInfo,@Param("userId") Long userId); } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/TAppCouponService.java
@@ -1,9 +1,12 @@ package com.ruoyi.account.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.account.api.dto.CouponListDto; import com.ruoyi.account.api.model.TAppCoupon; import com.ruoyi.account.api.query.ExchangeRecordGoodsQuery; import com.ruoyi.account.api.vo.CouponListVOVO; import com.ruoyi.account.api.vo.ExchangeRecordVO; import com.ruoyi.common.core.web.page.BasePage; import com.ruoyi.common.core.web.page.PageInfo; /** @@ -17,4 +20,7 @@ public interface TAppCouponService extends IService<TAppCoupon> { PageInfo<ExchangeRecordVO> pagelist(ExchangeRecordGoodsQuery couponId); PageInfo<CouponListVOVO> couponList(CouponListDto dto); } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppCouponServiceImpl.java
@@ -1,15 +1,19 @@ package com.ruoyi.account.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.account.api.dto.CouponListDto; import com.ruoyi.account.api.model.TAppCoupon; import com.ruoyi.account.api.query.ExchangeRecordGoodsQuery; import com.ruoyi.account.api.vo.CouponListVOVO; import com.ruoyi.account.api.vo.ExchangeRecordVO; import com.ruoyi.account.mapper.TAppCouponMapper; import com.ruoyi.account.service.TAppCouponService; import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.web.page.BasePage; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.order.api.feignClient.OrderClient; import com.ruoyi.other.api.domain.TCoupon; import com.ruoyi.other.api.feignClient.OtherClient; import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -32,6 +36,8 @@ @Autowired private OrderClient orderClient; @Autowired private OtherClient otherClient; @Override public PageInfo<ExchangeRecordVO> pagelist(ExchangeRecordGoodsQuery dto) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @@ -98,4 +104,17 @@ pageInfo.setRecords(list); return pageInfo; } @Override public PageInfo<CouponListVOVO> couponList(CouponListDto dto) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); PageInfo<CouponListVOVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize()); List<CouponListVOVO> list = this.baseMapper.couponList(pageInfo,dto.getUserId()); for (CouponListVOVO couponListVOVO : list) { couponListVOVO.setValidityTime("有效期:"+format.format(couponListVOVO.getCreateTime())+" - "+format.format(couponListVOVO.getEndTime())); } List<CouponListVOVO> data = otherClient.getCouponInfoByCouponIds(list).getData(); pageInfo.setRecords(data); return pageInfo; } } ruoyi-service/ruoyi-account/src/main/resources/mapper/account/TAppCouponMapper.xml
@@ -57,5 +57,24 @@ </where> ORDER BY create_time DESC </select> <select id="couponList" resultType="com.ruoyi.account.api.vo.CouponListVOVO"> SELECT t1.app_user_id AS appUserId, t1.coupon_id AS couponId, MAX(t1.end_time) AS endTime, MAX(t1.create_time) AS createTime, MAX(t1.status) AS status, COUNT(*) AS couponCount FROM t_app_coupon t1 WHERE t1.del_flag = 0 AND t1.app_user_id = #{userId} AND t1.status = 1 and t1.endTime >= now() GROUP BY t1.coupon_id, t1.end_time </select> </mapper> ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TCouponController.java
@@ -4,7 +4,9 @@ import com.ruoyi.account.api.dto.GrantCouponDto; import com.ruoyi.account.api.feignClient.AppCouponClient; import com.ruoyi.account.api.query.ExchangeRecordGoodsQuery; import com.ruoyi.account.api.vo.CouponListVOVO; import com.ruoyi.account.api.vo.ExchangeRecordVO; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.other.api.domain.TCoupon; @@ -18,6 +20,7 @@ import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -89,8 +92,8 @@ return AjaxResult.ok(data); } @ApiOperation(tags = {"管理后台-优惠券管理"},value = "发放优惠券") @GetMapping(value = "/pageList") public AjaxResult pageList(@RequestBody GrantCouponDto dto) { @GetMapping(value = "/grantCoupon") public AjaxResult grantCoupon(@RequestBody GrantCouponDto dto) { TCoupon byId = tCouponService.getById(dto.getCouponId()); Integer waysToObtain = byId.getWaysToObtain(); dto.setWaysToObtain(waysToObtain); @@ -102,13 +105,50 @@ dto.setEndTime(LocalDateTime.now().plusDays(byId.getDays())); break; } // 远程送优惠券 appCouponClient.grantCoupon(dto); return AjaxResult.success(); } @ApiOperation(tags = {"管理后台-优惠券管理"},value = "优惠券列表分页查询") @PostMapping(value = "/pageList") public AjaxResult<PageInfo<TCoupon>> pageList(@RequestBody CouponQuery dto) { return AjaxResult.ok(tCouponService.pageList(dto)); } /** * 小程序远程调用 获取优惠券信息 */ @PostMapping(value = "/getCouponInfoByCouponIds") public R<List<CouponListVOVO>> getCouponInfoByCouponIds(@RequestBody List<CouponListVOVO> list) { for (CouponListVOVO couponListVOVO : list) { TCoupon byId = tCouponService.getById(couponListVOVO.getCouponId()); BeanUtils.copyProperties(byId,couponListVOVO); couponListVOVO.setCouponName(byId.getName()); // 根据预付金额 判断是否满足 if (byId.getMeetTheConditions().compareTo(BigDecimal.ZERO) == 0){ // 无门槛 couponListVOVO.setIsUse(1); }else if (couponListVOVO.getPayMoney().compareTo(byId.getMeetTheConditions()) < 0){ couponListVOVO.setIsUse(0); }else{ couponListVOVO.setIsUse(1); } // 根据优惠券类型和预付金额 判断哪一个优惠券减免的金额最大 将其排在第一位 if (couponListVOVO.getIsUse() == 1){ switch (byId.getPreferentialMode()){ case 1: couponListVOVO.setMoney(byId.getDiscountAmount()); break; case 2: break; } }else{ couponListVOVO.setMoney(BigDecimal.ZERO); } } return R.ok(list); } }