1
phpcjl
2024-12-16 decac42c276d690ca302f21655b5ea806a85a09f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
package com.ruoyi.other.controller;
 
 
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.account.api.feignClient.AppUserClient;
import com.ruoyi.account.api.feignClient.UserCouponClient;
import com.ruoyi.account.api.model.AppUser;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.other.api.domain.CouponInfo;
import com.ruoyi.other.api.domain.Goods;
import com.ruoyi.other.service.CouponInfoService;
import com.ruoyi.other.service.GoodsService;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
 
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
 
import java.time.LocalDateTime;
import java.util.ArrayList;
 
/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author luodangjia
 * @since 2024-11-20
 */
@RestController
@RequestMapping("/coupon-info")
public class CouponInfoController {
    @Resource
    private CouponInfoService couponInfoService;
    @Resource
    private TokenService tokenService;
    @Resource
    private AppUserClient appUserClient;
    @Resource
    private UserCouponClient userCouponClient;
    @Resource
    private GoodsService goodsService;
 
    @GetMapping("/list")
    @ApiOperation(value = "优惠劵管理-列表", tags = {"管理后台-活动管理"})
    public R<IPage<CouponInfo>> list(@RequestParam("pageNum") Integer pageNum,
                                     @RequestParam("pageSize") Integer pageSize,
                                     CouponInfo couponInfo) {
        IPage<CouponInfo> couponInfoIPage = couponInfoService.queryCouponInfoPage(Page.of(pageNum, pageSize), couponInfo);
        for (CouponInfo record : couponInfoIPage.getRecords()) {
            R<Long> r = userCouponClient.getCouponCount(record.getId());
            record.setSendNumNow(r.getData());
        }
        return R.ok(couponInfoIPage);
    }
 
 
    //查看详情
    @GetMapping("/detail")
    @ApiOperation(value = "优惠劵管理-详情", tags = {"管理后台-活动管理"})
    public R<CouponInfo> detail(@RequestParam("id") Integer id) {
        CouponInfo byId = couponInfoService.getById(id);
        byId.setGoodsNameList(JSON.parseArray(byId.getGoodsNameJson(), String.class));
        String forGoodIds = byId.getForGoodIds();
        if (StringUtils.isNotEmpty(forGoodIds)){
            List<Goods> goods = goodsService.listByIds(Arrays.asList(forGoodIds.split(",")));
            byId.setGoods(goods);
        }
        String personIds = byId.getPersonIds();
        if (StringUtils.isNotEmpty(personIds)){
            List<AppUser> appUserList = appUserClient.listByIds(Arrays.asList(personIds.split(",")));
            byId.setAppUserList(appUserList);
        }
 
        return R.ok(byId);
    }
 
    // 删除优惠劵
    @DeleteMapping("/delete")
    @ApiOperation(value = "优惠劵管理-删除", tags = {"管理后台-活动管理"})
    public R<Void> delete(@RequestParam("id") Integer id) {
        couponInfoService.removeById(id);
        return R.ok();
    }
 
    // 编辑优惠劵
    @PostMapping("/edit")
    @ApiOperation(value = "优惠劵管理-编辑", tags = {"管理后台-活动管理"})
    public R<Void> edit(@RequestBody CouponInfo couponInfo) {
        List<String> goodsNameList = couponInfo.getGoodsNameList();
        couponInfo.setGoodsNameJson(JSON.toJSONString(goodsNameList));
        couponInfoService.updateById(couponInfo);
        return R.ok();
    }
 
    // 修改上/下架状态
    @PostMapping("/editStatus")
    @ApiOperation(value = "优惠劵管理-修改上/下架状态", tags = {"管理后台-活动管理"})
    public R<Void> editStatus(@RequestParam("id") Integer id,
                               @RequestParam("shelfStatus") Integer shelfStatus) {
        CouponInfo couponInfo = new CouponInfo();
        couponInfo.setId(id);
        couponInfo.setShelfStatus(shelfStatus);
        couponInfoService.updateById(couponInfo);
        return R.ok();
    }
 
    // 添加优惠券
    @PostMapping("/add")
    @ApiOperation(value = "优惠劵管理-添加", tags = {"管理后台-活动管理"})
    public R<Void> add(@RequestBody CouponInfo couponInfo) {
        couponInfo.setShelfStatus(0);
        List<String> goodsNameList = couponInfo.getGoodsNameList();
        couponInfo.setGoodsNameJson(JSON.toJSONString(goodsNameList));
        couponInfoService.save(couponInfo);
        return R.ok();
    }
 
 
 
 
 
    @GetMapping("/gift/list")
    @ApiOperation(value = "待领取列表", tags = {"小程序-个人中心-优惠劵"})
    public R<List<CouponInfo>> giftlist() {
        Long userid = tokenService.getLoginUserApplet().getUserid();
        AppUser appUserById = appUserClient.getAppUserById(userid);
        LocalDateTime now = LocalDateTime.now();
        //查出全部可领取的优惠劵
        List<CouponInfo> list = couponInfoService.lambdaQuery().le(CouponInfo::getSendStartTime, now).ge(CouponInfo::getSendEndTime, now).eq(CouponInfo::getPersonType, 1).list();
        //查出指定人员可领取优惠券
        List<CouponInfo> list1 = couponInfoService.lambdaQuery().le(CouponInfo::getSendStartTime, now).ge(CouponInfo::getSendEndTime, now).eq(CouponInfo::getPersonType, 2).apply("FIND_IN_SET('" + appUserById.getId() + "', person_ids)").list();
        //查出指定会员可领取优惠劵
        List<CouponInfo> list2 = couponInfoService.lambdaQuery().le(CouponInfo::getSendStartTime, now).ge(CouponInfo::getSendEndTime, now).eq(CouponInfo::getPersonType, 3).apply("FIND_IN_SET('" + appUserById.getVipId() + "', person_ids)").list();
        List<CouponInfo> returnList = new ArrayList<>();
        count(userid, list, returnList);
        count(userid, list1, returnList);
        count(userid, list2, returnList);
 
 
        return R.ok(returnList);
    }
 
    private void count(Long userid, List<CouponInfo> list1, List<CouponInfo> returnList) {
        for (CouponInfo couponInfo : list1) {
            Long count = appUserClient.getCouponCount(userid, couponInfo.getId()).getData();
            couponInfo.setMaxNum(couponInfo.getMaxNum() - count.intValue());
            for (int i = 0; i < couponInfo.getMaxNum(); i++) {
                returnList.add(couponInfo);
            }
        }
    }
 
 
    /**
     * 根据id获取优惠券数据
     *
     * @param ids
     * @return
     */
    @ResponseBody
    @PostMapping("/getCouponInfoList")
    public R<List<CouponInfo>> getCouponInfoList(@RequestParam("ids") List<Integer> ids) {
        List<CouponInfo> couponInfos = couponInfoService.listByIds(ids);
        return R.ok(couponInfos);
    }
 
}