package com.xzx.gc.user.service; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.xzx.gc.common.constant.Constants; import com.xzx.gc.common.constant.PayEnum; import com.xzx.gc.common.constant.UserEnum; import com.xzx.gc.common.utils.BusinessUtil; import com.xzx.gc.entity.*; import com.xzx.gc.model.pay.PayInfoReq; import com.xzx.gc.model.pay.PayInfoVo; import com.xzx.gc.model.user.MoneyDetailVo; import com.xzx.gc.user.dto.RecycleStatistic; import com.xzx.gc.user.mapper.PayInfoMapper; import com.xzx.gc.user.mapper.RedPaperMapper; import com.xzx.gc.user.mapper.UserShareInfoMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @Service @Transactional public class UserStatService{ @Autowired private PayInfoMapper payInfoMapper; @Autowired private RedPaperMapper redPaperMapper; @Autowired private UserShareInfoMapper userShareInfoMapper; @Autowired private PayInfoService payInfoService; @Autowired private BusinessUtil businessUtil; @Autowired private OrderService orderService; @Autowired private AccountLogService accountLogService; @Autowired private HttpServletRequest request; @Autowired private AccountScoreLogService accountScoreLogService; public MoneyDetailVo queryMoneyDetail(PayInfoReq payInfoReq) { MoneyDetailVo moneyDetail = new MoneyDetailVo(); Map map = new HashMap(); //查询回收次数及金额 map.put("createUserId", payInfoReq.getCreateUserId()); map.put("payType", PayEnum.环保金收入.getValue()); List recycleList = payInfoMapper.queryUserMoneyStatInfo(map); map.put("payType", PayEnum.现金收入.getValue()); List recycleListMoney = payInfoMapper.queryUserMoneyStatInfo(map); String recycleCount=null; String recycleSumMoney=null; //环保金收入 if (recycleList != null && recycleList.size() > 0) { recycleCount=recycleList.get(0).getSumCount()==null?"0":recycleList.get(0).getSumCount(); recycleSumMoney=recycleList.get(0).getSumMoney()==null?"0":recycleList.get(0).getSumMoney(); } //现金收入 if(!CollectionUtils.isEmpty(recycleListMoney)){ if(recycleCount==null){ recycleCount="0"; }else{ String s = recycleListMoney.get(0).getSumCount() == null ? "0" : recycleListMoney.get(0).getSumCount(); recycleCount=new BigDecimal(recycleCount).add(new BigDecimal(s)).toString(); } if(recycleSumMoney==null){ recycleSumMoney="0"; }else{ String s = recycleListMoney.get(0).getSumMoney() == null ? "0" : recycleListMoney.get(0).getSumMoney(); recycleSumMoney=new BigDecimal(recycleSumMoney).add(new BigDecimal(s)).toString(); } } moneyDetail.setRecycleCount(recycleCount); recycleSumMoney = recycleSumMoney == null || "".equals( recycleSumMoney )?"0":recycleSumMoney; moneyDetail.setRecycleSumMoney(businessUtil.changeMoney(recycleSumMoney)); //提现累计金额 map.put("payType", "4"); //是否提现成功 map.put("txFlag","1"); List withdrawList = payInfoMapper.queryUserMoneyStatInfo(map); if (withdrawList != null && withdrawList.size() > 0) { moneyDetail.setSumWithdrawCount(withdrawList.get(0).getSumCount()==null?"0":withdrawList.get(0).getSumCount()); moneyDetail.setSumWithdrawMoney(businessUtil.changeMoney(withdrawList.get(0).getSumMoney())); } //邀请好友次数及赚取金额 UserShareInfo userShareInfo=new UserShareInfo(); userShareInfo.setMobilePhone(payInfoReq.getMobilePhone()); List select1 = userShareInfoMapper.select(userShareInfo); if(CollUtil.isNotEmpty(select1)){ moneyDetail.setInviteCount(Convert.toStr(select1.size())); BigDecimal money=Constants.MONEY_INIT; for (UserShareInfo shareInfo : select1) { String rewardMoney = shareInfo.getRewardMoney(); if(StrUtil.isBlank(rewardMoney)){ rewardMoney="0"; } money=NumberUtil.add(money,Convert.toBigDecimal(rewardMoney)); } moneyDetail.setInviteMoney(businessUtil.changeMoney(Convert.toStr(money))); }else { moneyDetail.setInviteCount("0"); moneyDetail.setInviteMoney(Convert.toStr(Constants.MONEY_INIT)); } //新增加的payType需要在配置表的PAY_TYPE中添加 PageHelper.startPage(payInfoReq.getPageNo(),payInfoReq.getPageSize()); List payInfoList=payInfoMapper.queryUserPayAll(payInfoReq); //按创建时间降序 if(CollUtil.isNotEmpty(payInfoList)) { payInfoList= payInfoList.stream().sorted(Comparator.comparing(PayInfoVo::getCreateTime).reversed()).collect(Collectors.toList()); //设置金额正负 for (PayInfoVo payInfoVo : payInfoList) { String money = payInfoVo.getMoney(); money = businessUtil.changeMoney(money); String payType = payInfoVo.getPayType(); if (PayEnum.环保金支出.getValue().equals(payType) || PayEnum.提现.getValue().equals(payType) || PayEnum.现金支出.getValue().equals(payType)) { payInfoVo.setMoney("-" + money); } else if (businessUtil.isApp(request.getHeader("clientType")) && PayEnum.按重量返利.getValue().equals(payType)) { payInfoVo.setMoney("-" + money); } else if (!businessUtil.isApp(request.getHeader("clientType")) && PayEnum.按重量返利.getValue().equals(payType)) { payInfoVo.setMoney("+" + money); } else if (businessUtil.isApp(request.getHeader("clientType")) && PayEnum.订单投诉.getValue().equals(payType)) { payInfoVo.setMoney("-" + money); } else if (!businessUtil.isApp(request.getHeader("clientType")) && PayEnum.订单投诉.getValue().equals(payType)) { payInfoVo.setMoney("+" + money); } else if (PayEnum.充值.getValue().equals(payType) || PayEnum.环保金收入.getValue().equals(payType) || PayEnum.现金收入.getValue().equals(payType)) { payInfoVo.setMoney("+" + money); } else { payInfoVo.setMoney("+" + money); } } //获取每条环保金记录的变动后的余额 for (PayInfoVo payInfoVo : payInfoList) { String payOrderId = payInfoVo.getPayOrderId(); String payType = payInfoVo.getPayType(); String createUserId = payInfoVo.getCreateUserId(); if(PayEnum.积分收入.getValue().equals(payType)){ AccountScoreLog byPayIdAndUserId = accountScoreLogService.findByPayIdAndUserId(payOrderId, createUserId); if(byPayIdAndUserId!=null){ payInfoVo.setCollectScore(businessUtil.changeMoney(byPayIdAndUserId.getNewScore())); }else { payInfoVo.setCollectScore(Constants.MONEY_INIT.toString()); } }else { AccountLog byUserIdAndOrderId = accountLogService.findByUserIdAndOrderId(createUserId, payOrderId); if (byUserIdAndOrderId != null) { payInfoVo.setBalance(businessUtil.changeMoney(byUserIdAndOrderId.getNewMoney())); payInfoVo.setOverdraftLimit(businessUtil.changeMoney(byUserIdAndOrderId.getNewLimit())); payInfoVo.setFixedLimit(businessUtil.changeMoney(byUserIdAndOrderId.getNewFixedLimit())); } else { payInfoVo.setBalance(Constants.MONEY_INIT.toString()); payInfoVo.setOverdraftLimit(Constants.MONEY_INIT.toString()); payInfoVo.setFixedLimit(Constants.MONEY_INIT.toString()); } } } } PageInfo pageInfo=new PageInfo<>(payInfoList); moneyDetail.setPayInfoList(pageInfo); //领取红包次数及金额 RedPaper redPaper=new RedPaper(); redPaper.setReceiveUserId(payInfoReq.getCreateUserId()); redPaper.setReceiveFlag(Convert.toShort(UserEnum.红包已领取.getValue())); List select = redPaperMapper.select(redPaper); if(CollUtil.isNotEmpty(select)){ moneyDetail.setRedpaperCount(select.size()); double sum = select.stream().mapToDouble(x -> Convert.toDouble(x.getMoney(),Convert.toDouble(Constants.MONEY_INIT))).sum(); moneyDetail.setRedpaperMoney(businessUtil.changeMoney(Convert.toBigDecimal(sum))); }else{ moneyDetail.setRedpaperCount(0); moneyDetail.setRedpaperMoney(Convert.toStr(Constants.MONEY_INIT)); } //返利次数及金额 String[] payTypes=new String[]{PayEnum.分享返利.getValue(),PayEnum.阶梯返利.getValue(),PayEnum.红包.getValue(),PayEnum.按重量返利.getValue()}; List platformCapitalInfo1 = payInfoService.findByUserAndTypes(payInfoReq.getCreateUserId(), Arrays.asList(payTypes)); if(CollUtil.isNotEmpty(platformCapitalInfo1)){ moneyDetail.setRebateCount(platformCapitalInfo1.size()); double sum = platformCapitalInfo1.stream().mapToDouble(x -> Convert.toDouble(x.getMoney(), Convert.toDouble(Constants.MONEY_INIT))).sum(); moneyDetail.setRebateMoney(Convert.toBigDecimal(businessUtil.changeMoney(Convert.toStr(Convert.toBigDecimal(sum))))); }else{ moneyDetail.setRebateCount(0); moneyDetail.setRebateMoney(Constants.MONEY_INIT); } //回收员重量返利支出总金额 List byUserAndType = payInfoService.findByUserAndType(payInfoReq.getCreateUserId(), PayEnum.按重量返利.getValue()); if(CollUtil.isNotEmpty(byUserAndType)){ double sum = byUserAndType.stream().mapToDouble(x -> Convert.toDouble(x.getMoney(), Convert.toDouble(Constants.MONEY_INIT))).sum(); moneyDetail.setWeightMul(businessUtil.changeMoney(Convert.toStr(sum))); } //回收的累计重量 RecycleStatistic orderItemInfo=null; if(businessUtil.isApp(request.getHeader("clientType"))){ orderItemInfo = orderService.findOrderItemInfo(payInfoReq.getCreateUserId(),2); }else { orderItemInfo = orderService.findOrderItemInfo(payInfoReq.getCreateUserId(),1); } if(orderItemInfo!=null) { moneyDetail.setRecycleWeight(businessUtil.changeWeight(orderItemInfo.getWeightAll())); }else { moneyDetail.setRecycleWeight(Constants.WEIGHT_INIT.toString()); } return moneyDetail; } }