using FangYar.Model.TRAIN; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Concurrent; using System.Data; using System.IO; using System.Threading; using System.Threading.Tasks; namespace HardWareInteface.TrainHandle { /// /// 阿里的战训设备接口 /// public class TrainQueueTaskAl { public const string subjectOrg = "D8DC637B8B984848A63F82A018AFAEB0"; public static ConcurrentQueue infoQueue = new ConcurrentQueue(); private static CancellationTokenSource m_DealToken = new CancellationTokenSource(); private static Task m_DealTask = Task.Factory.StartNew(DealInfoList, m_DealToken.Token); public static void infoQueueFun(infoModel data) { try { infoQueue.Enqueue(data); //添加 } catch (Exception e) { WriteLog(e.Message, data.LogPath); } WriteLog("队列长度:" + infoQueue.Count.ToString(), data.LogPath); } private static void DealInfoList() { while (!m_DealToken.IsCancellationRequested) { infoModel dataInfo = null; if (infoQueue.TryDequeue(out dataInfo)) { try { DealInfo(dataInfo); } catch (Exception ex) { WriteLog(ex.Source + ex.StackTrace + ex.Message + "DealInfoList_Error", dataInfo.LogPath); } } else { Thread.Sleep(100); } } } private static void DealInfo(infoModel infomodel) { string strLog = ""; try { strLog += "进入DealInfo" + "\r\n"; string TestName = matchingSubject(infomodel.TestName); string RecordCount = infomodel.RecordCount; string ResultInfo = infomodel.ResultInfo; string org_id = infomodel.OrgId; int upTrue = 0, upFalse = 0; string taskArr = ""; #region if (Convert.ToInt32(RecordCount) > 0) { string[] ResultInfos = ResultInfo.Split(';'); for (int i = 0; i < ResultInfos.Length; i++) { try { if (!string.IsNullOrEmpty(ResultInfos[i])) { string[] ResultArry = ResultInfos[i].ToString().Split(','); string emp_num = ResultArry[0]; string name = ResultArry[1]; string result = ResultArry[2]; string doman = ResultArry[3]; string time = ResultArry[4]; string updateScoreSql = "update train_score set result = '" + result + "'" + " ,reportperson_name = '" + doman + "'" + " ,report_time = '" + time + "'" + " ,source_type = 3" + " where extend1 = '" + emp_num + "'"; int a = FangYar.Common.MySqlHelper.Execute(updateScoreSql); ////获取训练成绩 获取该人员的最新的一条训练成绩 //string scoreSql = "SELECT ts.id,ts.task_id FROM train_score ts left join train_task tt on ts.task_id = tt.id" + // " WHERE ts.org_id = '" + org_id + "'" + // " and ts.emp_id = '" + emp_num + "' and ts.subject_name = '" + TestName + "' " + // " and (tt.state = 0 or tt.state = 1)" + // " and (ts.result is null or result = '') and (ts.score is null or ts.score = '')" + // " and (ts.remark is null or remark = '') ORDER BY ts.training_date DESC LIMIT 0,1"; //DataTable dt_task = FangYar.Common.MySqlHelper.Query(scoreSql).Tables[0]; //if (dt_task.Rows.Count == 0) //{ // strLog += "获取到此人(" + name + ")的训练成绩信息为空:" + ResultInfos[i].ToString() + "\r\n"; // ScoreFlow(org_id, TestName, RecordCount, emp_num, name, result, doman, time, "2");//将成绩流水入库 1:存在任务中 2: 不存在任务 // continue; //} //else //{ // strLog += "存在此人(" + name + ")的训练成绩\r\n"; // ScoreFlow(org_id, TestName, RecordCount, emp_num, name, result, doman, time, "1");//将成绩流水入库 1:存在任务中 2: 不存在任务 //} //string scoreId = dt_task.Rows[0]["ID"].ToString(); //string taskId = dt_task.Rows[0]["TASK_ID"].ToString(); //if (!taskArr.Contains(taskId)) { taskArr += taskId + ","; } //string updateScoreSql = "update train_score set result = '" + result + "'" + // " ,reportperson_name = '" + doman + "'" + // " ,report_time = '" + time + "'" + // " ,source_type = 3" + // " where id = '" + scoreId + "'"; //int a = FangYar.Common.MySqlHelper.Execute(updateScoreSql); var flag = true; if (a >= 1) { upTrue += a; } else { upFalse += a; flag = false; } strLog += "成绩表 extend1编号:" + emp_num + ",操作:" + flag + "\r\n"; /** * 修改训练任务状态 * 屏蔽原因:只上报了结果未上报得分,还需要在平台进行编辑,所以不能改任务状态。 */ //string updateTaskSql = "update train_task set state = 2" + // " where id = '" + taskId + "'"; //int b = FangYar.Common.MySqlHelper.Execute(updateScoreSql); //upScoreNum += b; //flag = b >= 1 ? true : false; //strLog += "任务ID:" + scoreId + ",操作:" + flag + "\r\n"; } } catch (Exception e) { strLog += "Exception 循环内部:" + e.Message + "\r\n"; } } } #endregion strLog += "成功:" + upTrue + "(条),失败:" + upFalse + "(条)\r\n"; strLog += "任务ID集合:" + taskArr + "\r\n"; } catch (Exception e) { strLog += "Exception:" + e.Message + "\r\n"; } WriteLog(strLog, infomodel.LogPath); } ////根据userId,subjectId计算得分 //private static string calculateAchievement(DataTable dt_task) //{ // string strLog = ""; // //获取人员信息 // FangYar.Model.TBL.TBL_SYS_EMP_Model model_emp = new FangYar.Model.TBL.TBL_SYS_EMP_Model(); // FangYar.BLL.TBL.SysEmpBLL bll_emp = new FangYar.BLL.TBL.SysEmpBLL(); // model_emp = bll_emp.GetModelByUID(emp_num); // if (model_emp == null) // { // strLog += "获取到人员信息为空;" + "\r\n"; // } // string SUBJECTCONTENT = dt_task.Rows[0]["SUBJECTCONTENT"].ToString(); // string subjectid = ""; // string subjectname = ""; // JArray jarray = JsonConvert.DeserializeObject(SUBJECTCONTENT); // foreach (JObject obj in jarray.Value()) // { // if (obj["NAME"].ToString() == TestName) // { // subjectid = obj["ID"].ToString(); // subjectname = obj["NAME"].ToString(); // break; // } // } // strLog += "解析SUBJECTCONTENT"; // string TRAINIGDATE = dt_task.Rows[0]["TRAINIGDATE"].ToString(); // string TASKID = dt_task.Rows[0]["ID"].ToString(); // string TASKNAME = dt_task.Rows[0]["NAME"].ToString(); // string ORG_ID = dt_task.Rows[0]["ORG_ID"].ToString(); // string ORG_NAME = dt_task.Rows[0]["ORG_NAME"].ToString(); // //{"data":[{"ppl_Id":"18609986119","ppl_Name":"颜龙","ppl_Sex":"0","ppl_Age":"36"}]} // string REPORTPERSONID = "", REPORTPERSONNAME = ""; // string leaderobj = dt_task.Rows[0]["LEADTRAINING"].ToString(); // JObject leaderObj = JsonConvert.DeserializeObject(leaderobj); // foreach (JObject obj in leaderObj.Value("data")) // { // REPORTPERSONID = obj["ppl_Id"].ToString(); // REPORTPERSONNAME = obj["ppl_Name"].ToString(); // } // strLog += "解析leaderObj"; // if (model_emp != null) // { // FangYar.Model.TRAIN.T_TRAININGSCORE trainscore = new FangYar.Model.TRAIN.T_TRAININGSCORE(); // trainscore.ID = Guid.NewGuid().ToString("N"); // trainscore.USERS_UID = emp_num; // trainscore.USERS_NAME = name; // trainscore.SUBJECTID = subjectid; // trainscore.SUBJECTNAME = subjectname; // trainscore.TRAINIGDATE = TRAINIGDATE; // trainscore.TASKID = TASKID; // trainscore.TASKNAME = TASKNAME; // trainscore.RESULT = result; // if (TestName == "3000米跑" || TestName == "蛇形跑" || TestName == "屈臂悬垂" || TestName == "5000米负重跑" // || TestName == "400米救人疏散物资" || TestName == "100米负重跑" || TestName == "60米肩梯跑" // || TestName == "负重上10楼" || TestName == "搬运重物折返" || TestName == "绳索攀爬" // || TestName == "双杠直臂前移" || TestName == "30米×2蛇形跑") // { // string millisecond = ""; // switch (TestName) // { // case "3000米跑": // case "屈臂悬垂": // case "5000米负重跑": // case "400米救人疏散物资": // case "负重上10楼": // case "搬运重物折返": // string a = result.Split('\'')[0]; // string b = result.Split('\'')[1].Split('"')[0]; // millisecond = (Convert.ToInt32(a) * 60 * 1000 + Convert.ToInt32(b) * 1000).ToString(); // break; // case "蛇形跑": // case "100米负重跑": // case "60米肩梯跑": // case "绳索攀爬": // case "双杠直臂前移": // case "30米×2蛇形跑": // millisecond = (Convert.ToDouble(result) * 1000).ToString(); ; // break; // default: // millisecond = "0"; // break; // } // strLog += "获取成绩前"; // trainscore.ACHIEVEMENT = GetScoreTime(dt, millisecond, model_emp.EMP_SEX, CalculateAgeString(Convert.ToDateTime(model_emp.BIRTHDAY), Convert.ToDateTime(time))); // strLog += "成绩:" + trainscore.ACHIEVEMENT; // } // else if (TestName == "屈腿仰卧起坐" || TestName == "引体向上" || TestName == "俯卧撑" || TestName == "跳绳" // || TestName == "单杠卷身上" || TestName == "双杠臂屈伸" || TestName == "双杠直臂前移") // { // strLog += "获取成绩前"; // DateTime t1 = Convert.ToDateTime(model_emp.BIRTHDAY); // DateTime t2 = Convert.ToDateTime(time); // trainscore.ACHIEVEMENT = GetScoreFrequency(dt, result, model_emp.EMP_SEX, CalculateAgeString(Convert.ToDateTime(model_emp.BIRTHDAY), Convert.ToDateTime(time))); // strLog += "成绩:" + trainscore.ACHIEVEMENT; // } // } // return ""; //} //获取匹配的系统训练科目 private static string matchingSubject(string subjectName) { string _subjectName = subjectName; switch (subjectName) { case "俯卧撑": _subjectName = "男子俯卧撑"; break; case "屈腿仰卧起坐": _subjectName = "男子屈腿仰卧起坐"; break; case "100米负重跑": _subjectName = "男子100米负重跑"; break; case "单杠卷身上": _subjectName = "男子单杠卷身上"; break; case "双杠臂屈伸": _subjectName = "男子双杠臂屈伸"; break; case "绳索攀爬": _subjectName = "男子4楼攀爬绳索"; break; case "30米×2蛇形跑": _subjectName = "男子30×2蛇形跑"; break; } return _subjectName; } /// /// 将成绩流水入库 /// /// /// /// /// /// /// /// /// /// private static void ScoreFlow(string org_id, string TestName, string RecordCount, string emp_num, string name, string result, string doman, string time, string uptype) { try { string scoreFlowId = Guid.NewGuid().ToString("N"); FangYar.Model.TRAIN.T_TRAININGSCOREFLOW model_flow = new FangYar.Model.TRAIN.T_TRAININGSCOREFLOW(); model_flow.ID = scoreFlowId; model_flow.ORG_ID = org_id; model_flow.TASKNAME = TestName; model_flow.NUMBEROFPEOPLE = RecordCount; model_flow.EMPCODE = emp_num; model_flow.EMPNAME = name; model_flow.RESULT = result; model_flow.MANAGER = doman; model_flow.UPTIME = time; model_flow.UPTYPE = uptype; string addScoreFlowSql = "insert into train_score_flow(id,org_id,task_name,person_num,emp_code,emp_name,result,manager,up_time,up_type,extend1) values('" + scoreFlowId + "','" + org_id + "','" + TestName + "','"+ RecordCount + "','"+ emp_num + "','"+ name + "','"+ result + "','"+ doman + "','"+ time + "','"+ uptype + "','"+ DateTime.Now.ToString() + "')"; FangYar.Common.MySqlHelper.Execute(addScoreFlowSql); try { FangYar.FYMQTT.MQTT mqtt = new FangYar.FYMQTT.MQTT(); mqtt.messagePublished(System.Web.HttpUtility.UrlEncode(FangYar.Common.JsonHelper.ToJson(model_flow)), "trainingscore_" + org_id); } catch (Exception e) { } } catch (Exception e) { } } /// /// 输出日志 /// static ReaderWriterLockSlim LogWriteLock = new ReaderWriterLockSlim(); private static void WriteLog(string msg, string logPath) { FangYar.Common.MyLogHelper.WriteMsg(new FangYar.Common.LogInfoMo() { message = msg, msgType = FangYar.Common.EnumLogMsgTypeEnum.Error, path = "TrainTMQData\\" + logPath }); //try //{ // LogWriteLock.EnterWriteLock(); // string path = AppDomain.CurrentDomain.BaseDirectory + "log\\TrainTMQData\\" + logPath + "\\数据处理\\"; // string filename = DateTime.Now.ToString("yyyyMMdd") + ".txt"; // if (Directory.Exists(path) == false)//如果不存在就创建文件夹 // { // Directory.CreateDirectory(path); // } // FileInfo file = new FileInfo(path + filename); // if (!file.Exists) // { // try // { // FileStream fs; // fs = File.Create(path + filename); // fs.Close(); // } // catch // { // } // } // using (FileStream fs = new FileStream(path + filename, FileMode.Append, FileAccess.Write)) // { // using (StreamWriter sw = new StreamWriter(fs)) // { // sw.WriteLine("时间:" + DateTime.Now.ToString() + " 信息:" + msg); // } // } //} //catch (Exception e) //{ //} //finally //{ // LogWriteLock.ExitWriteLock(); //} } } }