无关风月
2025-01-10 2c258c39133435fa0e6e6da85d503982fd5a967d
manage/src/main/java/com/jilongda/manage/controller/TCouponController.java
@@ -1,9 +1,50 @@
package com.jilongda.manage.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jilongda.common.basic.ApiResult;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.common.utils.UUIDUtil;
import com.jilongda.manage.dto.TModelDTO;
import com.jilongda.manage.model.TAppUser;
import com.jilongda.manage.model.TCoupon;
import com.jilongda.manage.model.TCouponReceive;
import com.jilongda.manage.model.TModel;
import com.jilongda.manage.query.TAppUserQuery;
import com.jilongda.manage.query.TCouponQuery;
import com.jilongda.manage.service.TAppUserService;
import com.jilongda.manage.service.TCouponReceiveService;
import com.jilongda.manage.service.TCouponService;
import com.jilongda.manage.utils.OssUploadUtil;
import com.jilongda.manage.utils.QRCodeUtil;
import com.jilongda.manage.vo.TAppUserVO;
import com.jilongda.manage.vo.TCouponInfoVO;
import com.jilongda.manage.vo.TCouponVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.tomcat.util.http.fileupload.ByteArrayOutputStream;
import org.springframework.beans.BeanUtils;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
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 org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
/**
 * <p>
@@ -14,8 +55,138 @@
 * @since 2024-12-09
 */
@RestController
@Api(tags = "优惠券管理")
@RequestMapping("/t-coupon")
public class TCouponController {
    @Resource
    private TCouponService couponService;
    @Resource
    private TCouponReceiveService couponReceiveService;
    @Resource
    private TAppUserService appUserService;
    @ApiOperation(value = "优惠券列表")
    @PostMapping(value = "/pageList")
    public ApiResult<PageInfo<TCouponVO>> pageList(@RequestBody TCouponQuery query) {
        PageInfo<TCouponVO> appUserVOPageInfo = couponService.pageList(query);
        return ApiResult.success(appUserVOPageInfo);
    }
    @ApiOperation(value = "添加优惠券")
    @PostMapping(value = "/add")
    public ApiResult<String> add( @RequestBody TCoupon dto) throws Exception {
        if (dto.getType()==1||dto.getType()==4)dto.setGrantStatus(1);
        couponService.save(dto);
        switch (dto.getType()){
            case 2:
                // 全局发放
                List<Integer> collect = appUserService.lambdaQuery().list().stream()
                        .map(TAppUser::getId).collect(Collectors.toList());
                List<TCouponReceive> tCouponReceives = new ArrayList<>();
                for (Integer i : collect) {
                    TCouponReceive tCouponReceive = new TCouponReceive();
                    tCouponReceive.setCouponId(dto.getId());
                    tCouponReceive.setUserId(i);
                    tCouponReceive.setType(2);
                    tCouponReceive.setAmount(dto.getAmount());
                    tCouponReceive.setStoreId(dto.getStoreId());
                    if (dto.getTime()!=0){
                        tCouponReceive.setEndTime(LocalDateTime.now().plusDays(dto.getTime()));
                    }
                    tCouponReceive.setAmountCondition(dto.getAmountCondition());
                    tCouponReceive.setStatus(1);
                    tCouponReceive.setCouponName(dto.getName());
                    tCouponReceives.add(tCouponReceive);
                }
                couponReceiveService.saveBatch(tCouponReceives);
                break;
            case 3:
                List<TCouponReceive> tCouponReceives1 = new ArrayList<>();
                for (Integer userId : dto.getUserIds()) {
                    TCouponReceive tCouponReceive = new TCouponReceive();
                    tCouponReceive.setCouponId(dto.getId());
                    tCouponReceive.setUserId(userId);
                    tCouponReceive.setType(3);
                    tCouponReceive.setAmount(dto.getAmount());
                    tCouponReceive.setStoreId(dto.getStoreId());
                    if (dto.getTime()!=0){
                        tCouponReceive.setEndTime(LocalDateTime.now().plusDays(dto.getTime()));
                    }
                    tCouponReceive.setAmountCondition(dto.getAmountCondition());
                    tCouponReceive.setStatus(1);
                    tCouponReceive.setCouponName(dto.getName());
                    tCouponReceives1.add(tCouponReceive);
                }
                couponReceiveService.saveBatch(tCouponReceives1);
                break;
            case 4:
                String code = "{\"id\": "+dto.getId()+ "}";
                BufferedImage blueImage = QRCodeUtil.createImage(code);
                MultipartFile blueFile = convert(blueImage, new Date().getTime() + UUIDUtil.getRandomCode(3) + ".PNG");
                String s = OssUploadUtil.ossUpload("eyes/", blueFile);
                dto.setQrCode(s);
                couponService.updateById(dto);
                return ApiResult.success(s);
        }
        return ApiResult.success();
    }
    @ApiOperation(value = "暂停发放 只有type为1和4的时候")
    @PostMapping(value = "/stop")
    public ApiResult stop(Integer id) throws Exception {
        TCoupon byId = couponService.getById(id);
        byId.setGrantStatus(2);
        couponService.updateById(byId);
        return ApiResult.success();
    }
    @ApiOperation(value = "修改优惠券")
    @PostMapping(value = "/update")
    public ApiResult<String> update( @RequestBody TCoupon dto) throws Exception {
        couponService.updateById(dto);
        return ApiResult.success();
    }
    @ApiOperation(value = "优惠券详情")
    @PostMapping(value = "/getDetail")
    public ApiResult<TCouponInfoVO> getDetail(Integer id) {
        TCouponInfoVO tCouponInfoVO = new TCouponInfoVO();
        TCoupon byId = couponService.getById(id);
        BeanUtils.copyProperties(byId, tCouponInfoVO);
        int size = couponReceiveService.list(new LambdaQueryWrapper<TCouponReceive>()
                .eq(TCouponReceive::getCouponId, id)).size();
        tCouponInfoVO.setGrantCout(size);
        int size1 = couponReceiveService.list(new LambdaQueryWrapper<TCouponReceive>()
                .eq(TCouponReceive::getCouponId, id)
                .eq(TCouponReceive::getStatus, 2)).size();
        tCouponInfoVO.setUseCount(size1);
        if (byId.getType()==3){
            // 查询领取人
            List<Integer> collect = couponReceiveService.lambdaQuery()
                    .eq(TCouponReceive::getCouponId, id).list()
                    .stream().map(TCouponReceive::getUserId)
                    .distinct()
                    .collect(Collectors.toList());
            tCouponInfoVO.setUserIds(collect);
        }
        return ApiResult.success(tCouponInfoVO);
    }
    public static MultipartFile convert(BufferedImage bufferedImage, String fileName) throws IOException {
        // 将 BufferedImage 转换为字节数组
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write(bufferedImage, "png", baos);
        byte[] bytes = baos.toByteArray();
        // 创建 ByteArrayResource
        ByteArrayResource resource = new ByteArrayResource(bytes);
        // 创建 MockMultipartFile
        MockMultipartFile multipartFile = new MockMultipartFile(
                "file",
                fileName,
                "image/png",
                resource.getInputStream()
        );
        return multipartFile;
    }
}