package com.yeshi.fanli.controller.client.v1;
|
|
import java.io.IOException;
|
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.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.TypeAdapter;
|
import com.google.gson.stream.JsonReader;
|
import com.google.gson.stream.JsonWriter;
|
import com.yeshi.fanli.entity.accept.AcceptData;
|
import com.yeshi.fanli.entity.bus.user.UserInfo;
|
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
|
import com.yeshi.fanli.entity.money.UserMoneyDetail.UserMoneyDetailTypeEnum;
|
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
|
import com.yeshi.fanli.exception.user.UserInfoExtraException;
|
import com.yeshi.fanli.service.inter.config.ConfigService;
|
import com.yeshi.fanli.service.inter.count.HongBaoV2CountService;
|
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 com.yeshi.fanli.util.StringUtil;
|
import com.yeshi.fanli.util.TimeUtil;
|
import com.yeshi.fanli.util.VersionUtil;
|
import com.yeshi.fanli.vo.money.UserMoneyDetailHistoryVO;
|
import com.yeshi.fanli.vo.money.UserMoneyStatisticVO;
|
|
import net.sf.json.JSONObject;
|
|
/**
|
* 账户系统
|
*
|
* @author Administrator
|
*
|
*/
|
@Controller
|
@RequestMapping("api/v1/usermoney")
|
public class UserMoneyController {
|
|
@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;
|
|
/**
|
* 新版资金详情(1.4.9)
|
*
|
* @param acceptData
|
* @param uid
|
* @param index
|
* List最末的主键ID
|
* @param year
|
* 年份
|
* @param month
|
* 月份
|
* @param type
|
* 1-收入 2-支出 0-全部
|
*
|
* @param out
|
*/
|
@RequestMapping(value = "getUserMoneyDetailList")
|
public void getUserMoneyDetailList(AcceptData acceptData, Long uid, Long index, Integer year, Integer month,
|
Integer type, PrintWriter out) {
|
if (uid == null || uid == 0) {
|
out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
|
return;
|
}
|
|
if ((year == null && month != null) || (year != null && month == null)) {
|
out.print(JsonUtil.loadFalseResult(1, "日期不完整"));
|
return;
|
}
|
|
Date date = null;
|
|
if (year != null && month != null) {
|
date = new Date(TimeUtil.convertToTimeTemp(year + "-" + month, "yyyy-M"));
|
Calendar ca = Calendar.getInstance();
|
ca.setTime(date);
|
ca.add(Calendar.MONTH, 1);
|
date = new Date(ca.getTimeInMillis() - 1);
|
}
|
|
List<UserMoneyDetailHistoryVO> list = userMoneyDetailService.listUserMoneyDetailForClient(uid, index, type,
|
date);
|
long count = userMoneyDetailService.countUserMoneyDetailForClient(uid, index, type, date);
|
GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
|
gsonBuilder.registerTypeAdapter(UserMoneyDetailTypeEnum.class, new TypeAdapter<UserMoneyDetailTypeEnum>() {
|
@Override
|
public UserMoneyDetailTypeEnum read(JsonReader arg0) throws IOException {
|
return null;
|
}
|
|
@Override
|
public void write(JsonWriter out, UserMoneyDetailTypeEnum arg1) throws IOException {
|
out.beginObject();
|
out.name("portrait").value(arg1.getPicture());
|
if (!StringUtil.isNullOrEmpty(arg1.getHelpUrl()))
|
out.name("helpUrl").value(arg1.getHelpUrl());
|
out.endObject();
|
}
|
}).registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
|
@Override
|
public JsonElement serialize(Date value, Type theType, JsonSerializationContext context) {
|
if (value == null) {
|
return new JsonPrimitive("");
|
} else {
|
return new JsonPrimitive(TimeUtil.getGernalTime(value.getTime(), "yyyy.MM.dd HH:mm"));
|
}
|
}
|
}).registerTypeAdapter(BigDecimal.class, new JsonSerializer<BigDecimal>() {
|
@Override
|
public JsonElement serialize(BigDecimal value, Type theType, JsonSerializationContext context) {
|
if (value == null) {
|
return new JsonPrimitive("");
|
} else {
|
value = value.setScale(2);
|
return new JsonPrimitive(value.toString());
|
}
|
}
|
});
|
|
Gson gson = gsonBuilder.create();
|
|
JSONObject data = new JSONObject();
|
data.put("data", gson.toJson(list));
|
data.put("count", count);
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
|
/**
|
* 用户资金统计
|
*
|
* @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.extractNew);
|
typeList.add(UserMoneyDetailTypeEnum.extractVerify);
|
typeList.add(UserMoneyDetailTypeEnum.extractVerifyNew);
|
typeList.add(UserMoneyDetailTypeEnum.extractReject);
|
typeList.add(UserMoneyDetailTypeEnum.extractAutoWX);
|
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, 1).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.extractNew);
|
typeList.add(UserMoneyDetailTypeEnum.extractVerify);
|
typeList.add(UserMoneyDetailTypeEnum.extractVerifyNew);
|
typeList.add(UserMoneyDetailTypeEnum.extractReject);
|
typeList.add(UserMoneyDetailTypeEnum.extractAutoWX);
|
vo.setMonthExtractMoney(
|
userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, minDate, maxDate, 1).abs());
|
|
if (!VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) {
|
// 上月收入
|
typeList.clear();
|
typeList.add(UserMoneyDetailTypeEnum.fanli);
|
typeList.add(UserMoneyDetailTypeEnum.fanliNew);
|
typeList.add(UserMoneyDetailTypeEnum.fanliWeiQuan);
|
typeList.add(UserMoneyDetailTypeEnum.fanliWeiQuanNew);
|
typeList.add(UserMoneyDetailTypeEnum.share);
|
typeList.add(UserMoneyDetailTypeEnum.shareNew);
|
typeList.add(UserMoneyDetailTypeEnum.shareWeiQuan);
|
typeList.add(UserMoneyDetailTypeEnum.invite);
|
typeList.add(UserMoneyDetailTypeEnum.inviteWeiQuan);
|
typeList.add(UserMoneyDetailTypeEnum.inviteAndShare);
|
typeList.add(UserMoneyDetailTypeEnum.teamReward);
|
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());
|
|
// 本月到账
|
typeList.clear();
|
typeList.add(UserMoneyDetailTypeEnum.fanli);
|
typeList.add(UserMoneyDetailTypeEnum.fanliNew);
|
typeList.add(UserMoneyDetailTypeEnum.fanliWeiQuan);
|
typeList.add(UserMoneyDetailTypeEnum.fanliWeiQuanNew);
|
typeList.add(UserMoneyDetailTypeEnum.share);
|
typeList.add(UserMoneyDetailTypeEnum.shareNew);
|
typeList.add(UserMoneyDetailTypeEnum.shareWeiQuan);
|
typeList.add(UserMoneyDetailTypeEnum.invite);
|
typeList.add(UserMoneyDetailTypeEnum.inviteWeiQuan);
|
typeList.add(UserMoneyDetailTypeEnum.inviteAndShare);
|
typeList.add(UserMoneyDetailTypeEnum.teamReward);
|
typeList.add(UserMoneyDetailTypeEnum.weiQuan);
|
typeList.add(UserMoneyDetailTypeEnum.hongbao);
|
typeList.add(UserMoneyDetailTypeEnum.hongbaoDeduct);
|
vo.setMonthRecievedMoney(
|
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"));
|
// 本月未到账
|
BigDecimal monthUnRecievedMoney = hongBaoV2Service.getUnRecievedMoneyWithPreGetTime(uid, minDate, maxDate);
|
vo.setMonthUnRecievedMoney(monthUnRecievedMoney);
|
|
// 全部未到账
|
minDate = new Date(0);
|
maxDate = new Date(timeStamp);
|
vo.setTotalUnRecievedMoney(hongBaoV2Service.getUnRecievedMoneyWithCreateTime(uid, minDate, maxDate));
|
|
// 总的到账
|
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);
|
typeList.add(UserMoneyDetailTypeEnum.share);
|
typeList.add(UserMoneyDetailTypeEnum.shareNew);
|
typeList.add(UserMoneyDetailTypeEnum.shareWeiQuan);
|
typeList.add(UserMoneyDetailTypeEnum.invite);
|
typeList.add(UserMoneyDetailTypeEnum.inviteWeiQuan);
|
typeList.add(UserMoneyDetailTypeEnum.inviteAndShare);
|
typeList.add(UserMoneyDetailTypeEnum.teamReward);
|
typeList.add(UserMoneyDetailTypeEnum.weiQuan);
|
typeList.add(UserMoneyDetailTypeEnum.hongbao);
|
typeList.add(UserMoneyDetailTypeEnum.hongbaoDeduct);
|
typeList.add(UserMoneyDetailTypeEnum.subsidy);
|
typeList.add(UserMoneyDetailTypeEnum.teamReward);
|
vo.setTotalRecievedMoney(
|
userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, minDate, maxDate).abs());
|
}
|
|
minDate = new Date(0L);
|
maxDate = new Date(timeStamp);
|
|
if (VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) {
|
// 总的自购返利
|
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.extract);
|
typeList.add(UserMoneyDetailTypeEnum.extractNew);
|
typeList.add(UserMoneyDetailTypeEnum.extractVerify);
|
typeList.add(UserMoneyDetailTypeEnum.extractVerifyNew);
|
typeList.add(UserMoneyDetailTypeEnum.extractAutoWX);
|
typeList.add(UserMoneyDetailTypeEnum.extractReject);
|
vo.setTotalExtractMoney(
|
userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, minDate, maxDate, 1).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);
|
if (VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) {
|
typeList.add(UserMoneyDetailTypeEnum.subsidy);
|
typeList.add(UserMoneyDetailTypeEnum.teamReward);
|
}
|
|
vo.setTotalInviteMoney(
|
userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, minDate, maxDate).abs());
|
|
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));
|
|
if (VersionUtil.greaterThan_2_0(acceptData.getPlatform(), acceptData.getVersion())
|
&& !VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) {
|
// 获取是否绑定了微信
|
if (!StringUtil.isNullOrEmpty(user.getWxUnionId())) {
|
vo.setBindingWX(true);
|
} else
|
vo.setBindingWX(false);
|
|
UserInfoExtra extra = userInfoExtraService.getUserInfoExtra(uid);
|
// 如果绑定了微信而且未开通自动提现就先开通自动提现
|
if (extra.getAutoExtract() == null && !StringUtil.isNullOrEmpty(user.getWxUnionId())) {
|
UserInfoExtra update = new UserInfoExtra();
|
update.setId(extra.getId());
|
update.setAutoExtract(true);
|
try {
|
userInfoExtraService.saveUserInfoExtra(update);// 设置自动提现开启
|
extra.setAutoExtract(true);
|
} catch (UserInfoExtraException e) {
|
e.printStackTrace();
|
}
|
}
|
|
if (extra != null && extra.getAutoExtract() != null && extra.getAutoExtract() == true)
|
vo.setAutoExtract(true);
|
else
|
vo.setAutoExtract(false);
|
|
vo.setAutoExtractHelpUrl(configService.get(ConfigKeyEnum.autoExtractHelpUrl.getKey()));
|
vo.setOpenAutoExtractMsg("自动提现必须要微信授权,当账户中的余额≥2元时,系统在保障你资金安全的情况下,以微信红包的形式完成提现");
|
vo.setCloseAutoExtractMsg("关闭自动提现后,60天以内将不自动提现,60天后系统将会自动开启,敬请知晓");
|
}
|
|
out.print(JsonUtil.loadTrueResult(builder.create().toJson(vo)));
|
}
|
|
/**
|
* 自动提现
|
*
|
* @param acceptData
|
* @param type
|
* @param out
|
*/
|
@RequestMapping("autoExtract")
|
public void autoExtract(AcceptData acceptData, Long uid, Integer type, PrintWriter out) {
|
if (type == null) {
|
out.print(JsonUtil.loadFalseResult("请上传type"));
|
return;
|
}
|
if (uid == null) {
|
out.print(JsonUtil.loadFalseResult("用戶未登录"));
|
return;
|
}
|
|
UserInfoExtra userExtra = userInfoExtraService.getUserInfoExtra(uid);
|
UserInfo user = userInfoService.selectByPKey(uid);
|
if (user == null) {
|
out.print(JsonUtil.loadFalseResult("用戶不存在"));
|
return;
|
}
|
if (type == 1)// 开启
|
{
|
if (userExtra.getAutoExtract() == null || userExtra.getAutoExtract() == false) {
|
if (StringUtil.isNullOrEmpty(user.getWxUnionId()))// 尚未綁定微信
|
{
|
out.print(JsonUtil.loadFalseResult("未綁定微信"));
|
return;
|
}
|
// 设置自动提现
|
UserInfoExtra update = new UserInfoExtra();
|
update.setId(userExtra.getId());
|
update.setAutoExtract(true);
|
try {
|
userInfoExtraService.saveUserInfoExtra(update);
|
} catch (UserInfoExtraException e) {
|
e.printStackTrace();
|
}
|
out.print(JsonUtil.loadTrueResult(""));
|
return;
|
} else {
|
out.print(JsonUtil.loadTrueResult(""));
|
return;
|
}
|
} else {// 关闭
|
UserInfoExtra update = new UserInfoExtra();
|
update.setId(userExtra.getId());
|
update.setAutoExtract(false);
|
update.setCloseTimeExtract(new Date());
|
try {
|
userInfoExtraService.saveUserInfoExtra(update);
|
} catch (UserInfoExtraException e) {
|
e.printStackTrace();
|
}
|
out.print(JsonUtil.loadTrueResult(""));
|
return;
|
}
|
|
}
|
|
}
|