admin
2020-02-18 ddf5db7d31af51fcf697eac0cee7dd46ff73bcc1
fanli/src/main/java/com/yeshi/fanli/controller/admin/UserInfoAdminController.java
@@ -5,53 +5,57 @@
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.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.yeshi.utils.IPUtil;
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.dto.money.AccountDetails;
import com.yeshi.fanli.dto.ChartTDO;
import com.yeshi.fanli.entity.admin.count.CountUserInfo;
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.Order;
import com.yeshi.fanli.entity.bus.user.ThreeSale;
import com.yeshi.fanli.entity.bus.user.UserActiveNumHistory;
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.UserRank;
import com.yeshi.fanli.entity.bus.user.vip.UserVIPInfo;
import com.yeshi.fanli.entity.common.AdminUser;
import com.yeshi.fanli.entity.money.UserMoneyDetail;
import com.yeshi.fanli.entity.taobao.ScanHistory;
import com.yeshi.fanli.exception.user.ForbiddenUserIdentifyCodeException;
import com.yeshi.fanli.service.inter.config.ConfigService;
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.goods.ShareService;
import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce;
import com.yeshi.fanli.service.inter.order.OrderService;
import com.yeshi.fanli.service.inter.user.BindingAccountService;
import com.yeshi.fanli.service.inter.user.ExtractService;
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.ScanHistoryService;
import com.yeshi.fanli.service.inter.user.UserAccountService;
import com.yeshi.fanli.service.inter.user.UserActiveLogService;
import com.yeshi.fanli.service.inter.user.UserExtraTaoBaoInfoService;
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.UserMoneyDetailService;
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.service.inter.user.vip.UserVIPInfoService;
import com.yeshi.fanli.tag.PageEntity;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.GsonUtil;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.factory.AccountDetailsFactory;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.annotation.RequestSerializableByKey;
import com.yeshi.fanli.vo.user.UserGoldCoinVO;
import com.yeshi.fanli.vo.user.UserInfoVO;
import net.sf.json.JSONArray;
@@ -63,33 +67,14 @@
   @Resource
   private UserInfoService userInfoService;
   @Resource
   private OrderService orderService;
   @Resource
   private ScanHistoryService scanHistoryService;
   @Resource
   private ConfigService configService;
   @Resource
   private ExtractService extractService;
   @Resource
   private ThreeSaleSerivce threeSaleService;
   @Resource
   private ShareService shareService;
   @Resource
   private BindingAccountService bindingAccountService;
   @Resource
   private UserInfoCountService userInfoCountService;
   @Resource
   private UserActiveLogService userActiveLogService;
   @Resource
   private ForbiddenUserIdentifyCodeService forbiddenUserIdentifyCodeService;
@@ -102,164 +87,25 @@
   @Resource
   private UserRankService userRankService;
   @Resource
   private UserMoneyDetailService userMoneyDetailService;
   @RequestMapping(value = "getUserList", method = RequestMethod.POST)
   public void getUserList(int pageIndex, String key, PrintWriter out) {
   @Resource
   private UserInfoDeleteRecordService userInfoDeleteRecordService;
      List<UserInfo> userList = userInfoService.getUserList(pageIndex - 1, key);
      int count = userInfoService.getUserCount(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);
      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 UserAccountService userAccountService;
   @Resource
   private UserActiveLogService userActiveLogService;
   @Resource
   private UserVIPInfoService userVIPInfoService;
   /**
    *
    * 方法说明: 三级分销
    *
    * @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));
   }
   /**
    *
    * @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));
   }
   /**
    *
    * 方法说明: 清除用户手势密码
    *
    * @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));
   }
   /**
    * 查询用户信息列表--相关数据统计
    * 查询用户信息列表 正常用户/异常用户
    * 
    * @param callback
    * @param pageIndex
@@ -278,7 +124,7 @@
    * @param out
    */
   @RequestMapping(value = "query")
   public void query(String callback, Integer pageIndex, Integer pageSize, String key, Integer keyType, Integer rank,
   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) {
      try {
@@ -286,7 +132,7 @@
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户类型type不能为空"));
            return;
         }
         if (pageIndex == null)
            pageIndex = 1;
@@ -328,14 +174,14 @@
         }
         List<UserInfoVO> userList = userInfoService.query((pageIndex - 1) * pageSize, pageSize, type, key, keyType,
               userRank, days, startTime, endTime, orderField, orderMode);
               userRank, days, startTime, endTime, orderField, orderMode,userType);
         if (userList == null || userList.size() == 0) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("暂无相关数据"));
            return;
         }
         long count = userInfoService.queryCount(type, key, keyType, userRank, days, startTime, endTime);
         long count = userInfoService.queryCount(type, key, keyType, userRank, days, startTime, endTime,userType);
         int totalPage = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
         PageEntity pe = new PageEntity(pageIndex, pageSize, count, totalPage);
