package com.yeshi.fanli.controller.wxmp.v1;
|
|
import java.io.PrintWriter;
|
import java.lang.reflect.Type;
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
import java.util.ArrayList;
|
import java.util.Calendar;
|
import java.util.Date;
|
import java.util.List;
|
|
import javax.annotation.Resource;
|
|
import org.springframework.stereotype.Controller;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.yeshi.utils.JsonUtil;
|
|
import com.google.gson.GsonBuilder;
|
import com.google.gson.JsonElement;
|
import com.google.gson.JsonPrimitive;
|
import com.google.gson.JsonSerializationContext;
|
import com.google.gson.JsonSerializer;
|
import com.yeshi.fanli.entity.accept.AcceptData;
|
import com.yeshi.fanli.entity.bus.user.UserInfo;
|
import com.yeshi.fanli.entity.money.UserMoneyDetail.UserMoneyDetailTypeEnum;
|
import com.yeshi.fanli.service.inter.config.ConfigService;
|
import com.yeshi.fanli.service.inter.money.UserMoneyDetailService;
|
import com.yeshi.fanli.service.inter.money.extract.ExtractService;
|
import com.yeshi.fanli.service.inter.order.HongBaoV2Service;
|
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
|
import com.yeshi.fanli.service.inter.user.UserInfoService;
|
import org.yeshi.utils.TimeUtil;
|
import com.yeshi.fanli.vo.money.UserMoneyStatisticVO;
|
|
@Controller("WXMPUserMoneyController")
|
@RequestMapping("/wxmp/api/v1/usermoney")
|
public class UserMoneyController {
|
|
public final static String WXMP_SESSION_INFO_KEY = "WXMP-SESSION-INFO";
|
|
@Resource
|
private UserMoneyDetailService userMoneyDetailService;
|
|
@Resource
|
private UserInfoService userInfoService;
|
|
@Resource
|
private HongBaoV2Service hongBaoV2Service;
|
|
@Resource
|
private ExtractService extractService;
|
|
@Resource
|
private UserInfoExtraService userInfoExtraService;
|
|
@Resource
|
private ConfigService configService;
|
|
/**
|
* 用户资金统计
|
*
|
* @param acceptData
|
* @param uid
|
* @param out
|
*/
|
@RequestMapping(value = "getUserMoneyStatistic")
|
public void getUserMoneyStatistic(AcceptData acceptData, Long uid, PrintWriter out) {
|
if (uid == null || uid == 0) {
|
out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
|
return;
|
}
|
UserInfo user = userInfoService.getUserById(uid);
|
|
BigDecimal balance = user.getMyHongBao();
|
|
UserMoneyStatisticVO vo = new UserMoneyStatisticVO();
|
vo.setBalanceMoney(balance);
|
Date minDate = null;
|
Date maxDate = null;
|
List<UserMoneyDetailTypeEnum> typeList = new ArrayList<>();
|
|
// 上月提现
|
typeList.clear();
|
|
typeList.add(UserMoneyDetailTypeEnum.extract);
|
typeList.add(UserMoneyDetailTypeEnum.extractReject);
|
typeList.add(UserMoneyDetailTypeEnum.extractVerify);
|
long timeStamp = System.currentTimeMillis();
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTimeInMillis(timeStamp);
|
maxDate = new Date(TimeUtil
|
.convertToTimeTemp(calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1), "yyyy-M"));
|
calendar.add(Calendar.MONTH, -1);
|
minDate = new Date(TimeUtil
|
.convertToTimeTemp(calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1), "yyyy-M"));
|
|
vo.setLastMonthExtractMoney(
|
userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, minDate, maxDate).abs());
|
// 上月收入
|
typeList.clear();
|
typeList.add(UserMoneyDetailTypeEnum.fanli);
|
typeList.add(UserMoneyDetailTypeEnum.fanliWeiQuan);
|
typeList.add(UserMoneyDetailTypeEnum.share);
|
typeList.add(UserMoneyDetailTypeEnum.shareWeiQuan);
|
typeList.add(UserMoneyDetailTypeEnum.invite);
|
typeList.add(UserMoneyDetailTypeEnum.inviteWeiQuan);
|
typeList.add(UserMoneyDetailTypeEnum.inviteAndShare);
|
typeList.add(UserMoneyDetailTypeEnum.weiQuan);
|
typeList.add(UserMoneyDetailTypeEnum.hongbao);
|
typeList.add(UserMoneyDetailTypeEnum.hongbaoDeduct);
|
|
vo.setLastMonthRecievedMoney(
|
userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, minDate, maxDate).abs());
|
// 最近三个月收入
|
maxDate = new Date(timeStamp);
|
minDate = new Date(timeStamp - 1000 * 60 * 60 * 24 * 90L);
|
|
vo.setLatestThreeMonthRecievedMoney(
|
userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, minDate, maxDate).abs());
|
// 本月提现
|
maxDate = new Date(timeStamp);
|
calendar = Calendar.getInstance();
|
minDate = new Date(TimeUtil
|
.convertToTimeTemp(calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1), "yyyy-M"));
|
calendar.add(Calendar.MONTH, -1);
|
typeList.clear();
|
typeList.add(UserMoneyDetailTypeEnum.extract);
|
typeList.add(UserMoneyDetailTypeEnum.extractReject);
|
typeList.add(UserMoneyDetailTypeEnum.extractVerify);
|
|
vo.setMonthExtractMoney(
|
userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, minDate, maxDate).abs());
|
// 本月到账
|
typeList.clear();
|
typeList.add(UserMoneyDetailTypeEnum.fanli);
|
typeList.add(UserMoneyDetailTypeEnum.fanliWeiQuan);
|
typeList.add(UserMoneyDetailTypeEnum.share);
|
typeList.add(UserMoneyDetailTypeEnum.shareWeiQuan);
|
typeList.add(UserMoneyDetailTypeEnum.invite);
|
typeList.add(UserMoneyDetailTypeEnum.inviteWeiQuan);
|
typeList.add(UserMoneyDetailTypeEnum.inviteAndShare);
|
typeList.add(UserMoneyDetailTypeEnum.weiQuan);
|
typeList.add(UserMoneyDetailTypeEnum.hongbao);
|
typeList.add(UserMoneyDetailTypeEnum.hongbaoDeduct);
|
|
vo.setMonthRecievedMoney(
|
userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, minDate, maxDate).abs());
|
// 总的邀请赚
|
typeList.clear();
|
typeList.add(UserMoneyDetailTypeEnum.invite);
|
typeList.add(UserMoneyDetailTypeEnum.inviteWeiQuan);
|
typeList.add(UserMoneyDetailTypeEnum.inviteAndShare);
|
|
minDate = new Date(0L);
|
maxDate = new Date(timeStamp);
|
vo.setTotalInviteMoney(
|
userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, minDate, maxDate).abs());
|
// 总的到账
|
|
typeList.clear();
|
typeList.add(UserMoneyDetailTypeEnum.fanli);
|
typeList.add(UserMoneyDetailTypeEnum.fanliWeiQuan);
|
typeList.add(UserMoneyDetailTypeEnum.share);
|
typeList.add(UserMoneyDetailTypeEnum.shareWeiQuan);
|
typeList.add(UserMoneyDetailTypeEnum.invite);
|
typeList.add(UserMoneyDetailTypeEnum.inviteWeiQuan);
|
typeList.add(UserMoneyDetailTypeEnum.inviteAndShare);
|
typeList.add(UserMoneyDetailTypeEnum.weiQuan);
|
typeList.add(UserMoneyDetailTypeEnum.hongbao);
|
typeList.add(UserMoneyDetailTypeEnum.hongbaoDeduct);
|
vo.setTotalRecievedMoney(
|
userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, minDate, maxDate).abs());
|
// 总的分享赚
|
|
typeList.clear();
|
typeList.add(UserMoneyDetailTypeEnum.share);
|
typeList.add(UserMoneyDetailTypeEnum.shareWeiQuan);
|
|
vo.setTotalShareMoney(
|
userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, minDate, maxDate).abs());
|
|
minDate = new Date(TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(timeStamp, "yyyy-MM"), "yyyy-MM"));
|
Calendar ca = Calendar.getInstance();
|
ca.setTime(new Date(timeStamp));
|
ca.add(Calendar.MONTH, 1);
|
maxDate = new Date(
|
TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(ca.getTimeInMillis(), "yyyy-MM"), "yyyy-MM"));
|
|
// 本月未到账
|
vo.setMonthUnRecievedMoney(hongBaoV2Service.getUnRecievedMoneyWithPreGetTime(uid, minDate, maxDate));
|
|
// 全部未到账
|
minDate = new Date(0);
|
maxDate = new Date(timeStamp);
|
vo.setTotalUnRecievedMoney(hongBaoV2Service.getUnRecievedMoneyWithCreateTime(uid, minDate, maxDate));
|
GsonBuilder builder = new GsonBuilder();
|
builder.registerTypeAdapter(BigDecimal.class, new JsonSerializer<BigDecimal>() {
|
@Override
|
public JsonElement serialize(BigDecimal value, Type theType, JsonSerializationContext context) {
|
if (value == null) {
|
return new JsonPrimitive("");
|
} else {
|
// 保留2位小数
|
value = value.setScale(2);
|
return new JsonPrimitive(value.toString());
|
}
|
}
|
});
|
|
// 获取提现中的信息
|
BigDecimal extractingMoney = extractService.sumVerifyingMoney(uid);
|
if (extractingMoney.compareTo(new BigDecimal(0)) > 0)
|
vo.setExtractingMoneyInfo("提现中:¥" + extractingMoney.setScale(2, RoundingMode.HALF_UP));
|
|
|
out.print(JsonUtil.loadTrueResult(builder.create().toJson(vo)));
|
}
|
|
}
|