软测单独项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

271 lines
9.2 KiB

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Odbc;
using System.Linq;
using System.Web;
namespace FangYar.WebUI.ashx
{
/// <summary>
/// ClickHouseDataBase 的摘要说明
/// </summary>
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);
}
/// <summary>
/// 更新出操数据
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
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<ExClickHouseMo> lis2 = new List<ExClickHouseMo>();
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并返回数据集
/// <summary>
/// 执行Sql并返回数据集
/// </summary>
/// <param name="sqlStr"></param>
/// <returns></returns>
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
{
/// <summary>
/// 出操信息ID
/// </summary>
public string id { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string users_name { get; set; }
/// <summary>
/// 出操开始时间
/// </summary>
public DateTime EXTEND2 { get; set; }
/// <summary>
/// 出操结束时间
/// </summary>
public DateTime EXTEND4 { get; set; }
/// <summary>
/// 身份证号
/// </summary>
public string IDNUMBER { get; set; }
}
public class ExClickHouseMo
{
/// <summary>
/// 图片地址
/// </summary>
public string pic_url { get; set; }
/// <summary>
/// 大图地址
/// </summary>
public string global_pic_url { get; set; }
/// <summary>
/// 设备时间
/// </summary>
public DateTime alarm_time { get; set; }
/// <summary>
/// 信息创建时间
/// </summary>
public DateTime create_time { get; set; }
/// <summary>
/// 身份证号
/// </summary>
public string id_card { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string username { get; set; }
}
}
}