yujian
2020-06-11 20bb4f95184453d4addfd27e40a78f3c63bcf6c3
fanli/src/main/java/com/yeshi/fanli/controller/admin/UserInfoAdminController.java
@@ -1,6 +1,8 @@
package com.yeshi.fanli.controller.admin;
import java.io.PrintWriter;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
@@ -18,6 +20,10 @@
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.controller.admin.utils.AdminUtils;
import com.yeshi.fanli.dto.ChartTDO;
@@ -29,17 +35,21 @@
import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
import com.yeshi.fanli.entity.bus.user.UserInviteValidNum;
import com.yeshi.fanli.entity.bus.user.UserRank;
import com.yeshi.fanli.entity.bus.user.vip.UserVIPInfo;
import com.yeshi.fanli.entity.common.AdminUser;
import com.yeshi.fanli.entity.integral.IntegralDetail;
import com.yeshi.fanli.entity.money.UserMoneyDetail;
import com.yeshi.fanli.entity.money.UserMoneyDetail.UserMoneyDetailTypeEnum;
import com.yeshi.fanli.exception.user.ForbiddenUserIdentifyCodeException;
import com.yeshi.fanli.exception.user.vip.UserVIPInfoException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.count.UserInfoCountService;
import com.yeshi.fanli.service.inter.money.UserMoneyDetailService;
import com.yeshi.fanli.service.inter.money.extract.BindingAccountService;
import com.yeshi.fanli.service.inter.money.extract.ExtractService;
import com.yeshi.fanli.service.inter.order.HongBaoV2Service;
import com.yeshi.fanli.service.inter.user.ForbiddenUserIdentifyCodeService;
import com.yeshi.fanli.service.inter.user.UserAccountService;
import com.yeshi.fanli.service.inter.user.UserActiveLogService;
@@ -49,6 +59,7 @@
import com.yeshi.fanli.service.inter.user.UserRankService;
import com.yeshi.fanli.service.inter.user.integral.IntegralDetailService;
import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
import com.yeshi.fanli.service.inter.user.invite.UserInviteValidNumService;
import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
import com.yeshi.fanli.tag.PageEntity;
@@ -107,7 +118,19 @@
   @Resource
   private IntegralDetailService integralDetailService;
   
   @Resource
   private UserInviteValidNumService userInviteValidNumService;
   @Resource
   private ThreeSaleSerivce threeSaleSerivce;
   @Resource
   private ExtractService extractService;
   @Resource
   private HongBaoV2Service hongBaoV2Service;
   /**
    * 查询用户信息列表 正常用户/异常用户
    * 
@@ -129,8 +152,8 @@
    */
   @RequestMapping(value = "query")
   public void query(String callback, Integer pageIndex, Integer pageSize, String key, Integer keyType, Integer rank,Integer userType,
         Integer days, String startTime, String endTime, Integer orderMode, Integer type, PrintWriter out) {
         Integer days, String startTime, String endTime, Integer orderMode, Integer type,String level,
         Integer activeCode, PrintWriter out) {
      try {
         if (type == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户类型type不能为空"));
@@ -178,14 +201,14 @@
         }
         List<UserInfoVO> userList = userInfoService.query((pageIndex - 1) * pageSize, pageSize, type, key, keyType,
               userRank, days, startTime, endTime, orderField, orderMode,userType);
               userRank, days, startTime, endTime, orderField, orderMode,userType, level, activeCode);
         if (userList == null || userList.size() == 0) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("暂无相关数据"));
            return;
         }
         long count = userInfoService.queryCount(type, key, keyType, userRank, days, startTime, endTime,userType);
         long count = userInfoService.queryCount(type, key, keyType, userRank, days, startTime, endTime,userType, level, activeCode);
         int totalPage = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
         PageEntity pe = new PageEntity(pageIndex, pageSize, count, totalPage);