@@ -443,177 +289,6 @@
   }
   /**
    * 修改用户的状态、等级信息
    *
    * @param callback
    * @param userInfo
    * @param out
    */
   @RequestMapping(value = "setInfo")
   public void setInfo(String callback, UserInfo userInfo, PrintWriter out) {
      try {
         Long id = userInfo.getId();
         if (id == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请传递正确数据"));
            return;
         }
         UserInfo currentInfo = userInfoService.selectByPKey(id);
         if (currentInfo == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该用户已不存在"));
            return;
         }
         currentInfo = new UserInfo(id);
         boolean hasChange = false;
         // 等级修改
         Integer rank = userInfo.getRank();
         if (rank != null) {
            hasChange = true;
            currentInfo.setRank(rank);
         }
         // 状态修改
         Integer state = userInfo.getState();
         if (state != null) {
            hasChange = true;
            currentInfo.setState(state);
            if (state != null && state == UserInfo.STATE_FORBIDDEN)
               currentInfo.setStateDesc("管理员封禁");
         }
         if (hasChange) {
            userInfoService.updateByPrimaryKeySelective(currentInfo);
            UserInfo nowUser = userInfoService.selectByPKey(id);
            if (state != null && state == UserInfo.STATE_FORBIDDEN) {
               // 加入封禁的账号列表
               ForbiddenUserIdentifyCode forbiddenUserIdentifyCode = new ForbiddenUserIdentifyCode();
               forbiddenUserIdentifyCode.setType(ForbiddenUserIdentifyCodeTypeEnum.wxUnionId);
               forbiddenUserIdentifyCode.setIdentifyCode(nowUser.getWxUnionId());
               forbiddenUserIdentifyCode.setBeiZhu(nowUser.getWxName());
               try {
                  forbiddenUserIdentifyCodeService.addIdentifyCode(forbiddenUserIdentifyCode);
               } catch (ForbiddenUserIdentifyCodeException e) {
                  e.printStackTrace();
               }
               // 电话号码
               forbiddenUserIdentifyCode = new ForbiddenUserIdentifyCode();
               forbiddenUserIdentifyCode.setType(ForbiddenUserIdentifyCodeTypeEnum.phone);
               forbiddenUserIdentifyCode.setIdentifyCode(nowUser.getPhone());
               try {
                  forbiddenUserIdentifyCodeService.addIdentifyCode(forbiddenUserIdentifyCode);
               } catch (ForbiddenUserIdentifyCodeException e) {
                  e.printStackTrace();
               }
               // 淘宝
               UserExtraTaoBaoInfo taoBao = userExtraTaoBaoInfoService.getByUid(nowUser.getId());
               if (taoBao != null && !StringUtil.isNullOrEmpty(taoBao.getTaoBaoUid())) {
                  forbiddenUserIdentifyCode = new ForbiddenUserIdentifyCode();
                  forbiddenUserIdentifyCode.setType(ForbiddenUserIdentifyCodeTypeEnum.taobaoUid);
                  forbiddenUserIdentifyCode.setIdentifyCode(taoBao.getTaoBaoUid());
                  try {
                     forbiddenUserIdentifyCodeService.addIdentifyCode(forbiddenUserIdentifyCode);
                  } catch (ForbiddenUserIdentifyCodeException e) {
                     e.printStackTrace();
                  }
               }
               // 查询支付宝绑定
               List<BindingAccount> list = bindingAccountService.getBindingAccountByUid(nowUser.getId());
               if (list != null)
                  for (BindingAccount ba : list) {
                     forbiddenUserIdentifyCode = new ForbiddenUserIdentifyCode();
                     forbiddenUserIdentifyCode.setType(ForbiddenUserIdentifyCodeTypeEnum.alipayAccount);
                     forbiddenUserIdentifyCode.setIdentifyCode(ba.getAccount());
                     forbiddenUserIdentifyCode.setBeiZhu(ba.getName());
                     try {
                        forbiddenUserIdentifyCodeService.addIdentifyCode(forbiddenUserIdentifyCode);
                     } catch (ForbiddenUserIdentifyCodeException e) {
                        e.printStackTrace();
                     }
                  }
            } else if (state != null && state == UserInfo.STATE_NORMAL) {
               // 解封微信
               ForbiddenUserIdentifyCode forbiddenUserIdentifyCode = forbiddenUserIdentifyCodeService
                     .listByTypeAndIdentifyCode(ForbiddenUserIdentifyCodeTypeEnum.wxUnionId,
                           nowUser.getWxUnionId());
               if (forbiddenUserIdentifyCode != null)
                  forbiddenUserIdentifyCodeService.delete(forbiddenUserIdentifyCode);
               // 解封手机
               forbiddenUserIdentifyCode = forbiddenUserIdentifyCodeService
                     .listByTypeAndIdentifyCode(ForbiddenUserIdentifyCodeTypeEnum.phone, nowUser.getPhone());
               if (forbiddenUserIdentifyCode != null)
                  forbiddenUserIdentifyCodeService.delete(forbiddenUserIdentifyCode);
               // 解封淘宝
               UserExtraTaoBaoInfo taoBao = userExtraTaoBaoInfoService.getByUid(nowUser.getId());
               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(nowUser.getId());
               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("修改成功"));
         } else {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("无可修改内容"));
         }
      } catch (
      Exception e) {
         e.printStackTrace();
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("修改失败"));
      }
   }
   /**
    * 删除绑定的账户信息: 支付宝 微信
    *
    * @param callback
    * @param bindId
    * @param out
    */
   @RequestMapping(value = "deleteBindingAccount")
   public void deleteBindingAccount(String callback, Long bindId, PrintWriter out) {
      try {
         if (bindId == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请传递正确数据"));
            return;
         }
         int count = bindingAccountService.deleteByPrimaryKey(bindId);
         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 data
    * @param uid
@@ -622,52 +297,307 @@
    *            需要解绑的账户类型
    */
   @RequestMapping("unBindUserInfo")
   public void unBindUserInfo(String callback, Long id, Integer type, PrintWriter out) {
   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("操作异常"));
      }
   }
   /**
    * 修改用户备注
    * @param callback
    * @param uid
    * @param mark
    * @param out
    */
   @RequestMapping("addUserMark")
   public void addUserMark(String callback, Long uid, String mark, PrintWriter out) {
      try {
         if (uid == null || uid <= 0 || StringUtil.isNullOrEmpty(mark))
            return;
         UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
         if (userInfoExtra == null)
            return;
         UserInfoExtra updateExtra = new UserInfoExtra();
         updateExtra.setId(userInfoExtra.getId());
         updateExtra.setMark(mark);
         userInfoExtraService.saveUserInfoExtra(updateExtra);
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   /**
    * 删除用户-改变其状态
    * @param callback
    * @param idArray
    * @param out
    */
   @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("当前账户失效,请重新登陆。")));
            return;
         }
         if (StringUtil.isNullOrEmpty(idArray)) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请选择操作的数据"));
            return;
         }
         Gson gson = new Gson();
         List<Long> list = gson.fromJson(idArray, new TypeToken<ArrayList<Long>>() {}.getType());
         if (list == null || list.size() == 0) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("未检测到删除的数据"));
            return;
         }
         for (Long id: list) {
            UserInfo user = new UserInfo(id);
            user.setState(UserInfo.STATE_DELETE);
            user.setStateDesc(admin.getId()+" " + admin.getName()+ "后台手动删除");
            userInfoService.updateByPrimaryKeySelective(user);
         }
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("成功删除"));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("删除失败"));
         e.printStackTrace();
      }
   }
   /**
    * 封禁用户ID
    *
    * @param callback
    * @param uid
    * @param out
    */
   @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;
         }
         UserInfo currentInfo = userInfoService.selectByPKey(uid);
         if (currentInfo == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该用户已不存在"));
            return;
         }
         AdminUser admin = (AdminUser) request.getSession().getAttribute(Constant.SESSION_ADMIN);
         if (admin == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("登录失效,请登录"));
            return;
         }
         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("操作失败"));
      }
   }
   /**
    * 解除封禁用户ID
    *
    * @param callback
    * @param uid
    * @param out
    */
   @RequestMapping(value = "relieveForbiddenUser")
   public void relieveForbiddenUser(String callback, Long uid, PrintWriter out) {
      try {
         if (uid == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请传递正确数据"));
            return;
         }
         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("不存在该用户!"));
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请传递正确数据"));
            return;
         }
         if (type == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("账户类型不可为空!"));
            return;
         }
         int count = threeSaleService.deleteByPrimaryKey(id);
         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;
            }
         if (count > 0) {
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("删除成功"));
         } else {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("账户类型有误!"));
            return;
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("删除失败"));
         }
         userInfoService.deleteBindInfo(find, type);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("解绑成功"));
      } catch (Exception e) {
         e.printStackTrace();
@@ -797,29 +727,6 @@
      }
   }
   @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("操作异常"));
      }
   }
   /**
    * 队员关系
    * 
@@ -941,7 +848,6 @@
      }
      try {
         List<UserMoneyDetail> userMoneyDetailsList = userMoneyDetailService.listByUidWithState(uid, pageIndex,
               pageSize);
         if (userMoneyDetailsList == null || userMoneyDetailsList.size() == 0) {
@@ -949,18 +855,15 @@
            return;
         }
         List<AccountDetails> detailList = new ArrayList<>();
         for (UserMoneyDetail detail : userMoneyDetailsList)
            detailList.add(AccountDetailsFactory.create(detail));
         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(detailList));
         data.put("result_list", gson.toJson(userMoneyDetailsList));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
@@ -988,99 +891,117 @@
   @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());
      }
      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 {
         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;
         }
         Date beginDate = null;
         Date endDate = null;
         if (dateType == 1) {
            beginDate = TimeUtil.parse(startTime);
            endDate = TimeUtil.parse(endTime);
         } else if (dateType == 2) {
            Calendar calendar=Calendar.getInstance();
            int currentYear = calendar.get(Calendar.YEAR);
            if (!StringUtil.isNullOrEmpty(year)) {
               currentYear = Integer.parseInt(year);
            }
            calendar.clear();
             calendar.set(Calendar.YEAR, currentYear);
             beginDate =calendar.getTime();
            calendar.clear();
            calendar.set(Calendar.YEAR, currentYear);
            calendar.roll(Calendar.DAY_OF_YEAR, -1);
            endDate=calendar.getTime();
         } else if (dateType == 3) {
            beginDate = TimeUtil.parse("2018-01-01");
            endDate = new Date();
         }
         Gson gson = new Gson();
         Object objectDate = null;
         List<String> dateList = AdminUtils.getDateList(dateType, startTime, endTime, year);
         // 渠道
         List<String> channelList = null;
         if (channelArray != null && channelArray.trim().length() > 0) {
            channelList = gson.fromJson(channelArray, new TypeToken<ArrayList<String>>() {
            }.getType());
         }
         JSONArray line_list = new JSONArray();
         for (String channel : channelList) {
            List<Map<String, Object>> list = userInfoCountService.countNewUserByDate(channel, dateType, year,
                  startTime, endTime);
            if ("all".equalsIgnoreCase(channel)) {
               channel = "总计";
         if (channelList != null && channelList.size() > 0) {
            for (String channel : channelList) {
               List<Object> list = getNewUserData(dateList, dateType, beginDate, endDate, channel);
               JSONObject innerList = new JSONObject();
               innerList.put("name", channel);
               innerList.put("data", gson.toJson(list));
               line_list.add(innerList);
            }
         } else {
            List<Object> list = getNewUserData(dateList, dateType, beginDate, endDate, null);
            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")));
            }
            innerList.put("name", "全部");
            innerList.put("data", gson.toJson(list));
            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);
         data.put("xAxis_list", gson.toJson(dateList));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作异常"));
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("系统异常"));
         e.printStackTrace();
      }
   }
   private List<Object> getNewUserData(List<String> dateList, Integer dateType, Date beginDate, Date endDate, String channel) {
      List<Object> list = new ArrayList<>();
      List<CountUserInfo> listHistory = userInfoCountService.getNewUserData(beginDate, endDate, channel);
      for (String date: dateList) {
         int value = 0;
         if (listHistory != null) {
            for (CountUserInfo history: listHistory) {
               if (dateType == 1) {
                  String gernalTime = TimeUtil.getGernalTime(history.getDay().getTime());
                  if (gernalTime.equalsIgnoreCase(date)) {
                     value += history.getNum();
                     continue;
                  }
               } else if (dateType == 2){
                  String gernalTime = TimeUtil.getMonthOnlyMM(history.getDay());
                  if(gernalTime.startsWith("0")) {
                     gernalTime = gernalTime.substring(1, 2);
                  }
                  if (gernalTime.equalsIgnoreCase(date)) {
                     value +=  history.getNum();
                     continue;
                  }
               } else if (dateType == 3) {
                  String gernalTime = TimeUtil.getYearOnlyYYYY(history.getDay());
                  if (gernalTime.equalsIgnoreCase(date)) {
                     value +=  history.getNum();
                     continue;
                  }
               }
            }
         }
         list.add(value + "");
      }
      return list;
   }
   /**
@@ -1159,7 +1080,7 @@
         JSONArray line_list = new JSONArray();
         for (String channel : channelList) {
            List<Map<String, Object>> list = userInfoCountService.getTodayBuyRate(channel, dateType, year,
            List<ChartTDO> list = userInfoCountService.getTodayBuyRate(channel, dateType, year,
                  startTime, endTime);
            if ("all".equalsIgnoreCase(channel)) {
@@ -1273,33 +1194,260 @@
   }
   
   /**
    * 用户账号- 封禁/解封
    * 获取金币排行榜
    * @param callback
    * @param code
    * @param type 1("微信unionId"), 2("淘宝ID"), 3("手机号"), 4("支付宝账号");
    * @param pageIndex
    * @param pageSize
    * @param type
    * @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) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("参数不能为空"));
         }
         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("操作异常"));
   @RequestMapping(value = "getGoldTop")
   public void getGoldTop(String callback, Integer pageIndex, Integer pageSize, Integer type, String key,
         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(key);
         list = userInfoCountService.listByHasGoldCoin((pageIndex - 1) * pageSize, pageSize, key);
      } else if (type == 1 || type == 2) {
         count = userInfoCountService.countByUserGoldCoin(type, key);
         list = userInfoCountService.listByUserGoldCoin((pageIndex - 1) * pageSize, pageSize, type, key);
      }
      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));
   }
   
   /**
    * 计当天活跃用户中有多少个用户是90天前才活跃过,期间从未活跃的用户数量
    * @param callback
    * @param dateType
    * @param year
    * @param startTime
    * @param endTime
    * @param out
    */
   @RequestMapping(value = "getUserActiveCharts")
   public void getUserActiveCharts(String callback, Integer dateType, String year, String startTime,
         String endTime, PrintWriter out){
      try {
         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;
         }
         Date beginDate = null;
         Date endDate = null;
         if (dateType == 1) {
            beginDate = TimeUtil.parse(startTime);
            endDate = TimeUtil.parse(endTime);
         } else if (dateType == 2) {
            Calendar calendar=Calendar.getInstance();
            int currentYear = calendar.get(Calendar.YEAR);
            if (!StringUtil.isNullOrEmpty(year)) {
               currentYear = Integer.parseInt(year);
            }
            calendar.clear();
             calendar.set(Calendar.YEAR, currentYear);
             beginDate =calendar.getTime();
            calendar.clear();
            calendar.set(Calendar.YEAR, currentYear);
            calendar.roll(Calendar.DAY_OF_YEAR, -1);
            endDate=calendar.getTime();
         } else if (dateType == 3) {
            beginDate = TimeUtil.parse("2018-01-01");
            endDate = new Date();
         }
         Gson gson = new Gson();
         List<String> dateList = AdminUtils.getDateList(dateType, startTime, endTime, year);
         List<Object> list = new ArrayList<>();
         List<UserActiveNumHistory> listHistory = userActiveLogService.query(beginDate, endDate);
         for (String date: dateList) {
            ChartTDO chartTDO = new ChartTDO();
            chartTDO.setShowDate(date);
            int value = 0;
            if (listHistory != null) {
               for (UserActiveNumHistory history: listHistory) {
                  if (dateType == 1) {
                     String gernalTime = TimeUtil.getGernalTime(history.getDay().getTime());
                     if (gernalTime.equalsIgnoreCase(date)) {
                        value += history.getNum();
                        continue;
                     }
                  } else if (dateType == 2){
                     String gernalTime = TimeUtil.getMonthOnlyMM(history.getDay());
                     if(gernalTime.startsWith("0")) {
                        gernalTime = gernalTime.substring(1, 2);
                     }
                     if (gernalTime.equalsIgnoreCase(date)) {
                        value += history.getNum();
                        continue;
                     }
                  } else if (dateType == 3) {
                     String gernalTime = TimeUtil.getYearOnlyYYYY(history.getDay());
                     if (gernalTime.equalsIgnoreCase(date)) {
                        value += history.getNum();
                        continue;
                     }
                  }
               }
            }
            chartTDO.setShowValue(value + "");
            list.add(value + "");
         }
         JSONObject innerList = new JSONObject();
         innerList.put("name", "数量");
         innerList.put("data", gson.toJson(list));
         JSONArray line_list = new JSONArray();
         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 key 搜索:暂只提供uid
    * @param state 状态:
    * @param out
    */
   @RequestMapping(value = "queryVip")
   public void queryVip(String callback, Integer pageIndex, Integer pageSize, String key, Integer state, PrintWriter out) {
      try {
         List<UserVIPInfo> list = userVIPInfoService.listQuery(pageIndex, pageSize, key, state);
         if (list == null || list.size() == 0) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("暂无数据"));
            return;
         }
         long count = userVIPInfoService.countQuery(key, state);
         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.setDateFormat("yyyy/MM/dd HH:mm:ss").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) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作异常"));
         e.printStackTrace();
      }
   }
   /**
    * 超级会员升级通过
    * @param callback
    * @param id
    * @param out
    * @param request
    */
   @RequestSerializableByKey(key = "'passVIP-' +#id")
   @RequestMapping(value = "passVIP")
   public void passVIP(String callback, Long id,  PrintWriter out, HttpServletRequest request) {
      try {
         /* 检验是否登陆 */
         AdminUser admin = (AdminUser) request.getSession().getAttribute(Constant.SESSION_ADMIN);
         if (admin == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("当前账户失效,请重新登陆。"));
            return;
         }
         userVIPInfoService.passVIPApply(id);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("操作成功"));
         LogHelper.userInfo("[ip:" + IPUtil.getRemotIP(request) + "]" + admin.getName() + "通过了[id=" + id + "]的升级超级会员申请!");
      } catch (UserVIPInfoException e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getMsg()));
         return;
      } catch (Exception e) {
         e.printStackTrace();
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作失败"));
         return;
      }
   }
   /**
    * 超级会员升级拒绝
    * @param callback
    * @param id
    * @param reason
    * @param out
    * @param request
    */
   @RequestMapping(value = "rejectVIP")
   public void rejectVIP(String callback, Long id, String reason, PrintWriter out,   HttpServletRequest request) {
      try {
         /* 检验是否登陆 */
         AdminUser admin = (AdminUser) request.getSession().getAttribute(Constant.SESSION_ADMIN);
         if (admin == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("当前账户失效,请重新登陆"));
            return;
         }
         userVIPInfoService.rejectVIPApply(id, reason);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("拒绝成功"));
         LogHelper.userInfo("[ip:" + IPUtil.getRemotIP(request) + "][管理员:" + admin.getName() + "] 拒绝提现id=" + id + "的升级超级会员申请不存在!");
      } catch (UserVIPInfoException e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getMsg()));
         return;
      } catch (Exception e) {
         e.printStackTrace();
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作失败"));
         return;
      }
   }
}