huanghongfa
2021-08-21 2e64c232ab6b51b2cecf1ee96e1e9b709234f326
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActUserWalletServiceImpl.java
@@ -12,13 +12,10 @@
import com.panzhihua.common.model.vos.R;
import com.panzhihua.common.model.vos.community.wallet.ComActWalletVO;
import com.panzhihua.common.utlis.StringUtils;
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.common.utlis.WxUtil;
import com.panzhihua.common.utlis.WxXCXTempSend;
import com.panzhihua.service_community.dao.*;
import com.panzhihua.service_community.model.dos.*;
import com.panzhihua.service_community.service.ComActUserWalletChangeService;
import com.panzhihua.service_community.service.ComActUserWalletService;
import com.panzhihua.service_community.service.ComActUserWalletTradeService;
@@ -29,6 +26,7 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
import java.util.Map;
@@ -51,6 +49,10 @@
    private ComActUserWalletTradeService comActUserWalletTradeService;
    @Resource
    private ComActUserWalletChangeService comActUserWalletChangeService;
    @Resource
    private ComActEasyPhotoRewardMapper comActEasyPhotoRewardMapper;
    @Resource
    private ComActActSignDAO comActActSignDAO;
    /**
     * 查询用户钱包信息
@@ -76,12 +78,17 @@
            this.baseMapper.insert(userWalletDO);
        }
        BeanUtils.copyProperties(userWalletDO,comActWalletVO);
        Map<String,String> resultMap = this.baseMapper.getCommunityName(walletDetailDTO.getCommunityId());
        if(!resultMap.isEmpty()){
        Map<String,String> resultMap = this.baseMapper.getCommunityName(walletDetailDTO.getCommunityId(),5);
        if(resultMap != null && !resultMap.isEmpty()){
            comActWalletVO.setCommunityName(resultMap.get("name"));
            if(StringUtils.isEmpty(resultMap.get("content"))){
                this.baseMapper.insertSysAgreement(Constants.PROFIT_EXPLAIN,walletDetailDTO.getCommunityId());
                this.baseMapper.insertSysAgreement(Constants.PROFIT_EXPLAIN,"收益说明",walletDetailDTO.getCommunityId(),5);
                comActWalletVO.setAgreement(Constants.PROFIT_EXPLAIN);
            }else{
                comActWalletVO.setAgreement(resultMap.get("content"));
            }
        }else{
            this.baseMapper.insertSysAgreement(Constants.PROFIT_EXPLAIN,"收益说明",walletDetailDTO.getCommunityId(),5);
            comActWalletVO.setAgreement(Constants.PROFIT_EXPLAIN);
        }
@@ -110,7 +117,7 @@
     * @param easyPhotoId   随手拍id
     */
    @Override
    public void examineAddMoney(Integer activityType,Long easyPhotoId,Long userId){
    public void examineAddMoney(Integer activityType,Long easyPhotoId,Long userId,BigDecimal amount){
        //查询随手拍信息
        ComActEasyPhotoDO easyPhotoDO = comActEasyPhotoDAO.selectById(easyPhotoId);
@@ -131,69 +138,106 @@
            return;
        }
        if(photoActivityDO.getStatus() != ComActEasyPhotoActivityDO.status.jxz){
            log.error("给用户添加收益失败,原因:活动未在进行中,活动id:" + easyPhotoDO.getActivityId());
            return;
//        if(photoActivityDO.getStatus() != ComActEasyPhotoActivityDO.status.jxz){
//            log.error("给用户添加收益失败,原因:活动未在进行中,活动id:" + easyPhotoDO.getActivityId());
//            return;
//        }
        //计算收益
        if(activityType.equals(ComActEasyPhotoDO.activityType.yz)){
            amount = photoActivityDO.getGoodReward();
        }else if(activityType.equals(ComActEasyPhotoDO.activityType.jl)){
            amount = photoActivityDO.getExcellentReward();
        }else if(activityType.equals(ComActEasyPhotoDO.activityType.pt)){
            amount = photoActivityDO.getOrdinaryReward();
        }else if(activityType.equals(ComActEasyPhotoDO.activityType.yb)){
            amount = photoActivityDO.getCommonlyReward();
        }
//        Date nowDate = new Date();
        //查询用户钱包
        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);
        }
        Date nowDate = new Date();
        //活动正在进行中,需要给用户计算收益
        if(nowDate.getTime() - photoActivityDO.getActivityStartAt().getTime() > 0 && nowDate.getTime() - photoActivityDO.getActivityEndAt().getTime() < 0){
        if(amount.compareTo(BigDecimal.ZERO) == 0){
            log.error("此次参加活动的随手拍收益为0,不记录本次交易");
            return;
        }else{
            //记录钱包变动前金额
            BigDecimal oldIncomeAmount = userWalletDO.getIncomeAmount();
            BigDecimal oldAvailableAmount = userWalletDO.getAvailableAmount();
            BigDecimal oldSettlementAmount = userWalletDO.getSettlementAmount();
            //查询用户钱包
            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);
            }
            //更新钱包金额
            userWalletDO.setIncomeAmount(userWalletDO.getIncomeAmount().add(amount));
            userWalletDO.setAvailableAmount(userWalletDO.getAvailableAmount().add(amount));
            comActUserWalletMapper.updateById(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();
            }
            //新增钱包资金交易记录
            Long tradeId = comActUserWalletTradeService.addWalletTrade(easyPhotoDO.getSponsorId(),easyPhotoDO.getCommunityId()
                    ,easyPhotoDO.getId(),amount, ComActUserWalletTradeDO.type.fb,easyPhotoDO.getDetail()
                    ,userId,userWalletDO.getId(),ComActUserWalletTradeDO.changeType.add);
            if(profitAmount.compareTo(BigDecimal.ZERO) == 0){
                log.error("此次参加活动的随手拍收益为0,不记录本次交易");
                return;
            //新增钱包资金变动记录
            comActUserWalletChangeService.addWalletChange(easyPhotoDO.getSponsorId(),easyPhotoDO.getCommunityId(),userWalletDO.getId()
                    ,oldIncomeAmount,userWalletDO.getIncomeAmount(),oldAvailableAmount,userWalletDO.getAvailableAmount()
                    ,oldSettlementAmount,userWalletDO.getSettlementAmount(),tradeId);
            //查询用户未读奖励金额
            ComActEasyPhotoRewardDO easyPhotoRewardDO = comActEasyPhotoRewardMapper.selectOne(new QueryWrapper<ComActEasyPhotoRewardDO>().lambda()
                    .eq(ComActEasyPhotoRewardDO::getCommunityId,easyPhotoDO.getCommunityId())
                    .eq(ComActEasyPhotoRewardDO::getUserId,easyPhotoDO.getSponsorId())
                    .eq(ComActEasyPhotoRewardDO::getIsRead,ComActEasyPhotoRewardDO.isRead.no));
            if(easyPhotoRewardDO == null){
                easyPhotoRewardDO = new ComActEasyPhotoRewardDO();
                easyPhotoRewardDO.setCommunityId(easyPhotoDO.getCommunityId());
                easyPhotoRewardDO.setUserId(easyPhotoDO.getSponsorId());
                easyPhotoRewardDO.setIsRead(ComActEasyPhotoRewardDO.isRead.no);
                easyPhotoRewardDO.setCreateAt(new Date());
                easyPhotoRewardDO.setAmount(amount);
                comActEasyPhotoRewardMapper.insert(easyPhotoRewardDO);
            }else{
                //记录钱包变动前金额
                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);
                easyPhotoRewardDO.setAmount(easyPhotoRewardDO.getAmount().add(amount));
                easyPhotoRewardDO.setUpdateAt(new Date());
                comActEasyPhotoRewardMapper.updateById(easyPhotoRewardDO);
            }
            //更新随手拍活动信息
            easyPhotoDO.setActivityType(activityType);
            easyPhotoDO.setActivityAmount(profitAmount);
            comActEasyPhotoDAO.updateById(easyPhotoDO);
        }
        //更新随手拍活动信息
        easyPhotoDO.setActivityType(activityType);
        easyPhotoDO.setActivityAmount(amount);
        comActEasyPhotoDAO.updateById(easyPhotoDO);
        String activityTypeName = "";
        if(easyPhotoDO.getActivityType().equals(ComActEasyPhotoDO.activityType.yz)){
            activityTypeName = "优质";
        }else if(easyPhotoDO.getActivityType().equals(ComActEasyPhotoDO.activityType.jl)){
            activityTypeName = "精良";
        }else if(easyPhotoDO.getActivityType().equals(ComActEasyPhotoDO.activityType.pt)){
            activityTypeName = "普通";
        }else if(easyPhotoDO.getActivityType().equals(ComActEasyPhotoDO.activityType.yb)){
            activityTypeName = "一般";
        }
        //发放奖励以后给用户推送消息
        Map<String,String> map = comActActSignDAO.getUserOpenId(easyPhotoDO.getSponsorId());
        if(map != null){
            String openid = map.get("openid");
            WxXCXTempSend util = new WxXCXTempSend();
            try {
                WxUtil.sendSubscribeJLDZ(openid,util.getAppAccessToken(),"随手拍有奖活动",amount.setScale(2, RoundingMode.HALF_UP),activityTypeName);
            }catch (Exception e){
                log.error("消息推送失败,失败原因:" + e.getMessage());
            }
        }
    }