xiaoyong931011
2023-10-25 c08844c08e64ad79f25a7e68bbc3f41fea3cded8
src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java
@@ -3,27 +3,38 @@
import cc.mrbird.febs.common.enumerates.AgentLevelEnum;
import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
import cc.mrbird.febs.common.utils.MallUtils;
import cc.mrbird.febs.mall.entity.ChatGroup;
import cc.mrbird.febs.mall.entity.ChatUser;
import cc.mrbird.febs.mall.entity.MallMember;
import cc.mrbird.febs.mall.entity.MallMoneyFlow;
import cc.mrbird.febs.mall.mapper.ChatGroupMapper;
import cc.mrbird.febs.mall.mapper.ChatUserMapper;
import cc.mrbird.febs.mall.mapper.MallMemberMapper;
import cc.mrbird.febs.mall.mapper.MallMoneyFlowMapper;
import cc.mrbird.febs.mall.service.IApiMallMemberService;
import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
import cc.mrbird.febs.mall.service.IMemberProfitService;
import cc.mrbird.febs.mall.service.impl.CommonService;
import cc.mrbird.febs.mall.vo.AdminChatRedBagVo;
import cc.mrbird.febs.rabbit.producter.AgentProducer;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
import java.util.List;
import java.util.Random;
/**
 * @author wzy
@@ -33,54 +44,112 @@
@Component
public class ProfitJob {
    @Autowired
    private MallMoneyFlowMapper moneyFlowMapper;
    @Resource
    private ChatUserMapper chatUserMapper;
    @Autowired
    private MallMemberMapper memberMapper;
    @Resource
    private ChatGroupMapper chatGroupMapper;
    @Autowired
    private IApiMallMemberWalletService memberWalletService;
    @Resource
    private AgentProducer agentProducer;
    @Autowired
    private IApiMallMemberService memberService;
    @Scheduled(cron = "0 0 1 * * ?")
    @Transactional(rollbackFor = Exception.class)
    /**
     * 代理分红
     */
    @Scheduled(cron = "0 0/1 * * * ? ")
    @Scheduled(cron = "0/2 * * * * ? ")
