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;
|
|
}
|
|
|
}
|