zhibing.pu
2024-07-25 01d8de48c76467ff3b99b204e66d3ef86506fa52
ManagementIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/SysRedPacketRecordController.java
@@ -1,5 +1,6 @@
package com.stylefeng.guns.modular.system.controller.general;
import cn.hutool.system.UserInfo;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
@@ -9,7 +10,11 @@
import com.stylefeng.guns.core.shiro.ShiroUser;
import com.stylefeng.guns.core.util.DateUtil;
import com.stylefeng.guns.core.util.SinataUtil;
import com.stylefeng.guns.modular.system.model.TSystemNotice;
import com.stylefeng.guns.modular.system.model.TUser;
import com.stylefeng.guns.modular.system.model.UserRedPacketRecord;
import com.stylefeng.guns.modular.system.service.ITSystemNoticeService;
import com.stylefeng.guns.modular.system.service.ITUserService;
import com.stylefeng.guns.modular.system.service.IUserRedPacketRecordService;
import com.stylefeng.guns.modular.system.service.impl.UserServiceImpl;
import com.stylefeng.guns.modular.system.util.ResultUtil;
@@ -25,10 +30,7 @@
import com.stylefeng.guns.modular.system.service.ISysRedPacketRecordService;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import java.util.Random;
import java.util.*;
/**
 * 控制器
@@ -46,6 +48,14 @@
    private ISysRedPacketRecordService sysRedPacketRecordService;
    @Autowired
    private IUserRedPacketRecordService userRedPacketRecordService;
    @RequestMapping("/redRecord")
    public String index( Model model,Integer couponActivityId,Integer activityType) {
        model.addAttribute("activityType",activityType);
        model.addAttribute("couponActivityId",couponActivityId);
        return PREFIX + "userRedRecord.html";
    }
    /**
@@ -81,46 +91,117 @@
    }
    @Autowired
    private ITSystemNoticeService systemNoticeService;
    @Autowired
    private ITUserService userService;
    @RequestMapping(value = "/direct")
    @ResponseBody
    public ResultUtil direct(String ids, Integer redId) {
        System.err.println("========="+ids+"======="+redId);
        Double money = 0D;
        SysRedPacketRecord sysRedPacketRecord = sysRedPacketRecordService.selectById(redId);
        List<UserRedPacketRecord> redPacketActivityId = userRedPacketRecordService.selectList(new EntityWrapper<UserRedPacketRecord>().eq("redPacketActivityId", redId));
        double totalRemainingAmount = redPacketActivityId.stream()
                .mapToDouble(UserRedPacketRecord::getRemainingAmount)
                .sum();
        //还可发放的金额
        double v = sysRedPacketRecord.getTotalMoney().doubleValue() - totalRemainingAmount;
        if(null != sysRedPacketRecord){
            Integer type = sysRedPacketRecord.getType();
            if(type == 1){//固定金额
                money = Double.valueOf(String.valueOf(sysRedPacketRecord.getMoney()));
            }else{//随机金额
                Double startMoney = Double.valueOf(String.valueOf(sysRedPacketRecord.getStartMoney()));
                Double endMoney = Double.valueOf(String.valueOf(sysRedPacketRecord.getEndMoney()));
                int i = new BigDecimal(endMoney).subtract(new BigDecimal(startMoney)).intValue();
                Random random = new Random();
                int num = random.nextInt(i);
                money = new BigDecimal(startMoney).add(new BigDecimal(num)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
                //计算剩余金额是否够
                if (v-money*ids.split(",").length < 0){
                    return ResultUtil.error("当前红包剩余金额不足");
                }
            }
//            else{//随机金额
//                Double startMoney = Double.valueOf(String.valueOf(sysRedPacketRecord.getStartMoney()));
//                Double endMoney = Double.valueOf(String.valueOf(sysRedPacketRecord.getEndMoney()));
//                int i = new BigDecimal(endMoney).subtract(new BigDecimal(startMoney)).intValue();
//                Random random = new Random();
//                int num = random.nextInt(i);
//                money = new BigDecimal(startMoney).add(new BigDecimal(num)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
//            }
        }
        String[] split = ids.split(",");
        for (String s : split) {
        if(money > 0){
        if(money > 0||sysRedPacketRecord.getType()!=1){
            if (sysRedPacketRecord.getType()!=1){
                Double startMoney = Double.valueOf(String.valueOf(sysRedPacketRecord.getStartMoney()));
                Double endMoney = Double.valueOf(String.valueOf(sysRedPacketRecord.getEndMoney()));
                int i = new BigDecimal(endMoney).subtract(new BigDecimal(startMoney)).intValue();
                Random random = new Random();
                int num;
                if (!startMoney.equals(endMoney)){
                     num = random.nextInt(i);
                }else {
                    num = 0;
                }
                money = new BigDecimal(startMoney).add(new BigDecimal(num)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
                v=v-money;
                if (v<0){
                    return ResultUtil.success("当前红包为随机红包,可能有部分用户无法领取",null,"当前红包为随机红包,可能有部分用户无法领取");
                }
            }
            //添加临时红包数据
            UserRedPacketRecord userRedPacketRecord = new UserRedPacketRecord();
            userRedPacketRecord.setMoney(money);
            userRedPacketRecord.setRemainingAmount(money);
            userRedPacketRecord.setInsertTime(new Date());
            userRedPacketRecord.setCompanyId(1);
            userRedPacketRecord.setState(0);
            userRedPacketRecord.setState(1);
            userRedPacketRecord.setOrderId(null);
            userRedPacketRecord.setOrderType(3);
            userRedPacketRecord.setRedPacketActivityId(redId);
//            userRedPacketRecord.setOrderType(3);
            userRedPacketRecord.setUserId(Integer.valueOf(s));
            userRedPacketRecordService.insert(userRedPacketRecord);
            TUser tUser = userService.selectById(Integer.valueOf(s));
            Integer language = tUser.getLanguage();
            try {
                systemNoticeService.addSystemNotice(1, language == 1 ? "您收到一个额度为GHS"+money+"的红包,请查收。" : language == 2 ? "You have received a red envelope with a limit of GHS"+money+". Please check it." : "Vous recevez un paquet rouge avec une limite de ghs+"+money+", veuillez vérifier.", tUser.getId());
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        }
        return ResultUtil.success();
        return ResultUtil.success("指派成功",null,"当前红包为随机红包,可能有部分用户无法领取");
    }
    @RequestMapping(value = "/user/list")
    @ResponseBody
    public Object list(String createTime,String userName,String userPhone,Integer couponActivityId,Integer activityType,Integer state) {
        String beginTime = null;
        String endTime = null;
        if (SinataUtil.isNotEmpty(createTime)){
            String[] timeArray = createTime.split(" - ");
            beginTime = timeArray[0];
            endTime = timeArray[1];
        }
        Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
        page.setRecords(sysRedPacketRecordService.getList(page,beginTime,endTime,userName,userPhone,couponActivityId,activityType,state));
        return super.packForBT(page);
    }
    /**
     * 获取列表
     */