@@ -197,15 +220,167 @@
         JSONObject data = new JSONObject();
         data.put("pe", pe);
         data.put("resultList", gson.toJson(userList));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         e.printStackTrace();
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作异常"));
      }
   }
   /**
    * 用户基础信息查询
    * @param callback
    * @param pageIndex
    * @param pageSize
    * @param key
    * @param keyType
    * @param rank
    * @param userType
    * @param days
    * @param startTime
    * @param endTime
    * @param type
    * @param level
    * @param activeCode
    * @param out
    */
   @RequestMapping(value = "queryInfo")
   public void queryInfo(String callback, Integer pageIndex, Integer pageSize, String key, Integer keyType, Integer rank,Integer userType,
         Integer days, String startTime, String endTime, Integer state,String level,
         Integer activeCode, PrintWriter out) {
      try {
         if (pageIndex == null)
            pageIndex = 1;
         if (pageSize == null)
            pageSize = Constant.PAGE_SIZE;
         String userRank = null;
         if (rank != null) {
            switch (rank) {
            case 1:
               userRank = "青铜";
               break;
            case 2:
               userRank = "白银";
               break;
            case 3:
               userRank = "黄金";
               break;
            case 4:
               userRank = "铂金";
               break;
            default:
               break;
            }
         }
         List<UserInfoVO> userList = userInfoService.queryInfo((pageIndex - 1) * pageSize, pageSize, state, key, keyType,
               userRank, days, startTime, endTime, userType, level, activeCode);
         if (userList == null || userList.size() == 0) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("暂无相关数据"));
            return;
         }
         long count = userInfoService.countInfo(state, key, keyType, userRank, days, startTime, endTime,userType, level, activeCode);
         int totalPage = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
         PageEntity pe = new PageEntity(pageIndex, pageSize, count, totalPage);
         GsonBuilder gsonBuilder = new GsonBuilder();
         gsonBuilder.serializeNulls();
         Gson gson = gsonBuilder.create();
         JSONObject data = new JSONObject();
         data.put("pe", pe);
         data.put("resultList", gson.toJson(userList));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         e.printStackTrace();
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作异常"));
      }
   }
   /**
    * 资金统计
    * @param callback
    * @param uid
    * @param out
    */
   @RequestMapping(value = "statisticsMoney")
   public void statisticsMoney(String callback, Long uid, PrintWriter out) {
      try {
         UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
         if (user == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该用户ID不存在"));
            return;
         }
         Date minDate = null;
         Date maxDate = null;
         long timeStamp = System.currentTimeMillis();
         Calendar calendar = Calendar.getInstance();
         calendar.setTimeInMillis(timeStamp);
         List<UserMoneyDetailTypeEnum> typeList = new ArrayList<>();
         typeList.add(UserMoneyDetailTypeEnum.extract);
         typeList.add(UserMoneyDetailTypeEnum.extractNew);
         typeList.add(UserMoneyDetailTypeEnum.extractVerify);
         typeList.add(UserMoneyDetailTypeEnum.extractVerifyNew);
         typeList.add(UserMoneyDetailTypeEnum.extractReject);
         typeList.add(UserMoneyDetailTypeEnum.extractAutoWX);
         minDate = new Date(0L);
         maxDate = new Date(timeStamp);
         // 累计成功提现
         BigDecimal totalExtractMoney = userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, minDate,
               maxDate, 1).abs();
         // 提现中金额
         BigDecimal extractingMoney = extractService.sumVerifyingMoney(uid);
         // 全部未到账
         minDate = new Date(0);
         maxDate = new Date(timeStamp);
         BigDecimal unRecievedMoney = hongBaoV2Service.getUnRecievedMoneyWithCreateTime(uid, minDate, maxDate);
         JSONObject data = new JSONObject();
         data.put("totalExtractMoney", totalExtractMoney);
         data.put("extractingMoney", extractingMoney);
         data.put("balanceMoney", user.getMyHongBao());
         data.put("unRecievedMoney", unRecievedMoney);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作异常"));
         e.printStackTrace();
      }
   }
   /**
    * 权益统计
    * @param callback
    * @param uid
    * @param out
    */
   @RequestMapping(value = "statisticsGoldCoin")
   public void statisticsEquity(String callback, Long uid, PrintWriter out) {
      try {
         int goldCoin = 0;
         UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
         if (userInfoExtra != null) {
            goldCoin = userInfoExtra.getGoldCoin();
         }
         JSONObject data = new JSONObject();
         data.put("goldCoin", goldCoin);
         data.put("exchangeGoldCoin",new BigDecimal(integralDetailService.sumUseGoldCoin(uid)).abs());
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作异常"));
         e.printStackTrace();
      }
   }
   /**
    * 统计今日用户总情况
    * 
@@ -283,9 +458,7 @@
         long monthUser = userInfoCountService.countNewUser(null, 1);
         data.put("todayUser", todayUser);
         data.put("monthUser", monthUser);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         e.printStackTrace();
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作异常"));
@@ -410,7 +583,6 @@
   @RequestMapping(value = "deleteUser")
   public void delete(String callback, String idArray, HttpServletRequest request,  PrintWriter out) {
      try {
         AdminUser admin = (AdminUser) request.getSession().getAttribute(Constant.SESSION_ADMIN);
         if (admin == null) {
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("当前账户失效,请重新登陆。")));
@@ -454,7 +626,6 @@
   @RequestMapping(value = "forbiddenUser")
   public void forbiddenUser(String callback, Long uid, HttpServletRequest request, PrintWriter out) {
      try {
         if (uid == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请传递正确数据"));
            return;
@@ -474,9 +645,7 @@
         String reason = "后台封禁,操作人:" + admin.getId() + "-" + admin.getName();
         userAccountService.forbiddenUserAll(uid, reason);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("用户封禁成功"));
      } catch (Exception e) {
         e.printStackTrace();
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作失败"));
@@ -493,7 +662,6 @@
   @RequestMapping(value = "relieveForbiddenUser")
   public void relieveForbiddenUser(String callback, Long uid, PrintWriter out) {
      try {
         if (uid == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请传递正确数据"));
            return;
@@ -540,9 +708,7 @@
                  forbiddenUserIdentifyCodeService.delete(forbiddenUserIdentifyCode);
            }
         }
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("用户解封成功"));
      } catch (Exception e) {
         e.printStackTrace();
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作失败"));
@@ -567,9 +733,7 @@
         }
         forbiddenUserIdentifyCodeService.saveForbiddenInfo(code, type);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("修改成功"));
      } catch (ForbiddenUserIdentifyCodeException e) {
         e.printStackTrace();
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getMsg()));
@@ -579,157 +743,7 @@
      }
   }
   /**
    * 删除队员关系
    *
    * @param callback
    * @param id
    * @param out
    */
   @RequestMapping(value = "deleteThreeSale")
   public void deleteThreeSale(String callback, Long id, PrintWriter out) {
      try {
         if (id == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请传递正确数据"));
            return;
         }
         int count = threeSaleService.deleteByPrimaryKey(id);
         if (count > 0) {
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("删除成功"));
         } else {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("删除失败"));
         }
      } catch (Exception e) {
         e.printStackTrace();
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作异常"));
      }
   }
   @RequestMapping(value = "queryMyFirstTeams")
   public void queryMyFirstTeams(String callback, Integer pageIndex, Integer pageSize, String key, Long bossId,
         PrintWriter out) {
      try {
         if (bossId == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请传递正确数据"));
            return;
         }
         if (pageIndex == null)
            pageIndex = 1;
         if (pageSize == null)
            pageSize = Constant.PAGE_SIZE;
         List<ThreeSale> firstTeamList = threeSaleService.queryMyFirstTeamList((pageIndex - 1) * pageSize, pageSize,
               key, bossId);
         if (firstTeamList == null || firstTeamList.size() == 0) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("暂无一度队员"));
            return;
         }
         /* 获取邀请用户头像 、昵称 */
         for (ThreeSale threeSale : firstTeamList) {
            UserInfo worker = threeSale.getWorker();
            if (worker == null) {
               worker = new UserInfo();
               threeSale.setWorker(worker);
            } else {
               Long id = worker.getId();
               UserInfo currentInfo = userInfoService.selectByPKey(id);
               if (currentInfo != null) {
                  worker.setNickName(currentInfo.getNickName());
                  worker.setPortrait(currentInfo.getPortrait());
               }
            }
         }
         long count = threeSaleService.queryCountMyFirstTeamList(key, bossId);
         int totalPage = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
         PageEntity pe = new PageEntity(pageIndex, pageSize, count, totalPage);
         GsonBuilder gsonBuilder = new GsonBuilder();
         gsonBuilder.serializeNulls();
         Gson gson = gsonBuilder.create();
         JSONObject data = new JSONObject();
         data.put("pe", pe);
         data.put("list", gson.toJson(firstTeamList));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         e.printStackTrace();
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作异常"));
      }
   }
   @RequestMapping(value = "queryMySecondTeams")
   public void queryMySecondTeams(String callback, Integer pageIndex, Integer pageSize, String key, Long bossId,
         PrintWriter out) {
      try {
         if (bossId == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请传递正确数据"));
            return;
         }
         if (pageIndex == null)
            pageIndex = 1;
         if (pageSize == null)
            pageSize = Constant.PAGE_SIZE;
         List<ThreeSale> firstTeamList = threeSaleService.queryMySecondTeamList((pageIndex - 1) * pageSize, pageSize,
               key, bossId);
         if (firstTeamList == null || firstTeamList.size() == 0) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("暂无二度队员"));
            return;
         }
         /* 获取邀请用户头像 、昵称 */
         for (ThreeSale threeSale : firstTeamList) {
            UserInfo worker = threeSale.getWorker();
            if (worker == null) {
               worker = new UserInfo();
               threeSale.setWorker(worker);
            } else {
               Long id = worker.getId();
               UserInfo currentInfo = userInfoService.selectByPKey(id);
               if (currentInfo != null) {
                  worker.setNickName(currentInfo.getNickName());
                  worker.setPortrait(currentInfo.getPortrait());
               }
            }
         }
         long count = threeSaleService.queryCountMySecondTeamList(key, bossId);
         int totalPage = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
         PageEntity pe = new PageEntity(pageIndex, pageSize, count, totalPage);
         GsonBuilder gsonBuilder = new GsonBuilder();
         gsonBuilder.serializeNulls();
         Gson gson = gsonBuilder.create();
         JSONObject data = new JSONObject();
         data.put("pe", pe);
         data.put("list", gson.toJson(firstTeamList));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         e.printStackTrace();
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作异常"));
      }
   }
   /**
    * 队员关系
@@ -743,7 +757,7 @@
    */
   @RequestMapping(value = "getRelationList")
   public void getRelationList(String callback, Integer pageIndex, Integer pageSize, Long uid, Integer type,
         Integer state, String startTime, String endTime, PrintWriter out) {
         Integer state, String startTime, String endTime, Integer validState, PrintWriter out) {
      if (pageIndex == null || pageIndex < 1) {
         pageIndex = 1;
@@ -775,11 +789,11 @@
         } else if (type == 1) {
            // 一级用户
            listQuery = threeSaleService.listFirstTeamQuery((pageIndex - 1) * pageSize, pageSize, uid, state,
                  startTime, endTime);
                  startTime, endTime, validState);
         } else if (type == 2) {
            // 二级用户
            listQuery = threeSaleService.listSecondTeamQuery((pageIndex - 1) * pageSize, pageSize, uid, state,
                  startTime, endTime);
                  startTime, endTime, validState);
         }
         if (listQuery == null || listQuery.size() == 0) {
@@ -788,6 +802,14 @@
         }
         for (ThreeSale threeSale : listQuery) {
            // 用户信息
            UserInfo boss = threeSale.getBoss();
            threeSale.setBoss(userInfoService.selectByPKey(boss.getId()));
            UserInfo worker = threeSale.getWorker();
            threeSale.setWorker(userInfoService.selectByPKey(worker.getId()));
            Integer expire = threeSale.getExpire();
            if (threeSale.getState()) {
               threeSale.setExpire(1); // 邀请成功
@@ -799,6 +821,7 @@
               }
            }
         }
         long count = 0;
         if (type == 0) {
@@ -806,10 +829,10 @@
            count = threeSaleService.countSuperiorQuery(state, uid);
         } else if (type == 1) {
            // 一级用户
            count = threeSaleService.countFirstTeamQuery(uid, state, startTime, endTime);
            count = threeSaleService.countFirstTeamQuery(uid, state, startTime, endTime, validState);
         } else if (type == 2) {
            // 二级用户
            count = threeSaleService.countSecondTeamQuery(uid, state, startTime, endTime);
            count = threeSaleService.countSecondTeamQuery(uid, state, startTime, endTime, validState);
         }
         int totalPage = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
