package com.hehenian.web.view.trade.action;
import com.hehenian.biz.common.account.IUserService;
import com.hehenian.biz.common.account.dataobject.AccountUserDo;
import com.hehenian.biz.common.base.result.IResult;
import com.hehenian.biz.common.trade.INewRechargeService;
import com.hehenian.biz.common.trade.IParameterLogService;
import com.hehenian.biz.common.trade.dataobject.RechargeDo;
import com.hehenian.biz.common.trade.dataobject.ParameterLogDo.ParameterType;
import com.hehenian.web.base.action.BaseAction;
import com.hehenian.web.common.contant.WebConstants;
import com.hehenian.web.common.util.ServletUtils;
import com.sp2p.entity.User;
import net.sf.json.JSONObject;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* User: liuwtmf Date: 2014/9/24 Time: 11:25
*/
@Scope("prototype")
@Component("newRechargeAction")
public class NewRechargeAction extends BaseAction {
@Autowired
private INewRechargeService newRechargeService;
@Autowired
private IUserService accountUserService;
@Autowired
private IParameterLogService parameterLogService;
public void setAccountUserService(IUserService accountUserService) {
this.accountUserService = accountUserService;
}
public void setNewRechargeService(INewRechargeService newRechargeService) {
this.newRechargeService = newRechargeService;
}
public String addRecharge() {
AccountUserDo user = (AccountUserDo) session(WebConstants.SESSION_USER);
String openBankId = request("openBankId"); // 开户银行
String gateBusiId = request("gateBusiId"); // 支付网关
String money = request("money");
if (StringUtils.isBlank(money)) {// 判断是否为空
request().setAttribute(WebConstants.MESSAGE_KEY, "充值金额不能为空");
return "msg";
}
double amount = Double.parseDouble(money);
if (amount < 1) {
request().setAttribute(WebConstants.MESSAGE_KEY, "充值金额不能少于1元");
return "msg";
}
try {
amount = new DecimalFormat("0.00").parse(money).doubleValue();
} catch (ParseException e) {
e.printStackTrace();
}
RechargeDo rechargeDo = new RechargeDo();
rechargeDo.setResult(0);
rechargeDo.setBankName(openBankId);
rechargeDo.setRechargeMoney(amount);
rechargeDo.setRechargeTime(new Date());
rechargeDo.setUserId(user.getId());
rechargeDo.setGateBusiId(gateBusiId);
rechargeDo.setInfo("");
String type = request("type");
long ordId = getLongParam("ordId", 0);
if (StringUtils.isNotBlank(type) && ordId > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("type", type);// 给充值加上附加的信息 回调的时候 在进行相应的处理
// wyf表示是减免物业费的
jsonObject.put("id", ordId);
rechargeDo.setInfo(new String(Base64.encodeBase64(jsonObject.toString().getBytes())));
}
IResult<?> result = newRechargeService.addRecharge(rechargeDo);
// 发送请求到汇付
if (result != null && result.isSuccess()) {
String htmlText = (String) result.getModel();
ServletUtils.write(htmlText);
return null;
} else {
// ServletUtils.write(result.getErrorMessage());
request().setAttribute(WebConstants.MESSAGE_KEY, result.getErrorMessage());
return "msg";
}
}
public String addRechargeCallback() throws UnsupportedEncodingException {
ServletUtils.logRequestParameters();// 打印参数日志
parameterLogService.addParameterLog(ServletUtils.getRequestParameters(), ParameterType.RESP);
RechargeDo rechargeDo = new RechargeDo();
String respCode = request("RespCode");
if (Integer.parseInt(respCode) != 0) {
// 失败
ServletUtils.write(request("RespDesc"));
return null;
} else {
String merPriv = request("MerPriv");
double money = Double.parseDouble(request("TransAmt"));
int orderId = Integer.parseInt(request("OrdId"));
if (StringUtils.isNotBlank(merPriv)) {
String info = new String(Base64.decodeBase64(merPriv.getBytes()));
LOG.info("--------info:" + info);
rechargeDo.setInfo(info);
}
rechargeDo.setRechargeMoney(money);
rechargeDo.setId(orderId);
rechargeDo.setPaynumber(request("TrxId"));
rechargeDo.setBankName(request("GateBankId"));
rechargeDo.setGateBusiId(request("GateBusiId"));
rechargeDo.setCost(getDoubleParam("FeeAmt", 0));
IResult<?> result = newRechargeService.addRechargeCallback(rechargeDo);
if (result.isSuccess()) {
// ServletUtils.write("订单:RECV_ORD_ID_" + request("TrxId"));
request().setAttribute(WebConstants.MESSAGE_KEY, "充值成功");
return "msg";
} else {
request().setAttribute(WebConstants.MESSAGE_KEY, result.getErrorMessage());
return "msg";
}
}
}
}