mitao
2024-06-06 3d2b51ea4520533de5e78f88dddf5b5c7dce4247
meiya-rest/src/main/java/com/sinata/rest/modular/mall/job/UserV5UpDownWork.java
@@ -6,12 +6,15 @@
import com.sinata.common.enums.EnumMemberGrade;
import com.sinata.common.enums.EnumSystemSetKey;
import com.sinata.common.enums.mall.EnumMallOrderState;
import com.sinata.rest.core.support.DateTime;
import com.sinata.rest.modular.mall.service.IMallOrderService;
import com.sinata.rest.modular.member.model.MemUser;
import com.sinata.rest.modular.member.service.IMemUserRelationService;
import com.sinata.rest.modular.member.service.IMemUserService;
import com.sinata.rest.modular.system.service.ISystemSetService;
import io.swagger.annotations.Api;
import java.util.Date;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
@@ -21,6 +24,7 @@
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import org.springframework.transaction.annotation.Transactional;
/**
 * 定时任务-等级晋升维持
@@ -44,29 +48,42 @@
    private IMallOrderService mallOrderService;
    /**
     * 每天执行1次
     * 每月一号 0:30执行
     */
    @Scheduled(cron = "0 3 0 */1 * *")
    @Scheduled(cron = "0 30 0 1 * ?")
    public void run() {
        // 市场总监列表
        List<MemUser> v5UserList = memUserService.list(
                Wrappers.<MemUser>query().lambda()
                        .select(MemUser::getId, MemUser::getRealName, MemUser::getCreditScore, MemUser::getMemberGradeId, MemUser::getMemberGradeTime)
                        .eq(MemUser::getIsDelete, EnumIsDelete.EXISTED.index) // 非注销
                        .eq(MemUser::getIsLeaveOffice, 0) // 非离职
                        .eq(MemUser::getMemberGradeId, EnumMemberGrade.G_5.index)
        );
        for (MemUser user : v5UserList) {
            if (v5Case1(user.getId()) && v5Case2(user.getId())) {
                log.info("【市场总监降级为黄金营销员】用户:{} / {}",
                        user.getId(), user.getRealName()
                );
                // 降级为-黄金营销员
                user.setMemberGradeId(EnumMemberGrade.G_3.index);
                user.setMemberGradeTime(DateUtil.date());
                user.setCreditScore(BigDecimal.valueOf(100));
                user.updateById();
        if (DateUtil.thisDayOfMonth() == 1) {
            // 市场总监列表
            List<MemUser> v5UserList = memUserService.list(
                    Wrappers.<MemUser>query().lambda()
                            .select(MemUser::getId, MemUser::getRealName, MemUser::getCreditScore, MemUser::getMemberGradeId, MemUser::getMemberGradeTime)
                            .eq(MemUser::getIsDelete, EnumIsDelete.EXISTED.index) // 非注销
                            .eq(MemUser::getIsLeaveOffice, 0) // 非离职
                            .eq(MemUser::getMemberGradeId, EnumMemberGrade.G_5.index)
            );
            //品行分小于60直接降级为黄金营销员
            List<MemUser> list = v5UserList.stream().filter(user ->
                    user.getCreditScore().compareTo(BigDecimal.valueOf(60)) < 0).peek(item -> {
                item.setMemberGradeId(EnumMemberGrade.G_3.index);
                item.setMemberGradeTime(DateUtil.date());
                item.setCreditScore(BigDecimal.valueOf(100));
            }).collect(Collectors.toList());
            memUserService.updateBatchById(list);
            //剩下需要通过维持方案来判断的用户
            List<MemUser> userList = v5UserList.stream().filter(user ->
                            user.getCreditScore().compareTo(BigDecimal.valueOf(60)) >= 0)
                    .collect(Collectors.toList());
            for (MemUser user : userList) {
                if (v5Case1(user.getId()) && v5Case2(user.getId())) {
                    log.info("【市场总监降级为城市合伙人】用户:{} / {}",
                            user.getId(), user.getRealName()
                    );
                    // 降级一级
                    user.setMemberGradeId(EnumMemberGrade.G_4.index);
                    user.setMemberGradeTime(DateUtil.date());
                    user.setCreditScore(BigDecimal.valueOf(100));
                    user.updateById();
                }
            }
        }
    }