yujian
2020-05-13 3b9e1385a90ae84f97f2a4b8b7a35a6b13c01062
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserMoneyControllerV2.java
@@ -18,6 +18,7 @@
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;
@@ -45,6 +46,7 @@
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;
@@ -83,6 +85,24 @@
   @Resource
   private OrderMoneyDailyCountService orderMoneyDailyCountService;
   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();
   }
   /**
    * 用户资金统计
    * 
@@ -210,21 +230,12 @@
      calendar.add(Calendar.MONTH, -1);
      vo.setMonthPredict(cratePredictVO(orderMoneyDailyCountService.query(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());
            }
         }
      });
      out.print(JsonUtil.loadTrueResult(builder.create().toJson(vo)));
      Gson gson = getGson();
      out.print(JsonUtil.loadTrueResult(gson.toJson(vo)));
   }
   private MoneyPredictVO cratePredictVO(List<OrderMoneyDailyCount> list) {
      MoneyPredictVO predictVO = new MoneyPredictVO();
@@ -235,29 +246,64 @@
      if (list != null && list.size() > 0) {
         for (OrderMoneyDailyCount dailyCount : list) {
            if (dailyCount.getOrderNum() != null) {
            if (dailyCount.getOrderNum() != null)
               predictVO.setMineNum(predictVO.getMineNum() + dailyCount.getOrderNum());
            }
            if (dailyCount.getOrderNumTeam() != null) {
            if (dailyCount.getOrderNumTeam() != null)
               predictVO.setTeamNum(predictVO.getTeamNum() + dailyCount.getOrderNumTeam());
            }
            if (dailyCount.getIncome() != null) {
               predictVO.setMineMoney(predictVO.getMineMoney().add(dailyCount.getIncome()));
            }
            if (dailyCount.getIncomeTeam() != null) {
               predictVO.setTeamMoney(predictVO.getTeamMoney().add(dailyCount.getIncomeTeam()));
            }
            if (dailyCount.getIncome() != null)
               predictVO.setMineMoney(predictVO.getMineMoney().add(BigDecimal.valueOf(dailyCount.getIncome()/100)));
            if (dailyCount.getIncomeTeam() != null)
               predictVO.setTeamMoney(predictVO.getTeamMoney().add(BigDecimal.valueOf(dailyCount.getIncomeTeam()/100)));
         }
      }
      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 = extractService.getExtractSucceedRecord(page, Constant.PAGE_SIZE, 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", extractService.countExtractSucceedRecord(uid));
      json.put("list", JSONArray);
      out.print(JsonUtil.loadTrueResult(json));
   }
   /**
    * 历史详情
    * 
@@ -334,9 +380,9 @@
                  Date countDay = dailyCount.getCountDay();
                  if (datetype == 1 && countDay != null && countDate.equals(formatDay.format(countDay))) {
                     predictVO.setMineNum(dailyCount.getOrderNum());
                     predictVO.setMineMoney(dailyCount.getIncome());
                     predictVO.setMineMoney(BigDecimal.valueOf(dailyCount.getIncome()/100));
                     predictVO.setTeamNum(dailyCount.getOrderNumTeam());
                     predictVO.setTeamMoney(dailyCount.getIncomeTeam());
                     predictVO.setTeamMoney(BigDecimal.valueOf(dailyCount.getIncomeTeam()/100));
                     break;
                  }
@@ -344,9 +390,9 @@
                  if (datetype == 2 && !StringUtil.isNullOrEmpty(yearMonth)
                        && countDate.equals(formatMonth.format(TimeUtil.parseYYYYMMDD(DateUtil.getFirstDayOfMonth(yearMonth))))) {
                     predictVO.setMineNum(dailyCount.getOrderNum());
                     predictVO.setMineMoney(dailyCount.getIncome());
                     predictVO.setMineMoney(BigDecimal.valueOf(dailyCount.getIncome()/100));
                     predictVO.setTeamNum(dailyCount.getOrderNumTeam());
                     predictVO.setTeamMoney(dailyCount.getIncomeTeam());
                     predictVO.setTeamMoney(BigDecimal.valueOf(dailyCount.getIncomeTeam()/100));
                     break;
                  }
               }
@@ -356,23 +402,11 @@
            predictVO.setTotalMoney(predictVO.getMineMoney().add(predictVO.getTeamMoney()));
         }
         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("0.00");
               } else {
                  // 保留2位小数
                  value = value.setScale(2);
                  return new JsonPrimitive(value.toString());
               }
            }
         });
         Gson gson = getGson();
         JSONObject object = new JSONObject();
         object.put("count", list.size());
         object.put("list", builder.create().toJson(list));
         object.put("list", gson.toJson(list));
         out.print(JsonUtil.loadTrueResult(object));
      } catch (ParseException e) {
         e.printStackTrace();
@@ -431,65 +465,178 @@
            for (OrderMoneyDailyCount dailyCount : listDailyCount) {
               if (dailyCount.getSourceType() == typeEnum) {
                  detail.setNum(detail.getNum() + dailyCount.getOrderNum());
                  detail.setMoney(detail.getMoney().add(dailyCount.getIncome()));
                  detail.setMoney(detail.getMoney().add(BigDecimal.valueOf(dailyCount.getIncome()/100)));
               }
            }
         }
         list.add(detail);
      }
      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("0.00");
            } else {
               // 保留2位小数
               value = value.setScale(2);
               return new JsonPrimitive(value.toString());
            }
         }
      });
      Gson gson = getGson();
      JSONObject object = new JSONObject();
      object.put("count", list.size());
      object.put("list", builder.create().toJson(list));
      object.put("list", gson.toJson(list));
      out.print(JsonUtil.loadTrueResult(object));
   }
   @RequestMapping(value = "getExtractRecord")
   public void getExtractRecord(AcceptData acceptData, Integer page, Long uid, PrintWriter out) {
   /**
    * 团队分红
    * @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;
      }
      List<Extract> list = extractService.getExtractSucceedRecord(page, Constant.PAGE_SIZE, uid);
      if (list == null) {
         list = new ArrayList<>();
      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)));
      MoneyPredictVO todayVO = 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);
      MoneyPredictVO monthVO = cratePredictVO(orderMoneyDailyCountService.query(uid, minDate, maxDate));
      Gson gson = getGson();
      JSONObject object = new JSONObject();
      object.put("total", "0.00"); //TODO
      object.put("reward", "0.00");
      object.put("subsidy", "0.00");
      object.put("today", gson.toJson(todayVO));
      object.put("month", gson.toJson(monthVO));
      out.print(JsonUtil.loadTrueResult(object));
   }
   /**
    * 历史详情
    *
    * @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;
      }
      JSONArray JSONArray = new JSONArray();
      for (Extract extract : list) {
         Date receiveTime = extract.getReceiveTime();
         if (receiveTime == null) {
            receiveTime = new Date(extract.getExtractTime());
      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);
         }
         String account = "支付宝:" + UserUtil.filterAlipayAccount(extract.getAccount());
         account = account + "-姓名:" + UserUtil.filterAlipayName(extract.getName());
         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(BigDecimal.valueOf(dailyCount.getTeamReward()/100));
                     predictVO.setSubsidyNum(dailyCount.getTeamSubsidyNum());
                     predictVO.setSubsidy(BigDecimal.valueOf(dailyCount.getTeamSubsidy()/100));
                     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(BigDecimal.valueOf(dailyCount.getTeamReward()/100));
                     predictVO.setSubsidyNum(dailyCount.getTeamSubsidyNum());
                     predictVO.setSubsidy(BigDecimal.valueOf(dailyCount.getTeamSubsidy()/100));
                     break;
                  }
               }
            }
            predictVO.setTotalNum(predictVO.getRewardNum() + predictVO.getSubsidyNum());
            predictVO.setTotalMoney(predictVO.getReward().add(predictVO.getSubsidy()));
         }
         Gson gson = getGson();
         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);
         object.put("count", list.size());
         object.put("list", gson.toJson(list));
         out.print(JsonUtil.loadTrueResult(object));
      } catch (ParseException e) {
         e.printStackTrace();
      }
      JSONObject json = new JSONObject();
      json.put("count", extractService.countExtractSucceedRecord(uid));
      json.put("list", JSONArray);
      out.print(JsonUtil.loadTrueResult(json));
   }
}