VolunteerManager.java 7.81 KB
package cn.wisenergy.service.common;

import cn.wisenergy.mapper.*;
import cn.wisenergy.model.app.*;
import cn.wisenergy.model.enums.CardStatus;
import cn.wisenergy.model.enums.PayType;
import cn.wisenergy.model.vo.AddLimitVo;
import cn.wisenergy.service.app.UserVolunteerService;
import cn.wisenergy.service.app.VolunteerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author 86187
 * @ Description: 事务方法公共类
 * @ Author     : 86187
 * @ Date       : 2021/1/28 15:59
 */
@Component
@Slf4j
public class VolunteerManager {

    @Autowired
    private UserLimitMapper userLimitMapper;

    @Autowired
    private UserLimitRecordMapper userLimitRecordMapper;

    @Autowired
    private CardMapper cardMapper;

    @Autowired
    private PayRecordMapper payRecordMapper;

    @Autowired
    private SchemeRecordMapper schemeRecordMapper;

    @Autowired
    private UserVolunteerService userVolunteerService;

    @Autowired
    private UsersMapper usersMapper;

    @Autowired
    private ScoreInfoMapper scoreInfoMapper;

    @Autowired
    private SchemeMapper schemeMapper;

    @Autowired
    private VolunteerService volunteerService;

    /**
     * 更新用户查询信息并保存扣减记录
     *
     * @param userLimit 查询信息
     * @return true or false
     */
    @Transactional(rollbackFor = Exception.class)
    public boolean updateLimitSaveRecord(UserLimit userLimit) {
        //1、更新查询信息
        int count = userLimitMapper.edit(userLimit);
        if (count == 0) {
            return false;
        }

        //2、保存扣减记录
        UserLimitRecord userLimitRecord = new UserLimitRecord();
        userLimitRecord.setMinusLimit(1);
        userLimitRecord.setUserLimitId(userLimit.getId());
        userLimitRecord.setUserId(userLimit.getUserId());
        int record = userLimitRecordMapper.add(userLimitRecord);

        if (record == 0) {
            return false;
        }
        return true;
    }

    /**
     * 更新充值卡状态和用户查询次数及增加充值记录
     *
     * @param cardInfo   充值卡信息
     * @param userLimit  用户查询次数信息
     * @param addLimitVo 接口入参
     */
    @Transactional(rollbackFor = Exception.class)
    public Boolean updateLimitAndRecord(Price price, CardInfo cardInfo, UserLimit userLimit, AddLimitVo addLimitVo) {

        //是充值卡
        if (PayType.REFILL_CARD.getCode().equals(addLimitVo.getPayType())) {
            //1、更新充值卡状态
            cardInfo.setStatus(CardStatus.ALREADY_USED.getCode());
            int count = cardMapper.updateById(cardInfo);
            if (count == 0) {
                return false;
            }

            //2、更新用户查询次数信息
            int limit = userLimitMapper.edit(userLimit);
            if (limit == 0) {
                return false;
            }

            //3、保存充值记录
            PayRecord payRecord = new PayRecord();
            payRecord.setCardId(cardInfo.getId());
            payRecord.setMoney(Integer.valueOf(cardInfo.getMoney()));
            payRecord.setPayLimit(cardInfo.getLimit());
            payRecord.setResult(0);
            payRecord.setType(addLimitVo.getPayType());
            payRecord.setUserId(addLimitVo.getUserId());
            int pay = payRecordMapper.add(payRecord);
            if (pay == 0) {
                return false;
            }
        } else {
            //1、更新用户查询次数信息
            int limit = userLimitMapper.edit(userLimit);
            if (limit == 0) {
                return false;
            }

            //2、保存充值记录
            PayRecord payRecord = new PayRecord();
            payRecord.setCardId(null);
            payRecord.setMoney(addLimitVo.getPayMoney());
            payRecord.setPayLimit(price.getUseLimit());
            payRecord.setResult(0);
            payRecord.setType(addLimitVo.getPayType());
            payRecord.setUserId(addLimitVo.getUserId());
            int pay = payRecordMapper.add(payRecord);
            if (pay == 0) {
                return false;
            }
        }

        return true;
    }

    /**
     * 保存方案查询记录和关联关系
     *
     * @param user 用户信息
     * @param list 志愿信息
     * @return true 成功  false 失败
     */
    @Transactional(rollbackFor = Exception.class)
    public boolean saveUserVolunteer(User user, List<Volunteer> list, ScoreInfo scoreInfo, String name) {
        //1、保存方案查询记录
        SchemeQueryRecord schemeQueryRecord = new SchemeQueryRecord();
        schemeQueryRecord.setMajorName(name);
        schemeQueryRecord.setStudentType(user.getExamType());
        schemeQueryRecord.setUserId(user.getId());
        schemeQueryRecord.setIsDelete(0);
        double score = scoreInfo.getCultureGrade() + scoreInfo.getMajorGrade();
        schemeQueryRecord.setScore(String.valueOf(score));

        List<Integer> ids = list.stream().map(Volunteer::getId).collect(Collectors.toList());
        //保存方案查询记录
        int count = schemeRecordMapper.add(schemeQueryRecord);
        if (count == 0) {
            return false;
        }

        List<UserVolunteer> volunteerList = new ArrayList<>();
        for (Integer id : ids) {
            UserVolunteer userVolunteer = new UserVolunteer();
            userVolunteer.setSchemeRecordId(schemeQueryRecord.getId());
            userVolunteer.setUserId(user.getId());
            userVolunteer.setVolunteerId(id);
            volunteerList.add(userVolunteer);
        }

        boolean bool = userVolunteerService.saveBatch(volunteerList);
        if (!bool) {
            return false;
        }
        return true;
    }

    /**
     * 保存个人信息
     *
     * @param user      用户信息
     * @param scoreInfo 成绩信息
     * @return true or false
     */
    @Transactional(rollbackFor = Exception.class)
    public boolean updateAndSaveUserInfo(User user, ScoreInfo scoreInfo) {
        //1、更新用户信息
        int count = usersMapper.edit(user);
        if (count == 0) {
            return false;
        }

        //2、保存用户成绩信息
        int save = scoreInfoMapper.add(scoreInfo);
        if (save == 0) {
            return false;
        }

        return true;
    }

    /**
     * 编辑个人信息
     *
     * @param user      用户信息
     * @param scoreInfo 成绩信息
     * @return true or false
     */
    @Transactional()
    public boolean updateAndUserInfo(User user, ScoreInfo scoreInfo) {
        //1、更新用户信息
        int count = usersMapper.edit(user);
        if (count == 0) {
            return false;
        }

        //2、保存用户成绩信息
        int save = scoreInfoMapper.edit(scoreInfo);
        if (save == 0) {
            return false;
        }

        return true;
    }

    /**
     * 保存方案和志愿信息
     *
     * @param schemeInfo 方案信息
     * @param list       志愿信息
     */
    @Transactional(rollbackFor = Exception.class)
    public void saveSchemeAndVolunteer(SchemeInfo schemeInfo, List<Volunteer> list) {
        //1、保存方案信息
        int count = schemeMapper.add(schemeInfo);
        if (count == 0) {
            throw new RuntimeException("保存方案信息失败!");
        }

        //保存志愿信息
        for (Volunteer volunteer : list) {
            volunteer.setSchemeId(schemeInfo.getId());
            volunteer.setType(schemeInfo.getType());
        }
        boolean bool = volunteerService.saveBatch(list);
        if (!bool) {
            throw new RuntimeException("保存志愿信息失败!");
        }
    }
}