/**
* @Project: hehenian-web Maven Webapp
* @Package com.hehenian.sevlet.financial
* @Title: EFinancialServlet.java
* @Description: 用于彩生活用户在购买定期理财,为线下打印纸质凭证提供数据
*
* @author: zhanbmf
* @date 2015-3-17 下午3:04:13
* @Copyright: HEHENIAN Co.,Ltd. All rights reserved.
* @version V1.0
*/
package com.hehenian.sevlet.financial;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.NumberUtils;
import org.apache.commons.lang.time.DateFormatUtils;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.hehenian.biz.common.account.IPersonService;
import com.hehenian.biz.common.trade.IInvestService;
import com.hehenian.biz.common.account.dataobject.PersonDo;
import com.hehenian.biz.common.activity.dataobject.ActivityConfig;
import com.hehenian.biz.common.util.DateUtil;
import com.hehenian.web.common.util.ServletUtils;
/**
*
* @author zhanbmf
*
*/
public class EFinancialServlet extends HttpServlet {
private static final long serialVersionUID = -2538133985634922067L;
private static IInvestService investService;
private static IPersonService personService;
private static ActivityConfig activityConfig;
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
if(investService == null || personService == null || activityConfig == null) {
ServletContext servletContext = config.getServletContext();
WebApplicationContext webApplicationContext = WebApplicationContextUtils
.getWebApplicationContext(servletContext);
AutowireCapableBeanFactory autowireCapableBeanFactory = webApplicationContext.getAutowireCapableBeanFactory();
investService = (IInvestService) autowireCapableBeanFactory.getBean("investService");
personService = (IPersonService) autowireCapableBeanFactory.getBean("personService");
activityConfig = (ActivityConfig) autowireCapableBeanFactory.getBean("activityConfig");
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
/**
* 返回请求结果
* code 结果返回码 -1异常 | 0 token无效| 1成功
* token 可检验数据是否被窜改
* data.orderNo 订单号
* data.transDate 购买时间
* data.transAmount 购买金额
* data.term 期数
* data.yearRate 年化收益率
* data.trueName 姓名
* data.idCard 身份证号
* data.mobile 手机号
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
String appKey = req.getParameter("appKey");
String token = req.getParameter("token");
int queryType = NumberUtils.toInt(req.getParameter("queryType"), -1);
String queryStr = req.getParameter("queryStr");
String beginDateStr = ObjectUtils.toString(req.getParameter("beginDate"));
String endDateStr = ObjectUtils.toString(req.getParameter("endDate"));
Date beginDate = DateUtil.strToYYMMDDDate(beginDateStr);
Date endDate = DateUtil.strToYYMMDDDate(endDateStr);
//校验token
String colorKey = activityConfig.getColorKey();
String appSecret = activityConfig.getColorSignSecret();
Map result = new HashMap();
result.put("code", -1);
result.put("token", DigestUtils.md5Hex(appSecret + "-1" + "null"));
result.put("data", null);
//参数校验
if(StringUtils.isBlank(appKey) || !appKey.equals(colorKey) || StringUtils.isBlank(token) ||
queryType < 0 || queryType > 2 || StringUtils.isBlank(queryStr) || beginDate == null ||
endDate == null || beginDate.compareTo(endDate) > 0) {
ServletUtils.write(JSONObject.fromObject(result).toString(), ServletUtils.RESP_CONTTYPE_JSON, resp);
return;
}
//会话标识校验(参数按照字典顺序排序,这里省去排序)
if(!token.equals(DigestUtils.md5Hex(appSecret + beginDateStr + endDateStr + queryStr + queryType))) {
result.put("code", 0);
result.put("token", DigestUtils.md5Hex(appSecret + "0" + "null"));
result.put("data", null);
ServletUtils.write(JSONObject.fromObject(result).toString(), ServletUtils.RESP_CONTTYPE_JSON, resp);
return;
}
PersonDo pd = null;
List<Map<String, Object>> list = null;
//0身份证号|1手机号|2订单号 身份证号or手机号转换成会员ID
if(queryType == 0) {
pd= personService.getByUserIdNo(queryStr);
}else if (queryType == 1) {
pd = personService.getByUserCellPhone(queryStr);
}else{
list = investService.getInvestDataForCSH(null, NumberUtils.toInt(queryStr, -1), beginDate, endDate);
if(list != null && list.size() > 0) {
pd = personService.getByUserId(((Integer)list.get(0).remove("userId")).longValue());
}
}
if(pd == null) {
ServletUtils.write(JSONObject.fromObject(result).toString(), ServletUtils.RESP_CONTTYPE_JSON, resp);
return;
}
if(list == null) {
list = investService.getInvestDataForCSH(pd.getUserId(), NumberUtils.toInt(queryStr, -1), beginDate, endDate);
}
if(list != null) {
for(int i=0; i<list.size(); i++) {
Map<String, Object> map = list.get(i);
map.put("trueName", pd.getRealName());
map.put("idCard", pd.getIdNo());
map.put("mobile", pd.getCellPhone());
map.put("transDate", DateFormatUtils.format((Date)map.get("transDate"), "yyyy-MM-dd HH:mm"));
if(map.get("cname") == null) {
map.put("cname", "null");
}
if(map.get("groupName") == null) {
map.put("groupName", "null");
}
}
}
result.put("code", 1);
result.put("token", DigestUtils.md5Hex(appSecret + "1" + JSONArray.fromObject(list).toString()));
result.put("data", list);
ServletUtils.write(JSONObject.fromObject(result).toString(), ServletUtils.RESP_CONTTYPE_JSON, resp);
return;
}
public static void main(String[] args) {
System.out.println(DigestUtils.md5Hex("PropertyActivity" + "2015-01-20" + "2015-04-19" + "13480864900" + "1"));
System.out.println(DigestUtils.md5Hex("%21%40%23JSD" + "2015-03-16" + "2015-04-19" + "8051" + "2"));
System.out.println(DigestUtils.md5Hex("%21%40%23JSD" + "2015-03-16" + "2015-04-19" + "127407" + "2"));
}
}