yujian
2019-10-08 0c78c7aaeaa5a427bc8a5c5faf3cd6bbb589c2da
fanli/src/main/java/com/yeshi/fanli/controller/admin/UserInfoAdminController.java
@@ -1,70 +1,54 @@
package com.yeshi.fanli.controller.admin;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletRequest;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.yeshi.utils.JsonUtil;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.yeshi.fanli.controller.admin.utils.AdminUtils;
import com.yeshi.fanli.entity.admin.UserInfoAdmin;
import com.yeshi.fanli.entity.bus.user.AccountDetails;
import com.yeshi.fanli.entity.bus.user.Extract;
import com.yeshi.fanli.entity.bus.user.HongBao;
import com.yeshi.fanli.entity.bus.user.MoneyRecord;
import com.yeshi.fanli.entity.bus.user.Order;
import com.yeshi.fanli.dto.ChartTDO;
import com.yeshi.fanli.entity.bus.user.BindingAccount;
import com.yeshi.fanli.entity.bus.user.ForbiddenUserIdentifyCode;
import com.yeshi.fanli.entity.bus.user.ForbiddenUserIdentifyCode.ForbiddenUserIdentifyCodeTypeEnum;
import com.yeshi.fanli.entity.bus.user.ThreeSale;
import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.taobao.PidOrder;
import com.yeshi.fanli.entity.taobao.ScanHistory;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.entity.bus.user.UserRank;
import com.yeshi.fanli.entity.common.AdminUser;
import com.yeshi.fanli.entity.money.UserMoneyDetail;
import com.yeshi.fanli.exception.user.ForbiddenUserIdentifyCodeException;
import com.yeshi.fanli.service.inter.count.UserInfoCountService;
import com.yeshi.fanli.service.inter.goods.ShareService;
import com.yeshi.fanli.service.inter.hongbao.HongBaoService;
import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce;
import com.yeshi.fanli.service.inter.order.OrderItemServcie;
import com.yeshi.fanli.service.inter.order.OrderService;
import com.yeshi.fanli.service.inter.order.PidOrderService;
import com.yeshi.fanli.service.inter.user.AccountDetailsService;
import com.yeshi.fanli.service.inter.user.BindingAccountService;
import com.yeshi.fanli.service.inter.user.ExtractService;
import com.yeshi.fanli.service.inter.user.MoneyRecordService;
import com.yeshi.fanli.service.inter.user.ScanHistoryService;
import com.yeshi.fanli.service.inter.user.UserActiveLogService;
import com.yeshi.fanli.service.inter.money.UserMoneyDetailService;
import com.yeshi.fanli.service.inter.money.extract.BindingAccountService;
import com.yeshi.fanli.service.inter.user.ForbiddenUserIdentifyCodeService;
import com.yeshi.fanli.service.inter.user.UserAccountService;
import com.yeshi.fanli.service.inter.user.UserInfoDeleteRecordService;
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.UserRankService;
import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
import com.yeshi.fanli.tag.PageEntity;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.GsonUtil;
import com.yeshi.fanli.util.HongBaoUtil;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.vo.user.UserGoldCoinVO;
import com.yeshi.fanli.vo.user.UserInfoVO;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
@Controller
@RequestMapping("admin/new/api/v1/user")
@@ -73,561 +57,62 @@
   private UserInfoService userInfoService;
   @Resource
   private MoneyRecordService moneyRecordService;
   @Resource
   private OrderService orderService;
   @Resource
   private ScanHistoryService scanHistoryService;
   @Resource
   private ConfigService configService;
   @Resource
   private HongBaoService hongBaoService;
   @Resource
   private ExtractService extractService;
   @Resource
   private ThreeSaleSerivce threeSaleService;
   @Resource
   private OrderItemServcie orderItemService;
   @Resource
   private ShareService shareService;
   @Resource
   private PidOrderService pidOrderService;
   @Resource
   private AccountDetailsService accountDetailsService;
   @Resource
   private BindingAccountService bindingAccountService;
   @Resource
   private UserInfoCountService userInfoCountService;
   @Resource
   private UserActiveLogService userActiveLogService;
   private ForbiddenUserIdentifyCodeService forbiddenUserIdentifyCodeService;
   @RequestMapping(value = "getUserList", method = RequestMethod.POST)
   public void getUserList(int pageIndex, String key, PrintWriter out) {
   @Resource
   private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
      List<UserInfo> userList = userInfoService.getUserList(pageIndex - 1, key);
      int count = userInfoService.getUserCount(key);
   @Resource
   private UserInfoExtraService userInfoExtraService;
      int totalPage = count % Constant.PAGE_SIZE == 0 ? count / Constant.PAGE_SIZE : count / Constant.PAGE_SIZE + 1;
      PageEntity pe = new PageEntity(pageIndex, Constant.PAGE_SIZE, count, totalPage);
      Map<String, String> map = new HashMap<String, String>();
      map.put("key", key);
      pe.setParams(map);
      JSONObject data = new JSONObject();
      data.put("pe", pe);
      data.put("userList", userList);
      out.print(JsonUtil.loadTrueResult(data));
   }
   @Resource
   private UserRankService userRankService;
   @Resource
   private UserMoneyDetailService userMoneyDetailService;
   @Resource
   private UserInfoDeleteRecordService userInfoDeleteRecordService;
   @Resource
   private UserAccountService userAccountService;
   /**
    * 查询用户信息列表 正常用户/异常用户
    * 
    * 方法说明: 三级分销
    *
    * @author mawurui createTime 2018年5月21日 下午4:55:07
    * @param pageIndex
    * @param key
    * @param out
    */
   @RequestMapping(value = "getThreeSaleList", method = RequestMethod.POST)
   public void getThreeSaleList(int pageIndex, String key, PrintWriter out) {
      List<ThreeSale> list = threeSaleService.getLastestThreeSaleList(pageIndex, key);
      int count = threeSaleService.getLastestThreeSaleCount(key);
      int totalPage = (int) (count % Constant.PAGE_SIZE == 0 ? count / Constant.PAGE_SIZE
            : count / Constant.PAGE_SIZE + 1);
      PageEntity pe = new PageEntity(pageIndex, Constant.PAGE_SIZE, count, totalPage);
      Map<String, String> map = new HashMap<String, String>();
      map.put("key", key);
      pe.setParams(map);
      JSONObject data = new JSONObject();
      data.put("pe", pe);
      data.put("threeSaleList", list);
      out.print(JsonUtil.loadTrueResult(data));
   }
   /**
    *
    * 方法说明: 查询所有用户分享赚列表
    *
    * @author mawurui createTime 2018年4月24日 下午3:37:13
    * @param pageIndex
    * @param uid
    * @param out
    */
   @RequestMapping(value = "getShareMoneyList", method = RequestMethod.POST)
   public void getShareList(int pageIndex, PrintWriter out, String key) {
      // int totalCount = shareService.getShareMoneyCount();
      // PageEntity pageEntity = new PageEntity();
      // pageEntity.setPageIndex(pageIndex);
      // pageEntity.setPageSize(Constant.PAGE_SIZE);
      // pageEntity.setTotalCount(totalCount);
      int count = shareService.getCountByKey(key);
      int totalPage = count % Constant.PAGE_SIZE == 0 ? count / Constant.PAGE_SIZE : count / Constant.PAGE_SIZE + 1;
      PageEntity pe = new PageEntity(pageIndex, Constant.PAGE_SIZE, count, totalPage);
      List<PidOrder> shareMoneyList = shareService.getShareMoneyList(pageIndex, key);
      JSONObject data = new JSONObject();
      data.put("pageEntity", pe);
      data.put("shareMoneyList", JsonUtil.getSimpleGsonWithDate().toJson(shareMoneyList));
      out.print(JsonUtil.loadTrueResult(data));
   }
   /**
    *
    * @param pageIndex
    * @param type
    *            1- 1级分销 2-2级分销
    * @param uid
    * @param key
    * @param out
    */
   @RequestMapping(value = "getThreeSaleDetailList", method = RequestMethod.POST)
   public void getThreeSaleDetailList(int pageIndex, int type, long uid, String key, PrintWriter out) {
      List<UserInfo> userList = null;
      long count = 0;
      if (type == 1) {
         userList = threeSaleService.getFirstUsers(uid, pageIndex);
         count = threeSaleService.getFirstUsersCount(uid);
      } else if (type == 2) {
         userList = threeSaleService.getSecondUsers(uid, pageIndex);
         count = threeSaleService.getSecondUsersCount(uid);
      }
      int totalPage = (int) (count % Constant.PAGE_SIZE == 0 ? count / Constant.PAGE_SIZE
            : count / Constant.PAGE_SIZE + 1);
      PageEntity pe = new PageEntity(pageIndex, Constant.PAGE_SIZE, count, totalPage);
      Map<String, String> map = new HashMap<String, String>();
      map.put("key", key);
      pe.setParams(map);
      JSONObject data = new JSONObject();
      data.put("pe", pe);
      data.put("userList", userList);
      out.print(JsonUtil.loadTrueResult(data));
   }
   @RequestMapping(value = "getUserListByUid", method = RequestMethod.POST)
   public void getUserListByUid(long uid, PrintWriter out) {
      List<UserInfo> userList = userInfoService.getUserListByUid(uid);
      int count = userList.size();
      int totalPage = count % Constant.PAGE_SIZE == 0 ? count / Constant.PAGE_SIZE : count / Constant.PAGE_SIZE + 1;
      PageEntity pe = new PageEntity(1, Constant.PAGE_SIZE, count, totalPage);
      Map<String, String> map = new HashMap<String, String>();
      pe.setParams(map);
      JSONObject data = new JSONObject();
      data.put("pe", pe);
      data.put("userList", userList);
      out.print(JsonUtil.loadTrueResult(data));
   }
   /**
    *
    * 方法说明: 查询用户订单状态
    *
    * @author mawurui createTime 2018年5月17日 上午10:55:41
    * @param pageIndex
    * @param uid
    * @param out
    */
   @RequestMapping(value = "getUserOrderList", method = RequestMethod.POST)
   public void getUserOrderList(int pageIndex, long uid, PrintWriter out) {
      List<Order> orderList = orderService.getOrderByUid(pageIndex - 1, uid);
      int count = orderService.getCount(uid);
      int totalPage = count % Constant.PAGE_SIZE == 0 ? count / Constant.PAGE_SIZE : count / Constant.PAGE_SIZE + 1;
      PageEntity pe = new PageEntity(pageIndex, Constant.PAGE_SIZE, count, totalPage);
      JSONObject data = new JSONObject();
      data.put("pe", pe);
      data.put("orderList", JsonUtil.getSimpleGsonWithDateAndSerialization().toJson(orderList));
      out.print(JsonUtil.loadTrueResult(data));
   }
   @RequestMapping(value = "getMoneyRecordList", method = RequestMethod.POST)
   public void getMoneyRecordList(int pageIndex, long uid, PrintWriter out) {
      List<MoneyRecord> moneyRecordList = moneyRecordService.getMoneyRecord(uid, pageIndex - 1);
      if (moneyRecordList != null)
         for (MoneyRecord mr : moneyRecordList) {
            mr.setExtract(null);
            mr.setUserInfo(null);
            mr.setHongBao(null);
         }
      int count = moneyRecordService.getCount(uid);
      int totalPage = count % Constant.PAGE_SIZE == 0 ? count / Constant.PAGE_SIZE : count / Constant.PAGE_SIZE + 1;
      PageEntity pe = new PageEntity(pageIndex, Constant.PAGE_SIZE, count, totalPage);
      JSONObject data = new JSONObject();
      data.put("pe", pe);
      data.put("moneyRecordList", GsonUtil.toJsonExpose(moneyRecordList));
      out.print(JsonUtil.loadTrueResult(data));
   }
   /**
    *
    * 方法说明: 查询用户-红包详情列表
    *
    * @author mawurui createTime 2018年5月10日 上午11:48:58
    * @param pageIndex
    * @param uid
    * @param out
    */
   @RequestMapping(value = "getHongBaoList", method = RequestMethod.POST)
   public void getHongBaoList(int pageIndex, long uid, PrintWriter out) {
      JSONObject data = new JSONObject();
      List<HongBao> list = hongBaoService.getHongBaoList(pageIndex, uid);
      if (list.size() != 0 || list != null) {
         for (HongBao hb : list) {
            int hbType = hb.getType();
            if (hbType == HongBao.TYPE_SHARE_GOODS) { // type == 20
               Long hongbaoId = hb.getId();
               PidOrder pidOrder = pidOrderService.getPidOrderByHongBaoId(hongbaoId);
               Order order = new Order();
               order.setThirdCreateTime(pidOrder.getOrderCreateTime());
               order.setOrderId(pidOrder.getOrderId());
               order.setThirdState(pidOrder.getState());
               order.setMoney(pidOrder.getPayMoney());
               hb.setOrder(order);
            } else if (hbType == HongBao.TYPE_SHARE_YIJI || hbType == HongBao.TYPE_SHARE_ERJI) {
               Long hongbaoId = hb.getParent().getId();
               PidOrder pidOrder = pidOrderService.getPidOrderByHongBaoId(hongbaoId);
               Order order = new Order();
               order.setThirdCreateTime(pidOrder.getOrderCreateTime());
               order.setOrderId(pidOrder.getOrderId());
               order.setThirdState(pidOrder.getState());
               order.setMoney(pidOrder.getPayMoney());
               hb.setOrder(order);
            } else if (hbType == HongBao.TYPE_XINREN) {
               Order order = new Order();
               Long createtime = hb.getCreatetime();
               if (createtime != null) {
                  Date ThirdCreateTime = new Date(createtime);
                  order.setThirdCreateTime(ThirdCreateTime);
               }
               hb.setOrder(order);
            } else if (hb.getParent() != null) {
               hb.setOrder(hb.getParent().getOrder());
            }
         }
      }
      int count = hongBaoService.getCount(uid);
      PageEntity pe = new PageEntity();
      pe.setPageIndex(pageIndex);
      pe.setPageSize(Constant.PAGE_SIZE);
      pe.setTotalCount(count);
      data.put("pe", pe);
      data.put("list", JsonUtil.getSimpleGsonWithDateAndSerialization().toJson(list));
      out.print(JsonUtil.loadTrueResult(data));
   }
   /**
    *
    * 方法说明: 查询 分享赚页面列表
    *
    * @author mawurui createTime 2018年4月16日 上午9:54:39
    * @param pageIndex
    * @param uid
    * @param out
    */
   @RequestMapping(value = "getShareList", method = RequestMethod.POST)
   public void getShareList(int pageIndex, long uid, PrintWriter out) {
      int totalCount = shareService.getCount(uid);
      PageEntity pageEntity = new PageEntity();
      pageEntity.setPageIndex(pageIndex);
      pageEntity.setPageSize(Constant.PAGE_SIZE);
      pageEntity.setTotalCount(totalCount);
      List<HongBao> shareList = shareService.getShareList(pageIndex, uid);
      if (shareList.size() != 0 || shareList != null) {
         for (HongBao hb : shareList) {
            int hbType = hb.getType();
            if (hbType == HongBao.TYPE_SHARE_GOODS) { // type == 20
               Long hongbaoId = hb.getId();
               PidOrder pidOrder = pidOrderService.getPidOrderByHongBaoId(hongbaoId);
               Order order = new Order();
               order.setThirdCreateTime(pidOrder.getCreateTime());
               order.setThirdState(pidOrder.getState());
               hb.setOrder(order);
            } else if (hb.getParent() != null) {
               hb.setOrder(hb.getParent().getOrder());
            }
         }
      }
      JSONObject data = new JSONObject();
      data.put("pageEntity", pageEntity);
      data.put("shareList", GsonUtil.toJsonExpose(shareList));
      out.print(JsonUtil.loadTrueResult(data));
   }
   /**
    *
    * 方法说明: 查询 邀请赚页面列表
    *
    * @author mawurui createTime 2018年4月16日 上午9:54:39
    * @param pageIndex
    * @param uid
    * @param out
    */
   @RequestMapping(value = "getInviteList", method = RequestMethod.POST)
   public void getInviteList(int pageIndex, long uid, PrintWriter out) {
      int totalCount = shareService.getInviteCount(uid);
      PageEntity pageEntity = new PageEntity();
      pageEntity.setPageIndex(pageIndex);
      pageEntity.setPageSize(Constant.PAGE_SIZE);
      pageEntity.setTotalCount(totalCount);
      List<HongBao> inviteList = shareService.getInviteList(pageIndex, uid);
      if (inviteList.size() != 0 || inviteList != null) {
         for (HongBao hb : inviteList) {
            int hbType = hb.getType();
            if (hbType == HongBao.TYPE_SHARE_GOODS) { // type == 20
               Long hongbaoId = hb.getId();
               PidOrder pidOrder = pidOrderService.getPidOrderByHongBaoId(hongbaoId);
               Order order = new Order();
               order.setThirdCreateTime(pidOrder.getCreateTime());
               order.setThirdState(pidOrder.getState());
               hb.setOrder(order);
            } else if (hb.getParent() != null) {
               hb.setOrder(hb.getParent().getOrder());
            }
         }
      }
      JSONObject data = new JSONObject();
      data.put("pageEntity", pageEntity);
      data.put("inviteList", JsonUtil.getSimpleGsonWithDateAndSerialization().toJson(inviteList));
      out.print(JsonUtil.loadTrueResult(data));
   }
   /**
    *
    * 方法说明: 清除用户手势密码
    *
    * @author mawurui createTime 2018年5月4日 下午4:47:29
    * @param uid
    * @param out
    */
   @RequestMapping(value = "cleanPassword", method = RequestMethod.POST)
   public void cleanPassword(long id, PrintWriter out) {
      userInfoService.cleanPassword(id);
      out.print(JsonUtil.loadTrueResult("清除成功"));
   }
   @RequestMapping(value = "getScanHistoryList", method = RequestMethod.POST)
   public void getScanHistoryList(int pageIndex, long uid, PrintWriter out) {
      List<ScanHistory> scanHistoryList = scanHistoryService.getScanHistoryByUid(pageIndex - 1, uid);
      int count = scanHistoryService.getCountByUid(uid);
      int totalPage = count % Constant.PAGE_SIZE == 0 ? count / Constant.PAGE_SIZE : count / Constant.PAGE_SIZE + 1;
      PageEntity pe = new PageEntity(pageIndex, Constant.PAGE_SIZE, count, totalPage);
      JSONObject data = new JSONObject();
      data.put("pe", pe);
      data.put("scanHistoryList", GsonUtil.toDFJson(scanHistoryList));
      out.print(JsonUtil.loadTrueResult(data));
   }
   @RequestMapping(value = "getAssets", method = RequestMethod.POST)
   public void getAssets(PrintWriter out) {
      String minMoney = configService.get(Constant.EXTRACT_MIN_MONEY);
      double min = Double.parseDouble(minMoney);
      double freeze = userInfoService.getFreezeAssets(min);
      double canAssets = userInfoService.getCanAssets(min);
      JSONObject data = new JSONObject();
      data.put("freeze", freeze);
      data.put("can", canAssets);
      out.print(JsonUtil.loadTrueResult(data));
   }
   /**
    *
    * 方法说明: Excel表格下载
    *
    * @author mawurui createTime 2018年5月21日 下午2:14:44
    * @param uid
    * @param response
    */
   @SuppressWarnings("unused")
   @RequestMapping(value = "downDetailedExcel", produces = { "application/vnd.ms-excel;charset=UTF-8" })
   public void downDetailedExcel(long uid, HttpServletResponse response) {
      try {
         List<HongBao> list = hongBaoService.getHongBaoListAll(uid);
         if (list.size() != 0 || list != null) {
            for (HongBao hb : list) {
               int hbType = hb.getType();
               if (hbType == HongBao.TYPE_SHARE_GOODS) { // type == 20
                  Long hongbaoId = hb.getId();
                  PidOrder pidOrder = pidOrderService.getPidOrderByHongBaoId(hongbaoId);
                  Order order = new Order();
                  order.setOrderId(pidOrder.getOrderId());
                  order.setMoney(pidOrder.getPayMoney());
                  order.setThirdCreateTime(pidOrder.getCreateTime());
                  order.setThirdState(pidOrder.getState());
                  hb.setOrder(order);
               } else if (hbType == HongBao.TYPE_SHARE_ERJI || hbType == HongBao.TYPE_SHARE_YIJI) { // type
                                                                                 // ==
                  Long hongbaoId = hb.getParent().getId();
                  PidOrder pidOrder = pidOrderService.getPidOrderByHongBaoId(hongbaoId);
                  Order order = new Order();
                  order.setOrderId(pidOrder.getOrderId());
                  order.setMoney(pidOrder.getPayMoney());
                  order.setThirdCreateTime(pidOrder.getCreateTime());
                  order.setThirdState(pidOrder.getState());
                  hb.setOrder(order);
               } else if (hb.getParent() != null) {
                  hb.setOrder(hb.getParent().getOrder());
               }
            }
         }
         File desc = new File(this.getClass().getResource("/muban.xls").toURI());
         InputStream inStream = new FileInputStream(desc);
         Workbook wb = new HSSFWorkbook(inStream);
         Sheet sheet = wb.getSheetAt(0);
         int i = 1;
         for (; i <= list.size(); i++) {
            Row row = sheet.createRow(i);
            for (int c = 1; c < 10; c++) {
               row.createCell(c);
            }
            Cell cell = row.createCell(1);
            HongBao hongBao = list.get(i - 1);
            long createtime = hongBao.getCreatetime();
            String create = TimeUtil.getWholeTime(createtime);
            cell.setCellValue(create);
            Cell cell2 = row.getCell(2);
            String title = HongBaoUtil.getHongBaoTitle(hongBao.getType());
            cell2.setCellValue(title);
            Order order = hongBao.getOrder();
            if (order != null) {
               Cell cell3 = row.getCell(3);
               Integer orderType = order.getOrderType();
               if (orderType == null) {
                  orderType = 1;
               }
               cell3.setCellValue(orderType == 1 ? "淘宝" : "其他");
               String orderId = order.getOrderId();
               if (orderId == null) {
                  orderId = "";
               }
               Cell cell4 = row.getCell(4);
               cell4.setCellValue(orderId);
               Cell cell5 = row.getCell(5);
               // List<Order>
               // orderItemService.findByOrderId(order.getId());
               cell5.setCellValue(order.getMoney().doubleValue());
               Cell cell6 = row.getCell(6);
               String stateStr = order.getThirdState();
               cell6.setCellValue(stateStr);
               /*
                * Cell cell11 = row.getCell(11); //下单时间 long orderTime =
                * order.getCreatetime(); String oTime =
                * TimeUtil.getWholeTime(orderTime);
                * cell11.setCellValue(oTime);
                */
            } else if (order == null) {
               Cell cell3 = row.getCell(3);
               cell3.setCellValue("淘宝");
               Cell cell4 = row.getCell(4);
               cell4.setCellValue("");
               Cell cell5 = row.getCell(5);
               cell5.setCellValue("");
               Cell cell6 = row.getCell(6);
               cell6.setCellValue("");
            } else if (hongBao.getParent() != null) {// 属于分销红包
               String orderId = "";
               if (hongBao.getParent().getParent() != null) {
                  orderId = hongBao.getParent().getParent().getOrder().getOrderId();
               } else {
                  orderId = hongBao.getParent().getOrder().getOrderId();
               }
               Cell cell4 = row.getCell(4);
               cell4.setCellValue(orderId);
            }
            Cell cell7 = row.getCell(7);
            cell7.setCellValue(hongBao.getMoney().doubleValue());
            Cell cell8 = row.getCell(8);
            cell8.setCellValue(HongBaoUtil.convertState(hongBao.getState()));
            Cell cell9 = row.getCell(9);
            if (hongBao.getGetTime() != 0) {
               cell9.setCellValue(TimeUtil.getWholeTime(hongBao.getGetTime()));
            }
         }
         List<Extract> extractList = extractService.getExtractInfoByUid(uid);
         int ii = i;
         for (int m = 0; m < extractList.size(); m++, ii++) {
            Row row = sheet.createRow(ii);
            for (int c = 1; c < 10; c++) {
               row.createCell(c);
            }
            Cell cell = row.getCell(1);
            Extract extract = extractList.get(m);
            cell.setCellValue(TimeUtil.getWholeTime(extract.getExtractTime()));
            Cell cell2 = row.getCell(2);
            cell2.setCellValue("提现");
            Cell cell7 = row.getCell(7);
            cell7.setCellValue(-extract.getMoney().doubleValue());
         }
         CellRangeAddress cellRangeAddress = new CellRangeAddress(0, sheet.getLastRowNum(), 1, 9);
         sheet.setAutoFilter(cellRangeAddress);
         wb.write(response.getOutputStream());
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   /**
    * 查询用户信息列表--相关数据统计
    * @param callback
    * @param pageIndex
    * @param key   查询条件
    * @param userType   用户类型:金冠、银冠、铜冠
    * @param days    查询天数
    * @param startTime  注册时间
    * @param endTime      注册时间
    * @param orderMode  排序方式  订单数量 今日订单  累计队员
    * @param key
    *            查询条件
    * @param userType
    *            用户类型:金冠、银冠、铜冠
    * @param days
    *            查询天数
    * @param startTime
    *            注册时间
    * @param endTime
    *            注册时间
    * @param orderMode
    *            排序方式 订单数量 今日订单 累计队员
    * @param out
    */
   @RequestMapping(value = "query")
   public void query(String callback, Integer pageIndex, Integer pageSize, String key, Integer userType,
         Integer days, String startTime,   String endTime, Integer orderMode, PrintWriter out) {
   public void query(String callback, Integer pageIndex, Integer pageSize, String key, Integer keyType, Integer rank,
         Integer days, String startTime, String endTime, Integer orderMode, Integer type, PrintWriter out) {
      try {
         // 结束时间 2018-06-06 00:00:00 加上一天
         if (!StringUtil.isNullOrEmpty(endTime)) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Date enddate = sdf.parse(endTime);
            Calendar c = Calendar.getInstance();
            c.setTime(enddate);
            c.add(Calendar.DAY_OF_MONTH, 1);// 今天+1天
            endTime = sdf.format(c.getTime());
         if (type == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户类型type不能为空"));
            return;
         }
         if (pageIndex == null)
@@ -635,31 +120,50 @@
         if (pageSize == null)
            pageSize = Constant.PAGE_SIZE;
         Integer orderField = null;
         if (orderMode != null) {
            if (orderMode == 1 || orderMode == 2){
            if (orderMode == 1 || orderMode == 2) {
               orderField = orderMode;
               orderMode = 1;
            } else if (orderMode == 3 || orderMode == 4){
            } else if (orderMode == 3 || orderMode == 4) {
               orderField = orderMode;
               orderMode = 2;
            } else if (orderMode == 5 || orderMode == 6){
            } else if (orderMode == 5 || orderMode == 6) {
               orderField = orderMode;
               orderMode = 3;
            }
         }
         List<UserInfoAdmin> userList = userInfoService.query((pageIndex - 1) * pageSize, pageSize,
               key, userType, days, startTime, endTime,orderField, orderMode);
         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.query((pageIndex - 1) * pageSize, pageSize, type, key, keyType,
               userRank, days, startTime, endTime, orderField, orderMode);
         if (userList == null || userList.size() == 0) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("暂无相关数据"));
            return;
         }
         long count = userInfoService.queryCount(key, userType, days, startTime, endTime);
         long count = userInfoService.queryCount(type, key, keyType, userRank, days, startTime, endTime);
         int totalPage = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
         PageEntity pe = new PageEntity(pageIndex, pageSize, count, totalPage);
@@ -670,9 +174,8 @@
         JSONObject data = new JSONObject();
         data.put("pe", pe);
         //data.put("sumMoney", sumMoney);
         data.put("resultList", gson.toJson(userList));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
@@ -680,130 +183,329 @@
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作异常"));
      }
   }
   /**
    * 统计今日用户总情况
    *
    * @param callback
    * @param out
    */
   @RequestMapping(value = "countInfo")
   public void countInfo(String callback, PrintWriter out) {
      try {
         // 总用户
         long countTotal = userInfoCountService.countNewUser(null, null);
         // 今日新增
         long countToday = userInfoCountService.countNewUser(1, null);
         // 本月新增
         long countMonth = userInfoCountService.countNewUser(null, 1);
         // 累计用户数量
         long totalUser = userInfoCountService.countNewUser(null, null);
         // 流失用户数量(180天未使用登录并且无任何资金流动的账号数量)
         long loseUser = userInfoCountService.countLoseUser(180);
         // 累计有购买用户数
         long orderUser = userInfoCountService.countHasOrderUser();
         // 总数-普通用户
         long countNormal = userInfoCountService.countRank(0);
         long countNormal = 0;
         // 总数-铜用户
         long countCuprum = userInfoCountService.countRank(1);
         long countCuprum = 0;
         // 总数-银用户
         long countSilver = userInfoCountService.countRank(2);
         long countSilver = 0;
         // 总数-金用户
         long countGold = userInfoCountService.countRank(3);
         // 统计所有总金额
         BigDecimal countTotalMoney = userInfoCountService.countAllMoney(null);
         // 统计所有可提现金额
         String minMoney = configService.get(Constant.EXTRACT_MIN_MONEY);
         if (minMoney == null)
            minMoney = "20";
         double min = Double.parseDouble(minMoney);
         BigDecimal countCanAssets = userInfoCountService.countAllMoney(min);
         long countGold = 0;
         List<UserRank> listRank = userRankService.getAllRank();
         if (listRank != null && listRank.size() > 0) {
            for (UserRank userRank : listRank) {
               Long id = userRank.getId();
               String name = userRank.getName();
               if ("青铜".equals(name)) {
                  continue;
               }
               long count = userInfoExtraService.countByRankId(id);
               if ("白银".equals(name)) {
                  countCuprum = count;
               } else if ("黄金".equals(name)) {
                  countSilver = count;
               } else if ("铂金".equals(name)) {
                  countGold = count;
               }
            }
         }
         // 普通用户计算
         countNormal = totalUser - (countCuprum + countSilver + countGold);
         JSONObject data = new JSONObject();
         data.put("countTotal", countTotal);
         data.put("countToday", countToday);
         data.put("countMonth", countMonth);
         data.put("totalUser", totalUser);
         data.put("loseUser", loseUser);
         data.put("orderUser", orderUser);
         data.put("countNormal", countNormal);
         data.put("countCuprum", countCuprum);
         data.put("countSilver", countSilver);
         data.put("countGold", countGold);
         data.put("countTotalMoney", countTotalMoney);
         data.put("countCanAssets", countCanAssets);
         /*
          * // 统计所有总金额 BigDecimal countTotalMoney =
          * userInfoCountService.countAllMoney(null);
          *
          * // 统计所有可提现金额 String minMoney =
          * configService.get(Constant.EXTRACT_MIN_MONEY); if (minMoney ==
          * null) { minMoney = "20"; } double min =
          * Double.parseDouble(minMoney); BigDecimal countCanAssets =
          * userInfoCountService.countAllMoney(min);
          * data.put("countTotalMoney", countTotalMoney);
          * data.put("countCanAssets", countCanAssets);
          */
         // 今日新增用户数量
         long todayUser = userInfoCountService.countNewUser(1, null);
         // 本月新增用户数量
         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("操作异常"));
      }
   }
   /**
    * 修改用户的状态、等级信息
    *
    * @param data
    * @param uid
    *            用户ID
    * @param type
    *            需要解绑的账户类型
    */
   @RequestMapping("unBindUserInfo")
   public void unBindUserInfo(String callback, Long uid, String typeArray, PrintWriter out) {
      try {
         if (typeArray == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("没有可更改的内容"));
            return;
         }
         Gson gson = new Gson();
         List<Integer> list = gson.fromJson(typeArray, new TypeToken<ArrayList<Integer>>() {
         }.getType());
         if (list == null || list.size() == 0) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("没有可更改的内容"));
            return;
         }
         if (uid == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户id不能为空"));
            return;
         }
         UserInfo find = userInfoService.getUserById(uid);
         if (find == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("不存在该用户!"));
            return;
         }
         for (Integer type : list) {
            String openid = find.getOpenid();
            String wxUnionId = find.getWxUnionId();
            String phone = find.getPhone();
            if (1 == type) {
               if (StringUtil.isNullOrEmpty(openid)) {
                  JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("当前用户未绑定淘宝!"));
                  return;
               } else {
                  userInfoService.deleteBindInfo(find, type);
               }
            } else if (2 == type) {
               if (StringUtil.isNullOrEmpty(wxUnionId)) {
                  JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("当前用户未绑定微信!"));
                  return;
               } else {
                  userInfoService.deleteBindInfo(find, type);
               }
            } else if (3 == type) {
               if (StringUtil.isNullOrEmpty(phone)) {
                  JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("当前用户未绑定手机号!"));
                  return;
               } else {
                  userInfoService.deleteBindInfo(find, type);
               }
            } else if (4 == type) {
               // 查询支付宝绑定
               BindingAccount account = bindingAccountService.getBindingAccountByUidAndType(uid,
                     BindingAccount.TYPE_ALIPAY);
               if (account == null) {
                  JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("当前用户未绑定支付宝!"));
                  return;
               } else {
                  bindingAccountService.deleteBindingAccount(account);
               }
            } else {
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("账户类型不匹配!"));
               return;
            }
         }
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("解绑成功"));
      } catch (Exception e) {
         e.printStackTrace();
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作异常"));
      }
   }
   /**
    * 封禁用户ID
    *
    * @param callback
    * @param userInfo
    * @param uid
    * @param out
    */
   @RequestMapping(value = "setInfo")
   public void setInfo(String callback, UserInfo userInfo, PrintWriter out) {
   @RequestMapping(value = "forbiddenUser")
   public void forbiddenUser(String callback, Long uid, HttpServletRequest request, PrintWriter out) {
      try {
         Long id = userInfo.getId();
         if (id == null) {
         if (uid == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请传递正确数据"));
            return;
         }
         UserInfo currentInfo = userInfoService.selectByPKey(id);
         UserInfo currentInfo = userInfoService.selectByPKey(uid);
         if (currentInfo == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该用户已不存在"));
            return;
         }
         boolean hasChange = false;
         // 等级修改
         Integer rank = userInfo.getRank();
         if (rank != null) {
            hasChange = true;
            currentInfo.setRank(rank);
         AdminUser admin = (AdminUser) request.getSession().getAttribute(Constant.SESSION_ADMIN);
         if (admin == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("登录失效,请登录"));
            return;
         }
         // 状态修改
         Integer state = userInfo.getState();
         if (state != null) {
            hasChange = true;
            currentInfo.setState(state);
         }
         if (hasChange) {
            userInfoService.updateByPrimaryKeySelective(currentInfo);
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("修改成功"));
         } else {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("无可修改内容"));
         }
         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("修改失败"));
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作失败"));
      }
   }
   /**
    * 删除绑定的账户信息: 支付宝  微信
    * 解除封禁用户ID
    *
    * @param callback
    * @param bindId
    * @param uid
    * @param out
    */
   @RequestMapping(value = "deleteBindingAccount")
   public void deleteBindingAccount(String callback, Long bindId, PrintWriter out) {
   @RequestMapping(value = "relieveForbiddenUser")
   public void relieveForbiddenUser(String callback, Long uid, PrintWriter out) {
      try {
         if (bindId == null) {
         if (uid == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请传递正确数据"));
            return;
         }
         int count = bindingAccountService.deleteByPrimaryKey(bindId);
         UserInfo currentInfo = userInfoService.selectByPKey(uid);
         if (currentInfo == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该用户已不存在"));
            return;
         }
         currentInfo.setState(UserInfo.STATE_NORMAL);
         currentInfo.setStateDesc("管理员已解封");
         userInfoService.updateByPrimaryKeySelective(currentInfo);
         // 解封微信
         ForbiddenUserIdentifyCode forbiddenUserIdentifyCode = forbiddenUserIdentifyCodeService
               .listByTypeAndIdentifyCode(ForbiddenUserIdentifyCodeTypeEnum.wxUnionId, currentInfo.getWxUnionId());
         if (forbiddenUserIdentifyCode != null)
            forbiddenUserIdentifyCodeService.delete(forbiddenUserIdentifyCode);
         // 解封手机
         forbiddenUserIdentifyCode = forbiddenUserIdentifyCodeService
               .listByTypeAndIdentifyCode(ForbiddenUserIdentifyCodeTypeEnum.phone, currentInfo.getPhone());
         if (forbiddenUserIdentifyCode != null)
            forbiddenUserIdentifyCodeService.delete(forbiddenUserIdentifyCode);
         // 解封淘宝
         UserExtraTaoBaoInfo taoBao = userExtraTaoBaoInfoService.getByUid(uid);
         if (taoBao != null && !StringUtil.isNullOrEmpty(taoBao.getTaoBaoUid())) {
            forbiddenUserIdentifyCode = forbiddenUserIdentifyCodeService
                  .listByTypeAndIdentifyCode(ForbiddenUserIdentifyCodeTypeEnum.taobaoUid, taoBao.getTaoBaoUid());
            if (forbiddenUserIdentifyCode != null)
               forbiddenUserIdentifyCodeService.delete(forbiddenUserIdentifyCode);
         }
         // 解封支付宝
         List<BindingAccount> list = bindingAccountService.getBindingAccountByUid(uid);
         if (list != null) {
            for (BindingAccount ba : list) {
               forbiddenUserIdentifyCode = forbiddenUserIdentifyCodeService.listByTypeAndIdentifyCode(
                     ForbiddenUserIdentifyCodeTypeEnum.alipayAccount, ba.getAccount());
               if (forbiddenUserIdentifyCode != null)
                  forbiddenUserIdentifyCodeService.delete(forbiddenUserIdentifyCode);
            }
         }
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("用户解封成功"));
      } catch (Exception e) {
         e.printStackTrace();
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作失败"));
      }
   }
   /**
    * 用户账号- 封禁/解封
    *
    * @param callback
    * @param code
    * @param type
    *            1("微信unionId"), 2("淘宝ID"), 3("手机号"), 4("支付宝账号");
    * @param out
    */
   @RequestMapping(value = "saveForbiddenInfo")
   public void saveForbiddenInfo(String callback, String code, Integer type, PrintWriter out) {
      try {
         if (code == null || code.trim().length() == 0 || type == null || "NULL".equalsIgnoreCase(code)) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("参数不能为空"));
            return;
         }
         forbiddenUserIdentifyCodeService.saveForbiddenInfo(code, type);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("修改成功"));
      } catch (ForbiddenUserIdentifyCodeException e) {
         e.printStackTrace();
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getMsg()));
      } catch (Exception e) {
         e.printStackTrace();
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作异常"));
      }
   }
   /**
    * 删除队员关系
    *
    * @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("删除成功"));
@@ -816,106 +518,39 @@
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作异常"));
      }
   }
   /**
    *
    * @param data
    * @param uid
    *            用户ID
    * @param type
    *            需要解绑的账户类型
    */
   @RequestMapping("unBindUserInfo")
   public void unBindUserInfo(String callback, Long id, Integer type, PrintWriter out) {
      try {
         if (id == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("不存在该用户!"));
            return;
         }
         if (type == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("账户类型不可为空!"));
            return;
         }
         UserInfo find = userInfoService.getUserById(id);
         if (find == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("不存在该用户!"));
            return;
         }
         String openid = find.getOpenid();
         String wxUnionId = find.getWxUnionId();
         String phone = find.getPhone();
         if (1 == type) {
            if (StringUtil.isNullOrEmpty(openid)) {
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("当前用户未绑定支付宝!"));
               return;
            }
         } else if (2 == type) {
            if (StringUtil.isNullOrEmpty(wxUnionId)) {
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("当前用户未绑定微信!"));
               return;
            }
         } else if (3 == type) {
            if (StringUtil.isNullOrEmpty(phone)) {
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("当前用户未绑定手机号!"));
               return;
            }
         } else {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("账户类型有误!"));
            return;
         }
         userInfoService.deleteBindInfo(find, type);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("解绑成功"));
      } 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) {
   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);
         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) {
         for (ThreeSale threeSale : firstTeamList) {
            UserInfo worker = threeSale.getWorker();
            if (worker == null) {
               worker = new UserInfo();
               threeSale.setWorker(worker);
            } else{
            } else {
               Long id = worker.getId();
               UserInfo currentInfo = userInfoService.selectByPKey(id);
               if (currentInfo != null) {
                  worker.setNickName(currentInfo.getNickName());
@@ -923,7 +558,7 @@
               }
            }
         }
         long count = threeSaleService.queryCountMyFirstTeamList(key, bossId);
         int totalPage = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
@@ -936,49 +571,47 @@
         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) {
   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);
         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) {
         for (ThreeSale threeSale : firstTeamList) {
            UserInfo worker = threeSale.getWorker();
            if (worker == null) {
               worker = new UserInfo();
               threeSale.setWorker(worker);
            } else{
            } else {
               Long id = worker.getId();
               UserInfo currentInfo = userInfoService.selectByPKey(id);
               if (currentInfo != null) {
                  worker.setNickName(currentInfo.getNickName());
@@ -986,7 +619,7 @@
               }
            }
         }
         long count = threeSaleService.queryCountMySecondTeamList(key, bossId);
         int totalPage = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
@@ -999,43 +632,18 @@
         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 = "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("操作异常"));
      }
   }
   /**
    * 队员关系
    *
    * @param pageIndex
    * @param key
    * @param state
@@ -1046,7 +654,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) {
      if (pageIndex == null || pageIndex < 1) {
         pageIndex = 1;
      }
@@ -1054,9 +662,9 @@
      if (pageSize == null || pageSize < 1) {
         pageSize = Constant.PAGE_SIZE;
      }
      try {
         if (!StringUtil.isNullOrEmpty(endTime)) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Date enddate = sdf.parse(endTime);
@@ -1065,7 +673,7 @@
            c.add(Calendar.DAY_OF_MONTH, 1);// 今天+1天
            endTime = sdf.format(c.getTime());
         }
         List<ThreeSale> listQuery = null;
         if (type == 0) {
            // 上级用户
@@ -1076,20 +684,20 @@
            listQuery = threeSaleService.listSuperiorQuery((pageIndex - 1) * pageSize, pageSize, state, uid);
         } else if (type == 1) {
            // 一级用户
            listQuery = threeSaleService.listFirstTeamQuery((pageIndex - 1) * pageSize, pageSize, uid,
                  state, startTime, endTime);
            listQuery = threeSaleService.listFirstTeamQuery((pageIndex - 1) * pageSize, pageSize, uid, state,
                  startTime, endTime);
         } else if (type == 2) {
            // 二级用户
            listQuery = threeSaleService.listSecondTeamQuery((pageIndex - 1) * pageSize, pageSize, uid,
                  state, startTime, endTime);
            listQuery = threeSaleService.listSecondTeamQuery((pageIndex - 1) * pageSize, pageSize, uid, state,
                  startTime, endTime);
         }
         if (listQuery == null || listQuery.size() == 0) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("暂无数据"));
            return;
         }
         for (ThreeSale threeSale: listQuery) {
         for (ThreeSale threeSale : listQuery) {
            Integer expire = threeSale.getExpire();
            if (threeSale.getState()) {
               threeSale.setExpire(1); // 邀请成功
@@ -1101,7 +709,7 @@
               }
            }
         }
         long count = 0;
         if (type == 0) {
            // 上级用户
@@ -1113,25 +721,25 @@
            // 二级用户
            count = threeSaleService.countSecondTeamQuery(uid, state, startTime, endTime);
         }
         int totalPage = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
         PageEntity pe = new PageEntity(pageIndex, pageSize, count, totalPage);
         JSONObject data = new JSONObject();
         data.put("pe", pe);
         data.put("result_list", listQuery);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("查询失败"));
         e.printStackTrace();
      }
      }
   }
   /**
    * 用户账户明细
    *
    * @param callback
    * @param pageIndex
    * @param pageSize
@@ -1139,7 +747,7 @@
    * @param out
    */
   @RequestMapping(value = "getAccountDetails")
   public void getAccountDetails(String callback, Integer pageIndex,Integer pageSize, Long uid, PrintWriter out) {
   public void getAccountDetails(String callback, Integer pageIndex, Integer pageSize, Long uid, PrintWriter out) {
      if (pageIndex == null || pageIndex < 1) {
         pageIndex = 1;
      }
@@ -1147,317 +755,78 @@
      if (pageSize == null || pageSize < 1) {
         pageSize = Constant.PAGE_SIZE;
      }
      if (uid == null) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请传递正确数据"));
         return;
      }
      try {
         List<AccountDetails> detailsList = accountDetailsService.findAccountDetailsList(uid, pageIndex);
         if (detailsList == null || detailsList.size() == 0) {
         List<UserMoneyDetail> userMoneyDetailsList = userMoneyDetailService.listByUidWithState(uid, pageIndex,
               pageSize);
         if (userMoneyDetailsList == null || userMoneyDetailsList.size() == 0) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("暂无数据"));
            return;
         }
         int count = accountDetailsService.getCount(uid);
         long count = userMoneyDetailService.countByUidWithState(uid);
         int totalPage = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
         PageEntity pe = new PageEntity(pageIndex, pageSize, count, totalPage);
         Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
         JSONObject data = new JSONObject();
         data.put("pe", pe);
         data.put("result_list", GsonUtil.toJsonExpose(detailsList));
         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("查询失败"));
      }
   }
   /**
    * 根据渠道   统计当日新增用户数量
    * @param channelArray 名字数组
    * @param dateType 类型  1日  2月  3年
    * @param year 2018
    * @param startTime 2018-12-01
    * @param endTime   2018-12-01
    * 根据渠道 统计当日新增用户数量
    *
    * @param channelArray
    *            名字数组
    * @param dateType
    *            类型 1日 2月 3年
    * @param year
    *            2018
    * @param startTime
    *            2018-12-01
    * @param endTime
    *            2018-12-01
    * @param out
    */
   @RequestMapping(value = "getSameDayUserByChannel")
   public void getSameDayUserByChannel(String callback, String channelArray, Integer dateType,
       String year, String startTime, String endTime, PrintWriter out) {
   @RequestMapping(value = "getNewUserCharts")
   public void getNewUserCharts(String callback, String channelArray, Integer dateType, String year, String startTime,
         String endTime, PrintWriter out) {
      String validateMsg = AdminUtils.validateParams(dateType, startTime, endTime);
      if (validateMsg != null) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(validateMsg));
         return;
      }
      if (dateType != 1 && (!StringUtil.isNullOrEmpty(startTime) || !StringUtil.isNullOrEmpty(endTime))) {
         startTime = null;
         endTime = null;
      }
      List<String> channelList = null;
      if (channelArray != null && channelArray.trim().length() > 0) {
         Gson gson = new Gson();
         channelList = gson.fromJson(channelArray, new TypeToken<ArrayList<String>>() {}.getType());
         channelList = gson.fromJson(channelArray, new TypeToken<ArrayList<String>>() {
         }.getType());
      }
      if (channelList == null || channelList.size() == 0) {
         channelList = new ArrayList<String>();
         channelList.add("all");
      }
      if (dateType == 1 && year != null) {
         year = null; // 设置为空
      } else if (dateType == 2) {
         if (startTime != null)
            startTime = null;
         if (endTime != null)
            endTime = null;
      } else if (dateType == 3) {
         if (year != null)
            year = null;
         if (startTime != null)
            startTime = null;
         if (endTime != null)
            endTime = null;
      }
      try {
         Gson gson = new Gson();
         Object objectDate = null;
         List<String> dateList = AdminUtils.getDateList(dateType, startTime, endTime, year);
         JSONArray line_list = new JSONArray();
         for (String channel : channelList) {
            List<Map<String, Object>> list = userActiveLogService.countSameDayByChannel(channel,
                  dateType, year, startTime, endTime);
            if ("all".equalsIgnoreCase(channel)) {
               channel = "总计";
            }
            JSONObject innerList = new JSONObject();
            innerList.put("name", channel);
            if (dateType != 3) {
               innerList.put("data", gson.toJson(AdminUtils.dayOrMonthDataFactory(dateList, list)));
            } else {
               // 年视图
               Map<String, Object> map = AdminUtils.yearsDataFactory(list);
               if (objectDate == null) {
                  objectDate = map.get("date");
               }
               innerList.put("data", gson.toJson(map.get("value")));
            }
            line_list.add(innerList);
         }
         JSONObject data = new JSONObject();
         if (objectDate != null) {
            data.put("xAxis_list", gson.toJson(objectDate));
         } else {
            data.put("xAxis_list", gson.toJson(dateList));
         }
         data.put("line_list", line_list);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作异常"));
         e.printStackTrace();
      }
   }
   /**
    * 根据渠道   统计当日新增用户数量
    * @param channelArray 名字数组
    * @param dateType 类型  1日  2月  3年
    * @param year 2018
    * @param startTime 2018-12-01
    * @param endTime   2018-12-01
    * @param out
    */
   @RequestMapping(value = "getBuyProportion")
   public void getBuyProportion(String callback, String channelArray, Integer dateType,
       String year, String startTime, String endTime, Integer orderNum, PrintWriter out) {
      if (dateType != 1 && (!StringUtil.isNullOrEmpty(startTime) || !StringUtil.isNullOrEmpty(endTime))) {
         startTime = null;
         endTime = null;
      }
      try {
         Gson gson = new Gson();
         List<String> list = gson.fromJson(channelArray, new TypeToken<ArrayList<String>>() {}.getType());
         if (list == null || list.size() == 0) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("参数格式不正确"));
            return;
         }
         JSONArray array = new JSONArray();
         for (String channel: list) {
            JSONObject channelData = new JSONObject();
            List<Object> resultList = userActiveLogService.getBuyProportion(channel, dateType, year, startTime, endTime, orderNum);
            if (resultList == null) {
               resultList = new ArrayList<Object>();
            }
            channelData.put("name", channel);
            channelData.put("data_list", resultList);
            array.add(channelData);
         }
         JSONObject data = new JSONObject();
         data.put("result_list", array);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作异常"));
         e.printStackTrace();
      }
   }
   /**
    * 当周产生3单的新增用户概率
    * @param callback
    * @param channelArray 渠道名称
    * @param startTime
    * @param endTime
    * @param orderNum 订单数量
    * @param out
    */
   @RequestMapping(value = "getWeekProportion")
   public void getWeekProportion(String callback, String channelArray, String startTime, String endTime,
         Integer orderNum, PrintWriter out) {
      if (StringUtil.isNullOrEmpty(startTime) || StringUtil.isNullOrEmpty(endTime)) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请选择正确时间区间"));
         return;
      }
      try {
         if (orderNum == null ) {
            orderNum = 0;
         }
         List<String> channelList = null;
         if (channelArray != null && channelArray.trim().length() > 0) {
            Gson gson = new Gson();
            channelList = gson.fromJson(channelArray, new TypeToken<ArrayList<String>>() {}.getType());
         }
         if (channelList == null || channelList.size() == 0) {
            channelList = new ArrayList<String>();
            channelList.add("all");
         }
         JSONArray array = new JSONArray();
         for (String channel : channelList) {
            JSONObject channelData = new JSONObject();
            List<Map<String, Object>> resultList = userActiveLogService.countOneWeekUserInfo(channel,
                  startTime, endTime, orderNum);
            if (resultList == null) {
               resultList = new ArrayList<Map<String, Object>>();
            }
            if ("all".equalsIgnoreCase(channel)) {
               channel = "总计";
            }
            channelData.put("name", channel);
            channelData.put("data_list", resultList);
            array.add(channelData);
         }
         JSONObject data = new JSONObject();
         data.put("result_list", array);
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作异常"));
         e.printStackTrace();
      }
   }
   /**
    * 用户统计 :总用户、流失用户数量、累计有购买用户数
    * @param callback
    * @param out
    */
   @RequestMapping(value = "countUser")
   public void countUser(String callback, PrintWriter out) {
      try {
         // 总用户
         long totalUser = userInfoCountService.countNewUser(null, null);
         // 流失用户数量(180天未使用登录并且无任何资金流动的账号数量)
         long loseUser = userInfoCountService.countLoseUser(180);
         // 累计有购买用户数
         long orderUser = userInfoCountService.countHasOrderUser();
         JSONObject data = new JSONObject();
         data.put("totalUser", totalUser);
         data.put("loseUser", loseUser);
         data.put("orderUser", orderUser);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         e.printStackTrace();
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("统计异常"));
      }
   }
   /**
    * 统计历史新增用户
    * @param callback
    * @param dateType 类型  1日  2月  3年
    * @param year 2018
    * @param startTime 2018-12-01
    * @param endTime   2018-12-01
    * @param out
    */
   @RequestMapping(value = "getNewUserCharts")
   public void getNewUserCharts(String callback, Integer dateType, String year, String startTime,
         String endTime,   PrintWriter out) {
      String validateMsg = AdminUtils.validateParams(dateType, startTime, endTime);
      if (validateMsg != null) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(validateMsg));
         return;
      }
      if (dateType != 1 && (!StringUtil.isNullOrEmpty(startTime) || !StringUtil.isNullOrEmpty(endTime))) {
         startTime = null;
         endTime = null;
      }
      if (dateType == 1 && year != null) {
@@ -1487,26 +856,32 @@
         List<String> dateList = AdminUtils.getDateList(dateType, startTime, endTime, year);
         JSONArray line_list = new JSONArray();
         for (String channel : channelList) {
         List<Map<String, Object>> list = userInfoCountService
               .countNewUserByDate(dateType, year, startTime, endTime);
            List<ChartTDO> list = userInfoCountService.countNewUserByDate(channel, dateType, year,
                  startTime, endTime);
         JSONObject innerList = new JSONObject();
         innerList.put("name", "总计");
         if (dateType != 3) {
            innerList.put("data", gson.toJson(AdminUtils.dayOrMonthDataFactory(dateList, list)));
         } else {
            // 年视图
            Map<String, Object> map = AdminUtils.yearsDataFactory(list);
            if (objectDate == null) {
               objectDate = map.get("date");
            if ("all".equalsIgnoreCase(channel)) {
               channel = "总计";
            }
            innerList.put("data", gson.toJson(map.get("value")));
         }
         line_list.add(innerList);
            JSONObject innerList = new JSONObject();
            innerList.put("name", channel);
            if (dateType != 3) {
               innerList.put("data", gson.toJson(AdminUtils.dayOrMonthDataFactory(dateType, dateList, list)));
            } else {
               // 年视图
               Map<String, Object> map = AdminUtils.yearsDataFactory(list);
               if (objectDate == null) {
                  objectDate = map.get("date");
               }
               innerList.put("data", gson.toJson(map.get("value")));
            }
            line_list.add(innerList);
         }
         JSONObject data = new JSONObject();
         if (objectDate != null) {
@@ -1524,5 +899,240 @@
         e.printStackTrace();
      }
   }
   /**
    * 根据渠道 统计当日新增用户数量
    *
    * @param channelArray
    *            名字数组
    * @param dateType
    *            类型 1日 2月 3年
    * @param year
    *            2018
    * @param startTime
    *            2018-12-01
    * @param endTime
    *            2018-12-01
    * @param out
    */
   @RequestMapping(value = "getTodayBuyRate")
   public void getTodayBuyRate(String callback, String channelArray, Integer dateType, String year, String startTime,
         String endTime, Integer orderNum, PrintWriter out) {
      String validateMsg = AdminUtils.validateParams(dateType, startTime, endTime);
      if (validateMsg != null) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(validateMsg));
         return;
      }
      if (dateType == 2 && StringUtil.isNullOrEmpty(year)) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请输入年份"));
         return;
      }
      if (dateType != 1 && (!StringUtil.isNullOrEmpty(startTime) || !StringUtil.isNullOrEmpty(endTime))) {
         startTime = null;
         endTime = null;
      }
      List<String> channelList = null;
      if (channelArray != null && channelArray.trim().length() > 0) {
         Gson gson = new Gson();
         channelList = gson.fromJson(channelArray, new TypeToken<ArrayList<String>>() {
         }.getType());
      }
      if (channelList == null || channelList.size() == 0) {
         channelList = new ArrayList<String>();
         channelList.add("all");
      }
      if (dateType == 1 && year != null) {
         year = null; // 设置为空
      } else if (dateType == 2) {
         if (startTime != null)
            startTime = null;
         if (endTime != null)
            endTime = null;
      } else if (dateType == 3) {
         if (year != null)
            year = null;
         if (startTime != null)
            startTime = null;
         if (endTime != null)
            endTime = null;
      }
      try {
         Gson gson = new Gson();
         Object objectDate = null;
         List<String> dateList = AdminUtils.getDateList(dateType, startTime, endTime, year);
         JSONArray line_list = new JSONArray();
         for (String channel : channelList) {
            List<ChartTDO> list = userInfoCountService.getTodayBuyRate(channel, dateType, year,
                  startTime, endTime);
            if ("all".equalsIgnoreCase(channel)) {
               channel = "总计";
            }
            JSONObject innerList = new JSONObject();
            innerList.put("name", channel);
            if (dateType != 3) {
               innerList.put("data", gson.toJson(AdminUtils.dayOrMonthDataFactory(dateType, dateList, list)));
            } else {
               // 年视图
               Map<String, Object> map = AdminUtils.yearsDataFactory(list);
               if (objectDate == null) {
                  objectDate = map.get("date");
               }
               innerList.put("data", gson.toJson(map.get("value")));
            }
            line_list.add(innerList);
         }
         JSONObject data = new JSONObject();
         if (objectDate != null) {
            data.put("xAxis_list", gson.toJson(objectDate));
         } else {
            data.put("xAxis_list", gson.toJson(dateList));
         }
         data.put("line_list", line_list);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作异常"));
         e.printStackTrace();
      }
   }
   /**
    * 当周产生3单的新增用户概率
    *
    * @param callback
    * @param channelArray
    *            渠道名称
    * @param startTime
    * @param endTime
    * @param orderNum
    *            订单数量
    * @param out
    */
   @RequestMapping(value = "getWeekBuyRate")
   public void getWeekBuyRate(String callback, String channelArray, String startTime, String endTime, Integer orderNum,
         PrintWriter out) {
      if (StringUtil.isNullOrEmpty(startTime) || StringUtil.isNullOrEmpty(endTime)) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("当周订单统计对应时间区域不能为空"));
         return;
      }
      List<String> channelList = null;
      if (channelArray != null && channelArray.trim().length() > 0) {
         Gson gson = new Gson();
         channelList = gson.fromJson(channelArray, new TypeToken<ArrayList<String>>() {
         }.getType());
      }
      if (channelList == null || channelList.size() == 0) {
         channelList = new ArrayList<String>();
         channelList.add("all");
      }
      if (orderNum < 1) {
         orderNum = 1;
      }
      try {
         Gson gson = new Gson();
         List<String> dateList = AdminUtils.getDateList(1, startTime, endTime, null);
         JSONArray line_list = new JSONArray();
         for (String channel : channelList) {
            List<Object> list = userInfoCountService.getWeekBuyRate(channel, startTime, endTime, orderNum,
                  dateList);
            if ("all".equalsIgnoreCase(channel)) {
               channel = "总计";
            }
            JSONObject innerList = new JSONObject();
            innerList.put("name", channel);
            innerList.put("data", gson.toJson(list));
            line_list.add(innerList);
         }
         JSONObject data = new JSONObject();
         data.put("xAxis_list", gson.toJson(dateList));
         data.put("line_list", line_list);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作异常"));
         e.printStackTrace();
      }
   }
   /**
    * 获取金币排行榜
    * @param callback
    * @param pageIndex
    * @param pageSize
    * @param type
    * @param out
    */
   @RequestMapping(value = "getGoldTop")
   public void getGoldTop(String callback, Integer pageIndex, Integer pageSize, Integer type,
         PrintWriter out) {
      if (type == null) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("type不能为空"));
         return;
      }
      if (pageIndex == null)
         pageIndex = 1;
      if (pageSize == null)
         pageSize = 50;
      long count = 0;
      List<UserGoldCoinVO> list = null;
      if (type == 0) {
         count = userInfoCountService.countByHasGoldCoin();
         list = userInfoCountService.listByHasGoldCoin((pageIndex - 1) * pageSize, pageSize);
      } else if (type == 1 || type == 2) {
         count = userInfoCountService.countByUserGoldCoin(type);
         list = userInfoCountService.listByUserGoldCoin((pageIndex - 1) * pageSize, pageSize, type);
      }
      if(list == null)
         list = new ArrayList<>();
      int totalPage = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
      PageEntity pe = new PageEntity(pageIndex, pageSize, count, totalPage);
      JSONObject data = new JSONObject();
      data.put("pe", pe);
      data.put("list", list);
      JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
   }
   
}