admin
2019-05-16 4114e871bcb3dce771b6aed64a1027d0bbb95ca6
fanli/src/main/java/com/yeshi/fanli/controller/client/UserInfoController.java
@@ -1,5 +1,6 @@
package com.yeshi.fanli.controller.client;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.InvocationTargetException;
@@ -21,6 +22,7 @@
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
import org.yeshi.utils.HttpUtil;
import org.yeshi.utils.IPUtil;
import org.yeshi.utils.JsonUtil;
@@ -45,7 +47,6 @@
import com.yeshi.fanli.entity.bus.user.Extract;
import com.yeshi.fanli.entity.bus.user.ExtractRecord;
import com.yeshi.fanli.entity.bus.user.LostOrder;
import com.yeshi.fanli.entity.bus.user.PassWordErrorRecord;
import com.yeshi.fanli.entity.bus.user.SMSHistory;
import com.yeshi.fanli.entity.bus.user.ThreeSale;
import com.yeshi.fanli.entity.bus.user.ThreeSaleExtraInfo;
@@ -67,6 +68,7 @@
import com.yeshi.fanli.exception.taobao.TaoKeApiException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.exception.user.UserCustomSettingsException;
import com.yeshi.fanli.exception.user.UserInfoException;
import com.yeshi.fanli.exception.user.UserInfoExtraException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.AdminUserService;
@@ -86,7 +88,7 @@
import com.yeshi.fanli.service.inter.user.BindingAccountService;
import com.yeshi.fanli.service.inter.user.ExtractRecordService;
import com.yeshi.fanli.service.inter.user.ExtractService;
import com.yeshi.fanli.service.inter.user.PassWordErrorRecordService;
import com.yeshi.fanli.service.inter.user.MaskKeyService;
import com.yeshi.fanli.service.inter.user.ShamUserService;
import com.yeshi.fanli.service.inter.user.SpreadUserImgService;
import com.yeshi.fanli.service.inter.user.UserAccountService;
@@ -134,9 +136,6 @@
   @Resource
   private ExtractService extractService;
   @Resource
   private PassWordErrorRecordService passWordErrorRecordService;
   @Resource
   private ConfigService configService;
@@ -206,6 +205,10 @@
   @Resource
   private AccountMessageService accountMessageService;
   @Resource
   private MaskKeyService maskKeyService;
   private static final String PASSWORD_MAX_ERROR = "password_max_error";
   private static final String EXTRACT_MIN_MONEY = "extract_min_money";
