%@ WebHandler Language="C#" Class="signIn" %>
using System;
using System.Web;
using eMIS.Data;
using System.Net;
using System.Data;
/*
* Create by cjx,2015-10-28
*
*/
public class signIn : IHttpHandler {
public void ProcessRequest(HttpContext context)
{
string loginid = context.Request["u"];
string jd = context.Request["jd"];
string wd = context.Request["wd"];
string bz = context.Request["bz"];
try
{
BaiduAddress address = Geocoding("gcj02ll", jd, wd);
double d1, d2;
if (!double.TryParse(jd, out d1) || !double.TryParse(wd, out d2))
{
throw new Exception(string.Format("获取的坐标不正确,请再试一次({0},{1})", jd, wd));
}
//可以透过代理服务器
string userIP = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (userIP == null || userIP == "")
{
//没有代理服务器,如果有代理服务器获取的是代理服务器的IP
userIP = context.Request.ServerVariables["REMOTE_ADDR"];
}
// throw new Exception(loginid + "|" + jd + "|" + wd + "|" + address.Address + "|" + address.Province + "|" + address.City + "|" + address.CityCode + "|" + bz + "|" + userIP);
ReportCoord(loginid, jd, wd, address.Address, address.Province, address.City, address.CityCode, bz, userIP);
context.Response.ContentType = "text/plain";
context.Response.Write("ok");
}
catch (Exception ex)
{
context.Response.ContentType = "text/plain";
context.Response.Write(ex.Message);
}
}
public bool IsReusable {
get {
return false;
}
}
public string ReportCoord(string userLogin, string longitude, string latitude, string address, string province, string city, string cityCode,string bz,string ip)
{
string sql = "";
eDbManager manager = new eDbManager(eMIS.Data.WebConfigManager.DefaultDb);
eDbOperator dbo = manager.CreateDbOperator();
string phone, userId,userType,xm,zgsid="28",sfzh;
try
{
int affectNum = dbo.ExecuteProcedure("p_wx_signIn", userLogin, longitude, latitude, address, province, city, cityCode, bz,ip);
return affectNum > 0 ? "ok" : "err";
sql = "select phone,id,xingming,USERCATEGORY,sfzh from com_yhb where login=?";
DataTable dTable = dbo.ExecuteTable(sql, CommandType.Text, userLogin);
if (dTable.Rows.Count > 0)
{
phone = Convert.ToString(dTable.Rows[0][0]).Trim().Substring(0,Math.Min(11,Convert.ToString(dTable.Rows[0][0]).Length));
userId = Convert.ToString(dTable.Rows[0][1]);
userType = Convert.ToString(dTable.Rows[0]["USERCATEGORY"]);
xm = Convert.ToString(dTable.Rows[0]["xingming"]);
sfzh = Convert.ToString(dTable.Rows[0]["sfzh"]);
dbo.BeginTrans();
sql = "insert into XT_Coord(phone,longitude,latitude,userid,address,province,city,city_code,bz) values(?,?,?,?,?,?,?,?,?)";
dbo.ExecuteNonQuery(sql, phone, longitude, latitude, userId, address, province, city, cityCode,bz);
sql = "update XT_Coord_RealTime set dt=?,longitude=?,latitude=?,phone=?,address=?,province=?,city=?,city_code=?, id_number=?,user_name=?,user_type=?,subco_id=28 where userid=?";
int r = dbo.ExecuteNonQuery(sql, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), longitude, latitude,
phone, address, province, city, cityCode,sfzh,xm,userType, userId);
if (r == 0)
{
sql = "insert into xt_coord_realtime(userid,longitude,latitude,phone,address,province,city,city_code,id_number,user_name,user_type,subco_id) values(?,?,?,?,?,?,?,?,?,?,?,?)";
dbo.ExecuteNonQuery(sql, userId, longitude, latitude, phone, address, province, city, cityCode, sfzh, xm, userType, 28);
}
dbo.CommitTrans();
}
return "ok";
}
catch (Exception ex)
{
// dbo.RollbackTrans();
//return ex.Message;
throw ex;
}
}
///
/// 通过经纬度获取地址、省市等
///
/// 包括:bd09ll(百度经纬度坐标)、gcj02ll(国测局经纬度坐标)、wgs84ll( GPS经纬度)
/// 经度
/// 纬度
private BaiduAddress Geocoding(string coordtype, string lng, string lat)
{
string url = "http://api.map.baidu.com/geocoder/v2/?ak=twibmGXUQR0KyWjCXQ7ElGAM&callback=renderReverse&location={0},{1}&output=xml&pois=0&coordtype={2}";
System.Net.HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(string.Format(url, lat, lng,coordtype));
request.Timeout = 5000;
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream());
// string xmlstr = sr.ReadToEnd();
System.Xml.XmlTextReader xmlReader = new System.Xml.XmlTextReader(sr);
BaiduAddress addr = new BaiduAddress();
while (xmlReader.Read())
{
if (xmlReader.IsStartElement())
{
switch (xmlReader.Name.ToLower())
{
case "formatted_address":
addr.Address = xmlReader.ReadString();
break;
case "city":
addr.City = xmlReader.ReadString();
break;
case "citycode":
addr.CityCode = xmlReader.ReadString();
break;
case "province":
addr.Province = xmlReader.ReadString();
break;
case "lat":
addr.Location.Latitude = xmlReader.ReadString();
break;
case "lng":
addr.Location.Longitude = xmlReader.ReadString();
break;
}
}
}
return addr;
}
class BaiduAddress
{
private LocationClass _location = new LocationClass();
public BaiduAddress()
{
_location = new LocationClass();
}
private string _address = string.Empty;
private string _province = string.Empty;
private string _city = string.Empty;
private string _cityCode = string.Empty;
public string Address { set { _address = value; } get { return _address; } }
public string Province { set { _province = value; } get { return _province; } }
public string City { set { _city = value; } get { return _city; } }
public string CityCode { set { _cityCode = value; } get { return _cityCode; } }
public LocationClass Location
{
get { return _location; }
}
public class LocationClass
{
private string _lng = string.Empty;
private string _lat = string.Empty;
public string Longitude { set { _lng = value; } get { return _lng; } }
public string Latitude { set { _lat = value; } get { return _lat; } }
}
}
}