yanghui
2022-11-17 b30e1a48f2bc5f65a0efd2e69e090fed2d7a627c
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActIntegralUserTradeServiceImpl.java
@@ -4,6 +4,7 @@
import javax.annotation.Resource;
import com.panzhihua.service_community.dao.ComBpActivityDAO;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -27,6 +28,8 @@
import com.panzhihua.service_community.service.*;
import lombok.extern.slf4j.Slf4j;
import static java.util.Objects.nonNull;
/**
 * @auther lyq
@@ -56,6 +59,8 @@
    private ComActDiscussOptionService comActDiscussOptionService;
    @Resource
    private ComActActivityService comActActivityService;
    @Resource
    private ComBpActivityDAO comBpActivityDAO;
    /**
     * 查询用户某个时间段交易数量
@@ -81,7 +86,8 @@
     * @param serviceId
     *            交易业务id
     * @param serviceType
     *            交易业务类型(1.发布随手拍 2.发布微心愿 3.参与议事投票 4.参与志愿者活动 5.参与社区活动 6.参与党员活动 7.参与调查问卷)
     *            交易业务类型(1.发布随手拍 2.发布微心愿 3.参与议事投票 4.社区活动-居民身份参与 " +
     *             "5.社区活动-党员身份参与 6.社区活动-志愿者身份参与 7.参与调查问卷 8.取消活动 9.参与单位党员活动)
     * @param amount
     *            交易积分数量
     * @param changeType
@@ -170,7 +176,8 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R addIntegralTradeAdmin(AddComActIntegralUserDTO integralUserDTO) {
        // 判断增加积分类型 积分任务类型(1.发布随手拍 2.发布微心愿 3.参与议事投票 4.参与志愿者活动 5.参与社区活动 6.参与党员活动 7.参与调查问卷)
        // 判断增加积分类型 积分任务类型(1.发布随手拍 2.发布微心愿 3.参与议事投票 4.社区活动-居民身份参与 " +
        //            "5.社区活动-党员身份参与 6.社区活动-志愿者身份参与 7.参与调查问卷 8.取消活动 9.参与单位党员活动)
        Integer type = integralUserDTO.getIntegralType();
        // 业务id
        Long serviceId = integralUserDTO.getServiceId();
@@ -187,24 +194,28 @@
        // 当前时间
        Date nowDate = new Date();
        // 查询随手拍增加积分数量
        ComActIntegralRuleDO integralRuleDO =
            comActIntegralRuleService.getOne(new QueryWrapper<ComActIntegralRuleDO>().lambda()
                .eq(ComActIntegralRuleDO::getIntegralType, type).eq(ComActIntegralRuleDO::getCommunityId, communityId));
        if (integralRuleDO == null) {
            log.error("未查询到该社区积分规则,社区id:" + communityId);
            return R.fail("未查询到该社区积分规则,社区id:" + communityId);
        }
        // 判断规则是否有次数限制
        if (integralRuleDO.getIsRestrict().equals(ComActIntegralRuleDO.isRestrict.yes)) {
            Integer count = this.baseMapper.getIntegralCount(
                getIntegralCountDTO(integralRuleDO.getType(), userId, communityId, integralRuleDO.getIntegralType()));
            if (count >= integralRuleDO.getCount()) {
                log.error("该用户参加任务次数已达上限");
                return R.fail("该用户参加任务次数已达上限");
        Integer changeType = ComActIntegralUserTradeDO.changeType.add;
        if (!type.equals(8) && !type.equals(4) && !type.equals(5) && !type.equals(6) && !type.equals(9)) {
            // 查询随手拍增加积分数量
            ComActIntegralRuleDO integralRuleDO =
                    comActIntegralRuleService.getOne(new QueryWrapper<ComActIntegralRuleDO>().lambda()
                            .eq(ComActIntegralRuleDO::getIntegralType, type).eq(ComActIntegralRuleDO::getCommunityId, communityId));
            if (integralRuleDO == null) {
                log.error("未查询到该社区积分规则,社区id:" + communityId);
                return R.fail("未查询到该社区积分规则,社区id:" + communityId);
            }
            // 判断规则是否有次数限制
            if (integralRuleDO.getIsRestrict().equals(ComActIntegralRuleDO.isRestrict.yes)) {
                Integer count = this.baseMapper.getIntegralCount(
                        getIntegralCountDTO(integralRuleDO.getType(), userId, communityId, integralRuleDO.getIntegralType()));
                if (count >= integralRuleDO.getCount()) {
                    log.error("该用户参加任务次数已达上限");
                    return R.fail("该用户参加任务次数已达上限");
                }
            }
            amount = integralRuleDO.getAmount();
        }
        amount = integralRuleDO.getAmount();
        switch (type) {
            case 1:
@@ -246,29 +257,6 @@
                    }
                }
                break;
            case 4:
                identityType = 3;
                remark.append("参与志愿者活动奖励积分");
                ComActActivityDO actActivityZYZDO = comActActivityService.getById(serviceId);
                if (actActivityZYZDO != null) {
                    remark.append("【");
                    remark.append(actActivityZYZDO.getActivityName());
                    remark.append("】");
                }
                break;
            case 5:
                remark.append("参与社区活动奖励积分");
                ComActActivityDO actActivityDO = comActActivityService.getById(serviceId);
                if (actActivityDO != null) {
                    remark.append("【");
                    remark.append(actActivityDO.getActivityName());
                    remark.append("】");
                }
                break;
            case 6:
                identityType = 2;
                remark.append("参与党员活动奖励积分");
                break;
            case 7:
                // 查询调查问卷
                ComActQuestnaireDO questnaireDO = comActQuestnaireDAO.selectById(serviceId);
@@ -296,6 +284,20 @@
                remark.append("【");
                remark.append(questnaireDO.getTitle());
                remark.append("】");
                break;
            case 8:
                changeType = ComActIntegralUserTradeDO.changeType.reduce;
                amount = -integralUserDTO.getIntegral();
                remark.append(integralUserDTO.getRemark());
                identityType = integralUserDTO.getSignIdentity();
                break;
            case 4:
            case 5:
            case 6:
            case 9:
                identityType = integralUserDTO.getSignIdentity();
                remark.append(integralUserDTO.getRemark());
                amount = integralUserDTO.getIntegral();
                break;
            default:
                break;
@@ -344,25 +346,45 @@
        Integer integralAvailableResident = integralUserDO.getIntegralAvailableResident();
        Integer integralFrozenResident = integralUserDO.getIntegralFrozenResident();
        integralUserDO.setIntegralSum(integralUserDO.getIntegralSum() + amount);
        integralUserDO.setIntegralAvailableSum(integralUserDO.getIntegralAvailableSum() + amount);
        integralUserDO.setUpdateAt(nowDate);
        // 根据不同身份,计算钱包金额
        int reduceAmount = 0;
        if (identityType.equals(ComActIntegralUserTradeDO.identityType.jm)) {
            integralUserDO.setIntegralResident(integralUserDO.getIntegralResident() + amount);
            integralUserDO.setIntegralAvailableResident(integralUserDO.getIntegralAvailableResident() + amount);
            int integralResidentNow = addIntegral(integralResident + amount);
            if (amount < 0) {
                reduceAmount = integralResident - integralResidentNow;
            }
            integralUserDO.setIntegralResident(integralResidentNow);
            integralUserDO.setIntegralAvailableResident(addIntegral(integralUserDO.getIntegralAvailableResident() + amount));
        } else if (identityType.equals(ComActIntegralUserTradeDO.identityType.dy)) {
            integralUserDO.setIntegralParty(integralUserDO.getIntegralParty() + amount);
            integralUserDO.setIntegralAvailableParty(integralUserDO.getIntegralAvailableParty() + amount);
            int integralPartyNow = addIntegral(integralParty + amount);
            if (amount < 0) {
                reduceAmount = integralParty - integralPartyNow;
            }
            integralUserDO.setIntegralParty(integralPartyNow);
            integralUserDO.setIntegralAvailableParty(addIntegral(integralUserDO.getIntegralAvailableParty() + amount));
        } else if (identityType.equals(ComActIntegralUserTradeDO.identityType.zyz)) {
            integralUserDO.setIntegralVolunteer(integralUserDO.getIntegralVolunteer() + amount);
            integralUserDO.setIntegralAvailableVolunteer(integralUserDO.getIntegralAvailableVolunteer() + amount);
            int integralVolunteerNow = addIntegral(integralVolunteer + amount);
            if (amount < 0) {
                reduceAmount = integralVolunteer - integralVolunteerNow;
            }
            integralUserDO.setIntegralVolunteer(integralVolunteerNow);
            integralUserDO.setIntegralAvailableVolunteer(addIntegral(integralUserDO.getIntegralAvailableVolunteer() + amount));
        }
        if (changeType == ComActIntegralUserTradeDO.changeType.reduce) {
            amount = reduceAmount;
            integralUserDO.setIntegralSum(addIntegral(integralSum - reduceAmount));
            integralUserDO.setIntegralAvailableSum(addIntegral(integralAvailableSum - reduceAmount));
        } else {
            integralUserDO.setIntegralSum(addIntegral(integralSum + amount));
            integralUserDO.setIntegralAvailableSum(addIntegral(integralAvailableSum + amount));
        }
        integralUserDO.setUpdateAt(nowDate);
        // 更新钱包
        comActIntegralUserService.updateById(integralUserDO);
        // 增加积分账户交易记录
        Long tradeId = this.addIntegralTradeRecord(userId, integralId, communityId, serviceId, type, amount,
            ComActIntegralUserTradeDO.changeType.add, remark.toString(), identityType, 2L);
                changeType, remark.toString(), identityType, 2L);
        // 增加积分账户变更记录
        comActIntegralUserChangeService.addIntegralUserChangeRecord(userId, integralId, communityId, integralSum,
            integralUserDO.getIntegralSum(), integralAvailableSum, integralUserDO.getIntegralAvailableSum(),
@@ -377,6 +399,20 @@
    }
    /**
     * 获取积分详情
     * @param id
     * @return
     */
    @Override
    public R getUserIntegralDetail(Long id) {
        return R.ok(this.baseMapper.getUserIntegralDetail(id));
    }
    private int addIntegral(int integral) {
        return integral > 0 ? integral : 0;
    }
    /**
     * 根据类型、用户id、社区id构建查询请求参数
     * 
     * @param type