using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace VRS.Handler
{
///
/// 科目成绩写入接口
/// http://192.168.1.105:8001/Handler/SubjectResult.ashx?subjectid=10002&loginname=xy1001&totalresult=27&content=备注&mode=0&time=2020-1-1
///subjectid:科目id
///loginname:登录账号
///totalresult:成绩
///mode:考核类型 0 测验(实习),1 考试
///content:备注内容
///time:考核时间
///
public class SubjectResult : BasePage, IHttpHandler
{
DataService.BLL.admin_user bll_user = new DataService.BLL.admin_user();
DataService.BLL.pro_subject bll_subject = new DataService.BLL.pro_subject();
DataService.BLL.admin_log log = new DataService.BLL.admin_log();
DataService.BLL.pro_result pro_result = new DataService.BLL.pro_result();
DataService.BLL.pro_result_detail pro_result_detail = new DataService.BLL.pro_result_detail();
DataService.BLL.pro_subject_proc bll_subject_proc = new DataService.BLL.pro_subject_proc();
DataService.BLL.pro_flow bll_pro_flow = new DataService.BLL.pro_flow();
DataService.BLL.pro_fault bll_fault = new DataService.BLL.pro_fault();
DataService.BLL.pro_exam_batch bll_batch = new DataService.BLL.pro_exam_batch();
DataService.BLL.pro_subject_batch_user bll_subject_batch_user = new DataService.BLL.pro_subject_batch_user();
DataService.BLL.pro_fault_batch_user bll_fault_batch_user = new DataService.BLL.pro_fault_batch_user();
public override void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
string subject_id = context.Request.Params["subjectid"];//科目id
string login_name = context.Request.Params["loginname"];//登录账号
string total_result = context.Request.Params["totalresult"]; //成绩
//string mode = context.Request.Params["mode"]; // 考核类型 0 测验(实习),1 考试
string content = context.Request.Params["content"]; //考试内容
string fault_code = context.Request.Params["fault_code"]; //备注内容
var user = bll_user.GetModelByJobNumber(login_name);
if (null == user)
{
context.Response.Write(GetJsonWithCode(APICode.Fail, "登录账号:" + login_name + ",的学员不存在!"));
context.Response.End();
}
var model_subject = bll_subject.GetModel(subject_id);
if (null == model_subject)
{
log.write_user_log(user, "学员姓名:" + user.real_name + ",学员学号:" + login_name + ",提交科目成绩,科目不存在," + "科目id:" + subject_id);
context.Response.Write(GetJsonWithCode(APICode.Fail, "科目不存在:" + "科目id:" + subject_id));
context.Response.End();
}
log.write_user_log(user, "科目名称:" + model_subject.subject_name + ",科目id:" + subject_id + ",学员账号:" + login_name + ",成绩:" + total_result + ",内容:" + content);
bool state = false;
var model = new DataService.Model.pro_result();
var batch = bll_batch.GetModelList(" state =1 ").FirstOrDefault();
if (null == batch)
{
log.write_user_log(user, "学员姓名:" + user.real_name + ",学员学号:" + login_name + ",科目考试批次不存在或未启用!科目:"+ model_subject.subject_name);
context.Response.Write(GetJsonWithCode(APICode.Fail, "学员姓名:" + user.real_name + ",学员学号:" + login_name + ",科目考试批次不存在或未启用!"));
context.Response.End();
}
//故障科目
if (subject_id == "10003")
{
var exist_fault_batch_user = bll_fault_batch_user.GetModelList(" login_name = '" + login_name + "' and batch_id = '" + batch.batch_id + "'").FirstOrDefault();
if (null == exist_fault_batch_user)
{
log.write_user_log(user, "学员姓名:" + user.real_name + ",学员学号:" + login_name +",批次id:"+ batch.batch_id+",批次名称:" + batch.batch_name + ",该批次未配置科目:"+model_subject.subject_name);
context.Response.Write(GetJsonWithCode(APICode.Fail, "学员姓名:" + user.real_name + ",学员学号:" + login_name + ",该批次未配置科目!"));
context.Response.End();
}
fault_code = exist_fault_batch_user.fault_code;
}
else //其他科目
{
var exist_subject_batch_user = bll_subject_batch_user.GetModelList(" login_name='" + login_name + "' and batch_id='" + batch.batch_id + "' and subject_id='" + subject_id + "'").FirstOrDefault();
if (null == exist_subject_batch_user)
{
log.write_user_log(user, "学员姓名:" + user.real_name + ",学员学号:" + login_name + ",批次id:" + batch.batch_id + ",批次名称:" + batch.batch_name + ",该批次未配置科目:" + model_subject.subject_name);
context.Response.Write(GetJsonWithCode(APICode.Fail, "学员姓名:" + user.real_name + ",学员学号:" + login_name + ",该批次未配置科目!"));
context.Response.End();
}
}
var fault_list = bll_fault.GetModelList(" fault_code='" + fault_code + "' ");
var result = pro_result.GetModelList(" user_id='" + user.user_id + "' and batch_id='" + batch.batch_id + "' and subject_id='" + subject_id + "'").FirstOrDefault();
if (null != result)
{
var fault_desc = "";
if (!string.IsNullOrEmpty(fault_code))
{
fault_desc = ",故障点编码:" + fault_code;
}
log.write_user_log(user, "学员姓名:" + user.real_name + ",学员学号:" + login_name + ",科目考试已经考过试!科目名称:" + result.subject_name + ",科目id:" + result.subject_id + ",得分:" + result.total_result + fault_desc);
context.Response.Write(GetJsonWithCode(APICode.Fail, "学员姓名:" + user.real_name + ",学员学号:" + login_name + ",科目考试已经考过试!"));
context.Response.End();
}
if (!string.IsNullOrWhiteSpace(subject_id) && !string.IsNullOrWhiteSpace(login_name))
{
try
{
DataService.BLL.pro_result bll = new DataService.BLL.pro_result();
var config = GetSystemConfig(System.Configuration.ConfigurationManager.AppSettings["SystemName"].ToString());
model.result_id = GetNewId();
var dt_time = DateTime.Now;
model.examine_time = dt_time;
model.subject_id = subject_id;
model.subject_name = model_subject.subject_name;
model.login_name = user.login_name;
model.real_name = user.real_name;
if (null != batch)
{
model.batch_id = batch.batch_id;
model.batch_name = batch.batch_name;
model.sjms = batch.sjms;
}
if (fault_list.Count > 0)
{
model.fault_code = fault_list[0].fault_code;
model.fault_name = fault_list[0].fault_name;
}
int examine_type = 1;
//int.TryParse(mode, out examine_type);
//detail_id, result_id, step, score, result, r1, r2, r3
//15:拆解软波导,5$14:拆解双工器,5$17:拆解天线头,5
var array = content.Split(new char[] { '$' }, StringSplitOptions.RemoveEmptyEntries);
decimal total_score = 0;
List list_pass_tips = new List();
#region 拆解步骤,计算每个步骤分数
foreach (var item in array)
{
var sub_array = item.Split(',');
var tip_array = sub_array[0].Split(':');
var detail = new DataService.Model.pro_result_detail();
detail.detail_id = GetNewId();
detail.result_id = model.result_id;
detail.step = int.Parse(tip_array[0]);
detail.tip = tip_array[1];
detail.examine_time = dt_time;
detail.subject_id = subject_id;
detail.subject_name = model_subject.subject_name;
detail.user_id = user.user_id;
detail.login_name = user.login_name;
detail.real_name = user.real_name;
if (fault_list.Count > 0)
{
detail.fault_code = fault_list[0].fault_code;
detail.fault_name = fault_list[0].fault_name;
}
if (null != batch)
{
detail.batch_id = batch.batch_id;
detail.batch_name = batch.batch_name;
detail.sjms = batch.sjms;
}
list_pass_tips.Add(tip_array[1]);
//detail.score = int.Parse(sub_array[1]);
detail.score = get_score(subject_id, tip_array[1], fault_code);
if (detail.score <= 0)
{
var fault_desc = "";
if (!string.IsNullOrEmpty(fault_code))
{
fault_desc = ",故障点编码:" + fault_code;
}
log.write_user_log(user, "学员姓名:" + user.real_name + ",学员学号:" + login_name + ",科目id:" + model_subject.subject_id + ",科目名称:" + model_subject.subject_name + "。步骤提示(tip):" + tip_array[1] + ",该步骤没有配置得分 " + fault_desc);
}
total_score += detail.score;
pro_result_detail.Add(detail);
}
#endregion
//添加没有得分的步骤
if (string.IsNullOrEmpty(fault_code))
{
add_fail_tips(batch, user, subject_id, model_subject.subject_name, model.result_id, list_pass_tips, fault_list, dt_time, config);
}
else
{
add_fault_fail_tips(batch, user, subject_id, model_subject.subject_name, model.result_id, list_pass_tips, fault_list, dt_time, config, fault_code);
}
model.examine_type = examine_type;
model.user_id = user.user_id;
model.practice_content = content;
model.exam_year = DateTime.Now.Year;
model.exam_month = DateTime.Now.Month;
//int score = 0;
//int.TryParse(total_result, out score);
//model.total_result = score;
model.total_result = total_score;
var flag = bll.Add(model);
}
catch (Exception ex)
{
log.write_user_log(user, "Error:科目名称:" + model_subject.subject_name + ",科目id:" + subject_id + ",学员账号:" + login_name + ",成绩:" + total_result + ",内容:" + content + ",错误:" + ex.Message);
context.Response.Write(GetJsonWithCode(APICode.Fail, ex.ToString()));
context.Response.End();
}
state = true;
context.Response.Write(GetJsonWithCode(APICode.Success, model));
context.Response.End();
}
if (!state)
{
context.Response.Write(GetJsonWithCode(APICode.Fail, ""));
context.Response.End();
}
}
public decimal get_score(string subject_id, string tip, string fault_code)
{
if (string.IsNullOrEmpty(fault_code))
{
var list = bll_subject_proc.GetModelList(" tip='" + tip + "' and subject_id='" + subject_id + "' ");
if (list.Count > 0)
{
return list[0].score;
}
}
else
{
var list = bll_subject_proc.GetModelList(" tip='" + tip + "' and subject_id='" + subject_id + "' and fault_code='" + fault_code + "'");
if (list.Count > 0)
{
return list[0].score;
}
}
return 0;
}
public void add_fail_tips(DataService.Model.pro_exam_batch batch, DataService.Model.admin_user user, string subject_id, string subject_name, string result_id, List list_pass_tips, List fault_list, DateTime examine_time, DataService.Model.admin_config config)
{
var list = bll_pro_flow.GetModelList(" subject_id='" + subject_id + "' ").OrderBy(s => s.step).ToList();
var array = list_pass_tips.ToArray();
var fail_list = list.Where(s => !array.Contains(s.tip)).ToList();
foreach (var item in fail_list)
{
var detail = new DataService.Model.pro_result_detail();
detail.subject_id = subject_id;
detail.subject_name = subject_name;
detail.detail_id = GetNewId();
detail.result_id = result_id;
detail.step = item.step;
detail.tip = item.tip;
detail.score = 0;
detail.user_id = user.user_id;
detail.login_name = user.login_name;
detail.real_name = user.real_name;
detail.examine_time = examine_time;
if (fault_list.Count > 0)
{
detail.fault_code = fault_list[0].fault_code;
detail.fault_name = fault_list[0].fault_name;
}
if (null != batch)
{
detail.batch_id = batch.batch_id;
detail.batch_name = batch.batch_name;
detail.sjms = batch.sjms;
}
pro_result_detail.Add(detail);
}
}
///
/// 添加故障失败步骤
///
///
///
///
///
///
///
///
///
///
public void add_fault_fail_tips(DataService.Model.pro_exam_batch batch, DataService.Model.admin_user user, string subject_id, string subject_name, string result_id, List list_pass_tips, List fault_list, DateTime examine_time, DataService.Model.admin_config config, string fault_code)
{
var list = bll_subject_proc.GetModelList(" subject_id='" + subject_id + "' " + " and fault_code='" + fault_code + "' ").OrderBy(s => s.step).ToList();
var array = list_pass_tips.ToArray();
var fail_list = list.Where(s => !array.Contains(s.tip)).ToList();
foreach (var item in fail_list)
{
var detail = new DataService.Model.pro_result_detail();
detail.subject_id = subject_id;
detail.subject_name = subject_name;
detail.detail_id = GetNewId();
detail.result_id = result_id;
detail.step = item.step;
detail.tip = item.tip;
detail.score = 0;
detail.user_id = user.user_id;
detail.login_name = user.login_name;
detail.real_name = user.real_name;
detail.examine_time = examine_time;
if (fault_list.Count > 0)
{
detail.fault_code = fault_list[0].fault_code;
detail.fault_name = fault_list[0].fault_name;
}
if (null != batch)
{
detail.batch_id = batch.batch_id;
detail.batch_name = batch.batch_name;
detail.sjms = batch.sjms;
}
pro_result_detail.Add(detail);
}
}
public new bool IsReusable
{
get
{
return false;
}
}
}
}