From e7f03acfa5ee4ad4fd6d1ee9e9ae9a5655488f6d Mon Sep 17 00:00:00 2001 From: 101captain <237651143@qq.com> Date: 星期二, 09 十一月 2021 17:04:46 +0800 Subject: [PATCH] 1109修改 --- springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActUserWalletServiceImpl.java | 296 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 271 insertions(+), 25 deletions(-) diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActUserWalletServiceImpl.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActUserWalletServiceImpl.java index 80f2b1f..9121409 100644 --- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActUserWalletServiceImpl.java +++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActUserWalletServiceImpl.java @@ -1,22 +1,36 @@ package com.panzhihua.service_community.service.impl; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.Date; +import java.util.Map; + +import javax.annotation.Resource; + +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.panzhihua.common.constants.Constants; import com.panzhihua.common.model.dtos.community.wallet.ComActWalletDetailDTO; +import com.panzhihua.common.model.dtos.community.wallet.ComActWalletSettlementAdminDTO; +import com.panzhihua.common.model.dtos.community.wallet.PageComActWalletAdminDTO; 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.ComActUserWalletMapper; -import com.panzhihua.service_community.model.dos.ComActUserWalletDO; +import com.panzhihua.common.utlis.StringUtils; +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 lombok.extern.slf4j.Slf4j; -import org.springframework.beans.BeanUtils; -import org.springframework.stereotype.Service; +import com.panzhihua.service_community.service.ComActUserWalletTradeService; -import java.math.BigDecimal; -import java.util.Date; -import java.util.Map; +import lombok.extern.slf4j.Slf4j; /** * @auther lyq @@ -25,21 +39,39 @@ */ @Slf4j @Service -public class ComActUserWalletServiceImpl extends ServiceImpl<ComActUserWalletMapper, ComActUserWalletDO> implements ComActUserWalletService { +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; + @Resource + private ComActEasyPhotoRewardMapper comActEasyPhotoRewardMapper; + @Resource + private ComActActSignDAO comActActSignDAO; /** * 查询用户钱包信息 - * @param walletDetailDTO 请求参数 - * @return 用户钱包信息 + * + * @param walletDetailDTO + * 请求参数 + * @return 用户钱包信息 */ @Override - public R getWallet(ComActWalletDetailDTO walletDetailDTO){ + public R getWallet(ComActWalletDetailDTO walletDetailDTO) { ComActWalletVO comActWalletVO = new ComActWalletVO(); - //查询用户钱包 - ComActUserWalletDO userWalletDO = this.baseMapper.selectOne(new QueryWrapper<ComActUserWalletDO>() - .lambda().eq(ComActUserWalletDO::getUserId,walletDetailDTO.getUserId()) - .eq(ComActUserWalletDO::getCommunityId,walletDetailDTO.getCommunityId())); - if(userWalletDO == null){//若钱包不存在则新建钱包 + // 查询用户钱包 + ComActUserWalletDO userWalletDO = this.baseMapper.selectOne(new QueryWrapper<ComActUserWalletDO>().lambda() + .eq(ComActUserWalletDO::getUserId, walletDetailDTO.getUserId()) + .eq(ComActUserWalletDO::getCommunityId, walletDetailDTO.getCommunityId())); + if (userWalletDO == null) {// 若钱包不存在则新建钱包 userWalletDO = new ComActUserWalletDO(); userWalletDO.setIncomeAmount(BigDecimal.ZERO); userWalletDO.setAvailableAmount(BigDecimal.ZERO); @@ -50,23 +82,237 @@ userWalletDO.setCreateAt(new Date()); this.baseMapper.insert(userWalletDO); } - BeanUtils.copyProperties(userWalletDO,comActWalletVO); - Map<String,String> resultMap = this.baseMapper.getCommunityName(walletDetailDTO.getCommunityId()); - if(!resultMap.isEmpty()){ + BeanUtils.copyProperties(userWalletDO, comActWalletVO); + Map<String, String> resultMap = this.baseMapper.getCommunityName(walletDetailDTO.getCommunityId(), 5); + if (resultMap != null && !resultMap.isEmpty()) { comActWalletVO.setCommunityName(resultMap.get("name")); - comActWalletVO.setAgreement(resultMap.get("content")); + if (StringUtils.isEmpty(resultMap.get("content"))) { + 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); } + + Integer easyCount = 0; + // 查询用户发布随手拍数量 + easyCount = comActEasyPhotoDAO.selectCount(new QueryWrapper<ComActEasyPhotoDO>().lambda() + .eq(ComActEasyPhotoDO::getSponsorId, walletDetailDTO.getUserId()) + .eq(ComActEasyPhotoDO::getCommunityId, walletDetailDTO.getCommunityId())); + comActWalletVO.setEasyCount(easyCount); + return R.ok(comActWalletVO); } /** * 查询用户绑定的社区收益排行榜 - * @param walletTradeDTO 请求参数 - * @return 社区收益排行榜 + * + * @param walletTradeDTO + * 请求参数 + * @return 社区收益排行榜 */ @Override - public R getWalletRanking(PageComActWalletTradeDTO walletTradeDTO){ - return R.ok(this.baseMapper.getWalletRanking(new Page(walletTradeDTO.getPageNum(),walletTradeDTO.getPageSize()),walletTradeDTO)); + public R getWalletRanking(PageComActWalletTradeDTO walletTradeDTO) { + 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, BigDecimal amount) { + + // 查询随手拍信息 + 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; + // } + + // 计算收益 + 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); + } + + if (amount.compareTo(BigDecimal.ZERO) == 0) { + log.error("此次参加活动的随手拍收益为0,不记录本次交易"); + return; + } else { + // 记录钱包变动前金额 + BigDecimal oldIncomeAmount = userWalletDO.getIncomeAmount(); + BigDecimal oldAvailableAmount = userWalletDO.getAvailableAmount(); + BigDecimal oldSettlementAmount = userWalletDO.getSettlementAmount(); + + // 更新钱包金额 + userWalletDO.setIncomeAmount(userWalletDO.getIncomeAmount().add(amount)); + userWalletDO.setAvailableAmount(userWalletDO.getAvailableAmount().add(amount)); + comActUserWalletMapper.updateById(userWalletDO); + + // 新增钱包资金交易记录 + Long tradeId = comActUserWalletTradeService.addWalletTrade(easyPhotoDO.getSponsorId(), + easyPhotoDO.getCommunityId(), easyPhotoDO.getId(), amount, ComActUserWalletTradeDO.type.fb, + easyPhotoDO.getDetail(), userId, userWalletDO.getId(), ComActUserWalletTradeDO.changeType.add); + + // 新增钱包资金变动记录 + 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 { + easyPhotoRewardDO.setAmount(easyPhotoRewardDO.getAmount().add(amount)); + easyPhotoRewardDO.setUpdateAt(new Date()); + comActEasyPhotoRewardMapper.updateById(easyPhotoRewardDO); + } + } + // 更新随手拍活动信息 + 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()); + } + } + } + + /** + * 分页查询收益结算列表 + * + * @param pageWalletAdminDTO + * 请求参数 + * @return 收益结算列表 + */ + @Override + public R pageUserWalletAdmin(PageComActWalletAdminDTO pageWalletAdminDTO) { + return R.ok(this.baseMapper.getUserWalletList( + new Page(pageWalletAdminDTO.getPageNum(), pageWalletAdminDTO.getPageSize()), pageWalletAdminDTO)); + } + + /** + * 用户结算收益 + * + * @param settlementAdminDTO + * 请求参数 + * @return 结算结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public R userWalletSettlementAdmin(ComActWalletSettlementAdminDTO settlementAdminDTO) { + // 查询用户钱包 + ComActUserWalletDO userWalletDO = this.baseMapper.selectById(settlementAdminDTO.getId()); + if (userWalletDO == null) { + return R.fail("未查询到用户钱包"); + } + if (userWalletDO.getAvailableAmount().compareTo(settlementAdminDTO.getSettlementAmount()) < 0) { + return R.fail("结算金额不能高于钱包可结算金额"); + } + try { + BigDecimal oldIncomeAmount = userWalletDO.getIncomeAmount(); + BigDecimal oldAvailableAmount = userWalletDO.getAvailableAmount(); + BigDecimal oldSettlementAmount = userWalletDO.getSettlementAmount(); + userWalletDO.setAvailableAmount( + userWalletDO.getAvailableAmount().subtract(settlementAdminDTO.getSettlementAmount())); + userWalletDO + .setSettlementAmount(userWalletDO.getSettlementAmount().add(settlementAdminDTO.getSettlementAmount())); + userWalletDO.setUpdateAt(new Date()); + this.baseMapper.updateById(userWalletDO); + // 添加钱包交易记录 + Long tradeServiceId = comActUserWalletTradeService.addWalletTrade(userWalletDO.getUserId(), + userWalletDO.getCommunityId(), null, settlementAdminDTO.getSettlementAmount(), + ComActUserWalletTradeDO.type.js, settlementAdminDTO.getRemark(), settlementAdminDTO.getUserId(), + userWalletDO.getId(), ComActUserWalletTradeDO.changeType.reduce); + // 添加钱包变动记录 + comActUserWalletChangeService.addWalletChange(userWalletDO.getUserId(), userWalletDO.getCommunityId(), + userWalletDO.getId(), oldIncomeAmount, userWalletDO.getIncomeAmount(), oldAvailableAmount, + userWalletDO.getAvailableAmount(), oldSettlementAmount, userWalletDO.getSettlementAmount(), + tradeServiceId); + + return R.ok(); + } catch (Exception e) { + log.error("给用户结算收益失败,原因:" + e.getMessage()); + return R.fail("结算失败"); + } } } -- Gitblit v1.7.1