huanghongfa
2021-06-28 febc33b84c7ac40c500c27dccd2a5c871c2c05f0
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActUserWalletServiceImpl.java
@@ -7,13 +7,21 @@
import com.panzhihua.common.model.dtos.community.wallet.PageComActWalletTradeDTO;
import com.panzhihua.common.model.vos.R;
import com.panzhihua.common.model.vos.community.wallet.ComActWalletVO;
import com.panzhihua.service_community.dao.ComActEasyPhotoActivityMapper;
import com.panzhihua.service_community.dao.ComActEasyPhotoDAO;
import com.panzhihua.service_community.dao.ComActUserWalletMapper;
import com.panzhihua.service_community.model.dos.ComActEasyPhotoActivityDO;
import com.panzhihua.service_community.model.dos.ComActEasyPhotoDO;
import com.panzhihua.service_community.model.dos.ComActUserWalletDO;
import com.panzhihua.service_community.model.dos.ComActUserWalletTradeDO;
import com.panzhihua.service_community.service.ComActUserWalletChangeService;
import com.panzhihua.service_community.service.ComActUserWalletService;
import com.panzhihua.service_community.service.ComActUserWalletTradeService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;
@@ -26,6 +34,17 @@
@Slf4j
@Service
public class ComActUserWalletServiceImpl extends ServiceImpl<ComActUserWalletMapper, ComActUserWalletDO> implements ComActUserWalletService {
    @Resource
    private ComActEasyPhotoDAO comActEasyPhotoDAO;
    @Resource
    private ComActEasyPhotoActivityMapper comActEasyPhotoActivityMapper;
    @Resource
    private ComActUserWalletMapper comActUserWalletMapper;
    @Resource
    private ComActUserWalletTradeService comActUserWalletTradeService;
    @Resource
    private ComActUserWalletChangeService comActUserWalletChangeService;
    /**
     * 查询用户钱包信息
@@ -69,4 +88,95 @@
        return R.ok(this.baseMapper.getWalletRanking(new Page(walletTradeDTO.getPageNum(),walletTradeDTO.getPageSize()),walletTradeDTO));
    }
    /**
     * 随手拍审核通过给用户添加收益
     * @param easyPhotoId   随手拍id
     */
    @Override
    public void examineAddMoney(Integer activityType,Long easyPhotoId,Long userId){
        //查询随手拍信息
        ComActEasyPhotoDO easyPhotoDO = comActEasyPhotoDAO.selectById(easyPhotoId);
        if(easyPhotoDO == null){
            log.error("给用户添加收益失败,原因:未查到随手拍记录,随手拍id:" + easyPhotoId);
            return;
        }
        if(easyPhotoDO.getActivityId() == null){//用户未参加活动,无需添加收益
            log.error("给用户添加收益失败,原因:用户未参加活动,无需添加收益,随手拍id:" + easyPhotoId);
            return;
        }
        //查询随手拍活动
        ComActEasyPhotoActivityDO photoActivityDO = comActEasyPhotoActivityMapper.selectById(easyPhotoDO.getActivityId());
        if(photoActivityDO == null){
            log.error("给用户添加收益失败,原因:未查到活动记录,活动id:" + easyPhotoDO.getActivityId());
            return;
        }
        if(photoActivityDO.getStatus() != ComActEasyPhotoActivityDO.status.jxz){
            log.error("给用户添加收益失败,原因:活动未在进行中,活动id:" + easyPhotoDO.getActivityId());
            return;
        }
        Date nowDate = new Date();
        //活动正在进行中,需要给用户计算收益
        if(nowDate.getTime() - photoActivityDO.getActivityStartAt().getTime() > 0 && nowDate.getTime() - photoActivityDO.getActivityEndAt().getTime() < 0){
            //查询用户钱包
            ComActUserWalletDO userWalletDO = comActUserWalletMapper.selectOne(new QueryWrapper<ComActUserWalletDO>()
                    .lambda().eq(ComActUserWalletDO::getUserId,easyPhotoDO.getSponsorId()).eq(ComActUserWalletDO::getCommunityId,easyPhotoDO.getCommunityId()));
            if(userWalletDO == null){
                userWalletDO = new ComActUserWalletDO();
                userWalletDO.setIncomeAmount(BigDecimal.ZERO);
                userWalletDO.setAvailableAmount(BigDecimal.ZERO);
                userWalletDO.setSettlementAmount(BigDecimal.ZERO);
                userWalletDO.setUserId(easyPhotoDO.getSponsorId());
                userWalletDO.setCommunityId(easyPhotoDO.getCommunityId());
                userWalletDO.setEasyCount(0);
                userWalletDO.setCreateAt(new Date());
                this.baseMapper.insert(userWalletDO);
            }
            //计算收益
            BigDecimal profitAmount = BigDecimal.ZERO;
            if(activityType.equals(ComActEasyPhotoDO.activityType.yz)){
                profitAmount = photoActivityDO.getGoodReward();
            }else if(activityType.equals(ComActEasyPhotoDO.activityType.jl)){
                profitAmount = photoActivityDO.getExcellentReward();
            }else if(activityType.equals(ComActEasyPhotoDO.activityType.pt)){
                profitAmount = photoActivityDO.getOrdinaryReward();
            }
            if(profitAmount.equals(BigDecimal.ZERO)){
                log.error("此次参加活动的随手拍收益为0,不记录本次交易");
                return;
            }
            //记录钱包变动前金额
            BigDecimal oldIncomeAmount = userWalletDO.getIncomeAmount();
            BigDecimal oldAvailableAmount = userWalletDO.getAvailableAmount();
            BigDecimal oldSettlementAmount = userWalletDO.getSettlementAmount();
            //更新钱包金额
            userWalletDO.setIncomeAmount(userWalletDO.getIncomeAmount().add(profitAmount));
            userWalletDO.setAvailableAmount(userWalletDO.getAvailableAmount().add(profitAmount));
            comActUserWalletMapper.updateById(userWalletDO);
            //新增钱包资金交易记录
            Long tradeId = comActUserWalletTradeService.addWalletTrade(easyPhotoDO.getSponsorId(),easyPhotoDO.getCommunityId()
                    ,easyPhotoDO.getId(),profitAmount, ComActUserWalletTradeDO.type.fb,"发布随手拍"
                    ,userId,userWalletDO.getId(),ComActUserWalletTradeDO.changeType.add);
            //新增钱包资金变动记录
            comActUserWalletChangeService.addWalletChange(easyPhotoDO.getSponsorId(),easyPhotoDO.getCommunityId(),userWalletDO.getId()
                    ,oldIncomeAmount,userWalletDO.getIncomeAmount(),oldAvailableAmount,userWalletDO.getAvailableAmount()
                    ,oldSettlementAmount,userWalletDO.getSettlementAmount(),tradeId);
            //更新随手拍活动信息
            easyPhotoDO.setActivityType(activityType);
            easyPhotoDO.setActivityAmount(profitAmount);
            comActEasyPhotoDAO.updateById(easyPhotoDO);
        }
    }
}