@@ -868,9 +891,7 @@
         JSONObject data = new JSONObject();
         data.put("pe", pe);
         data.put("result_list", gson.toJson(userMoneyDetailsList));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         e.printStackTrace();
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("查询失败"));
@@ -1392,4 +1413,97 @@
      }
   }
   /**
    * 用户账户明细
    *
    * @param callback
    * @param pageIndex
    * @param pageSize
    * @param id
    * @param out
    */
   @RequestMapping(value = "getMoneyDetails")
   public void getMoneyDetails(String callback, Integer pageIndex, String key, Integer keyType, PrintWriter out) {
      if (pageIndex == null) {
         pageIndex = 1;
      }
      int pageSize = Constant.PAGE_SIZE;
      try {
         List<UserMoneyDetail> list = userMoneyDetailService.listQuery(pageIndex, pageSize, key, keyType);
         if (list == null || list.size() == 0) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("暂无数据"));
            return;
         }
         for (UserMoneyDetail detail: list) {
            UserInfo userInfo = detail.getUserInfo();
            if (userInfo == null) {
               detail.setUserInfo(new UserInfo());
               continue;
            }
            UserInfo user = userInfoService.selectByPKey(userInfo.getId());
            if (user != null) {
               detail.setUserInfo(user);
            }
         }
         long count = userMoneyDetailService.countQuery(key, keyType);
         int totalPage = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
         PageEntity pe = new PageEntity(pageIndex, pageSize, count, totalPage);
         GsonBuilder gsonBuilder = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss");
         gsonBuilder.registerTypeAdapter(UserMoneyDetailTypeEnum.class, new JsonSerializer<UserMoneyDetailTypeEnum>() {
            @Override
            public JsonElement serialize(UserMoneyDetailTypeEnum value, Type theType, JsonSerializationContext context) {
               if (value == null) {
                  return new JsonPrimitive("");
               } else {
                  return new JsonPrimitive(value.getDesc());
               }
            }
         });
         Gson gson = gsonBuilder.create();
         JSONObject data = new JSONObject();
         data.put("pe", pe);
         data.put("result_list", gson.toJson(list));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         e.printStackTrace();
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("查询失败"));
      }
   }
   /**
    *  用户粉丝统计
    *
    * @param callback
    * @param pageIndex
    * @param pageSize
    * @param id
    * @param out
    */
   @RequestMapping(value = "countTeamFans")
   public void countTeamFans(String callback, Long uid, PrintWriter out) {
      int doneFirst = 0;
      int doneSecond = 0;
      UserInviteValidNum userInviteValidNum = userInviteValidNumService.selectByPrimaryKey(uid);
      if (userInviteValidNum != null) {
         doneFirst = userInviteValidNum.getNumFirst() == null ? 0 : userInviteValidNum.getNumFirst();
         doneSecond = userInviteValidNum.getNumSecond() == null ? 0 : userInviteValidNum.getNumSecond();
      }
      JSONObject data = new JSONObject();
      data.put("doneFirst", doneFirst);
      data.put("doneSecond", doneSecond);
      data.put("first", threeSaleSerivce.countFirstTeam(uid));
      data.put("second", threeSaleSerivce.countSecondTeam(uid));
      JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
   }
}