package com.sp2p.action.admin;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import com.shove.Convert;
import com.shove.config.ChinaPnrConfig;
import com.shove.util.JSONUtils;
import com.shove.web.action.BasePageAction;
import com.shove.web.action.ChinaPnrmentAction;
import com.shove.web.util.ExcelUtils;
import com.sp2p.constants.IConstants;
import com.sp2p.entity.Admin;
import com.sp2p.service.admin.merService;
import com.sp2p.util.ChinaPnRInterface;
import com.sp2p.util.DateUtil;
/**
* 汇付商户管理action类
*/
@SuppressWarnings({ "serial", "unchecked" })
public class merAction extends BasePageAction {
private merService merService;
public void setMerService(merService merService) {
this.merService = merService;
}
/** 充值初始化(专属户) */
public String merRechargeInit() {
return SUCCESS;
}
/** 提交充值(专属户) */
public String merRecharge() throws Exception {
double amount = Convert.strToDouble(request("amount"), -1);
String subAcct = Convert.strToStr(request("subAcct"), "");
String cardDcFlag = Convert.strToStr(request("cardDcFlag"), null);
if (!"cfb".equals(subAcct)) {
JSONUtils.printStr2("目前只支持彩付宝专属户充值");
return null;
}
if (amount <= 0) {
JSONUtils.printStr2("充值金额错误");
return null;
}
if (cardDcFlag == null) {
JSONUtils.printStr2("请选择银行卡类型");
return null;
}
subAcct = ChinaPnrConfig.chinapnr_cfb;
String html = merService.merRecharge(subAcct, amount, cardDcFlag);
sendHtml(html);
return null;
}
/**
* 子账户转账初始化
*
* @return
* @throws Exception
* [参数说明]
*/
public String merRechargeIndex() throws Exception {
JSONObject json = JSONObject.fromObject(ChinaPnRInterface.queryAccts());
JSONArray js = json.getJSONArray("AcctDetails");
List<Map<String, String>> bean = new ArrayList<Map<String, String>>();
Map<String, String> map = null;
for (int i = 0; i < js.size(); i++) {
JSONObject j = js.getJSONObject(i);
map = new HashMap<String, String>();
map.put("SubAcctId", j.getString("SubAcctId"));// 子账户
map.put("AcctBal", j.getString("AcctBal"));// 账户余额
map.put("FrzBal", j.getString("FrzBal"));// 冻结
map.put("AvlBal", j.getString("AvlBal"));// 可用
bean.add(map);
}
request().setAttribute("bean", bean);
return SUCCESS;
}
/**
* 子账户转账
*
* @return
* @throws Exception
* [参数说明]
*
* @return String [返回类型说明]
* @exception throws [违例类型] [违例说明]
* @see [类、类#方法、类#成员]
*/
public String merRechargeTransfer() throws Exception {
double amount = Convert.strToDouble(request("amount"), -1);
String outSubAcct = Convert.strToStr(request("outSubAcct"), "");
String inSubAcct = Convert.strToStr(request("inSubAcct"), "");
Admin admin = (Admin) session("admin");
if (amount <= 0) {
JSONUtils.printStr2("充值金额错误");
return null;
}
if (outSubAcct == null || outSubAcct.equals("")) {
JSONUtils.printStr2("请选择转出账户");
return null;
}
if (inSubAcct == null || inSubAcct.equals("")) {
JSONUtils.printStr2("请选择入出账户");
return null;
}
if (outSubAcct == inSubAcct || outSubAcct.equals(inSubAcct)) {
JSONUtils.printStr2("转入与转出子账户一致");
return null;
}
String html = merService.merRechargeTransfer(admin.getId(), amount, outSubAcct, inSubAcct);
JSONUtils.printStr2(html);
return null;
}
/** 充值记录 */
public String queryMerRechargeList() throws Exception {
String start = Convert.strToStr(request("start"), null);
String end = Convert.strToStr(request("end"), null);
request().setAttribute("start", start);
request().setAttribute("end", end);
int num = Convert.strToInt(request("num"), 1);
pageBean.setPageNum(num);
merService.queryMerRechargeList(pageBean, start, end);
int pageNum = (int) (pageBean.getPageNum() - 1) * pageBean.getPageSize();
request().setAttribute("pageNum", pageNum);
return SUCCESS;
}
/**
* 交易状态初始化
*/
public String queryTransStatusIndex() {
return SUCCESS;
}
/**
* 订单号初始化
*/
public String queryTransStatusListIndex() {
return SUCCESS;
}
/**
* 查询订单号
*
* @return
* @throws Exception
* [参数说明]
*/
public String queryOrdidList() throws Exception {
String userName = Convert.strToStr(request("userName"), null);
String startTime = Convert.strToStr(request("startTime"), null);
String endTime = Convert.strToStr(request("endTime"), null);
String queryTrade = Convert.strToStr(request("queryTrade"), null);
// if(userName == null)
// {
// JSONUtils.printStr("请输入用户名!");
// return null;
// }
// if(startTime == null)
// {
// JSONUtils.printStr("请选择开始时间!");
// return null;
// }
// if(endTime == null)
// {
// JSONUtils.printStr("请选择结束时间!");
// return null;
// }
// if(queryTrade == null)
// {
// JSONUtils.printStr("请选择交易类型!");
// return null;
// }
request().setAttribute("startTime", startTime);
request().setAttribute("queryTrade", queryTrade);
int num = Convert.strToInt(request("num"), 1);
pageBean.setPageNum(num);
List<Map<String, Object>> map = merService.queryOrdIdList(userName, startTime, endTime, queryTrade);
pageBean.setPage(map);
int pageNum = (int) (pageBean.getPageNum() - 1) * pageBean.getPageSize();
request().setAttribute("pageNum", pageNum);
this.setRequestToParamMap();
return SUCCESS;
}
/**
* 汇付查询交易状态
*
* @return
* @throws Exception
* [参数说明]
*/
public String queryTransStatus() throws Exception {
String ordId = Convert.strToStr(paramMap.get("ordId"), null);
String startTime = Convert.strToStr(paramMap.get("startTime"), null);
String queryTrade = Convert.strToStr(paramMap.get("queryTrade"), null);
if (ordId == null || startTime == null || queryTrade == null) {
JSONUtils.printStr2("系统异常!");
return null;
}
startTime = startTime.replaceAll("-", "");
try {
String json = merService.queryTransStatus(ordId, startTime, queryTrade);
JSONUtils.printStr2(json);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public String merCashCheck() {
return SUCCESS;
}
public String merRechargeCheck() {
return SUCCESS;
}
public String merInvestCheck() {
return SUCCESS;
}
public String merBackCheck() {
return SUCCESS;
}
/** 取现对账 */
public String merCashCheckList() throws Exception {
String beginDate = request("beginDate");
String endDate = request("endDate");
if (StringUtils.isBlank(beginDate) || StringUtils.isBlank(endDate)) {
JSONUtils.printStr2("请选择时间");
return null;
}
String pageNum = pageBean.getPageNum() + "";// 页数
String pageSize = "10";
JSONObject json = JSONObject.fromObject(ChinaPnRInterface.cashReconciliation(beginDate.replaceAll("-", ""), endDate.replaceAll("-", ""), pageSize, pageNum));
if (json.getInt("RespCode") != 0) {
JSONUtils.printStr2("失败: " + json.getString("RespDesc"));
return null;
}
try {
pageBean.setPage((List) json.get("CashReconciliationDtoList"));
merService.getUsernameByCustId(pageBean);
} catch (Exception e) {
e.printStackTrace();
}
pageBean.setTotalNum(json.getLong("TotalItems"));
int pagNum = (int) (pageBean.getPageNum() - 1) * pageBean.getPageSize();
request().setAttribute("pageNum", pagNum);
request().setAttribute("beginDate", beginDate);
request().setAttribute("endDate", endDate);
return SUCCESS;
}
/** 充值对账 */
public String merRechargeCheckList() throws Exception {
String beginDate = request("beginDate");
String endDate = request("endDate");
if (StringUtils.isBlank(beginDate) || StringUtils.isBlank(endDate)) {
JSONUtils.printStr2("请选择时间");
return null;
}
String pageNum = pageBean.getPageNum() + "";// 页数
String pageSize = "10";
JSONObject json = JSONObject.fromObject(ChinaPnRInterface.saveReconciliation(beginDate.replaceAll("-", ""), endDate.replaceAll("-", ""), pageSize, pageNum));
if (json.getInt("RespCode") != 0) {
JSONUtils.printStr2("失败: " + json.getString("RespDesc"));
return null;
}
try {
pageBean.setPage((List) json.get("SaveReconciliationDtoList"));
merService.getUsernameByCustId(pageBean);
} catch (Exception e) {
e.printStackTrace();
}
pageBean.setTotalNum(json.getLong("TotalItems"));
int pagNum = (int) (pageBean.getPageNum() - 1) * pageBean.getPageSize();
request().setAttribute("pageNum", pagNum);
request().setAttribute("beginDate", beginDate);
request().setAttribute("endDate", endDate);
return SUCCESS;
}
/** 投标对账 */
public String merInvestCheckList() throws Exception {
String beginDate = request("beginDate");
String endDate = request("endDate");
String type = request("type");// LOANS放款交易查询 REPAYMENT还款交易查询
if (StringUtils.isBlank(beginDate) || StringUtils.isBlank(endDate)) {
JSONUtils.printStr2("请选择时间");
return null;
}
if (StringUtils.isBlank(type)) {
JSONUtils.printStr2("请选择类型");
return null;
}
String pageNum = pageBean.getPageNum() + "";// 页数
String pageSize = "10";
JSONObject json = JSONObject.fromObject(ChinaPnRInterface.reconciliation(beginDate.replaceAll("-", ""), endDate.replaceAll("-", ""), pageSize, pageNum, type));
if (json.getInt("RespCode") != 0) {
JSONUtils.printStr2("失败: " + json.getString("RespDesc"));
return null;
}
try {
pageBean.setPage((List) json.get("ReconciliationDtoList"));
merService.getUsernameByCustId2(pageBean);
} catch (Exception e) {
e.printStackTrace();
}
pageBean.setTotalNum(json.getLong("TotalItems"));
int pagNum = (int) (pageBean.getPageNum() - 1) * pageBean.getPageSize();
request().setAttribute("pageNum", pagNum);
request().setAttribute("beginDate", beginDate);
request().setAttribute("endDate", endDate);
return SUCCESS;
}
/** 商户扣款对账 */
public String merBackCheckList() throws Exception {
String beginDate = request("beginDate");
String endDate = request("endDate");
if (StringUtils.isBlank(beginDate) || StringUtils.isBlank(endDate)) {
JSONUtils.printStr2("请选择时间");
return null;
}
String pageNum = pageBean.getPageNum() + "";// 页数
String pageSize = "10";
JSONObject json = JSONObject.fromObject(ChinaPnRInterface.trfReconciliation(beginDate.replaceAll("-", ""), endDate.replaceAll("-", ""), pageSize, pageNum));
if (json.getInt("RespCode") != 0) {
JSONUtils.printStr2("失败: " + json.getString("RespDesc"));
return null;
}
try {
pageBean.setPage((List) json.get("TrfReconciliationDtoList"));
merService.getUsernameByCustId(pageBean);
} catch (Exception e) {
e.printStackTrace();
}
pageBean.setTotalNum(json.getLong("TotalItems"));
int pagNum = (int) (pageBean.getPageNum() - 1) * pageBean.getPageSize();
request().setAttribute("pageNum", pagNum);
request().setAttribute("beginDate", beginDate);
request().setAttribute("endDate", endDate);
return SUCCESS;
}
/** 子账户取现初始化(专属户) */
public String cfbMerCashInit() {
return SUCCESS;
}
/** 提交取现(专属户) */
public String cfbMerCash() throws Exception {
double amount = Convert.strToDouble(request("amount"), -1);
String subAcct = Convert.strToStr(request("subAcct"), "");
// String cardDcFlag = Convert.strToStr(request("cardDcFlag"), null);
Admin admin = (Admin) session("admin");
if (!"cfb".equals(subAcct)) {
JSONUtils.printStr2("目前只支持彩付宝专属户取现");
return null;
}
if (amount <= 0) {
JSONUtils.printStr2("充值金额错误");
return null;
}
// subAcct = ChinaPnrConfig.chinapnr_cfb;
subAcct = ChinaPnrConfig.chinapnr_merCustId;
// if (cardDcFlag == null) {
// JSONUtils.printStr2("请选择银行卡类型");
// return null;
// }
String result = merService.addMerCash(amount, admin.getId() + "", admin.getId(), subAcct, admin.getUsrCustId());
JSONUtils.printStr2(result);
return null;
}
/**
*
* 查询子账户取现记录
*
* @return
* @throws Exception
* [参数说明]
*
*/
public String queryCfbMerCashList() throws Exception {
Admin admin = (Admin) session("admin");
List<Map<String, Object>> map = merService.queryCfbMerCashList(admin.getId());
pageBean.setPage(map);
int pageNum = (int) (pageBean.getPageNum() - 1) * pageBean.getPageSize();
request().setAttribute("pageNum", pageNum);
return SUCCESS;
}
/** 企业开户初始化 */
public String companyRegInit() throws Exception {
return SUCCESS;
}
/** 企业开户 */
public String companyReg() throws Exception {
String usrname = Convert.strToStr(request("usrname"), "");
String busiCode = Convert.strToStr(request("busiCode"), "");
if (StringUtils.isBlank(busiCode)) {
JSONUtils.printStr2("请填写营业执照编号");
return null;
}
if (StringUtils.isBlank(usrname)) {
JSONUtils.printStr2("请填写企业全称");
return null;
}
String guar = StringUtils.isBlank(Convert.strToStr(request("guar"), "")) ? "N" : "Y";
String usrId = merService.getUsrId(busiCode);// 企业开户和普通开户usrId一致.
if (StringUtils.isBlank(usrId)) {
JSONUtils.printStr2("数据库异常");
return null;
}
String html = ChinaPnRInterface.corpRegister(usrId, usrname, busiCode, guar);
sendHtml(html);
return null;
}
public String queryCompany() throws Exception {
String code = request("code");
JSONObject json = JSONObject.fromObject(ChinaPnRInterface.CorpRegisterQuery(code));
String ret = null;
if (json.getInt("RespCode") == 0) {
ret = ChinaPnrmentAction.auditStatMap.get(json.get("AuditStat"));
} else {
ret = json.getString("RespDesc");
}
JSONUtils.printStr2(ret);
return null;
}
/**
* 导出交易状态
*/
public String exportTransStatus() {
pageBean.pageNum = 1;
pageBean.setPageSize(100000);
try {
String userName = Convert.strToStr(request("userName"), null);
String startTime = Convert.strToStr(request("startTime"), null);
String endTime = Convert.strToStr(request("endTime"), null);
String queryTrade = Convert.strToStr(request("queryTrade"), null);
String status = request("status");
int num = Convert.strToInt(request("num"), 1);
pageBean.setPageNum(num);
List<Map<String, Object>> map = merService.queryOrdIdList(userName, startTime, endTime, queryTrade);
// 待还款详情
if (map == null || map.size() == 0) {
getOut().print("<script>alert(' 导出记录条数不能为空! ');window.history.go(-1);</script>");
return null;
}
if (status != "" && status != null) {
String[] strs = status.split(",");
for (int i = 0; i < strs.length; i++) {
Map<String, Object> map2 = map.get(i);
String str = new String(strs[i].getBytes("ISO8859-1"), "UTF-8");
map2.put("status", str);
}
}
if (map.size() > IConstants.EXCEL_MAX) {
getOut().print("<script>alert(' 导出记录条数不能大于50000条 ');window.history.go(-1);</script>");
return null;
}
HSSFWorkbook wb = ExcelUtils.exportExcel("交易状态", map, new String[] { "订单号", "用户名", "金额 ", "时间 ", "结果状态" }, new String[] { "ordId", "userName", "money", "time",
"status" });
this.export(wb, new Date().getTime() + ".xls");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/*** 企业信息 */
public String companyInfo() throws Exception {
Admin admin = (Admin) session().getAttribute(IConstants.SESSION_ADMIN);
long usrCustId = Convert.strToLong(admin.getUsrCustId(), 0);
Map<String, String> map = merService.queryCompanyInfo(usrCustId, pageBean);
if (map == null) {
JSONUtils.printStr2("<h2 style='color:red;width:400px;margin: 50 auto 50 auto;'>您不是企业用户!</h2>");
return null;
}
request().setAttribute("map", map);
return SUCCESS;
}
/*** 企业绑卡 */
public String bindCard() throws Exception {
Admin admin = (Admin) session().getAttribute(IConstants.SESSION_ADMIN);
long usrCustId = Convert.strToLong(admin.getUsrCustId(), -1);
if (usrCustId <= 0) {
JSONUtils.printStr2("您还不是汇付天下会员!");
return null;
}
String html = ChinaPnRInterface.userBindCard(usrCustId + "");
JSONUtils.printStr2(html);
return null;
}
/*** 企业充值 */
public String comRecharge() throws Exception {
Admin admin = (Admin) session().getAttribute(IConstants.SESSION_ADMIN);
if (admin == null) {// 未登陆
return IConstants.ADMIN_AJAX_LOGIN;
}
double money = Convert.strToDouble(request("money"), 0);
String DcFlag = Convert.strToStr(request("types"), null);
String usrCustId = admin.getUsrCustId();
if (!"D".equals(DcFlag) && !"C".equals(DcFlag)) {
JSONUtils.printStr2("参数非法!");
return null;
}
if (Convert.strToLong(usrCustId, -1) < 0) {
JSONUtils.printStr2("您还不是汇付天下会员!");
return null;
}
if (money <= 0) {
JSONUtils.printStr2("金额非法!");
return null;
}
String amount = new DecimalFormat("0.00").format(money);
String date = DateUtil.dateToYMD(new Date());
Map<String, String> result = merService.addRecharge(amount, usrCustId);
if (result == null) {
sendHtml("支付失败");
return null;
}
String userId = result.get("userId");
String html = ChinaPnRInterface.netSave("在线充值", result.get("ordId"), "", usrCustId, date, amount, "B2C", userId, ChinaPnrConfig.chinapnr_retUrl, DcFlag);// paymentId_orderId_userId:支付类型(在线支付/在线充值)_订单编号/_用户编号
sendHtml(html);
return null;
}
/*** 企业提现*/
public String comWithdraw() throws Exception {
Admin admin = (Admin) session().getAttribute(IConstants.SESSION_ADMIN);
if (admin == null) {// 未登陆
return IConstants.ADMIN_AJAX_LOGIN;
}
double money = Convert.strToDouble(request("money"), 0);
String usrCustId = admin.getUsrCustId();
if (Convert.strToLong(usrCustId, -1) < 0) {
JSONUtils.printStr2("您还不是汇付天下会员!");
return null;
}
if (money <= 0) {
JSONUtils.printStr2("金额非法!");
return null;
}
String amount = new DecimalFormat("0.00").format(money);
money = Double.valueOf(amount);
long ordId = merService.comWithdraw(money,usrCustId);
if (ordId <= 0) {
JSONUtils.printStr2("取现失败!");
return null;
}
String html = ChinaPnRInterface.cash(ordId+"", usrCustId, amount, "");
sendHtml(html);
return null;
}
}