using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
using VRS.Util;
namespace VRS.Handler
{
///
/// 学员注册登录接口
///
public class User : BaseHandler, IHttpHandler
{
DataService.BLL.admin_user bll = new DataService.BLL.admin_user();
DataService.BLL.admin_log log = new DataService.BLL.admin_log();
DataService.BLL.pro_edition bll_edition = new DataService.BLL.pro_edition();
DataService.BLL.admin_unit bll_unit = new DataService.BLL.admin_unit();
DataService.BLL.admin_school bll_school = new DataService.BLL.admin_school();
DataService.BLL.pro_subject_batch_user bll_batch_user = new DataService.BLL.pro_subject_batch_user();
DataService.BLL.pro_exam_batch bll_exam_batch = new DataService.BLL.pro_exam_batch();
DataService.BLL.pro_examination bll_examination = new DataService.BLL.pro_examination();
DataService.BLL.pro_lianxi_batch bll_lianxi_batch = new DataService.BLL.pro_lianxi_batch();
DataService.BLL.base_config bll_base_config = new DataService.BLL.base_config();
DataService.BLL.pro_exam_batch_result bll_exam_batch_result = new DataService.BLL.pro_exam_batch_result();
public void ProcessRequest(HttpContext context)
{
//context.Response.ContentType = "text/plain";
baseContext = context;
context.Response.ContentType = "application/json";
CrossDomain();
if (null == context.Request["action"])
{
var result = GetResult(false, "缺少参数:action");
context.Response.Write(result);
context.Response.End();
}
string action = context.Request["action"];
switch (action)
{
//版本
case "version":
QueryVersion(context);
break;
//语言版本
case "lang":
QueryLang(context);
break;
//用户注册
case "reg":
RegUser(context);
break;
//用户登录
case "login":
LoginUser(context);
break;
//用户登录
case "ip":
QueryIP(context);
break;
//用户退出
case "exit":
ExitUser(context);
break;
//登录理论考试
case "logintheory":
LoginTheoryUser(context);
break;
//查询省
case "queryprovince":
QueryProvince(context);
break;
//查询市
case "querycity":
QueryCity(context);
break;
//查询单位
case "queryunit":
QueryUnit(context);
break;
//查询部门
case "querydepart":
QueryDepart(context);
break;
//登录理论考试
case "loginlianxi":
LoginLianxiBatch(context);
break;
default:
var result = GetResult(false, "方法名不存在:" + action);
context.Response.Write(result);
break;
}
}
public void QueryIP(HttpContext context)
{
var ip = "xxyy";
if (context.Request.Headers.AllKeys.Contains("X-Forwarded-For"))
{
ip = context.Request.Headers["X-Forwarded-For"];
// return forwardedFor.First().Split(',').First().Trim();
}
if (context.Request.Headers.AllKeys.Contains("X-Real-IP"))
{
ip = context.Request.Headers["X-Real-IP"];
// return forwardedFor.First().Split(',').First().Trim();
}
ip = context.Request.UserAgent;
var result = GetResult(true, ip);
context.Response.Write(result);
context.Response.End();
}
///
/// 查询语言
///
///
public void QueryLang(HttpContext context)
{
var model = bll_base_config.GetModelList("").FirstOrDefault();
var obj = new
{
show = model.show_lang_switch,
show_desc = "显示语言切换 1:是 、0:否",
default_lang = model.default_lang,
default_lang_desc = "默认语言 1 英文 0 中文"
};
var result = GetResult(true, obj);
context.Response.Write(result);
context.Response.End();
}
///
/// 查询版本
///
///
public void QueryVersion(HttpContext context)
{
/*
var version = new
{
version = 1.0,
downloadurl = "www.baidu.com"
};
var result = GetResult(true, version);
context.Response.Write(result);
context.Response.End();
*/
string type = context.Request["type"];
if (string.IsNullOrEmpty(type))
{
context.Response.Write(GetResult(false, "类型不能为空"));
context.Response.End();
}
var model = bll_edition.GetModelList(" type='" + type + "' order by `first` DESC , `second` DESC , `third` DESC limit 1");
if (model.Count >= 1)
{
var version = new
{
version = model[0].version_number,
downloadurl = model[0].url
};
var result = GetResult(true, version);
context.Response.Write(result);
context.Response.End();
}
else
{
var result = GetResult(false, "");
context.Response.Write(result);
context.Response.End();
}
}
///
/// 查询省
///
///
public void QueryProvince(HttpContext context)
{
DataService.BLL.admin_province bll = new DataService.BLL.admin_province();
var majors = bll.GetModelList("");
var result = GetResult(true, majors);
context.Response.Write(result);
context.Response.End();
}
///
/// 查询市
///
///
public void QueryCity(HttpContext context)
{
string province_id = context.Request["province_id"];
if (string.IsNullOrEmpty(province_id))
{
context.Response.Write(GetResult(false, "参数province_id不能为空"));
context.Response.End();
}
DataService.BLL.admin_city bll = new DataService.BLL.admin_city();
var majors = bll.GetModelList(string.Format(" province_id = '{0}' ", province_id));
var result = GetResult(true, majors);
context.Response.Write(result);
context.Response.End();
}
///
/// 查询单位
///
///
public void QueryUnit(HttpContext context)
{
string city_id = context.Request["city_id"];
if (string.IsNullOrEmpty(city_id))
{
context.Response.Write(GetResult(false, "参数city_id不能为空"));
context.Response.End();
}
DataService.BLL.admin_unit bll = new DataService.BLL.admin_unit();
var majors = bll.GetModelList(string.Format(" city_id = '{0}' ", city_id));
var result = GetResult(true, majors);
context.Response.Write(result);
context.Response.End();
}
///
/// 查询部门
///
///
public void QueryDepart(HttpContext context)
{
DataService.BLL.pro_type_manage bll = new DataService.BLL.pro_type_manage();
var majors = bll.GetModelList(string.Format(" parent_id = 'sign_dep' "));
List list_result = new List();
if (majors.Count > 0)
{
majors.ForEach(s => { list_result.Add(s.type_name); });
}
var result = GetResult(true, list_result.ToArray());
context.Response.Write(result);
context.Response.End();
/*
DataService.BLL.admin_user bll_sysuser = new DataService.BLL.admin_user();
var array = bll_sysuser.GetFieldValues("dep_name");
var result = GetResult(true, array.ToArray());
context.Response.Write(result);
context.Response.End();
*/
}
///
///
///
///
public void QueryUser(HttpContext context)
{
var ret = string.Empty;
var id_card = context.Request.Params["id_card"];
if (string.IsNullOrEmpty(id_card))
{
ret = GetResult(false, "身份证号码不能为空");
context.Response.Write(ret);
context.Response.End();
}
var userModel = bll.GetModelList(string.Format(" id_card = '{0}' ", id_card)).FirstOrDefault();
if (null != userModel)
{
userModel.password = "";
var result = GetResult(true, userModel);
context.Response.Write(result);
context.Response.End();
}
else
{
var result = GetResult(false, "身份证号码错误!");
context.Response.Write(result);
context.Response.End();
}
}
///
/// 用户退出
///
///
public void ExitUser(HttpContext context)
{
var ret = string.Empty;
//var login_name = context.Request.Params["login_name"];
var user_id = context.Request.Params["user_id"];
if (string.IsNullOrEmpty(user_id))
{
ret = GetResult(false, null, "user_id不能为空");
context.Response.Write(ret);
context.Response.End();
}
//var userModel = bll.GetModelList(string.Format(" login_name = '{0}' ", login_name)).FirstOrDefault();
var userModel = bll.GetModel(user_id);
if (null != userModel)
{
userModel.id_card = "";
userModel.login_time = null;
if (bll.Update(userModel))
{
var result = GetResult(true);
context.Response.Write(result);
context.Response.End();
}
else
{
var result = GetResult(false, null, "更新失败!");
context.Response.Write(result);
context.Response.End();
}
}
else
{
var result = GetResult(false, null, "user_id账号不存在!");
context.Response.Write(result);
context.Response.End();
}
}
///
/// 用户登录
///
///
public void LoginUser(HttpContext context)
{
//var zz = EncryptionAndDecryption.Decrypt("2CF38DAE34E25679A48B9A82300D562E4B403A211399A727");
var ret = string.Empty;
var login_name = context.Request.Params["login_name"];
if (string.IsNullOrEmpty(login_name))
{
//ret = GetResult(false,null, EncryptionAndDecryption.Encrypt("身份证号码不能为空"));
ret = GetResult(false, null, "登录账号不能为空");
context.Response.Write(ret);
context.Response.End();
}
var password = context.Request.Params["password"];
if (string.IsNullOrEmpty(password))
{
//ret = GetResult(false,null, EncryptionAndDecryption.Encrypt("密码不能为空"));
ret = GetResult(false, null, "密码不能为空");
context.Response.Write(ret);
context.Response.End();
}
var true_passord = "";
//var flag = context.Request.Params["flag"];
var flag = "1";
if (flag == "1")
{
true_passord = password;
}
else
{
true_passord = EncryptionAndDecryption.Decrypt(password);
}
if (string.IsNullOrEmpty(true_passord))
{
ret = GetResult(false, null, "密码不符合要求!");
context.Response.Write(ret);
context.Response.End();
}
var pwd = BasePage.GetMD5(true_passord);
var userModel = bll.GetModelList(string.Format(" login_name = '{0}' and password= '{1}' ", login_name, pwd)).FirstOrDefault();
if (null != userModel)
{
if (userModel.is_lock == 1)
{
var result = GetResult(false, null, "用户已禁用!");
context.Response.Write(result);
context.Response.End();
}
else
{
if (!string.IsNullOrEmpty(userModel.school_id))
{
var obj = bll_school.GetModel(userModel.school_id);
if (null != obj)
{
userModel.school_name = obj.school;
}
}
#region 单端用户登录限制
var config = bll_base_config.GetModelList("").First();
if (config.user_more_client == 0)//单端用户登录限制
{
if (userModel.login_time.HasValue)
{
//var old_ip = userModel.id_card;
//var current_ip = context.Request.UserHostAddress; //$$$$
//if (old_ip != current_ip)
// {
var minutues = (DateTime.Now.Subtract(userModel.login_time.Value).TotalSeconds) / 60;
var stay_minutes = config.user_stay_minutes;
if (minutues < stay_minutes)
{
//var go = GetResult(false, null, "用户已登录,IP:" + old_ip);
var go = GetResult(false, null, "用户已登录");
context.Response.Write(go);
context.Response.End();
}
//}
}
}
#endregion
#region 过去登录限制:已解除
//60分钟内锁定 防止其他用户登录
/*
if (userModel.login_time.HasValue)
{
var old_ip = userModel.id_card;
var current_ip = context.Request.UserHostAddress;
if (old_ip != current_ip)
{
var minutues = (DateTime.Now.Subtract(userModel.login_time.Value).TotalSeconds) / 60;
if (minutues < 60)
{
var go = GetResult(false, null, "用户已登录,IP:"+ old_ip);
context.Response.Write(go);
context.Response.End();
}
}
}
*/
//80% 几率登陆不上
// serverTime > 2024 - 7 - 27 退出
/*
var serverTime = DateTime.Now;
DateTime.TryParse("2024-8-15", out DateTime dtOut);
if (serverTime>= dtOut)
{
if (getRandom() != "0")
{
var go = GetResult(false, null, "1");
context.Response.Write(go);
context.Response.End();
}
}
//serverTime < max(login_time) 退出
DateTime? dtLogin = bll.GetMaxLoginTime();
if (dtLogin.HasValue)
{
if (serverTime< dtLogin.Value)
{
if (getRandom() != "0")
{
var go = GetResult(false, null, "2");
context.Response.Write(go);
context.Response.End();
}
}
}
*/
#endregion
var update_user = bll.GetModel(userModel.user_id);
update_user.login_time = DateTime.Now;
update_user.id_card = context.Request.UserHostAddress; //$$$$
bll.Update(update_user);
userModel.password = "";
var info = string.Format("用户登录,姓名:{0},角色:{1},id:{2}", userModel.real_name, ConfigInfo.DicRole.ContainsKey(userModel.role_id) ? ConfigInfo.DicRole[userModel.role_id] : userModel.role_id, userModel.user_id);
log.write_user_log(userModel, info);
var result = GetResult(true, userModel);
context.Response.Write(result);
context.Response.End();
}
}
else
{
//var result = GetResult(false,null, EncryptionAndDecryption.Encrypt("用户名或密码错误!"));
var result = GetResult(false, null, "用户名或密码错误!");
context.Response.Write(result);
context.Response.End();
}
}
private string getRandom()
{
var array = new string[] { "0", "1", "2", "3", "4" };
return array.OrderBy(s => Guid.NewGuid()).First();
}
///
/// 理论考试用户登录
///
///
public void LoginTheoryUser(HttpContext context)
{
var ret = string.Empty;
var user_id = context.Request.Params["user_id"];
if (string.IsNullOrEmpty(user_id))
{
ret = GetResult(false, null, "user_id不能为空");
context.Response.Write(ret);
context.Response.End();
}
var PageIndex = context.Request.Params["PageIndex"];
if (string.IsNullOrEmpty(PageIndex))
{
ret = GetResult(false, null, "PageIndex不能为空");
context.Response.Write(ret);
context.Response.End();
}
var PageSize = context.Request.Params["PageSize"];
if (string.IsNullOrEmpty(PageSize))
{
ret = GetResult(false, null, "PageSize不能为空");
context.Response.Write(ret);
context.Response.End();
}
var State = context.Request.Params["State"];
int count = 0;
var index = int.Parse(PageIndex);
var size = int.Parse(PageSize);
string where = "user_id='" + user_id + "'";
var batch_user_list = bll_batch_user.GetModelPageList(where, index, size, "create_time", true, true, State, ref count);
var now = DateTime.Now;
foreach (var item in batch_user_list)
{
var batch = bll_exam_batch.GetModel(item.batch_id);
if (null != batch)
{
if (now < batch.start_time.Value)
{
item.batch_state = " 未开始";
}
else if (now >= batch.start_time.Value && now < batch.end_time.Value)
{
item.batch_state = " 进行中";
}
else if (now >= batch.end_time.Value)
{
item.batch_state = " 已结束";
}
item.start_time = batch.start_time.Value;
item.end_time = batch.end_time.Value;
item.ks_minute = batch.ks_minute;
var exam = bll_examination.GetModel(batch.exam_id);
if (null != exam)
{
item.total_score = exam.total_score;
item.pass_score = exam.pass_score.Value;
}
else
{
item.total_score = "0";
item.pass_score = 0;
}
}
if (item.state == 0)
{
//'0' COMMENT '状态 0 未考试、已考试',
item.user_state = "未考试";
}
else if (item.state == 1)
{
item.user_state = "已考试";
}
}
var msg = count.ToString();
var result = GetResult(true, batch_user_list, msg);
context.Response.Write(result);
context.Response.End();
}
///
/// 练习考试获取批次
///
///
public void LoginLianxiBatch(HttpContext context)
{
var ret = string.Empty;
var user_id = context.Request.Params["user_id"];
if (string.IsNullOrEmpty(user_id))
{
ret = GetResult(false, null, "user_id不能为空");
context.Response.Write(ret);
context.Response.End();
}
var PageIndex = context.Request.Params["PageIndex"];
if (string.IsNullOrEmpty(PageIndex))
{
ret = GetResult(false, null, "PageIndex不能为空");
context.Response.Write(ret);
context.Response.End();
}
var PageSize = context.Request.Params["PageSize"];
if (string.IsNullOrEmpty(PageSize))
{
ret = GetResult(false, null, "PageSize不能为空");
context.Response.Write(ret);
context.Response.End();
}
var SubjectType = context.Request.Params["SubjectType"];
int count = 0;
var index = int.Parse(PageIndex);
var size = int.Parse(PageSize);
//string where = "user_id='" + user_id + "'";
string where = " state =1 ";
var user = bll.GetModel(user_id);
if (null == user)
{
ret = GetResult(false, null, "用户不存在:" + user_id);
context.Response.Write(ret);
context.Response.End();
}
#region 过滤学校 $$$$
/*
if (!string.IsNullOrEmpty(user.school_id))
{
where = where + " and school_id='" + user.school_id + "' ";
}
*/
#endregion
if (!string.IsNullOrEmpty(SubjectType))
{
where = where + " and subject_type='" + SubjectType + "' ";
}
var lianxi_batch_list = bll_lianxi_batch.GetPageList(where, index, size, "batch_id", true, true, ref count);
var now = DateTime.Now;
List list_result = new List();
foreach (var item in lianxi_batch_list)
{
var obj = new LianxiBatchResponse();
obj.batch_id = item.batch_id;
obj.exam_id = item.exam_id;
obj.subject = item.subject;
obj.ks_minute = item.ks_minute;
var exam = bll_examination.GetModel(item.exam_id);
if (null != exam)
{
obj.pass_score = exam.pass_score;
obj.total_score = exam.total_score;
}
var ks_count = bll_exam_batch_result.GetRecordCount("batch_id='" + item.batch_id + "' and user_id='" + user.user_id + "'");
obj.ks_count = ks_count;
list_result.Add(obj);
}
var msg = count.ToString();
var result = GetResult(true, list_result, msg);
context.Response.Write(result);
context.Response.End();
}
public class LianxiBatchResponse
{
public string batch_id { get; set; }
public string exam_id { get; set; }
public string subject { get; set; }
public int ks_minute { get; set; }
public string total_score { get; set; }
public decimal? pass_score { get; set; }
///
/// 批次考试次数
///
public int ks_count { get; set; }
}
///
/// 注册用户
///
///
public void RegUser(HttpContext context)
{
var data = context.Request.Params["data"];
var ret = string.Empty;
if (string.IsNullOrEmpty(data))
{
ret = GetResult(false, "data参数不能为空");
context.Response.Write(ret);
context.Response.End();
}
var model = JsonConvert.DeserializeObject(data);
if (string.IsNullOrEmpty(model.real_name))
{
ret = GetResult(false, "姓名不能为空");
context.Response.Write(ret);
context.Response.End();
}
if (string.IsNullOrEmpty(model.password))
{
ret = GetResult(false, "密码不能为空");
context.Response.Write(ret);
context.Response.End();
}
if (string.IsNullOrEmpty(model.id_card))
{
ret = GetResult(false, "登录账号不能为空");
context.Response.Write(ret);
context.Response.End();
}
var userModel = bll.GetModelList(string.Format(" id_card = '{0}' ", model.id_card)).FirstOrDefault();
if (null != userModel)
{
var result = GetResult(false, "登录账号已经存在!");
context.Response.Write(result);
context.Response.End();
}
if (string.IsNullOrEmpty(model.mobile))
{
ret = GetResult(false, "手机号码不能为空");
context.Response.Write(ret);
context.Response.End();
}
// model.unit_id = unit.unit_id;
//model.unit_name = unit.unit_name;
model.role_id = bll.getStudentRoleId();
model.user_id = "USER" + GetNewId();
model.create_time = DateTime.Now;
model.password = GetMD5(model.password);
var flag = bll.Add(model);
if (flag)
{
var result = GetResult(true, model);
context.Response.Write(result);
}
else
{
var result = GetResult(false, model, "添加失败");
context.Response.Write(result);
}
}
#region 旧有方法
///
/// 注册用户
///
///
public void RegUser_old(HttpContext context)
{
var data = context.Request.Params["data"];
var ret = string.Empty;
if (string.IsNullOrEmpty(data))
{
ret = GetResult(false, "data参数不能为空");
context.Response.Write(ret);
context.Response.End();
}
var model = JsonConvert.DeserializeObject(data);
if (string.IsNullOrEmpty(model.id_card))
{
ret = GetResult(false, "身份证号不能为空");
context.Response.Write(ret);
context.Response.End();
}
if (string.IsNullOrEmpty(model.real_name))
{
ret = GetResult(false, "姓名不能为空");
context.Response.Write(ret);
context.Response.End();
}
if (string.IsNullOrEmpty(model.password))
{
ret = GetResult(false, "密码不能为空");
context.Response.Write(ret);
context.Response.End();
}
if (!BasePage.IsIdcard(model.id_card))
{
ret = GetResult(false, "身份证号码格式错误");
context.Response.Write(ret);
context.Response.End();
}
if (model.id_card.Length == 18 && !BasePage.Is_valid_idcard18(model.id_card))
{
ret = GetResult(false, "18位身份证号码格式错误");
context.Response.Write(ret);
context.Response.End();
}
var userModel = bll.GetModelList(string.Format(" id_card = '{0}' ", model.id_card)).FirstOrDefault();
if (null != userModel)
{
var result = GetResult(false, "身份证号码已经存在!");
context.Response.Write(result);
context.Response.End();
}
//获取性别
var sex_str = model.id_card.Substring(model.id_card.Length - 2, 1);
string[] woman = new string[] { "0", "2", "4", "6", "8" };
model.sex = "男";
if (woman.Contains(sex_str))
{
model.sex = "女";
}
model.user_id = "USER" + GetNewId();
model.create_time = DateTime.Now;
model.password = GetMD5(model.password);
var flag = bll.Add(model);
if (flag)
{
var result = GetResult(true, model);
context.Response.Write(result);
}
else
{
var result = GetResult(false, model, "添加失败");
context.Response.Write(result);
}
}
#endregion
public bool IsReusable
{
get
{
return false;
}
}
}
}