package com.yeshi.fanli.controller.client.v2;
|
|
import java.io.PrintWriter;
|
import java.lang.reflect.Type;
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
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.DateUtil;
|
import org.yeshi.utils.JsonUtil;
|
|
import com.google.gson.Gson;
|
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.google.gson.reflect.TypeToken;
|
import com.yeshi.fanli.entity.accept.AcceptData;
|
import com.yeshi.fanli.entity.bus.user.Extract;
|
import com.yeshi.fanli.entity.bus.user.PreviewInfo.PreviewEnum;
|
import com.yeshi.fanli.entity.bus.user.UserInfo;
|
import com.yeshi.fanli.entity.money.TeamEincomeRecord;
|
import com.yeshi.fanli.entity.money.UserMoneyDetail.UserMoneyDetailTypeEnum;
|
import com.yeshi.fanli.entity.order.OrderMoneyDailyCount;
|
import com.yeshi.fanli.entity.order.OrderMoneyDailyCount.SourceTypeEnum;
|
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
|
import com.yeshi.fanli.service.inter.config.ConfigService;
|
import com.yeshi.fanli.service.inter.count.HongBaoV2CountService;
|
import com.yeshi.fanli.service.inter.money.TeamEincomeRecordService;
|
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.order.OrderMoneyDailyCountService;
|
import com.yeshi.fanli.service.inter.user.PreviewInfoService;
|
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
|
import com.yeshi.fanli.service.inter.user.UserInfoService;
|
import com.yeshi.fanli.util.Constant;
|
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
|
import com.yeshi.fanli.util.StringUtil;
|
import com.yeshi.fanli.util.TimeUtil;
|
import com.yeshi.fanli.util.account.UserUtil;
|
import com.yeshi.fanli.vo.money.IncomeDetailVO;
|
import com.yeshi.fanli.vo.money.MoneyPredictVO;
|
import com.yeshi.fanli.vo.money.MoneyStatisticVO;
|
import com.yeshi.fanli.vo.money.TeamPredictVO;
|
|
import net.sf.json.JSONArray;
|
import net.sf.json.JSONObject;
|
|
/**
|
* 账户系统
|
*
|
* @author Administrator
|
*
|
*/
|
@Controller
|
@RequestMapping("api/v2/usermoney")
|
public class UserMoneyControllerV2 {
|
|
@Resource
|
private UserMoneyDetailService userMoneyDetailService;
|
|
@Resource
|
private UserInfoService userInfoService;
|
|
@Resource
|
private HongBaoV2Service hongBaoV2Service;
|
|
@Resource
|
private ExtractService extractService;
|
|
@Resource
|
private UserInfoExtraService userInfoExtraService;
|
|
@Resource
|
private ConfigService configService;
|
|
@Resource
|
private HongBaoV2CountService hongBaoV2CountService;
|
|
@Resource
|
private OrderMoneyDailyCountService orderMoneyDailyCountService;
|
|
@Resource
|
private TeamEincomeRecordService teamEincomeRecordService;
|
|
@Resource
|
private PreviewInfoService previewInfoService;
|
|
|
private Gson getGson() {
|
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());
|
}
|
}
|
});
|
return builder.create();
|
}
|
|
/**
|
* 用户资金统计
|
*
|
* @param acceptData
|
* @param uid
|
* @param out
|
*/
|
@RequestMapping(value = "getMoneyStatistic")
|
public void getMoneyStatistic(AcceptData acceptData, Long uid, PrintWriter out) {
|
if (uid == null || uid == 0) {
|
out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
|
return;
|
}
|
|
// VIP数据预览
|
MoneyStatisticVO vo = null;
|
String redisContent = previewInfoService.getRedisContent(uid, PreviewEnum.moneyInfo);
|
if (!StringUtil.isNullOrEmpty(redisContent)) {
|
vo = new Gson().fromJson(redisContent, MoneyStatisticVO.class);
|
if (vo != null) {
|
vo.setLink(configService.get(ConfigKeyEnum.autoExtractHelpUrl.getKey()));
|
vo.setExtractDesc("提现金额就是已成功提现到支付宝的资金");
|
vo.setMoneyArrivalDesc("订单已到账后提现时间和金额均不受限制");
|
}
|
}
|
|
if (vo == null) {
|
vo = createMoneyStatistic(uid);
|
}
|
|
Gson gson = getGson();
|
out.print(JsonUtil.loadTrueResult(gson.toJson(vo)));
|
}
|
|
|
public MoneyStatisticVO createMoneyStatistic(Long uid) {
|
UserInfo user = userInfoService.getUserById(uid);
|
|
MoneyStatisticVO vo = new MoneyStatisticVO();
|
vo.setLink(configService.get(ConfigKeyEnum.autoExtractHelpUrl.getKey()));
|
vo.setBalanceMoney(user.getMyHongBao());
|
vo.setExtractDesc("提现金额就是已成功提现到支付宝的资金");
|
vo.setMoneyArrivalDesc("订单已到账后提现时间和金额均不受限制");
|
|
// 获取提现中的信息
|
BigDecimal extractingMoney = extractService.sumVerifyingMoney(uid);
|
if (extractingMoney.compareTo(new BigDecimal(0)) > 0)
|
vo.setExtractingMoneyInfo("提现中:¥" + extractingMoney.setScale(2, RoundingMode.HALF_UP));
|
|
Date minDate = null;
|
Date maxDate = null;
|
long timeStamp = System.currentTimeMillis();
|
List<UserMoneyDetailTypeEnum> typeList = new ArrayList<>();
|
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTimeInMillis(timeStamp);
|
|
typeList.clear();
|
typeList.add(UserMoneyDetailTypeEnum.extract);
|
typeList.add(UserMoneyDetailTypeEnum.extractNew);
|
typeList.add(UserMoneyDetailTypeEnum.extractVerify);
|
typeList.add(UserMoneyDetailTypeEnum.extractVerifyNew);
|
typeList.add(UserMoneyDetailTypeEnum.extractReject);
|
typeList.add(UserMoneyDetailTypeEnum.extractAutoWX);
|
|
// 本月提现
|
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);
|
vo.setMonthExtractMoney(
|
userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, minDate, maxDate, 1).abs());
|
|
// 上月提现
|
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, 1).abs());
|
|
minDate = new Date(0L);
|
maxDate = new Date(timeStamp);
|
// 累计成功提现
|
vo.setTotalExtractMoney(
|
userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, minDate, maxDate, 1).abs());
|
|
// 累计自购返利
|
typeList.clear();
|
typeList.add(UserMoneyDetailTypeEnum.fanli);
|
typeList.add(UserMoneyDetailTypeEnum.fanliNew);
|
typeList.add(UserMoneyDetailTypeEnum.fanliWeiQuan);
|
typeList.add(UserMoneyDetailTypeEnum.fanliWeiQuanNew);
|
typeList.add(UserMoneyDetailTypeEnum.orderReward);
|
typeList.add(UserMoneyDetailTypeEnum.orderRewardNew);
|
vo.setTotalFanLiMoney(
|
userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, minDate, maxDate).abs());
|
|
// 累计分享赚
|
typeList.clear();
|
typeList.add(UserMoneyDetailTypeEnum.share);
|
typeList.add(UserMoneyDetailTypeEnum.shareNew);
|
typeList.add(UserMoneyDetailTypeEnum.shareWeiQuan);
|
vo.setTotalShareMoney(
|
userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, minDate, maxDate).abs());
|
|
// 累计邀请赚
|
typeList.clear();
|
typeList.add(UserMoneyDetailTypeEnum.invite);
|
typeList.add(UserMoneyDetailTypeEnum.inviteWeiQuan);
|
typeList.add(UserMoneyDetailTypeEnum.inviteAndShare);
|
typeList.add(UserMoneyDetailTypeEnum.subsidy);
|
typeList.add(UserMoneyDetailTypeEnum.teamReward);
|
vo.setTotalInviteMoney(
|
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);
|
vo.setMonthSettleMoney(hongBaoV2CountService.sumMoneyBySettleTimeAndUid(uid, minDate, maxDate));
|
|
// 上月收货
|
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.setLastMonthSettleMoney(hongBaoV2CountService.sumMoneyBySettleTimeAndUid(uid, minDate, maxDate));
|
|
// 待确认收货(180天内)
|
vo.setNotSettleMoney(hongBaoV2CountService.sumMoneyByANotSettleAndUid(uid));
|
|
// 今日预估
|
calendar.add(Calendar.DAY_OF_YEAR, -1);
|
minDate = new Date(TimeUtil.convertDateToTemp(TimeUtil.getGernalTime(timeStamp)));
|
vo.setTodayPredict(cratePredictVO(orderMoneyDailyCountService.query(uid, minDate, null)));
|
|
// 本月预估
|
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);
|
vo.setMonthPredict(cratePredictVO(orderMoneyDailyCountService.query(uid, minDate, maxDate)));
|
return vo;
|
}
|
|
|
|
@RequestMapping(value = "getUserMoneyInfo")
|
public void getUserMoneyInfo(AcceptData acceptData, Long uid, PrintWriter out) {
|
if (uid == null || uid == 0) {
|
out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
|
return;
|
}
|
UserInfo user = userInfoService.getUserById(uid);
|
|
MoneyStatisticVO vo = new MoneyStatisticVO();
|
vo.setLink(configService.get(ConfigKeyEnum.autoExtractHelpUrl.getKey()));
|
vo.setBalanceMoney(user.getMyHongBao());
|
// 获取提现中的信息
|
BigDecimal extractingMoney = extractService.sumVerifyingMoney(uid);
|
if (extractingMoney.compareTo(new BigDecimal(0)) > 0)
|
vo.setExtractingMoneyInfo("提现中:¥" + extractingMoney.setScale(2, RoundingMode.HALF_UP));
|
Gson gson = getGson();
|
out.print(JsonUtil.loadTrueResult(gson.toJson(vo)));
|
}
|
|
private MoneyPredictVO cratePredictVO(List<OrderMoneyDailyCount> list) {
|
MoneyPredictVO predictVO = new MoneyPredictVO();
|
predictVO.setMineNum(0);
|
predictVO.setTeamNum(0);
|
predictVO.setMineMoney(BigDecimal.valueOf(0));
|
predictVO.setTeamMoney(BigDecimal.valueOf(0));
|
BigDecimal hundred = BigDecimal.valueOf(100);
|
if (list != null && list.size() > 0) {
|
for (OrderMoneyDailyCount dailyCount : list) {
|
if (dailyCount.getOrderNum() != null)
|
predictVO.setMineNum(predictVO.getMineNum() + dailyCount.getOrderNum());
|
if (dailyCount.getOrderNumTeam() != null)
|
predictVO.setTeamNum(predictVO.getTeamNum() + dailyCount.getOrderNumTeam());
|
if (dailyCount.getIncome() != null)
|
predictVO.setMineMoney(predictVO.getMineMoney()
|
.add(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncome()), hundred)));
|
if (dailyCount.getIncomeTeam() != null)
|
predictVO.setTeamMoney(predictVO.getTeamMoney()
|
.add(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncomeTeam()), hundred)));
|
}
|
}
|
predictVO.setTotalNum(predictVO.getTeamNum() + predictVO.getMineNum());
|
predictVO.setTotalMoney(predictVO.getMineMoney().add(predictVO.getTeamMoney()));
|
return predictVO;
|
}
|
|
/**
|
* 提现成功记录
|
* @param acceptData
|
* @param page
|
* @param uid
|
* @param out
|
*/
|
@RequestMapping(value = "getExtractRecord")
|
public void getExtractRecord(AcceptData acceptData, Integer page, Long uid, PrintWriter out) {
|
if (uid == null || uid == 0) {
|
out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
|
return;
|
}
|
|
List<Extract> list = null;
|
String redisContent = previewInfoService.getRedisContent(uid, PreviewEnum.extractRecord);
|
if (!StringUtil.isNullOrEmpty(redisContent)) {
|
Gson gson = new Gson();
|
list = gson.fromJson(redisContent, new TypeToken<ArrayList<Extract>>() {}.getType());
|
}
|
|
// 查询真实
|
long count = 0;
|
if (list == null) {
|
list = extractService.getExtractSucceedRecord(page, Constant.PAGE_SIZE, uid);
|
count = extractService.countExtractSucceedRecord(uid);
|
}
|
|
if (list == null)
|
list = new ArrayList<>();
|
|
JSONArray JSONArray = new JSONArray();
|
for (Extract extract : list) {
|
Date receiveTime = extract.getReceiveTime();
|
if (receiveTime == null) {
|
receiveTime = new Date(extract.getExtractTime());
|
}
|
String account = "支付宝:" + UserUtil.filterAlipayAccount(extract.getAccount());
|
account = account + "-姓名:" + UserUtil.filterAlipayName(extract.getName());
|
|
JSONObject object = new JSONObject();
|
object.put("title", "你于" + TimeUtil.formatDate(receiveTime) + "提现成功");
|
object.put("account", account);
|
object.put("money", "¥" + extract.getMoney().setScale(2).toString());
|
JSONArray.add(object);
|
}
|
|
JSONObject json = new JSONObject();
|
json.put("count", count == 0 ? list.size() : 0);
|
json.put("list", JSONArray);
|
out.print(JsonUtil.loadTrueResult(json));
|
}
|
|
/**
|
* 历史详情
|
*
|
* @param acceptData
|
* @param uid
|
* @param datetype 1-天 - 2月
|
* @param out
|
*/
|
@RequestMapping(value = "getHistoryDetail")
|
public void getHistoryDetail(AcceptData acceptData, Long uid, String date, Integer datetype, PrintWriter out) {
|
if (uid == null || uid == 0) {
|
out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
|
return;
|
}
|
|
if (StringUtil.isNullOrEmpty(date) || datetype == null) {
|
out.print(JsonUtil.loadFalseResult(1, "参数不完整"));
|
return;
|
}
|
|
try {
|
Date minDay = new Date();
|
Date maxDay = new Date();
|
BigDecimal zero = new BigDecimal(0);
|
List<OrderMoneyDailyCount> listDailyCount = null;
|
List<MoneyPredictVO> list = new ArrayList<>();
|
SimpleDateFormat formatMonth = new SimpleDateFormat("yyyy年MM月");
|
SimpleDateFormat formatDay = new SimpleDateFormat("yyyy年MM月dd日");
|
if (datetype == 1) {
|
// 后退7个月
|
int countNum = 7;
|
Date day = TimeUtil.parseYYYYMMDD(date);
|
for (int i = 0; i < countNum; i++) {
|
MoneyPredictVO predictVO = new MoneyPredictVO(zero, 0, zero, 0);
|
if (i == 0) {
|
predictVO.setCountDate(formatDay.format(day));
|
} else {
|
predictVO.setCountDate(formatDay.format(DateUtil.reduceDay(i, day)));
|
}
|
list.add(predictVO);
|
|
if (i == countNum - 1) {
|
minDay = DateUtil.reduceDay(i, day);
|
}
|
}
|
maxDay = TimeUtil.parseYYYYMMDD_HHMMSS(date + " 23:59:59");
|
listDailyCount = orderMoneyDailyCountService.sumGroupByCountDay(uid, minDay, maxDay);
|
} else if (datetype == 2) {
|
// 后退3个月
|
int countNum = 3;
|
Date day = TimeUtil.parseYYYYMMDD(DateUtil.getFirstDayOfMonth(date));
|
for (int i = 0; i < countNum; i++) {
|
MoneyPredictVO predictVO = new MoneyPredictVO(zero, 0, zero, 0);
|
if (i == 0) {
|
predictVO.setCountDate(formatMonth.format(day));
|
} else {
|
predictVO.setCountDate(formatMonth.format(DateUtil.reduceMonth(day, i)));
|
}
|
list.add(predictVO);
|
|
if (i == countNum - 1) {
|
minDay = DateUtil.reduceMonth(day, i);
|
}
|
}
|
maxDay = TimeUtil.parseYYYYMMDD_HHMMSS(DateUtil.getLastDayOfMonth(date) + " 23:59:59");
|
listDailyCount = orderMoneyDailyCountService.sumGroupByYearMonth(uid, minDay, maxDay);
|
}
|
|
BigDecimal hundred = BigDecimal.valueOf(100);
|
for (MoneyPredictVO predictVO : list) {
|
String countDate = predictVO.getCountDate();
|
|
if (listDailyCount != null && listDailyCount.size() > 0) {
|
for (OrderMoneyDailyCount dailyCount : listDailyCount) {
|
Date countDay = dailyCount.getCountDay();
|
if (datetype == 1 && countDay != null && countDate.equals(formatDay.format(countDay))) {
|
predictVO.setMineNum(dailyCount.getOrderNum());
|
predictVO.setMineMoney(
|
MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncome()), hundred));
|
predictVO.setTeamNum(dailyCount.getOrderNumTeam());
|
predictVO.setTeamMoney(
|
MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncomeTeam()), hundred));
|
break;
|
}
|
|
String yearMonth = dailyCount.getYearMonth();
|
if (datetype == 2 && !StringUtil.isNullOrEmpty(yearMonth) && countDate.equals(
|
formatMonth.format(TimeUtil.parseYYYYMMDD(DateUtil.getFirstDayOfMonth(yearMonth))))) {
|
predictVO.setMineNum(dailyCount.getOrderNum());
|
predictVO.setMineMoney(
|
MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncome()), hundred));
|
predictVO.setTeamNum(dailyCount.getOrderNumTeam());
|
predictVO.setTeamMoney(
|
MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncomeTeam()), hundred));
|
break;
|
}
|
}
|
}
|
|
predictVO.setTotalNum(predictVO.getTeamNum() + predictVO.getMineNum());
|
predictVO.setTotalMoney(predictVO.getMineMoney().add(predictVO.getTeamMoney()));
|
}
|
|
Gson gson = getGson();
|
|
JSONObject object = new JSONObject();
|
object.put("count", list.size());
|
object.put("list", gson.toJson(list));
|
out.print(JsonUtil.loadTrueResult(object));
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
}
|
|
/**
|
* 收益详情
|
*
|
* @param acceptData
|
* @param uid
|
* @param datetype
|
* @param type
|
* @param out
|
*/
|
@RequestMapping(value = "getIncomeDetail")
|
public void getIncomeDetail(AcceptData acceptData, Long uid, String date, Integer datetype, Integer type,
|
PrintWriter out) {
|
if (uid == null || uid == 0) {
|
out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
|
return;
|
}
|
|
if (StringUtil.isNullOrEmpty(date) || datetype == null || type == null) {
|
out.print(JsonUtil.loadFalseResult(1, "参数不完整"));
|
return;
|
}
|
|
Date minDay = new Date();
|
Date maxDay = new Date();
|
if (datetype == 1) {
|
minDay = TimeUtil.parseYYYYMMDD(date);
|
maxDay = TimeUtil.parseYYYYMMDD_HHMMSS(date + " 23:59:59");
|
} else if (datetype == 2) {
|
String firstDay = DateUtil.getFirstDayOfMonth(date);
|
String lastDay = DateUtil.getLastDayOfMonth(date);
|
minDay = TimeUtil.parseYYYYMMDD(firstDay);
|
maxDay = TimeUtil.parseYYYYMMDD_HHMMSS(lastDay + " 23:59:59");
|
}
|
|
List<OrderMoneyDailyCount> listDailyCount = null;
|
if (type == 1) {
|
listDailyCount = orderMoneyDailyCountService.sumGroupBySourceType(uid, minDay, maxDay);
|
} else if (type == 2) {
|
listDailyCount = orderMoneyDailyCountService.sumTeamGroupBySourceType(uid, minDay, maxDay);
|
}
|
|
BigDecimal zero = new BigDecimal(0);
|
List<IncomeDetailVO> list = new ArrayList<>();
|
|
BigDecimal hundred = BigDecimal.valueOf(100);
|
SourceTypeEnum[] arrayEnun = SourceTypeEnum.values();
|
for (int m = 0; m < arrayEnun.length; m++) {
|
SourceTypeEnum typeEnum = arrayEnun[m];
|
IncomeDetailVO detail = new IncomeDetailVO(typeEnum.getIcon(), 0, zero);
|
if (listDailyCount != null && listDailyCount.size() > 0) {
|
for (OrderMoneyDailyCount dailyCount : listDailyCount) {
|
if (dailyCount.getSourceType() == typeEnum) {
|
detail.setNum(detail.getNum() + dailyCount.getOrderNum());
|
detail.setMoney(detail.getMoney()
|
.add(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncome()), hundred)));
|
}
|
}
|
}
|
list.add(detail);
|
}
|
|
Gson gson = getGson();
|
|
JSONObject object = new JSONObject();
|
object.put("count", list.size());
|
object.put("list", gson.toJson(list));
|
out.print(JsonUtil.loadTrueResult(object));
|
}
|
|
/**
|
* 团队分红
|
* @param acceptData
|
* @param uid
|
* @param out
|
*/
|
@RequestMapping(value = "getTeamDividendStatistic")
|
public void getTeamDividendStatistic(AcceptData acceptData, Long uid, PrintWriter out) {
|
if (uid == null || uid == 0) {
|
out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
|
return;
|
}
|
|
Date minDate = null;
|
Date maxDate = null;
|
long timeStamp = System.currentTimeMillis();
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTimeInMillis(timeStamp);
|
// 今日预估
|
calendar.add(Calendar.DAY_OF_YEAR, -1);
|
minDate = new Date(TimeUtil.convertDateToTemp(TimeUtil.getGernalTime(timeStamp)));
|
TeamPredictVO todayVO = crateTeamPredictVO(orderMoneyDailyCountService.query(uid, minDate, null));
|
|
// 本月预估
|
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);
|
TeamPredictVO monthVO = crateTeamPredictVO(orderMoneyDailyCountService.query(uid, minDate, maxDate));
|
|
// 统计已到账分红、补贴
|
BigDecimal subsidy = teamEincomeRecordService.sumRecieveByType(uid, TeamEincomeRecord.TYPE_TEAM_SUBSIDY);
|
BigDecimal reward = teamEincomeRecordService.sumRecieveByType(uid, TeamEincomeRecord.TYPE_TEAM_DIVIDENTS);
|
|
Gson gson = getGson();
|
JSONObject object = new JSONObject();
|
object.put("total", subsidy.add(reward).setScale(2).toString());
|
object.put("reward", reward.setScale(2).toString());
|
object.put("subsidy", subsidy.setScale(2).toString());
|
object.put("today", gson.toJson(todayVO));
|
object.put("month", gson.toJson(monthVO));
|
out.print(JsonUtil.loadTrueResult(object));
|
}
|
|
private TeamPredictVO crateTeamPredictVO(List<OrderMoneyDailyCount> list) {
|
TeamPredictVO predictVO = new TeamPredictVO(BigDecimal.ZERO, 0, BigDecimal.ZERO, 0);
|
if (list != null && list.size() > 0) {
|
BigDecimal hundred = BigDecimal.valueOf(100);
|
for (OrderMoneyDailyCount dailyCount : list) {
|
if (dailyCount.getTeamRewardNum() != null)
|
predictVO.setRewardNum(predictVO.getRewardNum() + dailyCount.getTeamRewardNum());
|
if (dailyCount.getTeamSubsidyNum() != null)
|
predictVO.setSubsidyNum(predictVO.getSubsidyNum() + dailyCount.getTeamSubsidyNum());
|
if (dailyCount.getTeamReward() != null)
|
predictVO.setReward(predictVO.getReward()
|
.add(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamReward()), hundred)));
|
if (dailyCount.getTeamSubsidy() != null)
|
predictVO.setSubsidy(predictVO.getSubsidy()
|
.add(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamSubsidy()), hundred)));
|
|
}
|
}
|
predictVO.setTotalNum(predictVO.getRewardNum() + predictVO.getSubsidyNum());
|
predictVO.setTotalMoney(predictVO.getReward().add(predictVO.getSubsidy()));
|
return predictVO;
|
}
|
|
/**
|
* 历史详情
|
*
|
* @param acceptData
|
* @param uid
|
* @param datetype 1-天 - 2月
|
* @param out
|
*/
|
@RequestMapping(value = "getTeamDividendHistory")
|
public void getTeamDividendHistory(AcceptData acceptData, Long uid, String date, Integer datetype,
|
PrintWriter out) {
|
if (uid == null || uid == 0) {
|
out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
|
return;
|
}
|
|
if (StringUtil.isNullOrEmpty(date) || datetype == null) {
|
out.print(JsonUtil.loadFalseResult(1, "参数不完整"));
|
return;
|
}
|
|
try {
|
Date minDay = new Date();
|
Date maxDay = new Date();
|
BigDecimal zero = new BigDecimal(0);
|
List<OrderMoneyDailyCount> listDailyCount = null;
|
List<TeamPredictVO> list = new ArrayList<>();
|
SimpleDateFormat formatMonth = new SimpleDateFormat("yyyy年MM月");
|
SimpleDateFormat formatDay = new SimpleDateFormat("yyyy年MM月dd日");
|
if (datetype == 1) {
|
// 后退7个月
|
int countNum = 7;
|
Date day = TimeUtil.parseYYYYMMDD(date);
|
for (int i = 0; i < countNum; i++) {
|
TeamPredictVO predictVO = new TeamPredictVO(zero, 0, zero, 0);
|
if (i == 0) {
|
predictVO.setCountDate(formatDay.format(day));
|
} else {
|
predictVO.setCountDate(formatDay.format(DateUtil.reduceDay(i, day)));
|
}
|
list.add(predictVO);
|
|
if (i == countNum - 1) {
|
minDay = DateUtil.reduceDay(i, day);
|
}
|
}
|
maxDay = TimeUtil.parseYYYYMMDD_HHMMSS(date + " 23:59:59");
|
listDailyCount = orderMoneyDailyCountService.sumTeamGroupByCountDay(uid, minDay, maxDay);
|
} else if (datetype == 2) {
|
// 后退3个月
|
int countNum = 3;
|
Date day = TimeUtil.parseYYYYMMDD(DateUtil.getFirstDayOfMonth(date));
|
for (int i = 0; i < countNum; i++) {
|
TeamPredictVO predictVO = new TeamPredictVO(zero, 0, zero, 0);
|
if (i == 0) {
|
predictVO.setCountDate(formatMonth.format(day));
|
} else {
|
predictVO.setCountDate(formatMonth.format(DateUtil.reduceMonth(day, i)));
|
}
|
list.add(predictVO);
|
|
if (i == countNum - 1) {
|
minDay = DateUtil.reduceMonth(day, i);
|
}
|
}
|
maxDay = TimeUtil.parseYYYYMMDD_HHMMSS(DateUtil.getLastDayOfMonth(date) + " 23:59:59");
|
listDailyCount = orderMoneyDailyCountService.sumTeamGroupByYearMonth(uid, minDay, maxDay);
|
}
|
|
BigDecimal hundred = BigDecimal.valueOf(100);
|
for (TeamPredictVO predictVO : list) {
|
String countDate = predictVO.getCountDate();
|
|
if (listDailyCount != null && listDailyCount.size() > 0) {
|
for (OrderMoneyDailyCount dailyCount : listDailyCount) {
|
Date countDay = dailyCount.getCountDay();
|
if (datetype == 1 && countDay != null && countDate.equals(formatDay.format(countDay))) {
|
predictVO.setRewardNum(dailyCount.getTeamRewardNum());
|
predictVO.setReward(
|
MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamReward()), hundred));
|
predictVO.setSubsidyNum(dailyCount.getTeamSubsidyNum());
|
predictVO.setSubsidy(
|
MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamSubsidy()), hundred));
|
break;
|
}
|
|
String yearMonth = dailyCount.getYearMonth();
|
if (datetype == 2 && !StringUtil.isNullOrEmpty(yearMonth) && countDate.equals(
|
formatMonth.format(TimeUtil.parseYYYYMMDD(DateUtil.getFirstDayOfMonth(yearMonth))))) {
|
predictVO.setRewardNum(dailyCount.getTeamRewardNum());
|
predictVO.setReward(
|
MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamReward()), hundred));
|
predictVO.setSubsidyNum(dailyCount.getTeamSubsidyNum());
|
predictVO.setSubsidy(
|
MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamSubsidy()), hundred));
|
break;
|
}
|
}
|
}
|
|
predictVO.setTotalNum(predictVO.getRewardNum() + predictVO.getSubsidyNum());
|
predictVO.setTotalMoney(predictVO.getReward().add(predictVO.getSubsidy()));
|
}
|
|
Gson gson = getGson();
|
|
JSONObject object = new JSONObject();
|
object.put("count", list.size());
|
object.put("list", gson.toJson(list));
|
out.print(JsonUtil.loadTrueResult(object));
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
}
|
|
|
/**
|
* 订单统计-h5
|
*
|
* @param acceptData
|
* @param id
|
* @param out
|
*/
|
@RequestMapping(value = "countTeamOrderNum")
|
public void countTeamOrderNum(String callback, AcceptData acceptData, Long uid, PrintWriter out) {
|
try {
|
|
Date minDate = null;
|
Date maxDate = null;
|
long timeStamp = System.currentTimeMillis();
|
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTimeInMillis(timeStamp);
|
|
// 今日预估
|
calendar.add(Calendar.DAY_OF_YEAR, -1);
|
minDate = new Date(TimeUtil.convertDateToTemp(TimeUtil.getGernalTime(timeStamp)));
|
OrderMoneyDailyCount todayRecord = createVO(orderMoneyDailyCountService.sumTeamOrderNumGroupByCountDay(uid, minDate, null));
|
|
// 昨日预估
|
calendar.add(Calendar.DAY_OF_YEAR, -1);
|
maxDate = new Date(TimeUtil.convertDateToTemp(TimeUtil.getGernalTime(timeStamp)));
|
minDate = DateUtil.reduceDay(1, maxDate);
|
OrderMoneyDailyCount yesterdayRecord = createVO(orderMoneyDailyCountService.sumTeamOrderNumGroupByCountDay(uid, minDate, maxDate));
|
|
// 本月预估
|
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);
|
OrderMoneyDailyCount monthRecord = createVO(orderMoneyDailyCountService.sumTeamOrderNumGroupByYearMonth(uid, minDate, maxDate));
|
|
// 累计
|
OrderMoneyDailyCount totalityRecord = createVO(orderMoneyDailyCountService.sumTeamOrderNumGroupByUid(uid, null, null));
|
|
JSONObject today = new JSONObject();
|
today.put("direct", todayRecord.getDirectOrderNum());
|
today.put("indirect", todayRecord.getInDirectOrderNum());
|
today.put("beyond", todayRecord.getBeyondOrderNum());
|
|
JSONObject yesterday = new JSONObject();
|
yesterday.put("direct", yesterdayRecord.getDirectOrderNum());
|
yesterday.put("indirect", yesterdayRecord.getInDirectOrderNum());
|
yesterday.put("beyond", yesterdayRecord.getBeyondOrderNum());
|
|
JSONObject month = new JSONObject();
|
month.put("direct", monthRecord.getDirectOrderNum());
|
month.put("indirect", monthRecord.getInDirectOrderNum());
|
month.put("beyond", monthRecord.getBeyondOrderNum());
|
|
JSONObject totality = new JSONObject();
|
totality.put("direct", totalityRecord.getDirectOrderNum());
|
totality.put("indirect", totalityRecord.getInDirectOrderNum());
|
totality.put("beyond", totalityRecord.getBeyondOrderNum());
|
|
|
JSONObject json = new JSONObject();
|
json.put("today", today);
|
json.put("yesterday", yesterday);
|
json.put("month", month);
|
json.put("totality", totality);
|
JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(json));
|
} catch (Exception e) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("统计失败"));
|
e.printStackTrace();
|
}
|
}
|
|
|
private OrderMoneyDailyCount createVO(List<OrderMoneyDailyCount> list) {
|
OrderMoneyDailyCount totalityRecord = new OrderMoneyDailyCount(0,0,0);
|
|
if (list != null && list.size() > 0) {
|
for (OrderMoneyDailyCount record: list) {
|
totalityRecord.setDirectOrderNum(totalityRecord.getDirectOrderNum() + record.getDirectOrderNum());
|
totalityRecord.setInDirectOrderNum(totalityRecord.getInDirectOrderNum() + record.getInDirectOrderNum());
|
totalityRecord.setBeyondOrderNum(totalityRecord.getBeyondOrderNum() + record.getBeyondOrderNum());
|
}
|
}
|
|
return totalityRecord;
|
}
|
}
|