huanghongfa
2021-09-02 177249c76aeea0b4bf8d8816d4994e3b445b45ce
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActIntegralUserTradeServiceImpl.java
@@ -1,5 +1,12 @@
package com.panzhihua.service_community.service.impl;
import java.util.Date;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -9,7 +16,6 @@
import com.panzhihua.common.model.dtos.community.integral.admin.AddComActIntegralUserDTO;
import com.panzhihua.common.model.dtos.community.integral.admin.PageComActIntegralTradeDTO;
import com.panzhihua.common.model.vos.R;
import com.panzhihua.common.model.vos.community.integral.ComActIntegralUserRuleVO;
import com.panzhihua.common.model.vos.community.integral.admin.ComActIntegralUserTradeAdminVO;
import com.panzhihua.common.model.vos.community.integral.admin.IntegralUserVO;
import com.panzhihua.common.utlis.DateUtils;
@@ -19,12 +25,8 @@
import com.panzhihua.service_community.dao.ComActQuestnaireDAO;
import com.panzhihua.service_community.model.dos.*;
import com.panzhihua.service_community.service.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Date;
import lombok.extern.slf4j.Slf4j;
/**
 * @auther lyq
@@ -33,7 +35,8 @@
 */
@Slf4j
@Service
public class ComActIntegralUserTradeServiceImpl extends ServiceImpl<ComActIntegralUserTradeMapper, ComActIntegralUserTradeDO> implements ComActIntegralUserTradeService {
public class ComActIntegralUserTradeServiceImpl extends
    ServiceImpl<ComActIntegralUserTradeMapper, ComActIntegralUserTradeDO> implements ComActIntegralUserTradeService {
    @Resource
    private ComActIntegralRuleService comActIntegralRuleService;
@@ -56,30 +59,43 @@
    /**
     * 查询用户某个时间段交易数量
     * @param integralCountDTO  请求参数
     * @return  交易数量
     *
     * @param integralCountDTO
     *            请求参数
     * @return 交易数量
     */
    @Override
    public Integer getIntegralCount(ComActIntegralCountDTO integralCountDTO){
    public Integer getIntegralCount(ComActIntegralCountDTO integralCountDTO) {
        return this.baseMapper.getIntegralCount(integralCountDTO);
    }
    /**
     * 添加用户积分交易记录
     * @param userId    用户id
     * @param integralId    积分账户id
     * @param communityId   社区id
     * @param serviceId     交易业务id
     * @param serviceType   交易业务类型(1.发布随手拍 2.发布微心愿 3.参与议事投票 4.参与志愿者活动 5.参与社区活动 6.参与党员活动 7.参与调查问卷)
     * @param amount    交易积分数量
     * @param changeType    变动类型(1.增加  2.减少)
     * @param remark    交易备注
     * @param identityType  交易身份类型(1.居民 2.党员 3.志愿者)
     * @param createBy  操作人id
     *
     * @param userId
     *            用户id
     * @param integralId
     *            积分账户id
     * @param communityId
     *            社区id
     * @param serviceId
     *            交易业务id
     * @param serviceType
     *            交易业务类型(1.发布随手拍 2.发布微心愿 3.参与议事投票 4.参与志愿者活动 5.参与社区活动 6.参与党员活动 7.参与调查问卷)
     * @param amount
     *            交易积分数量
     * @param changeType
     *            变动类型(1.增加 2.减少)
     * @param remark
     *            交易备注
     * @param identityType
     *            交易身份类型(1.居民 2.党员 3.志愿者)
     * @param createBy
     *            操作人id
     */
    @Override
    public Long addIntegralTradeRecord(Long userId,Long integralId,Long communityId,Long serviceId
            ,Integer serviceType,Integer amount,Integer changeType,String remark,Integer identityType,Long createBy){
    public Long addIntegralTradeRecord(Long userId, Long integralId, Long communityId, Long serviceId,
        Integer serviceType, Integer amount, Integer changeType, String remark, Integer identityType, Long createBy) {
        ComActIntegralUserTradeDO integralUserTradeDO = new ComActIntegralUserTradeDO();
        integralUserTradeDO.setId(Snowflake.getId());
        integralUserTradeDO.setUserId(userId);
@@ -99,37 +115,43 @@
    /**
     * 小程序-查询用户社区积分明细
     * @param communityTradeDTO 请求参数
     * @return  用户社区积分明细
     *
     * @param communityTradeDTO
     *            请求参数
     * @return 用户社区积分明细
     */
    @Override
    public R getIntegralCommunityTradeApplets(ComActIntegralCommunityRankDTO communityTradeDTO){
        if(communityTradeDTO.getType().equals(ComActIntegralCommunityRankDTO.type.resident)){
    public R getIntegralCommunityTradeApplets(ComActIntegralCommunityRankDTO communityTradeDTO) {
        if (communityTradeDTO.getType().equals(ComActIntegralCommunityRankDTO.type.resident)) {
            communityTradeDTO.setIdentityType(ComActIntegralCommunityRankDTO.identityType.resident);
        }else if(communityTradeDTO.getType().equals(ComActIntegralCommunityRankDTO.type.party)){
        } else if (communityTradeDTO.getType().equals(ComActIntegralCommunityRankDTO.type.party)) {
            communityTradeDTO.setIdentityType(ComActIntegralCommunityRankDTO.identityType.party);
        }else if(communityTradeDTO.getType().equals(ComActIntegralCommunityRankDTO.type.volunteer)){
        } else if (communityTradeDTO.getType().equals(ComActIntegralCommunityRankDTO.type.volunteer)) {
            communityTradeDTO.setIdentityType(ComActIntegralCommunityRankDTO.identityType.volunteer);
        }
        return R.ok(this.baseMapper.getIntegralCommunityTradeApplets(new Page(communityTradeDTO.getPageNum(),communityTradeDTO.getPageSize()),communityTradeDTO));
        return R.ok(this.baseMapper.getIntegralCommunityTradeApplets(
            new Page(communityTradeDTO.getPageNum(), communityTradeDTO.getPageSize()), communityTradeDTO));
    }
    /**
     * 社区后台-分页查询社区下积分明细记录
     * @param integralRuleDTO   请求参数
     * @return  社区下积分明细记录
     *
     * @param integralRuleDTO
     *            请求参数
     * @return 社区下积分明细记录
     */
    @Override
    public R getIntegralTradeListAdmin(PageComActIntegralTradeDTO integralRuleDTO){
        IPage<ComActIntegralUserTradeAdminVO> userTradeAdminIPage = this.baseMapper.getIntegralTradeListAdmin(new Page(integralRuleDTO.getPageNum(),integralRuleDTO.getPageSize()),integralRuleDTO);
        if(!userTradeAdminIPage.getRecords().isEmpty()){
    public R getIntegralTradeListAdmin(PageComActIntegralTradeDTO integralRuleDTO) {
        IPage<ComActIntegralUserTradeAdminVO> userTradeAdminIPage = this.baseMapper.getIntegralTradeListAdmin(
            new Page(integralRuleDTO.getPageNum(), integralRuleDTO.getPageSize()), integralRuleDTO);
        if (!userTradeAdminIPage.getRecords().isEmpty()) {
            userTradeAdminIPage.getRecords().forEach(userTrade -> {
                StringBuilder sb = new StringBuilder();
                sb.append("居民");
                if(userTrade.getIsVolunteer().equals(ComActIntegralUserTradeAdminVO.isVolunteer.yes)){
                if (userTrade.getIsVolunteer().equals(ComActIntegralUserTradeAdminVO.isVolunteer.yes)) {
                    sb.append(",志愿者");
                }
                if(userTrade.getIsPartymember().equals(ComActIntegralUserTradeAdminVO.isPartymember.yes)){
                if (userTrade.getIsPartymember().equals(ComActIntegralUserTradeAdminVO.isPartymember.yes)) {
                    sb.append(",党员");
                }
                userTrade.setIdentity(sb.toString());
@@ -140,52 +162,55 @@
    /**
     * 给用户添加积分
     * @param integralUserDTO   请求参数
     * @return  添加积分结果
     *
     * @param integralUserDTO
     *            请求参数
     * @return 添加积分结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R addIntegralTradeAdmin(AddComActIntegralUserDTO integralUserDTO){
        //判断增加积分类型  积分任务类型(1.发布随手拍 2.发布微心愿 3.参与议事投票 4.参与志愿者活动 5.参与社区活动 6.参与党员活动 7.参与调查问卷)
    public R addIntegralTradeAdmin(AddComActIntegralUserDTO integralUserDTO) {
        // 判断增加积分类型 积分任务类型(1.发布随手拍 2.发布微心愿 3.参与议事投票 4.参与志愿者活动 5.参与社区活动 6.参与党员活动 7.参与调查问卷)
        Integer type = integralUserDTO.getIntegralType();
        //业务id
        // 业务id
        Long serviceId = integralUserDTO.getServiceId();
        //用户id
        // 用户id
        Long userId = integralUserDTO.getUserId();
        //社区id
        // 社区id
        Long communityId = integralUserDTO.getCommunityId();
        //需要给用户增加的积分数量
        // 需要给用户增加的积分数量
        Integer amount = 0;
        //用户增加积分的身份
        // 用户增加积分的身份
        Integer identityType = 1;
        //用户交易备注
        // 用户交易备注
        StringBuilder remark = new StringBuilder();
        //当前时间
        // 当前时间
        Date nowDate = new Date();
        //查询随手拍增加积分数量
        ComActIntegralRuleDO integralRuleDO = comActIntegralRuleService.getOne(new QueryWrapper<ComActIntegralRuleDO>().lambda()
                .eq(ComActIntegralRuleDO::getIntegralType,type)
                .eq(ComActIntegralRuleDO::getCommunityId,communityId));
        if(integralRuleDO == null){
        // 查询随手拍增加积分数量
        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()){
        // 判断规则是否有次数限制
        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();
        switch (type){
        switch (type) {
            case 1:
                remark.append("发布随手拍奖励积分");
                ComActEasyPhotoDO easyPhotoDO = comActEasyPhotoService.getById(serviceId);
                if(easyPhotoDO != null){
                if (easyPhotoDO != null) {
                    remark.append("【");
                    remark.append(easyPhotoDO.getDetail());
                    remark.append("】");
@@ -194,7 +219,7 @@
            case 2:
                remark.append("发布微心愿奖励积分");
                ComActMicroWishDO microWishDO = comActMicroWishService.getById(serviceId);
                if(microWishDO != null){
                if (microWishDO != null) {
                    remark.append("【");
                    remark.append(microWishDO.getWishName());
                    remark.append("】");
@@ -202,18 +227,18 @@
                break;
            case 3:
                remark.append("参与议事投票奖励积分");
                if(integralUserDTO.getIsComment().equals(1)){
                if (integralUserDTO.getIsComment().equals(1)) {
                    ComActDiscussDO discussDO = comActDiscussDAO.selectById(serviceId);
                    if(discussDO != null){
                    if (discussDO != null) {
                        remark.append("【");
                        remark.append(discussDO.getDiscussSubject());
                        remark.append("】");
                    }
                }else{
                } else {
                    ComActDiscussOptionDO discussOptionDO = comActDiscussOptionService.getById(serviceId);
                    if(discussOptionDO != null){
                    if (discussOptionDO != null) {
                        ComActDiscussDO discussDO = comActDiscussDAO.selectById(discussOptionDO.getDiscussId());
                        if(discussDO != null){
                        if (discussDO != null) {
                            remark.append("【");
                            remark.append(discussDO.getVoteTitle());
                            remark.append("】");
@@ -225,7 +250,7 @@
                identityType = 3;
                remark.append("参与志愿者活动奖励积分");
                ComActActivityDO actActivityZYZDO = comActActivityService.getById(serviceId);
                if(actActivityZYZDO != null){
                if (actActivityZYZDO != null) {
                    remark.append("【");
                    remark.append(actActivityZYZDO.getActivityName());
                    remark.append("】");
@@ -234,7 +259,7 @@
            case 5:
                remark.append("参与社区活动奖励积分");
                ComActActivityDO actActivityDO = comActActivityService.getById(serviceId);
                if(actActivityDO != null){
                if (actActivityDO != null) {
                    remark.append("【");
                    remark.append(actActivityDO.getActivityName());
                    remark.append("】");
@@ -245,26 +270,26 @@
                remark.append("参与党员活动奖励积分");
                break;
            case 7:
                //查询调查问卷
                // 查询调查问卷
                ComActQuestnaireDO questnaireDO = comActQuestnaireDAO.selectById(serviceId);
                if(questnaireDO == null){
                if (questnaireDO == null) {
                    log.error("未查询到调查问卷记录,记录积分失败");
                    return R.fail("未查询到调查问卷记录,记录积分失败");
                }
                //查询当前用户信息
                // 查询当前用户信息
                IntegralUserVO integralUser = this.baseMapper.getUserInfo(userId);
                if(integralUser == null){
                if (integralUser == null) {
                    log.error("未查询到用户信息,记录积分失败");
                    return R.fail("未查询到用户信息,记录积分失败");
                }
                //判断调查问卷调查的对象是什么身份,如果是党员和志愿者两种身份,则记录志愿者积分
                if(questnaireDO.getForParty().equals(1) && integralUser.getIsPartymember().equals(1)){
                // 判断调查问卷调查的对象是什么身份,如果是党员和志愿者两种身份,则记录志愿者积分
                if (questnaireDO.getForParty().equals(1) && integralUser.getIsPartymember().equals(1)) {
                    identityType = 2;
                    if(questnaireDO.getForVolunteer().equals(1) && integralUser.getIsVolunteer().equals(1)){
                    if (questnaireDO.getForVolunteer().equals(1) && integralUser.getIsVolunteer().equals(1)) {
                        identityType = 3;
                    }
                }
                if(questnaireDO.getForVolunteer().equals(1) && integralUser.getIsVolunteer().equals(1)){
                if (questnaireDO.getForVolunteer().equals(1) && integralUser.getIsVolunteer().equals(1)) {
                    identityType = 3;
                }
                remark.append("参与调查问卷奖励积分");
@@ -276,10 +301,11 @@
                break;
        }
        //查询用户积分账户
        ComActIntegralUserDO integralUserDO = comActIntegralUserService.getOne(new QueryWrapper<ComActIntegralUserDO>().lambda()
                .eq(ComActIntegralUserDO::getUserId,userId).eq(ComActIntegralUserDO::getCommunityId,communityId));
        if(integralUserDO == null){
        // 查询用户积分账户
        ComActIntegralUserDO integralUserDO =
            comActIntegralUserService.getOne(new QueryWrapper<ComActIntegralUserDO>().lambda()
                .eq(ComActIntegralUserDO::getUserId, userId).eq(ComActIntegralUserDO::getCommunityId, communityId));
        if (integralUserDO == null) {
            integralUserDO = new ComActIntegralUserDO();
            integralUserDO.setCommunityId(communityId);
            integralUserDO.setUserId(userId);
@@ -299,12 +325,12 @@
            integralUserDO.setIntegralFrozenResident(0);
            comActIntegralUserService.save(integralUserDO);
        }
        if(integralUserDO.getStatus().equals(ComActIntegralUserDO.status.no)){
        if (integralUserDO.getStatus().equals(ComActIntegralUserDO.status.no)) {
            log.error("用户钱包已被禁用,记录积分失败,用户id:" + userId);
            return R.fail("用户钱包已被禁用,记录积分失败,用户id:" + userId);
        }
        Long integralId = integralUserDO.getId();
        //记录变动前钱包金额
        // 记录变动前钱包金额
        Integer integralSum = integralUserDO.getIntegralSum();
        Integer integralAvailableSum = integralUserDO.getIntegralAvailableSum();
        Integer integralFrozenSum = integralUserDO.getIntegralFrozenSum();
@@ -321,50 +347,57 @@
        integralUserDO.setIntegralSum(integralUserDO.getIntegralSum() + amount);
        integralUserDO.setIntegralAvailableSum(integralUserDO.getIntegralAvailableSum() + amount);
        integralUserDO.setUpdateAt(nowDate);
        //根据不同身份,计算钱包金额
        if(identityType.equals(ComActIntegralUserTradeDO.identityType.jm)){
        // 根据不同身份,计算钱包金额
        if (identityType.equals(ComActIntegralUserTradeDO.identityType.jm)) {
            integralUserDO.setIntegralResident(integralUserDO.getIntegralResident() + amount);
            integralUserDO.setIntegralAvailableResident(integralUserDO.getIntegralAvailableResident() + amount);
        }else if(identityType.equals(ComActIntegralUserTradeDO.identityType.dy)){
        } else if (identityType.equals(ComActIntegralUserTradeDO.identityType.dy)) {
            integralUserDO.setIntegralParty(integralUserDO.getIntegralParty() + amount);
            integralUserDO.setIntegralAvailableParty(integralUserDO.getIntegralAvailableParty() + amount);
        }else if(identityType.equals(ComActIntegralUserTradeDO.identityType.zyz)){
        } else if (identityType.equals(ComActIntegralUserTradeDO.identityType.zyz)) {
            integralUserDO.setIntegralVolunteer(integralUserDO.getIntegralVolunteer() + amount);
            integralUserDO.setIntegralAvailableVolunteer(integralUserDO.getIntegralAvailableVolunteer() + amount);
        }
        //更新钱包
        // 更新钱包
        comActIntegralUserService.updateById(integralUserDO);
        //增加积分账户交易记录
        Long tradeId = this.addIntegralTradeRecord(userId,integralId,communityId,serviceId,type,amount
                ,ComActIntegralUserTradeDO.changeType.add,remark.toString(),identityType,2L);
        //增加积分账户变更记录
        comActIntegralUserChangeService.addIntegralUserChangeRecord(userId,integralId,communityId,integralSum,integralUserDO.getIntegralSum()
                ,integralAvailableSum,integralUserDO.getIntegralAvailableSum(),integralFrozenSum,integralUserDO.getIntegralFrozenSum()
                ,integralParty,integralUserDO.getIntegralParty(),integralAvailableParty,integralUserDO.getIntegralAvailableParty()
                ,integralFrozenParty,integralUserDO.getIntegralFrozenParty(),integralVolunteer,integralUserDO.getIntegralVolunteer()
                ,integralAvailableVolunteer,integralUserDO.getIntegralAvailableVolunteer(),integralFrozenVolunteer,integralUserDO.getIntegralFrozenVolunteer()
                ,integralResident,integralUserDO.getIntegralResident(),integralAvailableResident,integralUserDO.getIntegralAvailableResident()
                ,integralFrozenResident,integralUserDO.getIntegralFrozenResident(),tradeId);
        // 增加积分账户交易记录
        Long tradeId = this.addIntegralTradeRecord(userId, integralId, communityId, serviceId, type, amount,
            ComActIntegralUserTradeDO.changeType.add, remark.toString(), identityType, 2L);
        // 增加积分账户变更记录
        comActIntegralUserChangeService.addIntegralUserChangeRecord(userId, integralId, communityId, integralSum,
            integralUserDO.getIntegralSum(), integralAvailableSum, integralUserDO.getIntegralAvailableSum(),
            integralFrozenSum, integralUserDO.getIntegralFrozenSum(), integralParty, integralUserDO.getIntegralParty(),
            integralAvailableParty, integralUserDO.getIntegralAvailableParty(), integralFrozenParty,
            integralUserDO.getIntegralFrozenParty(), integralVolunteer, integralUserDO.getIntegralVolunteer(),
            integralAvailableVolunteer, integralUserDO.getIntegralAvailableVolunteer(), integralFrozenVolunteer,
            integralUserDO.getIntegralFrozenVolunteer(), integralResident, integralUserDO.getIntegralResident(),
            integralAvailableResident, integralUserDO.getIntegralAvailableResident(), integralFrozenResident,
            integralUserDO.getIntegralFrozenResident(), tradeId);
        return R.ok();
    }
    /**
     * 根据类型、用户id、社区id构建查询请求参数
     * @param type  类型
     * @param userId    用户id
     * @param communityId   社区id
     * @return  查询请求参数
     *
     * @param type
     *            类型
     * @param userId
     *            用户id
     * @param communityId
     *            社区id
     * @return 查询请求参数
     */
    private ComActIntegralCountDTO getIntegralCountDTO(Integer type,Long userId,Long communityId,Integer integralType){
    private ComActIntegralCountDTO getIntegralCountDTO(Integer type, Long userId, Long communityId,
        Integer integralType) {
        ComActIntegralCountDTO integralCountDTO = new ComActIntegralCountDTO();
        integralCountDTO.setUserId(userId);
        integralCountDTO.setCommunityId(communityId);
        integralCountDTO.setServiceType(integralType);
        integralCountDTO.setType(ComActIntegralUserTradeDO.changeType.add);
        if(type.equals(ComActIntegralRuleDO.type.month)){
        if (type.equals(ComActIntegralRuleDO.type.month)) {
            integralCountDTO.setStartTime(DateUtils.getFirstDayOfMonthString());
            integralCountDTO.setEndTime(DateUtils.getLastDayOfMonthString());
        }else if(type.equals(ComActIntegralRuleDO.type.day)){
        } else if (type.equals(ComActIntegralRuleDO.type.day)) {
            integralCountDTO.setStartTime(DateUtils.getDayOfMonthString() + " 00:00:00");
            integralCountDTO.setEndTime(DateUtils.getDayOfMonthString() + " 23:59:59");
        }