package com.yeshi.fanli.controller.client; import java.io.IOException; import java.io.PrintWriter; import java.lang.reflect.Type; import java.math.BigDecimal; 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.money.UserMoneyDetail.UserMoneyDetailTypeEnum; import com.yeshi.fanli.service.inter.hongbao.HongBaoV2Service; import com.yeshi.fanli.service.inter.user.UserInfoService; import com.yeshi.fanli.service.inter.user.UserMoneyDetailService; import com.yeshi.fanli.util.MoneyBigDecimalUtil; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.TimeUtil; 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; /** * 新版资金详情(1.4.9) * * @param acceptData * @param uid * @param index * List最末的主键ID * @param year * 年份 * @param month * 月份 * @param out */ @RequestMapping(value = "getUserMoneyDetailList") public void getUserMoneyDetailList(AcceptData acceptData, Long uid, Long index, Integer year, Integer month, 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 list = userMoneyDetailService.listUserMoneyDetailForClient(uid, index, date); long count = userMoneyDetailService.countUserMoneyDetailForClient(uid, index, date); GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation(); gsonBuilder.registerTypeAdapter(UserMoneyDetailTypeEnum.class, new TypeAdapter() { @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() { @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() { @Override public JsonElement serialize(BigDecimal value, Type theType, JsonSerializationContext context) { if (value == null) { return new JsonPrimitive(""); } else { return new JsonPrimitive(MoneyBigDecimalUtil.getWithNoZera(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; } BigDecimal balance = userInfoService.getUserById(uid).getMyHongBao(); UserMoneyStatisticVO vo = new UserMoneyStatisticVO(); vo.setBalanceMoney(balance); Date minDate = null; Date maxDate = null; List 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(ca.getTimeInMillis()); // 本月未到账 vo.setMonthUnRecievedMoney(hongBaoV2Service.getUnRecievedMoneyWithPreGetTime(uid, minDate, maxDate)); // 全部未到账 minDate = new Date(0); vo.setTotalUnRecievedMoney(hongBaoV2Service.getUnRecievedMoneyWithCreateTime(uid, minDate, maxDate)); Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()).create(); out.print(JsonUtil.loadTrueResult(gson.toJson(vo))); } }