@@ -578,10 +581,20 @@
      data.put("moduleState", mySettings);
      int welfareCenterNews = 0;
      String invitCode = null;
      UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(user.getId());
      if (userInfoExtra != null && userInfoExtra.getCouponNews() != null) {
         welfareCenterNews = userInfoExtra.getCouponNews();
      if (userInfoExtra != null) {
         if (userInfoExtra.getCouponNews() != null) {
            welfareCenterNews = userInfoExtra.getCouponNews();
         }
         if (userInfoExtra.getInviteCode() != null && userInfoExtra.getInviteCode().trim().length() > 0) {
            invitCode = userInfoExtra.getInviteCode();
         }
      }
      // 邀请码
      data.put("invitCode", invitCode);
      // 福利中心消息
      data.put("welfareCenterNews", welfareCenterNews);
      out.print(JsonUtil.loadTrueResult(data));
@@ -971,39 +984,6 @@
   }
   /**
    * 客户端提现密码输入错误时调用
    *
    * @param acceptData
    * @param uid
    *            用户id
    * @param out
    */
   @RequestMapping(value = "errormax", method = RequestMethod.POST)
   public void errorMax(AcceptData acceptData, long uid, PrintWriter out) {
      UserInfo user = userInfoService.getUserById(uid);
      if (user == null) {
         out.print(JsonUtil.loadFalseResult("用户不存在"));
         return;
      }
      PassWordErrorRecord record = passWordErrorRecordService.getRecord(user.getId());
      record.setUserInfo(user);
      String maxErrorStr = "5";
      maxErrorStr = configService.get(PASSWORD_MAX_ERROR); // 当日输错密码最多次数
      int maxError = Integer.parseInt(maxErrorStr);
      int count = passWordErrorRecordService.setRecord(record);
      JSONObject data = new JSONObject();
      int c = maxError - count;
      if (c <= 0) { // 当错误次数还未超过当日输错最多次数时,state为1,代表还能继续输入,little为剩余次数。state为2则不能继续输入,提现客户端退出输入密码界面
         data.put("state", "2");
         data.put("little", 0);
      } else {
         data.put("state", "1");
         data.put("little", c);
      }
      out.print(JsonUtil.loadTrueResult(data));
   }
   /**
    * 添加用户提现账号
    * 
    * @param acceptData
@@ -1076,109 +1056,6 @@
      data.put("count", deletecount);
      out.print(JsonUtil.loadTrueResult(data));
      return;
   }
   /**
    * 提现
    *
    * @param acceptData
    * @param uid
    *            用户id
    * @param money
    *            提现金额
    * @param pwd
    *            密码
    * @param request
    * @param type
    *            提现账户类型
    * @param out
    */
   @RequestMapping(value = "extractmoney", method = RequestMethod.POST)
   public void extractMoney(AcceptData acceptData, long uid, double money, String pwd, HttpServletRequest request,
         int type, PrintWriter out) {
      UserInfo user = userInfoService.getUserById(uid);
      LogHelper.userInfo("[ip:" + IPUtil.getRemotIP(request) + "]");
      if (user == null) {
         LogHelper.userInfo("不存在该用户:uid=" + uid);
         out.print(JsonUtil.loadFalseResult("用户不存在"));
         return;
      }
      BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(),
            acceptData.getPackages());
      if (system == null) {
         LogHelper.userInfo("提现时,不存在该系统");
         out.print(JsonUtil.loadFalseResult("系统不存在"));
         return;
      }
      PassWordErrorRecord record = passWordErrorRecordService.getRecord(user.getId());
      int errorcount = record.getCount();
      String maxStr = "5";
      maxStr = configService.get(PASSWORD_MAX_ERROR);
      int max = Integer.parseInt(maxStr);
      if (max <= errorcount) {
         LogHelper.userInfo("[ip:" + IPUtil.getRemotIP(request) + "]用户[" + GsonUtil.toJson(user) + "]:提现密码错误已达上限!");
         out.print(JsonUtil.loadFalseResult("提现密码已达到每日错误次数上限,请明日再试!"));
         return;
      }
      if (pwd == null || !pwd.equals(user.getPayPassword())) {
         passWordErrorRecordService.setRecord(record);
         out.print(JsonUtil.loadFalseResult("支付密码错误"));
         return;
      }
      passWordErrorRecordService.deleteRecord(uid);// 当提现密码输入正确时,清除当前用户的密码错误输入记录
      String minMoney = configService.get(EXTRACT_MIN_MONEY); // 单笔提现最小金额
      if (money < 0.1) { // 转帐到支付宝的最小金额
         out.print(JsonUtil.loadFalseResult("单笔提现金额需要大于:" + 0.1 + "元"));
         return;
      }
      double dminMoney = Double.parseDouble(minMoney);
      if (money < dminMoney) { // 后台设置的单笔转账的最小金额
         out.print(JsonUtil.loadFalseResult("单笔提现金额需要大于:" + dminMoney + "元"));
         return;
      }
      String maxMoney = configService.get(EXTRACT_MAX_MONEY); // 单笔提现最大金额
      double dmaxMoney = Double.parseDouble(maxMoney);
      if (dmaxMoney < money) { // 后台设置的单笔转账的最大金额
         out.print(JsonUtil.loadFalseResult("单笔提现金额多为:" + dmaxMoney + "元"));
         return;
      }
      if (type != Constant.ZHIFUBAO && type != Constant.WEIXIN) { // 提现类型必须是支付宝类型或者微信类型,目前(20170506)仅支持支付宝
         out.print(JsonUtil.loadFalseResult(Constant.NOTYPE));
         return;
      }
      BindingAccount bindingAccount = bindingAccountService.getBindingAccountByUidAndType(uid, type);
      if (bindingAccount == null) {
         out.print(JsonUtil.loadFalseResult(Constant.NOACCOUNT));
         return;
      }
      Extract extract = new Extract();
      extract.setIp(IPUtil.getRemotIP(request));
      extract.setAccount(bindingAccount.getAccount());
      extract.setName(bindingAccount.getName());
      extract.setMoney(new BigDecimal(String.valueOf(money)));
      extract.setUserInfo(user);
      extract.setExtractTime(java.lang.System.currentTimeMillis());
      extract.setType(type);
      extract.setState(0);
      extract.setSystem(system);
      Integer etype = extractService.addExtract(extract);
      if (etype == null) {
         out.print(JsonUtil.loadTrueResult("操作成功"));
         return;
      } else if (etype == 1 || etype == 2) {
         out.print(JsonUtil.loadFalseResult("已超过当日提现次数或提现金额"));
      } else if (etype == 3) {
         out.print(JsonUtil.loadFalseResult("提现金额大于我的红包"));
      }
   }
   /**
@@ -1286,13 +1163,17 @@
               } catch (UnsupportedEncodingException e) {
                  e.printStackTrace();
               }
               AdminUser adminUser = adminUserService.selectByPrimaryKey(4L);
               long[] targetUids = new long[] { 3L, 4L };
               Config config = configService.getConfig("extract_code_email_from");
               String[] sts = config.getValue().split(",");
               String account = sts[0];
               String pwd = sts[1];
               String msg = "提现审核链接:" + url;
               boolean isS = MailSenderUtil.sendEmail(adminUser.getEmail(), account, pwd, "有新的提现审核", msg);
               for (long adminId : targetUids) {
                  AdminUser adminUser = adminUserService.selectByPrimaryKey(adminId);
                  String msg = "提现审核链接:" + url;
                  boolean isS = MailSenderUtil.sendEmail(adminUser.getEmail(), account, pwd, "有新的提现审核", msg);
               }
            }
         });
         return;
@@ -1302,6 +1183,10 @@
         out.print(JsonUtil.loadFalseResult("已超过当日提现金额"));
      } else if (etype == 3) {
         out.print(JsonUtil.loadFalseResult("提现金额大于我的红包"));
      } else if (etype == 111) {
         out.print(JsonUtil.loadFalseResult("更换了手机号后7天内不允许提现"));
      } else if (etype == 110) {
         out.print(JsonUtil.loadFalseResult(Constant.znxConfig.getExtractWrongMsg()));
      }
   }
@@ -1716,9 +1601,9 @@
         JSONObject resultData = new JSONObject();
         if (type == 1) {
            resultData = threeSaleSerivce.getMyFirstTeam((page - 1) * pageSize, pageSize, uid);
            resultData = threeSaleSerivce.getMyFirstTeam((page - 1) * pageSize, pageSize, uid, null);
         } else if (type == 2) {
            resultData = threeSaleSerivce.getMySecondTeam((page - 1) * pageSize, pageSize, uid);
            resultData = threeSaleSerivce.getMySecondTeam((page - 1) * pageSize, pageSize, uid, null);
         }
         // 安卓系统返回所有数据
@@ -1776,6 +1661,78 @@
         e.printStackTrace();
      }
   }
   /**
    * 用户队员列表查询 1.5.3查询有效队员
    *
    * @param acceptData
    * @param id
    * @param out
    */
   @RequestMapping(value = "getMyTeamNew", method = RequestMethod.POST)
   public void getMyTeamNew(AcceptData acceptData, long page, long uid, long type, PrintWriter out) {
      try {
         int pageSize = Constant.PAGE_SIZE;
         JSONObject resultData = new JSONObject();
         if (type == 1) {
            resultData = threeSaleSerivce.getMyFirstTeam((page - 1) * pageSize, pageSize, uid, 1);
         } else if (type == 2) {
            resultData = threeSaleSerivce.getMySecondTeam((page - 1) * pageSize, pageSize, uid, 1);
         }
         // 安卓系统返回所有数据
         String platform = acceptData.getPlatform();
         if ("android".equalsIgnoreCase(platform)) {
            long firstTeam = threeSaleSerivce.countFirstTeam(uid, 1);
            long secondTeam = threeSaleSerivce.countSecondTeam(uid, 1);
            JSONObject bossData = null;
            ThreeSale threeSale = threeSaleSerivce.getMyBoss(uid);
            if (threeSale != null) {
               bossData = new JSONObject();
               UserInfo boss = threeSale.getBoss();
               if (boss != null) {
                  bossData.put("nickName", boss.getNickName());
                  bossData.put("portrait", boss.getPortrait());
               }
               SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
               Long createTime = threeSale.getCreateTime();
               Date inviteTime = new Date(createTime);
               bossData.put("inviteTime", "邀请时间: " + sdf.format(inviteTime));
            }
            String helpLink = configService.get("team_help_url");
            if (helpLink == null) {
               helpLink = "";
            }
            boolean hasCode = false;
            String inviteCode = userInfoExtraService.getUserInviteCode(uid);
            if (inviteCode != null && inviteCode.trim().length() > 0) {
               hasCode = true; // 已有邀请码
            } else {
               // 邀请激活链接
               resultData.put("activationlink", configService.get("invite_activation_url"));
            }
            resultData.put("hasCode", hasCode);
            resultData.put("helpLink", helpLink);
            resultData.put("firstTeam", firstTeam);
            resultData.put("secondTeam", secondTeam);
            resultData.put("boss", bossData);
         }
         out.print(JsonUtil.loadTrueResult(resultData));
      } catch (UserInfoExtraException e) {
         out.print(JsonUtil.loadFalseResult(e.getMsg()));
      } catch (Exception e) {
         out.print(JsonUtil.loadFalseResult("统计失败"));
         e.printStackTrace();
      }
   }
   /**
@@ -2049,4 +2006,232 @@
         e.printStackTrace();
      }
   }
   /**
    * 获取用户信息
    *
    * @param acceptData
    * @param form
    * @param requst
    * @param out
    */
   @RequestMapping(value = "getuserinfoNew", method = RequestMethod.POST)
   public void getuserinfoNew(AcceptData acceptData, Long uid, HttpServletRequest requst, PrintWriter out) {
      try {
         BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(),
               acceptData.getPackages());
         if (system == null) {
            out.print(JsonUtil.loadFalseResult("系统不存在"));
            return;
         }
         if (uid == null) {
            out.print(JsonUtil.loadFalseResult("请求参数为空"));
            return;
         }
         UserInfo userInfo = userInfoService.getUserInfo(uid);
         // 添加用户活跃记录
         UserActiveLog userActiveLog = new UserActiveLog();
         userActiveLog.setChannel(acceptData.getChannel());
         userActiveLog.setIp(requst.getRemoteHost());
         userActiveLog.setUid(userInfo.getId());
         userActiveLog.setVersionCode(acceptData.getVersion());
         userActiveLog.setOsVersion(acceptData.getOsVersion());
         userActiveLog.setDeviceType(acceptData.getDeviceType());
         userActiveLogService.addUserActiveLog(userActiveLog);
         // 处理用户信息
         outUserInfoHandle(userInfo);
         GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
         JSONObject data = new JSONObject();
         data.put("user", JsonUtil.getConvertBigDecimalToStringBuilder(gsonBuilder).create().toJson(userInfo));
         // 界面状态
         UserSettingsVO mySettings = null;
         try {
            mySettings = userCustomSettingsService.getMySettings(uid);
         } catch (UserCustomSettingsException e) {
            mySettings = new UserSettingsVO();
            e.printStackTrace();
         }
         if (mySettings.getCancelNotice() == null) {
            mySettings.setCancelNotice(0);
         }
         if (mySettings.getNoBonusCount() == null) {
            mySettings.setNoBonusCount(0);
         }
         if (mySettings.getNoNewsRedDot() == null) {
            mySettings.setNoNewsRedDot(0);
         }
         if (mySettings.getNoShareRecordAndStorage() == null) {
            mySettings.setNoShareRecordAndStorage(0);
         }
         if (mySettings.getNoInvitationBonus() == null) {
            mySettings.setNoInvitationBonus(0);
         }
         data.put("moduleState", mySettings);
         int welfareCenterNews = 0;
         String invitCode = null;
         UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
         if (userInfoExtra != null) {
            if (userInfoExtra.getCouponNews() != null) {
               welfareCenterNews = userInfoExtra.getCouponNews();
            }
            if (userInfoExtra.getInviteCode() != null && userInfoExtra.getInviteCode().trim().length() > 0) {
               invitCode = userInfoExtra.getInviteCode();
            }
            if (userInfoExtra.getUserRank() != null) {
               String picture = userInfoExtra.getUserRank().getPicture();
               String icon = userInfoExtra.getUserRank().getIcon();
               userInfo.setRankNamePicture(picture);
               userInfo.setRankIcon(icon);
            } else {
               userInfo.setRankNamePicture(null);
               userInfo.setRankIcon(null);
            }
         }
         data.put("invitCode", invitCode); // 邀请码
         data.put("welfareCenterNews", welfareCenterNews);// 福利中心消息
         out.print(JsonUtil.loadTrueResult(data));
         final UserInfo uuser = userInfo;
         ThreadUtil.run(new Runnable() {
            public void run() {
               try {
                  // 获取邀请码:若无邀请码且存在有效的队员关系 则自动生成邀请码
                  userInfoExtraService.getUserInviteCode(uuser.getId());
               } catch (UserInfoExtraException e) {
                  e.printStackTrace();
               }
               // 更新用户附加信息,老用户不存在的需要添加
               try {
                  userInfoExtraService.updateUserRankByUid(uuser.getId());
               } catch (UserInfoExtraException e) {
                  e.printStackTrace();
               }
            }
         });
      } catch (UserInfoException e) {
         out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
      } catch (Exception e) {
         out.print(JsonUtil.loadFalseResult("获取失败"));
         e.printStackTrace();
      }
   }
   private void outUserInfoHandle(UserInfo user) {
      // 红包处理
      user.setTotalHongBao(new BigDecimal(0));
      user.setNoOpenHongBao(new BigDecimal(0));
      user.setCanOpenHongBao(new BigDecimal(0));
      // 电话号码处理
      if (!StringUtil.isNullOrEmpty(user.getPhone())) {
         if (user.getPhone().length() > 5) {
            String phone = user.getPhone().substring(0, 3);
            phone += "******";
            phone += user.getPhone().substring(user.getPhone().length() - 2, user.getPhone().length());
            user.setPhone(phone);
         }
      }
      UserInfoExtraVO userInfoExtra = userInfoExtraService.getInfoExtraVOByUid(user.getId());
      if (userInfoExtra != null && userInfoExtra.getUserRank() != null) {
         String picture = userInfoExtra.getUserRank().getPicture();
         String icon = userInfoExtra.getUserRank().getIcon();
         user.setRankNamePicture(picture);
         user.setRankIcon(icon);
      }
   }
   /**
    * 用户更换头像
    * @param acceptData
    * @param fileList
    * @param uid
    * @param request
    * @param out
    */
   @RequestMapping(value = "uploadPortrait")
   public void uploadPortrait(AcceptData acceptData, MultipartFile file, Long uid, HttpServletRequest request, PrintWriter out) {
      try {
         if (uid == null) {
            out.print(JsonUtil.loadFalseResult("用户未登录"));
            return;
         }
         if (file == null) {
            out.print(JsonUtil.loadFalseResult("上传文件不能为空"));
            return;
         }
         long fileSize = file.getSize() / 1024 + 1;
         if (fileSize > 200) {
            out.print(JsonUtil.loadFalseResult("上传文件不能大于200kb"));
            return;
         }
         userInfoService.uploadPortrait(file, uid);
         out.print(JsonUtil.loadTrueResult("保存成功"));
      } catch (UserInfoException e) {
         out.print(JsonUtil.loadFalseResult(e.getMsg()));
         e.printStackTrace();
      } catch (IOException e) {
         out.print(JsonUtil.loadFalseResult("图片上传失败失败"));
         e.printStackTrace();
      } catch (Exception e) {
         out.print(JsonUtil.loadFalseResult("保存失败"));
         e.printStackTrace();
      }
   }
   /**
    * 更换昵称
    * @param acceptData
    * @param nickName
    * @param uid
    * @param out
    */
   @RequestMapping(value = "saveInfo")
   public void saveInfo(AcceptData acceptData, String nickName, Long uid, PrintWriter out) {
      try {
         if (uid == null) {
            out.print(JsonUtil.loadFalseResult("用户未登录"));
            return;
         }
         if (StringUtil.isNullOrEmpty(nickName)) {
            out.print(JsonUtil.loadFalseResult("昵称不能为空"));
            return;
         }
         if (nickName.length() > 200) {
            out.print(JsonUtil.loadFalseResult("昵称过长"));
            return;
         }
         if(maskKeyService.examineContent(nickName)) {
            out.print(JsonUtil.loadFalseResult("不能包含敏感词汇"));
            return;
         }
         userInfoService.saveUserInfo(nickName, uid);
         out.print(JsonUtil.loadTrueResult("保存成功"));
      } catch (UserInfoException e) {
         out.print(JsonUtil.loadFalseResult(e.getMsg()));
         e.printStackTrace();
      } catch (Exception e) {
         out.print(JsonUtil.loadFalseResult("保存失败"));
         e.printStackTrace();
      }
   }
}