package com.sp2p.action.front;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.sf.json.JSONObject;
import org.json.simple.JSONArray;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.shove.Convert;
import com.shove.data.DataException;
import com.shove.util.JSONUtils;
import com.shove.util.SqlInfusion;
import com.sp2p.service.FinanceToolsService;
/**
* @ClassName: FinanceToolsAction.java
* @Author: li.hou
* @Descrb: 我要理财,工具箱
*/
public class FinanceToolsAction extends BaseFrontAction {
protected Map<String, String> paramMap = new HashMap<String, String>();
public Map<String, String> getParamMap() {
return paramMap;
}
public void setParamMap(Map<String, String> paramMap) {
this.paramMap = paramMap;
}
public static Log log = LogFactory.getLog(FrontMyFinanceAction.class);
private static final long serialVersionUID = 1L;
private FinanceToolsService financeToolsService;
/**
* 天标计算
*/
public String toolsCalculateDay() throws Exception{
double borrowSum = Convert.strToDouble(paramMap.get("borrowSum"), -1);
double yearRate = Convert.strToFloat(paramMap.get("yearRate"), -1);//接收百分比
int borrowTime = Convert.strToInt(paramMap.get("borrowTime"), -1);//接收的数字是月
if(yearRate < 0.00001){
JSONUtils.printStr("2");
return null;
}
try{
double yearRateVal = yearRate*1.0f/100;
Map<String, Object> map = financeToolsService.rateCalculateDay(borrowSum, yearRateVal, borrowTime);
if(map == null){
JSONUtils.printStr("1");
return null;
}
JSONObject object = new JSONObject();
object.put("map", map);
JSONUtils.printObject(object);
}catch(Exception e){
e.printStackTrace();
}
return null;
}
/**
* 工具箱,利息计算器
* @return
* @throws Exception
*/
public String toolsCalculate() throws Exception{
double borrowSum = Convert.strToDouble(paramMap.get("borrowSum"), -1);
double yearRate = Convert.strToFloat(paramMap.get("yearRate"), -1);//接收百分比
int borrowTime = Convert.strToInt(paramMap.get("borrowTime"), -1);//接收的数字是月
int repayWay = Convert.strToInt(paramMap.get("repayWay"), -1);//还款方式
if(yearRate < 0.00001){
JSONUtils.printStr("2");
return null;
}
double yearRateVal = yearRate*1.0f/100;
List<Map<String, Object>> lists = null;
if(repayWay == 0){//等额本金 合和年还款方式 (下拉框的下标从0开始)
lists = financeToolsService.rateCalculateHHN(borrowSum, yearRateVal, borrowTime);
}else if(repayWay == 1){//按月还款
lists = financeToolsService.rateCalculate2Month(borrowSum, yearRateVal, borrowTime);
}else{//先息后本
lists = financeToolsService.rateCalculate2Sum(borrowSum, yearRateVal, borrowTime);
}
if(lists == null){
JSONUtils.printStr("1");
return null;
}
String jsonStr = JSONArray.toJSONString(lists);
JSONUtils.printStr(jsonStr);
return null;
}
/**
* 收益计算器
* @return
* @throws Exception
*/
public String incomeCalculate() throws Exception{
double borrowSum = Convert.strToDouble(paramMap.get("borrowSum"), -1);
double yearRate = Convert.strToDouble(paramMap.get("yearRate"), -1);//接收百分比
int borrowTime = Convert.strToInt(paramMap.get("borrowTime"), -1);//接收的数字是月
int repayWay = Convert.strToInt(paramMap.get("repayWay"), -1);//还款方式
double bidReward = Convert.strToDouble(paramMap.get("bidReward"), 0);
double bidRewardMoney = Convert.strToDouble(paramMap.get("bidRewardMoney"), 0);
if(yearRate < 0.00001){
JSONUtils.printStr("2");
return null;
}
double yearRateVal = yearRate*1.0f/100;
List<Map<String, Object>> lists = null;
if(repayWay == 0){//按月还款 (下拉框的下标从0开始)
lists = financeToolsService.rateIncome2Month(borrowSum, yearRateVal, borrowTime,bidReward,bidRewardMoney);
}else if (repayWay == 1){//先息后本
lists = financeToolsService.rateIncome2Sum(borrowSum, yearRateVal, borrowTime,bidReward,bidRewardMoney);
}
if(lists == null){
JSONUtils.printStr("1");
return null;
}
String jsonStr = JSONArray.toJSONString(lists);
JSONUtils.printStr(jsonStr);
return null;
}
/**
* 手机归属地查询
*/
public String queryPhoneInfo() throws Exception{
String address = "";
try{
String mobile = Convert.strToStr(SqlInfusion.FilteSqlInfusion(paramMap.get("phoneNum")), null);
if(mobile == null){
getOut().print("请输入手机号码进行查询");
return null;
}
//手机号码验证
Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");
Matcher m = p.matcher(mobile);
if(!m.matches()){
getOut().print("请输入正确的手机号码进行查询");
return null;
}
String url = "http://www.youdao.com/smartresult-xml/search.s?jsFlag=true&keyfrom=163.com&event=fYodaoCallBack&type=mobile&q=" + mobile;
address = getLocation(url);
}catch(Exception e){
address = "未知";
}
getOut().print(address);
return null;
}
/**
* 手机归属地查询
* @param phoneNumber
* @return
* @throws Exception
*/
// public String queryPhoneInfo() throws Exception {
// String phoneNumber = Convert.strToStr(paramMap.get("phoneNum"), null);
// if(phoneNumber == null){
// getOut().print("请输入手机号码进行查询|false");
// return null;
// }
// //手机号码验证
// Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");
// Matcher m = p.matcher(phoneNumber);
// if(!m.matches()){
// getOut().print("请输入正确的手机号码进行查询|false");
// return null;
// }
//
// getOut().print("http://www.yodao.com/smartresult-xml/search.s?type=mobile&q="+phoneNumber+"|true");
//
// return null;
// /*Map<String,String> map = financeToolsService.getPhoneNumInfo(phoneNumber);
// if(map == null){
// getOut().print("暂无该手机号码信息");
// return null;
// }
// String str = "归属地:"+map.get("province")+" 卡类型:"+map.get("cardType")+" 区号:"
// +map.get("areaCode")+" 邮编:"+map.get("postCode");
// getOut().print(str);
// return null;*/
// }
/**
* ip地址查询
*/
public String queryIPInfo() throws Exception{
String address = "";
try{
String ipAddr = Convert.strToStr(paramMap.get("ipAddress"), null);
if(ipAddr == null){
getOut().print("请输入IP进行查询");
return null;
}
//手机号码验证
Pattern p = Pattern.compile("\\b((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\." +
"((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\." +
"((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\b");
Matcher m = p.matcher(ipAddr);
if(!m.matches()){
getOut().print("请输入正确的IP地址进行查询");
return null;
}
String url = "http://www.youdao.com/smartresult-xml/search.s?jsFlag=true&keyfrom=163.com&" +
"event=fYodaoCallBack&type=ip&q="+ipAddr;
address = getLocation(url);
}catch(Exception e){
address = "未知";
}
getOut().print(address);
return null;
}
/**
* 解析url返回的文件,获得值
* @param url
* @return
* @throws Exception
*/
private String getLocation(String url) throws Exception{
String address = "";
URLConnection connection = (URLConnection) new URL(url).openConnection();
connection.setDoOutput(true);
InputStream os = connection.getInputStream();
Thread.sleep(100);
int length = os.available();
byte[] buff = new byte[length];
os.read(buff);
String s = new String(buff, "gbk");
//返回数据fYodaoCallBack(1, {‘product’:'ip’,'ip’:’192.168.1.1′,’location’:'局域网 对方和您在同一内部网’} , ”);
int len = s.lastIndexOf(":");
s = s.substring(len+2);
int endLen = s.lastIndexOf("}");
s = s.substring(0,endLen -1);
address = s;
s = null;
buff = null;
os.close();
connection = null;
return address;
}
/**
* ip地址查询
* @return
* @throws Exception
*/
/*public String queryIPInfo() throws Exception {
String ipAddr = Convert.strToStr(paramMap.get("ipAddress"), null);
if(ipAddr == null){
getOut().print("请输入IP进行查询|false");
return null;
}
//手机号码验证
Pattern p = Pattern.compile("\\b((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\." +
"((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\." +
"((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\b");
Matcher m = p.matcher(ipAddr);
if(!m.matches()){
getOut().print("请输入正确的IP地址进行查询|false");
return null;
}
getOut().print("http://www.yodao.com/smartresult-xml/search.s?type=ip&q="+ipAddr+"|true");
return null;
}*/
public String howToFinanceInit() throws SQLException, DataException{
/**
* 初始化 从bt_config表中加载静态内容
*/
List<Map<String,Object>> map = financeToolsService.queryConfigList();
if(map != null){
request().setAttribute("name", map.get(0).get("name"));
request().setAttribute("var", map.get(0).get("var"));
}
return SUCCESS;
}
public FinanceToolsService getFinanceToolsService() {
return financeToolsService;
}
public void setFinanceToolsService(FinanceToolsService financeToolsService) {
this.financeToolsService = financeToolsService;
}
}