//    @Scheduled(cron = "0/30 * * * * ? ")
    public void profitJob() {
        DateTime yesterday = DateUtil.yesterday();
        List<MallMoneyFlow> flows = moneyFlowMapper.selectMoneyFlowProfitByDate(yesterday);
        QueryWrapper<ChatGroup> objectQueryWrapper = new QueryWrapper<>();
        objectQueryWrapper.eq("auto_send", 1);
        List<ChatGroup> chatGroups = chatGroupMapper.selectList(objectQueryWrapper);
        if(CollUtil.isNotEmpty(chatGroups)){
            for(ChatGroup chatGroup : chatGroups){
                agentProducer.sendAutoSendMsg(chatGroup.getId());
            }
        }
    }
        if (CollUtil.isEmpty(flows)) {
            return;
//    @Scheduled(cron = "0/2 * * * * ? ")
//    @Scheduled(cron = "0 0 0/1 * * ? ")
//    public void robotNickNameJob() {
//        List<ChatUser> chatUsers = chatUserMapper.selectListByIsRobot(1);
//        if(CollUtil.isNotEmpty(chatUsers)){
//            for(ChatUser chatUser : chatUsers){
//                chatUserMapper.updateNicknameById(chatUser.getUserId(),randomName(RandomUtil.randomInt(1, 5)));
//            }
//        }
//    }
//    @Scheduled(cron = "0/2 * * * * ? ")
    @Scheduled(cron = "0 0 0/1 * * ? ")
    public void returnRedBagAmount() {
        List<AdminChatRedBagVo> adminChatRedBagVos = chatUserMapper.selectByOverDueStatueAndTime(2, DateUtil.date());
        if(CollUtil.isNotEmpty(adminChatRedBagVos)){
            for(AdminChatRedBagVo adminChatRedBagVo : adminChatRedBagVos){
                chatUserMapper.updateOverdueStatusById(1,adminChatRedBagVo.getId());
                agentProducer.sendOverdueSendMsg(adminChatRedBagVo.getId());
            }
        }
    }
    public static String randomName(Integer len){
        len=len<2? 2:len;
        StringBuilder name = new StringBuilder();
        String na = "赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦" +
                "章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞袁柳鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝安常于傅" +
                "齐康伍余元顾孟黄穆萧尹姚邵湛汪祁毛禹狄米明计成戴宋茅庞熊纪舒屈项祝董梁杜" +
                "阮蓝闵席季贾路娄危江童颜郭梅林钟徐邱骆高夏蔡田樊胡";
        Random random=new Random();
        int nextInt = random.nextInt(na.length() - 1);
        name.append(na.charAt(nextInt));
//        String me = "承月施韵浦镜强辉伟晴世彦圆鉴凯运吉峰傲轩拂勋健净励柏福晋年常文悠颜建帆丰锦毅睿迪厉昌炎俊豫泉展冠飞雪传忠力平幽阳融材实刚理光浅商星奋照侠满厚宁广明勇潭雄壮鼎贵煊闻仕荣永易馨琢卡遥霄彬何均湛群东飘怀安城观翱石敬织豪杉朴保捷军" +
//                "笑柔秋嫣灵儿悠润怜听睿莉忆蓉醉桐海含怀卿娅明芸佑玫歆茵雨珊花如娇江幼薇凤沛柳霜晓黛絮沁媛洁冰奇佳兔芙菊慧裳蓝映夜可盈又瑾微婉迪婷琳真雪鸣影琴烟月杏妹娜倚辰舒柯芝任傲悦梦楠岚彩虞菱雅以竹艺蕾嫦孤丽林优迎琼" +
//                "骏宇玄璀紫子全超益莉信美奎琪豪浩槐文巧治瑜雯诗涵曦嵘天誉喜伟嘉欣卿钰勇寅天宸兵祥运昊泽仁淳轩子泳瑶源杰正驿豪财熙海辉辉天华峻龙嘉诚嘉运财喜伟天俊熙熙利君帝云海伟熙霞艳宗书文国熙林天录熙明俊敬贵艺心艾悦思甜帅梅莲婷伯沁苹苗龙尔" +
//                "仕墨驿森桥丹东墨满阳骏鹏毓昆金宇宇木金豪天洋宇捷治智浩泽搏朗桐喜伊萱彤正裕馨湘锦湘玉元坤子侦山水茂阳海乐晨杰高启夫玉舟凌璇雨扬晨亭艳昊洋晴雨雨晨雨辰骞娴颖晞朝晓小蕾雯悦月秋绮书彤诗韬羿程惠忻";
//
//        for (int i = 0; i < len-1; i++) {
//            int anInt = random.nextInt(me.length()-1);
//            name.append(me.charAt(anInt));
//        }
        char[] chars = {'张', '王', '李', '赵', '刘', '陈', '杨', '黄', '吴',
                '周', '徐', '孙', '马', '朱', '胡', '郭', '何', '高', '林',
                '罗', '郑', '梁', '谢', '宋', '唐', '许', '邓', '冯', '韩',
                '曹', '曾', '彭', '萧', '蔡', '潘', '田', '董', '袁', '于',
                '余', '叶', '蒋', '杜', '苏', '魏', '程', '吕', '丁', '沈',
                '任', '姚', '卢', '姜', '崔', '钟', '谭', '陆', '汪', '范',
                '金', '石', '廖', '贾', '夏', '韦', '付', '方', '白', '邹',
                '孟', '熊', '秦', '邱', '江', '尹', '薛', '闫', '段', '雷',
                '侯', '龙', '史', '陶', '黎', '贺', '顾', '毛', '郝', '龚',
                '邵', '万', '钱', '严', '覃', '武', '戴', '莫', '孔', '向',
                '汤', '安', '祝', '福', '柯', '柴', '翟', '宁', '房', '滕',
                '屈', '饶', '解', '牛', '艾', '尤', '丰', '阳', '时', '穆',
                '冉', '牟', '殷', '毕', '邬', '安', '常', '乐', '于', '时',
                '傅', '皮', '卫', '齐', '康', '伍', '余', '元', '卜', '顾',
                '孟', '平', '黄', '和', '穆', '萧', '尹', '姚', '邵', '湛',
                '汪', '祁', '毛', '禹', '狄', '米', '贝', '明', '藏', '计',
                '伏', '成', '戴', '谈', '宋', '茅', '庞', '熊', '纪', '舒',
                '屈', '项', '祝', '董', '梁', '杜', '阮', '蓝', '闵', '席',
                '季', '麻', '强', '贾', '路', '娄', '危', '江', '童', '颜',
                '郁', '胥', '柳', '鲍', '史', '唐', '费', '岑', '薛', '雷',
                '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安',
                '常', '乐', '于', '时', '傅', '皮', '卫', '齐', '康', '伍',
                '余', '元', '卜', '顾', '孟', '平', '黄', '和', '穆', '萧',
                '尹', '姚', '邵', '湛', '汪', '祁', '毛', '禹', '狄', '米',
                '贝', '明', '藏', '计', '伏', '成', '戴', '谈', '宋', '茅',
                '庞', '熊', '纪', '舒', '屈', '项', '祝', '董', '梁', '杜',
                '阮', '蓝', '闵', '席', '季', '麻', '强', '贾', '路', '娄',
                '危', '江', '童', '颜', '郁', '胥', '柳', '鲍', '史', '唐',
                '费', '岑', '薛', '雷', '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安', '常', '乐', '于', '时', '傅', '皮', '卫', '齐', '康', '伍', '余', '元', '卜', '顾', '孟', '平', '黄', '和', '穆', '萧', '尹', '姚', '邵', '湛', '汪', '祁', '毛', '禹', '狄', '米', '贝', '明', '藏', '计', '伏', '成', '戴', '谈', '宋', '茅', '庞', '熊', '纪', '舒', '屈', '项', '祝', '董', '梁', '杜', '阮', '蓝', '闵', '席', '季', '麻', '强', '贾', '路', '娄', '危', '江', '童', '颜', '郁', '胥', '柳', '鲍', '史', '唐', '费', '岑', '薛', '雷', '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安', '常', '乐', '于', '时', '傅', '皮', '卫', '齐', '康', '伍', '余', '元', '卜', '顾', '孟', '平', '黄', '和', '穆', '萧', '尹', '姚', '邵', '湛', '汪', '祁', '毛', '禹', '狄', '米', '贝', '明', '藏', '计', '伏', '成', '戴', '谈', '宋', '茅', '庞', '熊', '纪', '舒', '屈', '项', '祝', '董', '梁', '杜', '阮', '蓝', '闵', '席', '季', '麻', '强', '贾', '路', '娄', '危', '江', '童', '颜', '郁', '胥', '柳', '鲍', '史', '唐', '费', '岑', '薛', '雷', '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安', '常', '乐', '于', '时', '傅', '皮', '卫', '齐', '康', '伍', '余', '元', '卜', '顾', '孟', '平', '黄', '和', '穆', '萧', '尹', '姚', '邵', '湛', '汪', '祁', '毛', '禹', '狄', '米', '贝', '明', '藏', '计', '伏', '成', '戴', '谈', '宋', '茅', '庞', '熊', '纪', '舒', '屈', '项', '祝', '董', '梁', '杜', '阮', '蓝', '闵', '席', '季', '麻', '强', '贾', '路', '娄', '危', '江', '童', '颜', '郁', '胥', '柳', '鲍', '史', '唐', '费', '岑', '薛', '雷', '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安', '常', '乐', '于', '时', '傅', '皮', '卫', '齐', '康', '伍', '余', '元', '卜', '顾', '孟', '平', '黄', '和', '穆', '萧', '尹', '姚', '邵', '湛', '汪', '祁', '毛', '禹', '狄', '米', '贝', '明', '藏', '计', '伏', '成', '戴', '谈', '宋', '茅', '庞', '熊', '纪', '舒', '屈', '项', '祝', '董', '梁', '杜', '阮', '蓝', '闵', '席', '季', '麻', '强', '贾', '路', '娄', '危', '江', '童', '颜', '郁', '胥', '柳', '鲍', '史', '唐', '费', '岑', '薛', '雷', '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安', '常', '乐', '于', '时', '傅', '皮', '卫', '齐', '康', '伍', '余', '元', '卜', '顾', '孟', '平', '黄', '和', '穆', '萧', '尹', '姚', '邵', '湛', '汪', '祁', '毛', '禹', '狄', '米', '贝', '明', '藏', '计', '伏', '成', '戴', '谈', '宋', '茅', '庞', '熊', '纪', '舒', '屈', '项', '祝', '董', '梁', '杜', '阮', '蓝', '闵', '席', '季', '麻', '强', '贾', '路', '娄', '危', '江', '童', '颜', '郁', '胥', '柳', '鲍', '史', '唐', '费', '岑', '薛', '雷', '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安', '常', '乐', '于', '时', '傅', '皮', '卫', '齐', '康', '伍', '余', '元', '卜', '顾', '孟', '平', '黄', '和', '穆', '萧', '尹', '姚', '邵', '湛', '汪', '祁', '毛', '禹', '狄', '米', '贝', '明', '藏', '计', '伏', '成', '戴', '谈', '宋', '茅', '庞', '熊', '纪', '舒', '屈', '项', '祝', '董', '梁', '杜', '阮', '蓝', '闵', '席', '季', '麻', '强', '贾', '路', '娄', '危', '江', '童', '颜', '郁', '胥', '柳', '鲍', '史', '唐', '费', '岑', '薛', '雷', '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安', '常', '乐', '于', '时', '傅', '皮', '卫', '齐', '康', '伍', '余', '元', '卜', '顾', '孟', '平', '黄', '和', '穆', '萧', '尹', '姚', '邵', '湛', '汪', '祁', '毛', '禹', '狄', '米', '贝', '明', '藏', '计', '伏', '成', '戴', '谈', '宋', '茅', '庞', '熊', '纪', '舒', '屈', '项', '祝', '董', '梁', '杜', '阮', '蓝', '闵', '席', '季', '麻', '强', '贾', '路', '娄', '危', '江', '童', '颜', '郁', '胥', '柳', '鲍', '史', '唐', '费', '岑', '薛', '雷', '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安', '常', '乐', '于', '时', '傅', '皮', '卫', '齐', '康', '伍', '余', '元', '卜', '顾', '孟', '平', '黄', '和', '穆', '萧', '尹', '姚', '邵', '湛', '汪', '祁', '毛', '禹', '狄', '米', '贝', '明', '藏', '计', '伏', '成', '戴', '谈', '宋', '茅', '庞', '熊', '纪', '舒', '屈', '项', '祝', '董', '梁', '杜', '阮', '蓝', '闵', '席', '季', '麻', '强', '贾', '路', '娄', '危', '江', '童', '颜', '郁', '胥', '柳', '鲍', '史', '唐', '费', '岑', '薛', '雷', '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安', '常', '乐', '于', '时', '傅', '皮', '卫', '齐', '康', '伍', '余', '元',
                '卜', '顾', '孟', '平', '黄', '和', '穆', '萧', '尹'};
        for (int i = 0; i < len-1; i++) {
            int anInt = random.nextInt(chars.length);
            name.append(chars[anInt]);
        }
        for (MallMoneyFlow flow : flows) {
            MallMember member = memberMapper.selectById(flow.getMemberId());
            List<MallMember> child = memberMapper.selectByIdAndNoLevel(member.getInviteId(), AgentLevelEnum.ZERO_LEVEL.name());
            if (CollUtil.isEmpty(child)) {
                continue;
            }
            int size = child.size();
            BigDecimal needReturn = flow.getAmount().multiply(BigDecimal.valueOf(0.1));
            String orderNo = MallUtils.getOrderNum("R");
            String remarkFormat = "{}, 用户:{}, 利润分红: {}";
            BigDecimal returnMoney = needReturn.divide(BigDecimal.valueOf(size), 2, RoundingMode.DOWN);
            for (MallMember mallMember : child) {
                memberWalletService.addBalance(returnMoney, mallMember.getId());
                String remark = StrUtil.format(remarkFormat, DateUtil.format(yesterday, "yyyy-MM-dd"), member.getName(), returnMoney);
                memberService.addMoneyFlow(mallMember.getId(), returnMoney, MoneyFlowTypeEnum.PARENT_BONUS.getValue(), orderNo, null, remark, member.getId(), null);
            }
            String remark = StrUtil.format(remarkFormat, DateUtil.format(yesterday, "yyyy-MM-dd"), member.getName(), needReturn);
            memberService.addMoneyFlow(member.getId(), needReturn.negate(), MoneyFlowTypeEnum.PARENT_BONUS.getValue(), orderNo, null, remark, null, null);
            memberWalletService.reduceBalance(needReturn, member.getId());
            moneyFlowMapper.updateIsReturnByMemberId(MallMoneyFlow.IS_RETURN_Y, flow.getMemberId());
        }
        return name.toString();
    }
}