package com.sp2p.action.app; import java.io.IOException; import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.shove.Convert; import com.shove.config.AlipayConfig; import com.shove.data.DataException; import com.shove.security.Encrypt; import com.shove.util.ServletUtils; import com.shove.web.util.JSONUtils; import com.sp2p.action.front.FrontMyFinanceAction; import com.sp2p.constants.IConstants; import com.sp2p.service.HomeInfoSettingService; import com.sp2p.service.RechargeService; import com.sp2p.service.UserService; import com.sp2p.util.DateUtil; public class RechargeWithdrawAppAction extends BaseAppAction { private static final long serialVersionUID = -676064526203960258L; public static Log log = LogFactory.getLog(RechargeWithdrawAppAction.class); private RechargeService rechargeService; private HomeInfoSettingService homeInfoSettingService; private UserService userService; public String queryWithdraw() throws IOException { Map<String, Object> jsonMap = new HashMap<String, Object>(); try { Map<String, String> authMap = getAppAuthMap(); long userId = Convert.strToLong(authMap.get("uid"), -1); if (userId == -1) { jsonMap.put("error", "1"); jsonMap.put("msg", "用户不存在"); JSONUtils.printObject(jsonMap); return null; } Map<String, String> pmap = userService.queryPersonById(userId); if (pmap == null) { jsonMap.put("error", "2"); jsonMap.put("msg", "用户的个人信息未填写,无法申请提现"); JSONUtils.printObject(jsonMap); return null; } int authStep = Convert.strToInt(pmap.get("authStep"), -1);// 需要填写个人资料之后才能申请提现 // if (authStep < 2) { // jsonMap.put("error", "2"); // jsonMap.put("msg", "用户的个人信息未填写,无法申请提现"); // JSONUtils.printObject(jsonMap); // return null; // } // 需要加载信息 真实姓名 手机号码 帐户余额 可用余额 冻结总额 提现银行 String realName = pmap.get("realName"); int status = -1; String[] vals = moneyVal(userId); String bindingPhone = this.getBidingPhone(userId); if (StringUtils.isBlank(bindingPhone)) { jsonMap.put("error", "3"); jsonMap.put("msg", "手机号未设定"); JSONUtils.printObject(jsonMap); return null; } // 绑定的银行卡信息单独查询 List<Map<String, Object>> bankList = homeInfoSettingService .querySuccessBankInfoList(userId); if (bankList == null || bankList.size() == 0) { jsonMap.put("error", "4"); jsonMap.put("msg", "未添加银行卡信息"); JSONUtils.printObject(jsonMap); return null; } jsonMap.put("handleSum", vals[0]); jsonMap.put("usableSum", vals[1]); jsonMap.put("freezeSum", vals[2]); jsonMap.put("max_withdraw", IConstants.WITHDRAW_MAX);// 最大充值金额,超过之后要收取手续费 jsonMap.put("bankList", bankList); jsonMap.put("realName", realName); jsonMap.put("bindingPhone", bindingPhone); jsonMap.put("error", "-1"); jsonMap.put("msg", "成功"); JSONUtils.printObject(jsonMap); } catch (Exception e) { log.error(e); e.printStackTrace(); jsonMap.put("msg", "5"); jsonMap.put("msg", "未知异常"); JSONUtils.printObject(jsonMap); } return null; } private String getBidingPhone(long userId) throws DataException, SQLException { List<Map<String, Object>> lists = rechargeService.withdrawLoad(userId); String bindingPhone = null; int status = -1; String[] vals = moneyVal(userId); if (lists != null && lists.size() > 0) { if (lists.get(0).get("bindingPhone") != null) { bindingPhone = lists.get(0).get("bindingPhone").toString(); } if (lists.get(0).get("status") != null) { status = Convert.strToInt( lists.get(0).get("status").toString(), -1); } // 如果设置的绑定号码为空,或者绑定的手机号码还未审核通过 则都使用用户注册时的手机号码 if (bindingPhone == null || status != IConstants.PHONE_BINDING_ON) { bindingPhone = lists.get(0).get("cellPhone").toString(); } } return bindingPhone; } /** * 加载提现记录信息 * * @return * @throws DataException * @throws SQLException * @throws IOException */ public String queryWithdrawList() throws SQLException, DataException, IOException { Map<String, Object> jsonMap = new HashMap<String, Object>(); try { Map<String, String> authMap = getAppAuthMap(); long userId = Convert.strToLong(authMap.get("uid"), -1); if (userId == -1) { jsonMap.put("error", "1"); jsonMap.put("msg", "用户不存在"); JSONUtils.printObject(jsonMap); return null; } Map<String, String> appInfoMap = getAppInfoMap(); String startTime = ""; int months = Convert.strToInt(appInfoMap.get("months"), -1); if (months != -1) { Date endDate = DateUtil.dateAddMonth(new Date(), months); startTime = DateUtil.dateToString(endDate); } double money = Convert.strToDouble(appInfoMap.get("money"), -1); pageBean.setPageSize(15); rechargeService.queryWithdrawList(pageBean, userId, money, startTime); jsonMap.put("error", "-1"); jsonMap.put("msg", "成功"); jsonMap.put("pageBean", pageBean); JSONUtils.printObject(jsonMap); } catch (Exception e) { log.error(e); e.printStackTrace(); jsonMap.put("msg", "2"); jsonMap.put("msg", "未知异常"); JSONUtils.printObject(jsonMap); } return null; } public String addWithdraw() throws IOException { Map<String, Object> jsonMap = new HashMap<String, Object>(); try { Map<String, String> authMap = getAppAuthMap(); long userId = Convert.strToLong(authMap.get("uid"), -1); if (userId == -1) { jsonMap.put("error", "1"); jsonMap.put("msg", "用户不存在"); JSONUtils.printObject(jsonMap); return null; } Map<String, String> appInfoMap = getAppInfoMap(); String dealpwd = appInfoMap.get("dealpwd"); if (StringUtils.isBlank(dealpwd)) { jsonMap.put("error", "2"); jsonMap.put("msg", "提现密码不能为空"); JSONUtils.printObject(jsonMap); return null; } String code = appInfoMap.get("code"); if (StringUtils.isBlank(code)) { jsonMap.put("error", "3"); jsonMap.put("msg", "验证码不能为空"); JSONUtils.printObject(jsonMap); return null; } String randomCode = appInfoMap.get("randomCode"); if (!code.equals(Encrypt.decryptSES(randomCode, AlipayConfig.ses_key))) { jsonMap.put("error", "4"); jsonMap.put("msg", "验证码不正确"); JSONUtils.printObject(jsonMap); return null; } double money = Convert.strToDouble(appInfoMap.get("money"), 0.0); if (money < 0) { jsonMap.put("error", "5"); jsonMap.put("msg", "提现金额不能为空"); JSONUtils.printObject(jsonMap); return null; } long bankId = Convert.strToLong(appInfoMap.get("bankId"), -1); String cellPhone = appInfoMap.get("cellPhone"); if (bankId < 0) { jsonMap.put("error", "6"); jsonMap.put("msg", "银行卡不能为空"); JSONUtils.printObject(jsonMap); return null; } String recivePhone = appInfoMap.get("recivePhone"); String bindingPhone = this.getBidingPhone(userId); if (bindingPhone != null && !bindingPhone.equals(Encrypt.decryptSES(recivePhone, AlipayConfig.ses_key))) { jsonMap.put("error", "7"); jsonMap.put("msg", "绑定手机号跟接收验证码手机号不一致"); JSONUtils.printObject(jsonMap); return null; } Map<String, String> map = userService.queryUserById(userId); String userDealPwd = map.get("dealpwd"); if (userDealPwd == null) {// 如果用户没有设置提现密码,则默认为登录密码 userDealPwd = map.get("password"); } if (!dealpwd.equals(userDealPwd)) {// 提现密码错误 jsonMap.put("error", "8"); jsonMap.put("msg", "提现密码错误"); JSONUtils.printObject(jsonMap); return null; } // ------modify 2013-05-02 判断该用户所属的组是否能申请提现 Long toWithdraw = homeInfoSettingService.queryUserCashStatus( userId, IConstants.CASH_STATUS_OFF); if (toWithdraw <= 0) {// 该用户所属组的提现权利被限制 jsonMap.put("error", "9"); jsonMap.put("msg", "很抱歉,您暂时不能提现"); JSONUtils.printObject(jsonMap); return null; } // ---------- String cardNo = ""; Map<String, String> mp = homeInfoSettingService .queryBankInfoById(bankId); if (mp != null) { cardNo = mp.get("cardNo"); } long result = -1L; String username = map.get("username"); // ip地址 String ipAddress = ServletUtils.getRemortIp(); result = rechargeService.addWithdraw(userId, money, username, cellPhone, cardNo, bankId, ipAddress, money); if (result < 0) {// 提现失败 jsonMap.put("error", "10"); jsonMap.put("msg", "添加提现失败"); JSONUtils.printObject(jsonMap); } else { jsonMap.put("error", "-1"); jsonMap.put("msg", "添加提现成功"); JSONUtils.printObject(jsonMap); } } catch (Exception e) { log.error(e); e.printStackTrace(); jsonMap.put("error", "3"); jsonMap.put("msg", "未知异常"); JSONUtils.printObject(jsonMap); } return null; } public String deleteWithdraw() throws Exception { Map<String, Object> jsonMap = new HashMap<String, Object>(); try { Map<String, String> authMap = getAppAuthMap(); long userId = Convert.strToLong(authMap.get("uid"), -1); if (userId == -1) { jsonMap.put("error", "1"); jsonMap.put("msg", "用户不存在"); JSONUtils.printObject(jsonMap); return null; } Map<String, String> appInfoMap = getAppInfoMap(); long withDrawId = Convert.strToLong(appInfoMap.get("withDrawId"), -1); if (withDrawId < 0) { jsonMap.put("error", "2"); jsonMap.put("msg", "提现记录不存在"); JSONUtils.printObject(jsonMap); return null; } // 删除提现记录 Map<String, String> resultMap = rechargeService.deleteWithdraw(userId,withDrawId); long result = -1; result = Convert.strToLong(resultMap.get("ret"), -1); if (result < 0) { jsonMap.put("error", "3"); jsonMap.put("msg", "删除失败"); JSONUtils.printObject(jsonMap); return null; } else { jsonMap.put("error", "-1"); jsonMap.put("msg", "删除成功"); JSONUtils.printObject(jsonMap); return null; } } catch (Exception e) { log.error(e); e.printStackTrace(); jsonMap.put("error", "3"); jsonMap.put("msg", "未知异常"); JSONUtils.printObject(jsonMap); } return null; } public String queryFundsRecodeList() throws SQLException, DataException, IOException { Map<String, Object> jsonMap = new HashMap<String, Object>(); try { Map<String, String> authMap = getAppAuthMap(); long userId = Convert.strToLong(authMap.get("uid"), -1); if (userId == -1) { jsonMap.put("error", "1"); jsonMap.put("msg", "用户不存在"); JSONUtils.printObject(jsonMap); return null; } Map<String, String> appInfoMap = getAppInfoMap(); String startTime = ""; int days = Convert.strToInt(appInfoMap.get("days"), -1); if (days != -1) { Date endDate = DateUtil.dateAddDay(new Date(), days); startTime = DateUtil.dateToString(endDate); } pageBean.setPageSize(IConstants.PAGE_SIZE_6); rechargeService.queryFundrecordsList(pageBean, userId, startTime, ""); String[] vals = fundVal(userId); jsonMap.put("handleSum", vals[0]); jsonMap.put("usableSum", vals[1]); jsonMap.put("freezeSum", vals[2]); jsonMap.put("pageBean", pageBean); jsonMap.put("error", "-1"); jsonMap.put("msg", "成功"); JSONUtils.printObject(jsonMap); } catch (Exception e) { log.error(e); e.printStackTrace(); jsonMap.put("error", "5"); jsonMap.put("msg", "未知异常"); JSONUtils.printObject(jsonMap); } return null; } private String[] fundVal(long userId) throws DataException, SQLException { String[] val = new String[3]; for (int i = 0; i < val.length; i++) { val[i] = "0"; } try { Map<String, String> map = rechargeService.queryFund(userId); if (map != null) { double usableSum = Convert.strToDouble(map.get("usableSum"), 0); double freezeSum = Convert.strToDouble(map.get("freezeSum"), 0); double dueinSum = Convert.strToDouble(map.get("forPI"), 0); double handleSum = usableSum + freezeSum + dueinSum; val[0] = String.format("%.2f", handleSum); val[1] = String.format("%.2f", usableSum); val[2] = String.format("%.2f", freezeSum); } } catch (DataException e) { log.error(e); e.printStackTrace(); throw e; } catch (SQLException e) { log.error(e); e.printStackTrace(); throw e; } return val; } private String[] moneyVal(long userId) throws DataException, SQLException { String[] val = new String[3]; for (int i = 0; i < val.length; i++) { val[i] = "0"; } try { Map<String, String> map = userService.queryUserById(userId); if (map != null) { double usableSum = Convert.strToDouble(map.get("usableSum"), 0); double freezeSum = Convert.strToDouble(map.get("freezeSum"), 0); double handleSum = usableSum + freezeSum; val[0] = String.format("%.2f", handleSum);// df.format(handleSum); val[1] = String.format("%.2f", usableSum);// df.format(usableSum); val[2] = String.format("%.2f", freezeSum);// df.format(freezeSum); } } catch (SQLException e) { log.error(e); e.printStackTrace(); throw e; } return val; } public void setRechargeService(RechargeService rechargeService) { this.rechargeService = rechargeService; } public void setHomeInfoSettingService( HomeInfoSettingService homeInfoSettingService) { this.homeInfoSettingService = homeInfoSettingService; } public void setUserService(UserService userService) { this.userService = userService; } }