using System; using System.Collections.Generic; using System.Data; using System.Data.Odbc; using System.Linq; using System.Web; namespace FangYar.WebUI.ashx { /// /// ClickHouseDataBase 的摘要说明 /// public class ClickHouseDataBase : IHttpHandler { string consqlserver = @"DSN=clickhouse.xfzn365.cn"; public void ProcessRequest(HttpContext context) { string action = context.Request.Params["Action"]; switch (action) { case "UpdExerciseData": context.Response.Write(UpdExerciseData(context)); return; } string returnstr = ""; // 记录操作日志 BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Query, "ClickHouse数据库查询", ""); try { string OTIME = context.Request.Params["OTIME"]; string BTIME = context.Request.Params["BTIME"]; string UUID = context.Request.Params["UUID"]; string uu = ""; if (UUID != "") { uu = UUID.Substring(0, UUID.Length - 1); } else { uu = "\'\'"; } string sql = "SELECT alarm_time, pic_url FROM default.t_face_data WHERE pic_url<>'' and dev_serial in (" + uu + ") and alarm_time BETWEEN '" + BTIME + "' and '" + OTIME + "'"; context.Response.ContentType = "text/plain"; OdbcConnection myConnection = new OdbcConnection(consqlserver); OdbcCommand myCommand = new OdbcCommand(sql, myConnection); myConnection.Open(); OdbcDataAdapter adapter = new OdbcDataAdapter(); adapter.SelectCommand = myCommand; DataSet ds = new DataSet(); adapter.Fill(ds); returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":"; returnstr += FangYar.Common.JsonHelper.ToJson(ds); returnstr += "}"; adapter.Dispose(); myCommand.Dispose(); myConnection.Close(); } catch (Exception e) { // 记录操作日志 BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Error, "ClickHouse数据库查询", "查询异常:" + e); } context.Response.Write(returnstr); } /// /// 更新出操数据 /// /// /// private string UpdExerciseData(HttpContext context) { string returnstr = "OK"; try { string day = context.Request.Params["day"]; string TopDay = context.Request.Params["TopDay"]; //当前时间 DateTime dtm = DateTime.Now; if (!DateTime.TryParse(day, out dtm)) { dtm = DateTime.Now; } if (!string.IsNullOrWhiteSpace(TopDay)) { dtm = dtm.AddDays(-1); } //查询日期字符串 string dayStr = dtm.ToString("yyyy-MM-dd"); //查询mysql数据库未出操数据 string sql1 = " WITH t1 as(SELECT id,task_id,users_uid,users_name from oa_exercise_record WHERE date_format(createtime,'%Y-%m-%d') = '" + dayStr + @"' and FACE_READ_STATE <> '1') SELECT t1.*,tk.EXTEND2,tk.EXTEND4,tk.ORG_NAME,e.IDNUMBER from t1 LEFT JOIN oa_exercise_task tk on t1.task_id=tk.id LEFT JOIN tbl_sys_emp e on t1.users_uid=e.users_uid "; //查询clickhouse数据库出操数据 string sql2 = " SELECT * from default.t_face_data WHERE create_time > '" + dayStr + " 06:30:00' and create_time < '" + dayStr + " 09:00:00' "; var dt1 = FangYar.Common.MySqlHelper.QueryTable(sql1); var dt2 = Execute(sql2); List lis2 = new List(); for (int i = 0; i < dt2.Rows.Count; i++) { try { DateTime.TryParse(dt2.Rows[i]["alarm_time"] + "", out DateTime alarm_time); DateTime.TryParse(dt2.Rows[i]["create_time"] + "", out DateTime create_time); lis2.Add(new ExClickHouseMo() { alarm_time = alarm_time, create_time = create_time, id_card = dt2.Rows[i]["id_card"] + "", pic_url = dt2.Rows[i]["pic_url"] + "", global_pic_url = dt2.Rows[i]["global_pic_url"] + "", username = dt2.Rows[i]["username"] + "", }); } catch (Exception e) { } } for (int i = 0; i < dt1.Rows.Count; i++) { try { DateTime.TryParse(dt1.Rows[i]["EXTEND2"] + "", out DateTime EXTEND2); DateTime.TryParse(dt1.Rows[i]["EXTEND4"] + "", out DateTime EXTEND4); var IDNUMBER = dt1.Rows[i]["IDNUMBER"] + ""; var obj1 = lis2.Where(p => p.id_card == IDNUMBER && ((p.alarm_time >= EXTEND2 && p.alarm_time <= EXTEND4) || (p.create_time >= EXTEND2 && p.create_time <= EXTEND4))).OrderBy(p => p.create_time).FirstOrDefault(); var id = dt1.Rows[i]["id"] + ""; if (obj1 != null) { string updSql = " UPDATE oa_exercise_record set FACE_READ_STATE='1',STATE='1',FACE_READ_SMALL_IMG='" + obj1.pic_url + "',FACE_READ_BIG_IMG='" + obj1.global_pic_url + "',FACE_READ_START_TIME='" + obj1.alarm_time.ToString("yyyy-MM-dd hh:mm:ss") + "',FACE_READ_END_TIME=now() WHERE id = '" + id + "' "; FangYar.Common.MySqlHelper.Execute(updSql); } } catch (Exception e) { } } } catch (Exception e) { return "Error:" + e; } return returnstr; } #region 执行Sql并返回数据集 /// /// 执行Sql并返回数据集 /// /// /// public DataTable Execute(string sqlStr)//Execute(string sql,) { try { OdbcConnection myConnection = new OdbcConnection(consqlserver); OdbcCommand myCommand = new OdbcCommand(sqlStr, myConnection); myConnection.Open(); OdbcDataAdapter adapter = new OdbcDataAdapter(); adapter.SelectCommand = myCommand; DataSet ds = new DataSet(); adapter.Fill(ds); adapter.Dispose(); myCommand.Dispose(); myConnection.Close(); return ds.Tables[0]; } catch (Exception ex) { return new DataTable(); } } #endregion public bool IsReusable { get { return false; } } public class ExMysqlMo { /// /// 出操信息ID /// public string id { get; set; } /// /// 姓名 /// public string users_name { get; set; } /// /// 出操开始时间 /// public DateTime EXTEND2 { get; set; } /// /// 出操结束时间 /// public DateTime EXTEND4 { get; set; } /// /// 身份证号 /// public string IDNUMBER { get; set; } } public class ExClickHouseMo { /// /// 图片地址 /// public string pic_url { get; set; } /// /// 大图地址 /// public string global_pic_url { get; set; } /// /// 设备时间 /// public DateTime alarm_time { get; set; } /// /// 信息创建时间 /// public DateTime create_time { get; set; } /// /// 身份证号 /// public string id_card { get; set; } /// /// 姓名 /// public string username { get; set; } } } }