| 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<MoneyDetailVo> recycleList = payInfoMapper.queryUserMoneyStatInfo(map); | 
|         map.put("payType", PayEnum.现金收入.getValue()); | 
|         List<MoneyDetailVo> 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<MoneyDetailVo> 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<UserShareInfo> 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<PayInfoVo> 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<PayInfoVo> pageInfo=new PageInfo<>(payInfoList); | 
|         moneyDetail.setPayInfoList(pageInfo); | 
|   | 
|   | 
|         //领取红包次数及金额 | 
|         RedPaper redPaper=new RedPaper(); | 
|         redPaper.setReceiveUserId(payInfoReq.getCreateUserId()); | 
|         redPaper.setReceiveFlag(Convert.toShort(UserEnum.红包已领取.getValue())); | 
|         List<RedPaper> 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<PayInfo> 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<PayInfo> 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; | 
|   | 
|     } | 
|   | 
|   | 
| } |