Marking.Template/Temp/SplitQuestion.aspx.cs

533 lines
22 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Lucee.WebBase.Data;
using Lucee.WebBase.Utils;
using MySql.Data.MySqlClient;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.Net;
using System.Text;
public partial class Temp_SplitQuestion : System.Web.UI.Page
{
public long tenant = 0;
public string QuestionTempValue = "";
public string PaperType = "";
public string TempPicture64_nvarchar = "";
public string ystihaoList = "";
public string TempID = "";
public string TempMainID = "";
public string questionNum = "";
public string xuhao, xiaoti, fenshu, yuejuanfen;
public long exam_subject_id = 0;
public long subjective = 0;
public string token = "";
private void UpdateData()
{
long TemDataID = Convert.ToInt64(Globals.Request("TemDataID"));
string tempMainID = Globals.Request("TempMainID");
string zhuguantiList = Server.UrlDecode(Globals.Request("zhuguantiList"));
string questionNum = Globals.Request("questionNum");
tenant = Convert.ToInt64(Globals.Request("tenant"));
string sql = "SELECT TempValue_nvarchar FROM MK_TempleteData WHERE ID_bigint=" + TemDataID;
string TempValue = new MysqlDBHelper(tenant).ExecuteScalar(sql).ToString();
if (TempValue != "")
{
string[] list = TempValue.Split('$');//拿模板
string zhuguanti = list[3];//拿主观题
bool isP = false;
if (zhuguanti != "")
{
string[] quList = zhuguanti.Split('^');//切题
for (int i = 0; i < quList.Length; i++)
{
if (questionNum == quList[i].Split(',')[4])//匹配哪道题
{
quList[i] = zhuguantiList;
isP = true;
break;
}
}
//获取原始图片
sql = "SELECT CutWidth_int,CutHeight_int,PyPPostion_nvarchar FROM MK_TempleteData WHERE ID_bigint=" + TemDataID;
DataTable dttmp = new MysqlDBHelper(tenant).ExecuteQuery(sql);
int oldWidth = Convert.ToInt32(dttmp.Rows[0]["CutWidth_int"]);
int oldHeight = Convert.ToInt32(dttmp.Rows[0]["CutHeight_int"]);
string PYPostionList = dttmp.Rows[0]["PyPPostion_nvarchar"].ToString();
string tempEx = TempV(zhuguantiList, PYPostionList, oldWidth, oldHeight);
if (tempEx != "ok")
{
Response.Write(tempEx);
return;
}
if (!isP)
{
Response.Write("该题数据不存在,请刷新后重试!");
}
else
{//重新组装题
long exam_subject_id = Convert.ToInt64(Globals.Request("exam_subject_id"));
long subjective = Convert.ToInt64(Globals.Request("subjective"));
var checkResult = CheckStatusByApi(subjective);
if (!checkResult.data.Value)
{
Response.Write("验证失败!" + checkResult.message);
return;
}
string[] newQuestionList = zhuguantiList.Split('^');
List<CutList> lt = new List<CutList>();
//写入拆分题目
foreach (string x in newQuestionList)
{
string[] questionList = x.Split(',');
string mkscoretype = "";
if (string.IsNullOrEmpty(questionList[7]))
{
mkscoretype = "1";
}
else
{
mkscoretype = questionList[7];
}
CutList cl = new CutList();
cl.questionNum = Server.UrlEncode(questionList[4]);
cl.subQuestionCount = Convert.ToInt32(questionList[5]);
cl.scoreInterval = mkscoretype;
cl.score = questionList[6];
lt.Add(cl);
}
string zhuguanlistString = "";
foreach (string x in quList)
{
zhuguanlistString += x + "^";
}
list[3] = zhuguanlistString.Trim('^');
string allData = "";
foreach (string x in list)
{
allData += x + "$";
}
allData = allData.Trim('$');
//更新原始模板
sql = "UPDATE MK_TempleteData SET TempValue_nvarchar=@TempValue_nvarchar WHERE ID_bigint=" + TemDataID;
MySqlParameter[] sp = new MySqlParameter[] {
new MySqlParameter("@TempValue_nvarchar",allData)
};
new MysqlDBHelper(tenant).ExecuteNoQuery(sql, sp);
//删除原始记录表
sql = "DELETE FROM MK_TempQuestionData WHERE QuestionIndex_int='" + questionNum + "' AND TempID_bigint='" + TemDataID + "'";
new MysqlDBHelper(tenant).ExecuteNoQuery(sql, sp);
string ids = "";//获取返回值,拆分后ID值
string questionNumList = "";
//写入拆分题目
foreach (string x in newQuestionList)
{
string[] questionList = x.Split(',');
string mkscoretype = "";
if (string.IsNullOrEmpty(questionList[7]))
{
mkscoretype = "1";
}
else
{
mkscoretype = questionList[7];
}
questionNumList += questionList[4] + "$";
sql = string.Format(@"INSERT INTO MK_TempQuestionData(
TempID_bigint,
QuestionIndex_int,
SmallQuestionDetail_nvarchar,
Score_float,
smallQuestionNum_int,
questiontype_int,
mkscoretype_float) VALUES
({0},{1},{2},{3},{4},1,{5});select @@IDENTITY",
TemDataID,
"'" + questionList[4] + "'",
"''",
questionList[6] == "" ? "0" : questionList[6],
questionList[5],
mkscoretype
);
ids += new MysqlDBHelper(tenant).ExecuteScalar(sql).ToString() + ",";
}
questionNumList = questionNumList.Trim('$');
int is_cutout = 0;
if (Convert.ToInt32(new MysqlDBHelper(tenant).ExecuteScalar("SELECT COUNT(1) FROM `MK_ExamResult` where ExamSubjectId=" + exam_subject_id + " AND QuestionNumber_int='" + questionNum + "'")) <= 0)
{
is_cutout = 1;
}
//写入任务表
sql = "Insert Into mk_subjective_cut_record(temp_main_id,temp_detail_id,temp_question_num,is_cutout,exam_subject_id,temp_question_Newdata_ids,subjective_questions_data,cutted_question_num) VALUES(" + tempMainID + "," + TemDataID + ",'" + questionNum + "'," + is_cutout + "," + exam_subject_id + ",'" + ids.Trim(',') + "','" + zhuguantiList + "','" + questionNumList + "')";
new MysqlDBHelper(tenant).ExecuteNoQuery(sql, sp);
//调用接口
//result r = (result)JsonConvert.DeserializeObject(RequestPost(subjective.ToString(), lt.ToJsonString()), typeof(result));
var r = JsonConvert.DeserializeObject<result>(RequestPost(subjective.ToString(), JsonConvert.SerializeObject(lt)));
if (r == null || r.code != "200")
{
throw new Exception("调用接口失败了!");
}
if (r.code == "200" && r.data.Value)
{
Response.Write("1");
}
else
{
Response.Write(r.message);
}
}
}
else
{
Response.Write("找不到该题");
}
}
else
{
Response.Write("无模板数据");
}
}
/// <summary>
/// 检查边距是否合格
/// </summary>
/// <param name="getdata"></param>
private string TempV(string GetData, string PYPostionList, int oldWidth, int oldHeight)
{
double pyLeft=0, pyTop = 0;
if (string.IsNullOrWhiteSpace(PYPostionList) && PYPostionList.Contains(","))
{
pyLeft = Convert.ToInt32(PYPostionList.Split(',')[0]);
pyTop = Convert.ToInt32(PYPostionList.Split(',')[1]);
}
double Xtop = 0;
double Xleft = 0;
double Xwidth = 0;
double Xheight = 0;
if (GetData != "")//主观题
{
string[] keguantiList = GetData.Split('^');
foreach (string slist in keguantiList)
{
string[] list = slist.Split(',');
Xleft = Convert.ToDouble(list[0]);
Xtop = Convert.ToDouble(list[1]);
Xwidth = Convert.ToDouble(list[2]);
Xheight = Convert.ToDouble(list[3]);
string tihao = list[4];
if (Xleft < pyLeft)
{
return "题号:[" + tihao + "] 编辑框左边超过定位点边界!";
}
if (Xleft + Xwidth - pyLeft > oldWidth)
{
return "题号:[" + tihao + "] 编辑框右边超过定位点边界!";
}
if (Xtop < pyTop)
{
return "题号:[" + tihao + "] 编辑框上边超过定位点边界!";
}
if (Xtop + Xheight - pyTop > oldHeight)
{
return "题号:[" + tihao + "] 编辑框下边超过定位点边界!";
}
}
}
return "ok";
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
int action = Globals.Request("action") == "" ? 0 : Convert.ToInt32(Globals.Request("action"));
tenant = Globals.Request("tenant") == "" ? 0 : Convert.ToInt64(Globals.Request("tenant"));
subjective = Convert.ToInt64(Globals.Request("subjective"));
token = Globals.Request("token");
if (action == 0)
{
string sql = "SELECT exam_subject_id,question_num,score,score_interval FROM marking_setting_subjective WHERE id=" + subjective;
DataTable dtSubSetting = new MysqlDBHelper(tenant).ExecuteQuery(sql);
if (dtSubSetting.Rows.Count == 0)
{
Response.Write("<script>alert('无模板数据');window.close();</script>");
return;
}
exam_subject_id = Convert.ToInt64(dtSubSetting.Rows[0]["exam_subject_id"]);
questionNum = dtSubSetting.Rows[0]["question_num"].ToString();
sql = "SELECT template_id FROM exam_subject WHERE id=" + exam_subject_id;
long template_id_main = Convert.ToInt64(new MysqlDBHelper(tenant).ExecuteScalar(sql));
sql = "SELECT PaperType FROM MK_TempleteMain WHERE ID_bigint=" + template_id_main;
PaperType = new MysqlDBHelper(tenant).ExecuteScalar(sql).ToString();
TempMainID = template_id_main.ToString();
sql = "SELECT ID_bigint,TempValue_nvarchar,TempPicture64_nvarchar FROM MK_TempleteData WHERE MainID_bigint=" + template_id_main;
DataTable dt = new MysqlDBHelper(tenant).ExecuteQuery(sql);
bool isHave = false;
TempID = "";
foreach (DataRow dr in dt.Rows)
{
string data = dr["TempValue_nvarchar"].ToString();
if (data != "")
{
string[] list = data.Split('$');
string zhuguanti = list[3];
if (zhuguanti != "")
{
string[] quList = zhuguanti.Split('^');
foreach (string q in quList)
{
if (questionNum == q.Split(',')[4])
{
TempID = dr["ID_bigint"].ToString();
TempPicture64_nvarchar = dr["TempPicture64_nvarchar"].ToString();
QuestionTempValue = q;
xuhao = questionNum;
xiaoti = q.Split(',')[5];
fenshu = dtSubSetting.Rows[0]["score"].ToString();
yuejuanfen = dtSubSetting.Rows[0]["score_interval"].ToString();
isHave = true;
break;
}
}
}
}
}
foreach (DataRow dr in dt.Rows)
{
string data = dr["TempValue_nvarchar"].ToString();
if (data != "")
{
string[] list = data.Split('$');
string zhuguanti = list[3];
if (zhuguanti != "")
{
string[] quList = zhuguanti.Split('^');
foreach (string q in quList)
{
ystihaoList += q.Split(',')[4] + ",";
}
}
}
}
ystihaoList = ystihaoList.Trim(',');
if (TempID == "")
{
Response.Write("<script>alert('无模板数据')</script>");
}
else
{
// Response.Write(TempID);
}
// Response.Write(TempID+"*"+ QuestionTempValue);
}
if (action == 1)
{
Response.Clear();
try
{
UpdateData();
}
catch (Exception ex)
{
Response.Write("拆题失败" + ex);
}
Response.End();
}
}
}
private bool CheckStatus(long exam_subject_id)
{
if (exam_subject_id <= 0)
{
Response.Write("考试id有误保存失败");
return false;
}
string sql = "SELECT `status` FROM exam_subject WHERE id=" + exam_subject_id;
var examStatus = Convert.ToInt32(new MysqlDBHelper(tenant).ExecuteScalar(sql));
if (examStatus != 1 && examStatus != 2)
{
Response.Write("当前考试状态无法执行该操作!");
return false;
}
sql = "SELECT COUNT(1) FROM ScanResult WHERE IsMarking=0 AND IsDeleted=0 AND ExamSubjectId=" + exam_subject_id;
var unScanCount = Convert.ToInt32(new MysqlDBHelper(tenant).ExecuteScalar(sql));
if (unScanCount > 0)
{
Response.Write("系统正在识别试卷,请全部识别完成后再保存!");
return false;
}
sql = "SELECT COUNT(1) FROM MK_ExamResult WHERE ExamSubjectId=" + exam_subject_id + " AND IsSync=0 AND IsObjectiveQuestions_bit=0 " +
" and GroupNO_nvarchar not in (SELECT GroupNo FROM ScanResult WHERE ExamSubjectId=" + exam_subject_id + " and IsDeleted=1)";
var unSyncCount = Convert.ToInt32(new MysqlDBHelper(tenant).ExecuteScalar(sql));
if (unSyncCount > 0 && examStatus == 2)
{
Response.Write("系统正在识别分配试题请等待1分钟后重试");
return false;
}
return true;
}
string bearer = "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI3MTllNTBhZS1hZGY0LTRjZTAtYmYyMy1lMTI5ZTcxMzZlNTYiLCJpYXQiOiIxMi8xMi8yMDIzIDEzOjQ2OjMxIiwicm9sZSI6IjUiLCJ0ZW5hbnQiOiIxIiwidXNlciI6IjI1IiwiaWQiOiIyNSIsInBvc2l0aW9uIjoiNDg4NDg0NjI1NzkzMDkzIiwic2NvcGUiOiJMZWFybkFkbWluIiwibmFtZSI6Iua2qumZteWNgeS4g-S4reWtpueuoeeQhuWRmCIsIm5iZiI6MTcwMjM1OTk5MSwiZXhwIjoxNzAyNzkxOTkxLCJpc3MiOiJtay1hZCIsImF1ZCI6IkRUQ1RBZG1pbkNsaWVudCJ9.aGsfeD2vpTv6q_KmeRID12GY6GnztZoavQtxWlJOoDo";
private result CheckStatusByApi(long subjectiveSettingId)
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.SystemDefault | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;
string url = "http://192.168.2.9:6500/";
if (Request.Url.Host.ToLower().Contains("w.23544.com"))
{
// 测试地址
url = "https://mka.w.23544.com:8843/";
bearer = token;
}
else if (Request.Url.Host.ToLower().Contains("23544.com"))
{
// 正式地址
url = "https://mk-api.23544.com/ad/";
bearer = token;
}
else if (Request.Url.Host.ToLower().Contains("localhost"))
{
// 开发地址
url = "http://192.168.2.8:6500/";
}
url += "api/marking-setting/sub/" + subjectiveSettingId + "/cut-check";
//Response.Write("<script>alert('"+ bearer + ",,,,+"+ url + "')</script>");
var httpItem = new HttpItem();
httpItem.Header.Add("Authorization", bearer);
httpItem.Method = "GET";
//httpItem.Postdata = body;
//httpItem.PostEncoding = Encoding.UTF8;
httpItem.ContentType = "application/json";
httpItem.URL = url;
var reponse = HttpHelper.Default.GetHtml(httpItem);
if (reponse.StatusCode != HttpStatusCode.OK)
{
throw new Exception("验证接口调用失败!" + Response.StatusCode + " ||| " + reponse.Html);
}
//return (result)JsonConvert.DeserializeObject(reponse.Html, typeof(result));
var ress = JsonConvert.DeserializeObject<result>(reponse.Html);
if (ress == null || ress.code != "200")
{
throw new Exception("验证接口调用失败!" + Response.StatusCode + " ||| " + reponse.Html);
}
return ress;
}
private string RequestPost(string id, string body)
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.SystemDefault | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;
// 测试地址
string url = "http://192.168.2.9:6500/";
if (Request.Url.Host.ToLower().Contains("w.23544.com"))
{
// 测试地址
url = "https://mka.w.23544.com:8843/";
bearer = token;
}
else if (Request.Url.Host.ToLower().Contains("23544.com"))
{
// 正式地址
url = "https://mk-api.23544.com/ad/";
bearer = token;
}
else if (Request.Url.Host.ToLower().Contains("localhost"))
{
// 开发地址
url = "http://192.168.2.8:6500/";
}
url += "api/marking-setting/sub/" + id + "/cut";
var httpItem = new HttpItem();
httpItem.Header.Add("Authorization", bearer);
httpItem.Method = "POST";
httpItem.Postdata = body;
httpItem.PostEncoding = Encoding.UTF8;
httpItem.ContentType = "application/json";
httpItem.URL = url;
var reponse = HttpHelper.Default.GetHtml(httpItem);
if (reponse.StatusCode != HttpStatusCode.OK)
{
throw new Exception("调用保存失败!");
}
return reponse.Html;
//WebRequest request = WebRequest.Create(url);
//request.Method = "POST";
////post传参数
//byte[] bytes = Encoding.ASCII.GetBytes(body);
//request.Headers.Add("Authorization", bearer);
//request.ContentType = "application/json";
//request.ContentLength = body.Length;
//Stream sendStream = request.GetRequestStream();
//sendStream.Write(bytes, 0, bytes.Length);
//sendStream.Close();
////得到返回值
//WebResponse response = request.GetResponse();
//string OrderQuantity = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("UTF-8")).ReadToEnd();
//return OrderQuantity;
}
public class CutList
{
public string questionNum { get; set; }
public int subQuestionCount { get; set; }
public string score { get; set; }
public string scoreInterval { get; set; }
}
public class result
{
public string message { get; set; }
public string code { get; set; }
public bool? data { get; set; }
}
}