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,7 +59,9 @@
    /**
     * 查询用户某个时间段交易数量
     * @param integralCountDTO  请求参数
     *
     * @param integralCountDTO
     *            请求参数
     * @return  交易数量
     */
    @Override
@@ -66,20 +71,31 @@
    /**
     * 添加用户积分交易记录
     * @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,7 +115,9 @@
    /**
     * 小程序-查询用户社区积分明细
     * @param communityTradeDTO 请求参数
     *
     * @param communityTradeDTO
     *            请求参数
     * @return  用户社区积分明细
     */
    @Override
@@ -111,17 +129,21 @@
        }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   请求参数
     *
     * @param integralRuleDTO
     *            请求参数
     * @return  社区下积分明细记录
     */
    @Override
    public R getIntegralTradeListAdmin(PageComActIntegralTradeDTO integralRuleDTO){
        IPage<ComActIntegralUserTradeAdminVO> userTradeAdminIPage = this.baseMapper.getIntegralTradeListAdmin(new Page(integralRuleDTO.getPageNum(),integralRuleDTO.getPageSize()),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();
@@ -140,7 +162,9 @@
    /**
     * 给用户添加积分
     * @param integralUserDTO   请求参数
     *
     * @param integralUserDTO
     *            请求参数
     * @return  添加积分结果
     */
    @Override
@@ -164,16 +188,17 @@
        Date nowDate = new Date();
        //查询随手拍增加积分数量
        ComActIntegralRuleDO integralRuleDO = comActIntegralRuleService.getOne(new QueryWrapper<ComActIntegralRuleDO>().lambda()
                .eq(ComActIntegralRuleDO::getIntegralType,type)
                .eq(ComActIntegralRuleDO::getCommunityId,communityId));
        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()));
            Integer count = this.baseMapper.getIntegralCount(
                getIntegralCountDTO(integralRuleDO.getType(), userId, communityId, integralRuleDO.getIntegralType()));
            if(count >= integralRuleDO.getCount()){
                log.error("该用户参加任务次数已达上限");
                return R.fail("该用户参加任务次数已达上限");
@@ -277,7 +302,8 @@
        }
        //查询用户积分账户
        ComActIntegralUserDO integralUserDO = comActIntegralUserService.getOne(new QueryWrapper<ComActIntegralUserDO>().lambda()
        ComActIntegralUserDO integralUserDO =
            comActIntegralUserService.getOne(new QueryWrapper<ComActIntegralUserDO>().lambda()
                .eq(ComActIntegralUserDO::getUserId,userId).eq(ComActIntegralUserDO::getCommunityId,communityId));
        if(integralUserDO == null){
            integralUserDO = new ComActIntegralUserDO();
@@ -335,27 +361,34 @@
        //更新钱包
        comActIntegralUserService.updateById(integralUserDO);
        //增加积分账户交易记录
        Long tradeId = this.addIntegralTradeRecord(userId,integralId,communityId,serviceId,type,amount
                ,ComActIntegralUserTradeDO.changeType.add,remark.toString(),identityType,2L);
        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);
        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
     *
     * @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);