using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using Newtonsoft.Json;
using System.IO;
using Spire.Doc;
using Spire.Doc.Documents;
using System.Drawing;
using Spire.Doc.Fields;
using MySql.Data.MySqlClient;
using System.Text.RegularExpressions;
using FangYar.Common;
namespace FangYar.WebUI.ashx
{
///
/// CarHandler 的摘要说明
///
public class FaceStatisticsHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Other, "人脸点名统计操作请求", "");
context.Response.ContentType = "text/plain";
string action = context.Request.Params["Action"];
string returnstr = "";
switch (action)
{
// 点名统计页数据获取
case "getRollcallSta":
returnstr = getRollcallSta(context);
break;
//点名详情数据获取
case "getRollcallStaItem":
returnstr = getRollcallStaItem(context);
break;
// 出操统计页数据获取
case "getExerciseSta":
returnstr = getExerciseSta(context);
break;
//出操详情数据获取
case "getExerciseStaItem":
returnstr = getExerciseStaItem(context);
break;
//删除出操现场视频
case "DelExerciseFile":
returnstr = DelExerciseFile(context);
break;
// 考勤统计页数据获取
case "getAttendanceSta":
returnstr = getAttendanceSta(context);
break;
// 考勤详情数据获取
case "getAttendanceStaItem":
returnstr = getAttendanceStaItem(context);
break;
// 门禁考勤统计页数据获取 区分存在下级单位和不存在下级单位的情况
case "getAttendanceStaDoor":
returnstr = getAttendanceStaDoorOptionals(context);
break;
// 门禁考勤详情数据获取
case "getAttendanceStaItemDoor":
returnstr = getAttendanceStaItemDoor(context);
break;
case "getAttendanceStaDoorWeek":
returnstr = getAttendanceStaDoorWeek(context);
break;
case "getAttendanceDetails":
returnstr = getAttendanceDetails(context);
break;
case "getCameraId":
returnstr = getCameraId(context);
break;
case "getAttendanceRefresh":
returnstr = getAttendanceRefresh(context);
break;
//出操详细数据获取
case "getExerciseRefresh":
returnstr = getExerciseRefresh(context);
break;
//实时考勤监控查询
case "getDoorMonitor":
returnstr = getDoorMonitor(context);
break;
//出操任务时间区域
case "getExerciseTime":
returnstr = getExerciseTime(context);
break;
//点名任务时间区域
case "getRollcallTime":
returnstr = getRollcallTime(context);
break;
//更新点名状态
case "getROLLCALLRefresh":
returnstr = getROLLCALLRefresh(context);
break;
//总队机关门禁考勤信息统计
case "getAttendanceStatisticsXZZDJG":
returnstr = getAttendanceStatisticsXZZDJG(context);
break;
case "getAttendanceStaDoorForDeptForHome":
returnstr = getAttendanceStaDoorForDeptForHome(context);
break;
}
context.Response.Write(returnstr);
}
///
/// 点名状态
///
///
///
private string getROLLCALLRefresh(HttpContext context)
{
string returnstr = "";
try
{
string TIME = context.Request.Params["TIME"];
string MTIME = context.Request.Params["MTIME"];
string PIC_URL = context.Request.Params["PIC_URL"];
string ID = context.Request.Params["ID"];
string STATE = context.Request.Params["STATE"];
string sql1 = "";
if (STATE == "in")
{
sql1 = "UPDATE oa_rollcall_record SET FACE_READ_STATE='1'," +
"FACE_READ_SMALL_IMG ='" + PIC_URL + "',FACE_READ_BIG_IMG='" + PIC_URL + "'," +
"FACE_READ_START_TIME='" + MTIME + "',FACE_READ_END_TIME='" + MTIME + "' where id='" + ID + "'";
}
else if (STATE == "out")
{
sql1 = "UPDATE oa_rollcall_record SET FACE_READ_STATE='2'," +
"FACE_READ_SMALL_IMG ='" + PIC_URL + "',FACE_READ_BIG_IMG='" + PIC_URL + "'," +
"FACE_READ_START_TIME='" + MTIME + "',FACE_READ_END_TIME='" + MTIME + "' where id='" + ID + "'";
}
DataTable dt1 = FangYar.Common.MySqlHelper.QueryTable(sql1);
returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":";
returnstr += FangYar.Common.JsonHelper.ToJson(dt1);
//returnstr += FangYar.Common.JsonHelper.ToJson(dt1);
returnstr += "}";
}
catch (Exception e)
{
returnstr = "{\"code\":-1,\"msg\":\"" + e.Message + "\",\"count\":0,\"data\":[]}";
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Query, "人脸点名统计操作请求", "点名状态异常:" + e);
}
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Query, "人脸点名统计操作请求", "点名状态");
return returnstr;
}
///
/// 点名任务时间区域
///
///
///
private string getRollcallTime(HttpContext context)
{
string returnstr = "";
try
{
string ORG_ID = context.Request.Params["ORG_ID"];
string ID = context.Request.Params["ID"];
string TIME = context.Request.Params["TIME"];
string MTIME = context.Request.Params["MTIME"];
string sql1 = "";
sql1 = "select EXTEND2 BTIME,EXTEND4 OTIME from oa_rollcall_task where ID in(select TASK_ID from oa_rollcall_record where ID ='" + ID + "') AND TIME_TYPE ='" + TIME + "'";
DataTable dt1 = FangYar.Common.MySqlHelper.QueryTable(sql1);
returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":";
returnstr += FangYar.Common.JsonHelper.ToJson(dt1);
returnstr += "}";
}
catch (Exception e)
{
returnstr = "{\"code\":-1,\"msg\":\"" + e.Message + "\",\"count\":0,\"data\":[]}";
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Error, "人脸点名统计操作请求", "点名任务时间区域异常:" + e);
}
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Query, "人脸点名统计操作请求", "点名任务时间区域");
return returnstr;
}
///
/// 出操时间区域获取
///
///
///
private string getExerciseTime(HttpContext context)
{
string returnstr = "";
try
{
string ORG_ID = context.Request.Params["ORG_ID"];
string ID = context.Request.Params["ID"];
string TIME = context.Request.Params["TIME"];
string MTIME = context.Request.Params["MTIME"];
string sql1 = "";
sql1 = "select EXTEND2 BTIME,EXTEND4 OTIME from oa_exercise_task where ID in(select TASK_ID from oa_exercise_record where ID ='" + ID + "') AND TIME_TYPE ='" + TIME + "'";
DataTable dt1 = FangYar.Common.MySqlHelper.QueryTable(sql1);
returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":";
returnstr += FangYar.Common.JsonHelper.ToJson(dt1);
//returnstr += FangYar.Common.JsonHelper.ToJson(dt1);
returnstr += "}";
}
catch (Exception e)
{
returnstr = "{\"code\":-1,\"msg\":\"" + e.Message + "\",\"count\":0,\"data\":[]}";
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Error, "人脸点名统计操作请求", "出操时间区域获取异常:" + e);
}
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Query, "人脸点名统计操作请求", "出操时间区域获取");
return returnstr;
}
//数据更新
private string getAttendanceRefresh(HttpContext context)
{
string returnstr = "";
try
{
string TIME = context.Request.Params["TIME"];
string MTIME = context.Request.Params["MTIME"];
string PIC_URL = context.Request.Params["PIC_URL"];
string ID = context.Request.Params["ID"];
string STATE = context.Request.Params["STATE"];
string sql1 = "";
if (STATE == "in")
{
if (TIME == "1")
{
sql1 = "UPDATE oa_attendance_record SET FACE_READ_STATE='1'," +
"FACE_READ_SMALL_IMG ='" + PIC_URL + "',FACE_READ_BIG_IMG='" + PIC_URL + "'," +
"FACE_READ_START_TIME='" + MTIME + "',FACE_READ_END_TIME='" + MTIME + "' where id='" + ID + "'";
}
if (TIME == "5")
{
sql1 = "UPDATE oa_attendance_record SET FACE_READ_STATE_PM='1'," +
"FACE_READ_SMALL_IMG_PM ='" + PIC_URL + "',FACE_READ_BIG_IMG_PM='" + PIC_URL + "'," +
"FACE_READ_START_TIME_PM='" + MTIME + "',FACE_READ_END_TIME_PM='" + MTIME + "' where id='" + ID + "'";
}
}
else if (STATE == "out")
{
if (TIME == "1")
{
sql1 = "UPDATE oa_attendance_record SET FACE_READ_STATE='2'," +
"FACE_READ_SMALL_IMG ='" + PIC_URL + "',FACE_READ_BIG_IMG='" + PIC_URL + "'," +
"FACE_READ_START_TIME='" + MTIME + "',FACE_READ_END_TIME='" + MTIME + "' where id='" + ID + "'";
}
if (TIME == "5")
{
sql1 = "UPDATE oa_attendance_record SET FACE_READ_STATE_PM='2'," +
"FACE_READ_SMALL_IMG_PM ='" + PIC_URL + "',FACE_READ_BIG_IMG_PM='" + PIC_URL + "'," +
"FACE_READ_START_TIME_PM='" + MTIME + "',FACE_READ_END_TIME_PM='" + MTIME + "' where id='" + ID + "'";
}
}
DataTable dt1 = FangYar.Common.MySqlHelper.QueryTable(sql1);
returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":";
returnstr += FangYar.Common.JsonHelper.ToJson(dt1);
//returnstr += FangYar.Common.JsonHelper.ToJson(dt1);
returnstr += "}";
}
catch (Exception e)
{
returnstr = "{\"code\":-1,\"msg\":\"" + e.Message + "\",\"count\":0,\"data\":[]}";
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Error, "人脸点名统计操作请求", "数据更新异常:" + e);
}
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Update, "人脸点名统计操作请求", "数据更新");
return returnstr;
}
//数据更新
private string getExerciseRefresh(HttpContext context)
{
string returnstr = "";
try
{
string TIME = context.Request.Params["TIME"];
string MTIME = context.Request.Params["MTIME"];
string PIC_URL = context.Request.Params["PIC_URL"];
string ID = context.Request.Params["ID"];
string STATE = context.Request.Params["STATE"];
string sql1 = "";
if (STATE == "in")
{
sql1 = "UPDATE oa_exercise_record SET FACE_READ_STATE='1'," +
"FACE_READ_SMALL_IMG ='" + PIC_URL + "',FACE_READ_BIG_IMG='" + PIC_URL + "'," +
"FACE_READ_START_TIME='" + MTIME + "',FACE_READ_END_TIME='" + MTIME + "' where id='" + ID + "'";
}
else if (STATE == "out")
{
sql1 = "UPDATE oa_exercise_record SET FACE_READ_STATE='2'," +
"FACE_READ_SMALL_IMG ='" + PIC_URL + "',FACE_READ_BIG_IMG='" + PIC_URL + "'," +
"FACE_READ_START_TIME='" + MTIME + "',FACE_READ_END_TIME='" + MTIME + "' where id='" + ID + "'";
}
DataTable dt1 = FangYar.Common.MySqlHelper.QueryTable(sql1);
returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":";
returnstr += FangYar.Common.JsonHelper.ToJson(dt1);
//returnstr += FangYar.Common.JsonHelper.ToJson(dt1);
returnstr += "}";
}
catch (Exception e)
{
returnstr = "{\"code\":-1,\"msg\":\"" + e.Message + "\",\"count\":0,\"data\":[]}";
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Error, "人脸点名统计操作请求", "数据更新异常:" + e);
}
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Update, "人脸点名统计操作请求", "数据更新");
return returnstr;
}
///
/// 查询摄像头编码
///
///
///
private string getCameraId(HttpContext context)
{
string returnstr = "";
try
{
string ORG_ID = context.Request.Params["ORG_ID"];
var pid = "";
try
{
//查询当前单位是否和上级单位同一驻地
string sqlStr1 = " SELECT IS_TOP_CAMP,PID from fire_org WHERE ORG_ID = '" + ORG_ID + "' ";
var dt1s = Common.MySqlHelper.QueryTable(sqlStr1);
if (dt1s.Rows[0]["IS_TOP_CAMP"] + "" == "1")
{
pid = Common.WebCommonUtil.GetOrgIdUpLevelToDownLevel(dt1s.Rows[0]["PID"] + "");
}
}
catch (Exception ex)
{
}
string sql1 = "SELECT EXTEND3 from tbl_camera WHERE org_id='" + ORG_ID + "' and LENGTH(EXTEND3)>0";
if (!string.IsNullOrWhiteSpace(pid))
{
sql1 = "SELECT EXTEND3 from tbl_camera WHERE (org_id='" + ORG_ID + "' or org_id='" + pid + "' ) and LENGTH(EXTEND3)>0";
}
DataTable dt1 = FangYar.Common.MySqlHelper.QueryTable(sql1);
returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":";
returnstr += FangYar.Common.JsonHelper.ToJson(dt1);
//returnstr += FangYar.Common.JsonHelper.ToJson(dt1);
returnstr += "}";
}
catch (Exception e)
{
returnstr = "{\"code\":-1,\"msg\":\"" + e.Message + "\",\"count\":0,\"data\":[]}";
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Error, "人脸点名统计操作请求", "查询摄像头编码异常:" + e);
}
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Query, "人脸点名统计操作请求", "查询摄像头编码");
return returnstr;
}
private string getAttendanceDetails(HttpContext context)
{
string returnstr = "";
string ORG_ID = context.Request.Params["ORG_ID"];
string ID = context.Request.Params["ID"];
string USERS_UID = context.Request.Params["USERS_UID"];
string USERS_NAME = context.Request.Params["USERS_NAME"];
string FACE_READ_STATE = context.Request.Params["FACE_READ_STATE"];
string findDate = context.Request.Params["findDate"];
string timeType = context.Request.Params["timeType"];
string OTIME = context.Request.Params["OTIME"];
string BTIME = context.Request.Params["BTIME"];
try
{
//查询数据类型:1、上午;5、下午
if (string.IsNullOrEmpty(timeType))
{
return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"timeType参数不能为空!\",\"data\":[]}";
}
//查询点名信息详情
string sql = "select UP_START_DATE bTime,UP_END_DATE oTime from oa_attendance_task where ID in(select TASK_ID from oa_attendance_record where ID='" + ID + "')";
if (timeType == "5")
{
sql = "select DOWN_START_DATE bTime,DOWN_END_DATE oTime from oa_attendance_task where ID in(select TASK_ID from oa_attendance_record where ID='" + ID + "')";
}
//string sql1 = "SELECT EXTEND3 from tbl_camera WHERE org_id='"+ORG_ID+"' and LENGTH(EXTEND3)>0";
DataTable dt = FangYar.Common.MySqlHelper.QueryTable(sql);
//DataTable dt1 = FangYar.Common.MySqlHelper.QueryTable(sql1);
returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":";
returnstr += FangYar.Common.JsonHelper.ToJson(dt);
//returnstr += FangYar.Common.JsonHelper.ToJson(dt1);
returnstr += "}";
}
catch (Exception e)
{
var a = Regex.Replace(e.Message, @"\r", "");
var b = Regex.Replace(a, @"\n", "");
returnstr = "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员!\",\"error\":\"" + b + "\",\"data\":[]}";
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Error, "人脸点名统计操作请求", "获取出操详情异常:" + e);
}
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Query, "人脸点名统计操作请求", "获取出操详情");
return returnstr;
}
#region 点名统计数据查询
//点名统计列表
private string getRollcallSta(HttpContext context)
{
string returnstr = "";
try
{
string findOrgId = context.Request.Params["orgId"];
if (string.IsNullOrEmpty(findOrgId))
{
return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"orgId参数不能为空!\",\"data\":[]}";
}
string findDate = context.Request.Params["findDate"];
if (string.IsNullOrEmpty(findDate))
{
findDate = DateTime.Now.ToString("yyyy-MM-dd");
}
string isContent = context.Request.Params["isContent"];
//直属下级机构 点名信息
string orgSql = @"SELECT o.org_id,o.org_name,o.pid AS pid,o.all_num FROM fire_org o WHERE TYPE = 0 AND (o.org_id = '" + findOrgId + @"' or pid = '" + findOrgId + @"')";
string rcSql = @"WITH t1 as(
SELECT ID,ORG_ID,ORG_NAME,USERS_UID,TIME_TYPE,FACE_READ_STATE STATE,TASK_ID
from oa_rollcall_record r WHERE TASK_ID in
( SELECT id from oa_rollcall_task tk,(select get_Org_child_list_OrgIds('" + findOrgId + @"') cids ) s WHERE
find_in_set(tk.org_id,cids) and date_format( tk.report_time, '%Y-%m-%d' ) = date_format( '" + findDate + @"', '%Y-%m-%d' )
)
)
SELECT t1.*,tk.REPORT_TIME
,if(STATE=0,if((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.REPORT_TIME , '%Y-%m-%d %H:%i:%s')
and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.REPORT_TIME , '%Y-%m-%d %H:%i:%s') )>0,3,
if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( tk.REPORT_TIME , '%Y-%m-%d %H:%i') and
date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( tk.REPORT_TIME , '%Y-%m-%d %H:%i') )>0,4,0)
),STATE) WORKSTATE
from t1 LEFT JOIN oa_rollcall_task tk on t1.TASK_ID=tk.ID";
if (isContent == "1")
{
//递归下级机构 点名信息
orgSql = @"SELECT o.org_id,o.org_name,o.pid AS pid,o.all_num FROM fire_org o, ( SELECT get_Org_child_list ( '" + findOrgId + @"' ) cids ) s WHERE TYPE = 0 AND find_in_set( org_id, cids )";
}
DataTable orgDt = FangYar.Common.MySqlHelper.QueryTable(orgSql);
DataTable rcDt = FangYar.Common.MySqlHelper.QueryTable(rcSql);
//点名信息 存入缓存
List list = new List();
for (int i = 0; i < rcDt.Rows.Count; i++)
{
list.Add(new RollcallMo()
{
orgId = rcDt.Rows[i]["ORG_ID"] + "",
timeType = rcDt.Rows[i]["TIME_TYPE"] + "",
userId = rcDt.Rows[i]["USERS_UID"] + "",
state = rcDt.Rows[i]["WORKSTATE"] + "",
WORKSTATE = rcDt.Rows[i]["STATE"] + ""
});
}
returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":[";
string[] xAxisData = new string[orgDt.Rows.Count];
int[] totalData = new int[orgDt.Rows.Count];
int[] leaveData = new int[orgDt.Rows.Count];
int[] arriveData = new int[orgDt.Rows.Count];
int[] noArriveData = new int[orgDt.Rows.Count];
int[] toleranceData = new int[orgDt.Rows.Count];
int[] lateData = new int[orgDt.Rows.Count];
for (int i = 0; i < orgDt.Rows.Count; i++)
{
int totalSum = 0, leaveSum = 0, arriveSum = 0, noArriveSum = 0, toleranceSum = 0, lateSum = 0;
if (i != 0) returnstr += ",";
string _orgId = orgDt.Rows[i]["ORG_ID"].ToString();
string _pId = orgDt.Rows[i]["PID"].ToString();
string _orgName = orgDt.Rows[i]["ORG_NAME"].ToString();
string _allNum = orgDt.Rows[i]["ALL_NUM"].ToString() == "" ? "0" : orgDt.Rows[i]["ALL_NUM"].ToString();
string orgMo = "{\"findDate\":\"" + findDate + "\",\"orgId\":\"" + _orgId + "\",\"pId\":\"" + _pId + "\",\"orgName\":\"" + _orgName + "\",\"allNum\":\"" + _allNum + "\"";
xAxisData[i] = "\"" + _orgName + "\"";
//早点名
var mornList = list.Where(p => p.orgId == _orgId && p.timeType == "1");
// 按人分组
var userGroup = mornList.GroupBy(p => p.userId);
// 应到
int mornTotal = userGroup.Count();
// 未识别
int mornNoArrive = userGroup.Where(p => p.Where(s => s.state == "0").Count() == p.Count()).Count();
// 已识别 => 正常
int mornArrive = userGroup.Where(p => p.Where(s => s.state == "1").Any()).Count();
// 迟到
int mornLate = userGroup.Where(p => p.Where(s => s.state == "2").Count() == p.Count()).Count();
// 请假
int mornLeave = userGroup.Where(p => p.Where(s => s.state == "3").Count() == p.Count()).Count();
// 公差
int mornTolerance = userGroup.Where(p => p.Where(s => s.state == "4").Count() == p.Count()).Count();
orgMo += ",\"mornTotal\":\"" + mornTotal + "\",\"mornLeave\":\"" + mornLeave + "\",\"mornArrive\":\"" + mornArrive +
"\",\"mornNoArrive\":\"" + mornNoArrive + "\",\"mornTolerance\":\"" + mornTolerance + "\",\"mornLate\":\"" + mornLate + "\"";
totalSum += mornTotal;
leaveSum += mornLeave;
arriveSum += mornArrive;
noArriveSum += mornNoArrive;
toleranceSum += mornTolerance;
lateSum += mornLate;
//午点名
var noonList = list.Where(p => p.orgId == _orgId && p.timeType == "3");
// 按人分组
var noonUserGroup = noonList.GroupBy(p => p.userId);
// 应到
int noonTotal = noonUserGroup.Count();
// 未识别
int noonNoArrive = noonUserGroup.Where(p => p.Where(s => s.state == "0").Count() == p.Count()).Count();
// 已识别 => 正常
int noonArrive = noonUserGroup.Where(p => p.Where(s => s.state == "1").Any()).Count();
// 迟到
int noonLate = noonUserGroup.Where(p => p.Where(s => s.state == "2").Count() == p.Count()).Count();
// 请假
int noonLeave = noonUserGroup.Where(p => p.Where(s => s.state == "3").Count() == p.Count()).Count();
// 公差
int noonTolerance = noonUserGroup.Where(p => p.Where(s => s.state == "4").Count() == p.Count()).Count();
orgMo += ",\"noonTotal\":\"" + noonTotal + "\",\"noonLeave\":\"" + noonLeave + "\",\"noonArrive\":\"" + noonArrive +
"\",\"noonNoArrive\":\"" + noonNoArrive + "\",\"noonTolerance\":\"" + noonTolerance + "\",\"noonLate\":\"" + noonLate + "\"";
totalSum += noonTotal;
leaveSum += noonLeave;
arriveSum += noonArrive;
noArriveSum += noonNoArrive;
toleranceSum += noonTolerance;
lateSum += noonLate;
//晚点名
var nightList = list.Where(p => p.orgId == _orgId && p.timeType == "5");
// 按人分组
var nightUserGroup = nightList.GroupBy(p => p.userId);
// 应到
int nightTotal = nightUserGroup.Count();
// 未识别
int nightNoArrive = nightUserGroup.Where(p => p.Where(s => s.state == "0").Count() == p.Count()).Count();
// 已识别 => 正常
int nightArrive = nightUserGroup.Where(p => p.Where(s => s.state == "1").Any()).Count();
// 迟到
int nightLate = nightUserGroup.Where(p => p.Where(s => s.state == "2").Count() == p.Count()).Count();
// 请假
int nightLeave = nightUserGroup.Where(p => p.Where(s => s.state == "3").Count() == p.Count()).Count();
// 公差
int nightTolerance = nightUserGroup.Where(p => p.Where(s => s.state == "4").Count() == p.Count()).Count();
orgMo += ",\"nightTotal\":\"" + nightTotal + "\",\"nightLeave\":\"" + nightLeave + "\",\"nightArrive\":\"" + nightArrive +
"\",\"nightNoArrive\":\"" + nightNoArrive + "\",\"nightTolerance\":\"" + nightTolerance + "\",\"nightLate\":\"" + nightLate + "\"}";
totalSum += nightTotal;
leaveSum += nightLeave;
arriveSum += nightArrive;
noArriveSum += nightNoArrive;
toleranceSum += nightTolerance;
lateSum += nightLate;
totalData[i] = totalSum;
leaveData[i] = leaveSum;
arriveData[i] = arriveSum;
noArriveData[i] = noArriveSum;
toleranceData[i] = toleranceSum;
lateData[i] = lateSum;
returnstr += orgMo;
}
returnstr += "]";
returnstr += ",\"echartsData\":{\"xAxisData\":[" + string.Join(",", xAxisData.ToArray()) + "],\"totalData\":[" + string.Join(",", totalData) + "],\"leaveData\":[" +
string.Join(",", leaveData) + "],\"arriveData\":[" + string.Join(",", arriveData) + "],\"noArriveData\":[" + string.Join(",", noArriveData) +
"],\"toleranceData\":[" + string.Join(",", toleranceData) + "],\"lateData\":[" + string.Join(",", lateData) + "]}";
returnstr += "}";
}
catch (Exception e)
{
var a = Regex.Replace(e.Message, @"\r", "");
var b = Regex.Replace(a, @"\n", "");
returnstr = "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员!\",\"error\":\"" + b + "\",\"data\":[]}";
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Error, "人脸点名统计操作请求", "点名统计列表异常:" + e);
}
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Query, "人脸点名统计操作请求", "点名统计列表");
return returnstr;
}
//点名统计详情
private string getRollcallStaItem(HttpContext context)
{
string returnstr = "";
try
{
string findOrgId = context.Request.Params["orgId"];
if (string.IsNullOrEmpty(findOrgId))
{
return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"orgId参数不能为空!\",\"data\":[]}";
}
string findDate = context.Request.Params["findDate"];
if (string.IsNullOrEmpty(findDate))
{
return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"findDate参数不能为空!\",\"data\":[]}";
}
string findTimeType = context.Request.Params["timeType"];
if (string.IsNullOrEmpty(findTimeType))
{
return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"timeType参数不能为空!\",\"data\":[]}";
}
//查询点名信息详情
string sql = "WITH t1 as( SELECT r.ORG_ID,r.id,r.USERS_UID,r.USERS_NAME,date_format(r.FACE_READ_START_TIME,'%Y-%m-%d %H:%i:%s') REPORT_TIME,t.REPORT_TIME setTime,r.FACE_READ_STATE STATE, IFNULL(IFNULL(r.FACE_READ_SMALL_IMG,CONCAT('/',e.PHOTO)),'/images/imgPerDefaut.jpg') FACE_READ_SMALL_IMG, IFNULL(IFNULL(r.FACE_READ_BIG_IMG,CONCAT('/',e.PHOTO)),'/images/imgPerDefaut.jpg') FACE_READ_BIG_IMG FROM oa_rollcall_task t LEFT JOIN oa_rollcall_record r ON t.id = r.task_id LEFT JOIN tbl_sys_emp e on e.USERS_UID=r.USERS_UID WHERE t.ORG_ID = '" + findOrgId + "' and date_format( t.report_time, '%Y-%m-%d' ) = date_format( '" + findDate + "', '%Y-%m-%d' ) AND r.TIME_TYPE = '" + findTimeType + "' order BY r.FACE_READ_START_TIME )" +
@"
SELECT ORG_ID,id,USERS_NAME,REPORT_TIME,if(STATE=0,if((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( setTime , '%Y-%m-%d %H:%i:%s')
and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( setTime , '%Y-%m-%d %H:%i:%s') )>0,3,
if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( setTime , '%Y-%m-%d %H:%i') and
date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( setTime , '%Y-%m-%d %H:%i') )>0,4,0)
),STATE) FACE_READ_STATE,FACE_READ_BIG_IMG,FACE_READ_SMALL_IMG from t1
";
DataTable dt = FangYar.Common.MySqlHelper.QueryTable(sql);
returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":";
returnstr += FangYar.Common.JsonHelper.ToJson(dt);
returnstr += "}";
}
catch (Exception e)
{
var a = Regex.Replace(e.Message, @"\r", "");
var b = Regex.Replace(a, @"\n", "");
returnstr = "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员!\",\"error\":\"" + b + "\",\"data\":[]}";
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Error, "人脸点名统计操作请求", "点名统计详情异常:" + e);
}
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Query, "人脸点名统计操作请求", "点名统计详情");
return returnstr;
}
#endregion
#region 出操统计数据查询
///
/// 出操统计列表--只获取本机构
///
///
///
private string getExerciseSta(HttpContext context)
{
string returnstr = "";
try
{
string findOrgId = context.Request.Params["orgId"];
if (string.IsNullOrEmpty(findOrgId))
{
return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"orgId参数不能为空!\",\"data\":[]}";
}
string findDate = context.Request.Params["findDate"];
if (string.IsNullOrEmpty(findDate))
{
findDate = DateTime.Now.ToString("yyyy-MM-dd");
}
string isContent = context.Request.Params["isContent"];
//本级机构 点名信息
string orgSql = @"SELECT o.org_id,o.org_name,o.pid AS pid,o.all_num FROM fire_org o WHERE TYPE = 0 AND o.org_id = '" + findOrgId + @"'";
string rcSql = @"WITH t1 as(
SELECT ID,ORG_ID,ORG_NAME,USERS_UID,TIME_TYPE,FACE_READ_STATE STATE,TASK_ID
from oa_Exercise_record r WHERE TASK_ID in
( SELECT id from oa_Exercise_task tk
";
if (isContent == "1")
{
//递归下级机构 点名信息
rcSql += " , ( SELECT get_Org_child_list ( '" + findOrgId + "' ) cids ) s WHERE find_in_set( org_id, cids ) and date_format( tk.report_time, '%Y-%m-%d' ) = date_format( '" + findDate + @"', '%Y-%m-%d' ) ";
}
else
{
rcSql += " WHERE tk.org_id='" + findOrgId + @"' and date_format( tk.report_time, '%Y-%m-%d' ) = date_format( '" + findDate + @"', '%Y-%m-%d' ) ";
}
rcSql += @"
)
)
, oa_leave1 as ( SELECT * from oa_leave WHERE S_TIME > DATE_ADD(NOW(), INTERVAL -13 MONTH)
and ppl_id in (SELECT users_uid from tbl_sys_emp WHERE ORG_ID = '" + findOrgId + @"')LIMIT 20000)
, oa_tolerance1 as (SELECT * from oa_tolerance WHERE S_TIME > DATE_ADD(NOW(), INTERVAL -13 MONTH)
and ppl_id in (SELECT users_uid from tbl_sys_emp WHERE ORG_ID = '" + findOrgId + @"') LIMIT 20000)
SELECT t1.*,tk.REPORT_TIME,tk.MARK_IS_DRILL,tk.MARK_REMARK
,if (if ((SELECT count(1) from oa_tolerance1 WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
and date_format( S_TIME, '%Y-%m-%d %H') <= date_format( tk.REPORT_TIME , '%Y-%m-%d %H') and
date_format(E_TIME, '%Y-%m-%d %H') >= date_format( tk.REPORT_TIME , '%Y-%m-%d %H')
)>0,4,
if(((SELECT count(1) from oa_leave1 WHERE PPL_ID = t1.USERS_UID and STATE = '1' AND L_TYPE != '8fb6e5cc-419d-45a6-9926-ce8f704dc4d7' and
((date_format( S_TIME, '%Y-%m-%d %H') <= date_format( tk.REPORT_TIME , '%Y-%m-%d %H')
and date_format(E_TIME, '%Y-%m-%d %H') >= date_format( tk.REPORT_TIME , '%Y-%m-%d %H') )
or
( date_format( tk.EXTEND2 , '%Y-%m-%d %H') <= date_format( S_TIME, '%Y-%m-%d %H')
and date_format( tk.EXTEND3 , '%Y-%m-%d %H') >= date_format( S_TIME, '%Y-%m-%d %H'))
or
( date_format( tk.EXTEND2 , '%Y-%m-%d %H') <= date_format( E_TIME, '%Y-%m-%d %H')
and date_format( tk.EXTEND3 , '%Y-%m-%d %H') >= date_format( E_TIME, '%Y-%m-%d %H'))
))+
(SELECT count(1) from oa_vacation v LEFT JOIN tbl_sys_emp e on v.PPL_ID=e.ID WHERE v.Info_State='1' and e.USERS_UID=t1.USERS_UID
and date_format( v.S_TIME, '%Y-%m-%d %H') <= date_format( tk.EXTEND2 , '%Y-%m-%d %H')
and date_format(v.E_TIME, '%Y-%m-%d %H') >= date_format(tk.EXTEND3 , '%Y-%m-%d %H'))
)>0,3,
if((SELECT count(1) from oa_leave1 WHERE PPL_ID = t1.USERS_UID and STATE = '1' AND L_TYPE = '8fb6e5cc-419d-45a6-9926-ce8f704dc4d7' and
((date_format( S_TIME, '%Y-%m-%d %H') <= date_format( tk.REPORT_TIME , '%Y-%m-%d %H')
and date_format(E_TIME, '%Y-%m-%d %H') >= date_format( tk.REPORT_TIME , '%Y-%m-%d %H') )
or
( date_format( tk.EXTEND2 , '%Y-%m-%d %H') <= date_format( S_TIME, '%Y-%m-%d %H')
and date_format( tk.EXTEND3 , '%Y-%m-%d %H') >= date_format( S_TIME, '%Y-%m-%d %H'))
or
( date_format( tk.EXTEND2 , '%Y-%m-%d %H') <= date_format( E_TIME, '%Y-%m-%d %H')
and date_format( tk.EXTEND3 , '%Y-%m-%d %H') >= date_format( E_TIME, '%Y-%m-%d %H'))
)
)>0,5,0)
)) = 0,STATE,if ((SELECT count(1) from oa_tolerance1 WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
and date_format( S_TIME, '%Y-%m-%d %H') <= date_format( tk.REPORT_TIME , '%Y-%m-%d %H') and
date_format(E_TIME, '%Y-%m-%d %H') >= date_format( tk.REPORT_TIME , '%Y-%m-%d %H')
)>0,4,
if(((SELECT count(1) from oa_leave1 WHERE PPL_ID = t1.USERS_UID and STATE = '1' AND L_TYPE != '8fb6e5cc-419d-45a6-9926-ce8f704dc4d7' and
((date_format( S_TIME, '%Y-%m-%d %H') <= date_format( tk.REPORT_TIME , '%Y-%m-%d %H')
and date_format(E_TIME, '%Y-%m-%d %H') >= date_format( tk.REPORT_TIME , '%Y-%m-%d %H') )
or
( date_format( tk.EXTEND2 , '%Y-%m-%d %H') <= date_format( S_TIME, '%Y-%m-%d %H')
and date_format( tk.EXTEND3 , '%Y-%m-%d %H') >= date_format( S_TIME, '%Y-%m-%d %H'))
or
( date_format( tk.EXTEND2 , '%Y-%m-%d %H') <= date_format( E_TIME, '%Y-%m-%d %H')
and date_format( tk.EXTEND3 , '%Y-%m-%d %H') >= date_format( E_TIME, '%Y-%m-%d %H'))
))+
(SELECT count(1) from oa_vacation v LEFT JOIN tbl_sys_emp e on v.PPL_ID=e.ID WHERE v.Info_State='1' and e.USERS_UID=t1.USERS_UID
and date_format( v.S_TIME, '%Y-%m-%d %H') <= date_format( tk.EXTEND2 , '%Y-%m-%d %H')
and date_format(v.E_TIME, '%Y-%m-%d %H') >= date_format(tk.EXTEND3 , '%Y-%m-%d %H'))
)>0,3,
if((SELECT count(1) from oa_leave1 WHERE PPL_ID = t1.USERS_UID and STATE = '1' AND L_TYPE = '8fb6e5cc-419d-45a6-9926-ce8f704dc4d7' and
((date_format( S_TIME, '%Y-%m-%d %H') <= date_format( tk.REPORT_TIME , '%Y-%m-%d %H')
and date_format(E_TIME, '%Y-%m-%d %H') >= date_format( tk.REPORT_TIME , '%Y-%m-%d %H') )
or
( date_format( tk.EXTEND2 , '%Y-%m-%d %H') <= date_format( S_TIME, '%Y-%m-%d %H')
and date_format( tk.EXTEND3 , '%Y-%m-%d %H') >= date_format( S_TIME, '%Y-%m-%d %H'))
or
( date_format( tk.EXTEND2 , '%Y-%m-%d %H') <= date_format( E_TIME, '%Y-%m-%d %H')
and date_format( tk.EXTEND3 , '%Y-%m-%d %H') >= date_format( E_TIME, '%Y-%m-%d %H'))
)
)>0,5,0)
))) WORKSTATE
from t1 LEFT JOIN oa_Exercise_task tk on t1.TASK_ID=tk.ID
";
#region 旧统计查询Sql
/*
优先以是否请假或出差显示,如果有请假或出差,则就算有出操数据依然显示请假或出差
// SELECT t1.*,tk.REPORT_TIME
// ,if (STATE = 0,if ((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
// and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( tk.REPORT_TIME , '%Y-%m-%d %H:%i') and
// date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( tk.REPORT_TIME , '%Y-%m-%d %H:%i')
//)>0,4,
//if((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' AND L_TYPE != '8fb6e5cc-419d-45a6-9926-ce8f704dc4d7' and
// ((date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.REPORT_TIME , '%Y-%m-%d %H:%i:%s')
// and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.REPORT_TIME , '%Y-%m-%d %H:%i:%s') )
// or
// ( date_format( tk.EXTEND2 , '%Y-%m-%d %H:%i:%s') <= date_format( S_TIME, '%Y-%m-%d %H:%i:%s')
// and date_format( tk.EXTEND3 , '%Y-%m-%d %H:%i:%s') >= date_format( S_TIME, '%Y-%m-%d %H:%i:%s'))
// or
// ( date_format( tk.EXTEND2 , '%Y-%m-%d %H:%i:%s') <= date_format( E_TIME, '%Y-%m-%d %H:%i:%s')
// and date_format( tk.EXTEND3 , '%Y-%m-%d %H:%i:%s') >= date_format( E_TIME, '%Y-%m-%d %H:%i:%s'))
// )
// )>0,3,
// if((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' AND L_TYPE = '8fb6e5cc-419d-45a6-9926-ce8f704dc4d7' and
// ((date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.REPORT_TIME , '%Y-%m-%d %H:%i:%s')
// and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.REPORT_TIME , '%Y-%m-%d %H:%i:%s') )
// or
// ( date_format( tk.EXTEND2 , '%Y-%m-%d %H:%i:%s') <= date_format( S_TIME, '%Y-%m-%d %H:%i:%s')
// and date_format( tk.EXTEND3 , '%Y-%m-%d %H:%i:%s') >= date_format( S_TIME, '%Y-%m-%d %H:%i:%s'))
// or
// ( date_format( tk.EXTEND2 , '%Y-%m-%d %H:%i:%s') <= date_format( E_TIME, '%Y-%m-%d %H:%i:%s')
// and date_format( tk.EXTEND3 , '%Y-%m-%d %H:%i:%s') >= date_format( E_TIME, '%Y-%m-%d %H:%i:%s'))
// )
// )>0,5,0)
//)),STATE) WORKSTATE
// from t1 LEFT JOIN oa_Exercise_task tk on t1.TASK_ID=tk.ID
*/
//,if (STATE = 0,if ((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
// date_format(S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format(tk.REPORT_TIME, '%Y-%m-%d %H:%i:%s')
//and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format(tk.REPORT_TIME, '%Y-%m-%d %H:%i:%s') )> 0,3,
//if ((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
// and date_format(S_TIME, '%Y-%m-%d %H:%i') <= date_format(tk.REPORT_TIME, '%Y-%m-%d %H:%i') and
// date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format(tk.REPORT_TIME, '%Y-%m-%d %H:%i') )> 0,4,0)
//),STATE) WORKSTATE
//,if (STATE = 0,
#endregion
if (isContent == "1")
{
//递归下级机构 点名信息
orgSql = @"SELECT o.org_id,o.org_name,o.pid AS pid,o.all_num FROM fire_org o, ( SELECT get_Org_child_list ( '" + findOrgId + @"' ) cids ) s WHERE TYPE = 0 AND find_in_set( org_id, cids ) ORDER BY EXTENDCODE4 ";
}
DataTable orgDt = FangYar.Common.MySqlHelper.QueryTable(orgSql);
DataTable rcDt = FangYar.Common.MySqlHelper.QueryTable(rcSql);
//点名信息 存入缓存
List list = new List();
for (int i = 0; i < rcDt.Rows.Count; i++)
{
list.Add(new RollcallMo()
{
orgId = rcDt.Rows[i]["ORG_ID"] + "",
timeType = rcDt.Rows[i]["TIME_TYPE"] + "",
userId = rcDt.Rows[i]["USERS_UID"] + "",
state = rcDt.Rows[i]["WORKSTATE"] + "",
WORKSTATE = rcDt.Rows[i]["STATE"] + "",
TASK_ID = rcDt.Rows[i]["TASK_ID"] + "",
MARK_IS_DRILL = rcDt.Rows[i]["MARK_IS_DRILL"] + "",
MARK_REMARK = rcDt.Rows[i]["MARK_REMARK"] + "",
});
}
returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":[";
string[] xAxisData = new string[orgDt.Rows.Count];
int[] totalData = new int[orgDt.Rows.Count];
int[] leaveData = new int[orgDt.Rows.Count];
int[] arriveData = new int[orgDt.Rows.Count];
int[] noArriveData = new int[orgDt.Rows.Count];
int[] toleranceData = new int[orgDt.Rows.Count];
int[] lateData = new int[orgDt.Rows.Count];
int[] dutyData = new int[orgDt.Rows.Count];
for (int i = 0; i < orgDt.Rows.Count; i++)
{
int totalSum = 0, leaveSum = 0, arriveSum = 0, noArriveSum = 0, toleranceSum = 0, lateSum = 0, dutySum = 0;
if (i != 0) returnstr += ",";
string _orgId = orgDt.Rows[i]["ORG_ID"].ToString();
string _pId = orgDt.Rows[i]["PID"].ToString();
string _orgName = orgDt.Rows[i]["ORG_NAME"].ToString();
string _allNum = orgDt.Rows[i]["ALL_NUM"].ToString() == "" ? "0" : orgDt.Rows[i]["ALL_NUM"].ToString();
string orgMo = "{\"findDate\":\"" + findDate + "\",\"orgId\":\"" + _orgId + "\",\"pId\":\"" + _pId + "\",\"orgName\":\"" + _orgName + "\",\"allNum\":\"" + _allNum + "\"";
string tid = "";
string MARK_IS_DRILL = "";
string MARK_REMARK = "";
xAxisData[i] = "\"" + _orgName + "\"";
//早点名
var mornList = list.Where(p => p.orgId == _orgId && p.timeType == "1");
// 按人分组
var userGroup = mornList.GroupBy(p => p.userId);
try
{
tid = mornList.First().TASK_ID;
MARK_IS_DRILL = mornList.First().MARK_IS_DRILL;
MARK_REMARK = mornList.First().MARK_REMARK;
}
catch (Exception ex) { }
// 应到
int mornTotal = userGroup.Count();
// 未识别
int mornNoArrive = userGroup.Where(p => p.Where(s => s.state == "0").Count() == p.Count()).Count();
// 已识别 => 正常
int mornArrive = userGroup.Where(p => p.Where(s => s.state == "1").Any()).Count();
// 迟到
int mornLate = userGroup.Where(p => p.Where(s => s.state == "2").Count() == p.Count()).Count();
// 请假
int mornLeave = userGroup.Where(p => p.Where(s => s.state == "3").Count() == p.Count()).Count();
// 公差
int mornTolerance = userGroup.Where(p => p.Where(s => s.state == "4").Count() == p.Count()).Count();
// 站岗值班
int mornDuty = userGroup.Where(p => p.Where(s => s.state == "5").Count() == p.Count()).Count();
orgMo += ",\"tid\":\"" + tid + "\",\"MARK_IS_DRILL\":\"" + MARK_IS_DRILL + "\",\"MARK_REMARK\":\"" + MARK_REMARK + "\",\"mornTotal\":\"" + mornTotal +
"\",\"mornLeave\":\"" + mornLeave + "\",\"mornArrive\":\"" + mornArrive + "\",\"mornNoArrive\":\"" + mornNoArrive +
"\",\"mornTolerance\":\"" + mornTolerance + "\",\"mornLate\":\"" + mornLate + "\",\"mornDuty\":\"" + mornDuty + "\"";
totalSum += mornTotal;
leaveSum += mornLeave;
arriveSum += mornArrive;
noArriveSum += mornNoArrive;
toleranceSum += mornTolerance;
lateSum += mornLate;
dutySum += mornDuty;
//午点名
var noonList = list.Where(p => p.orgId == _orgId && p.timeType == "3");
// 按人分组
var noonUserGroup = noonList.GroupBy(p => p.userId);
// 应到
int noonTotal = noonUserGroup.Count();
// 未识别
int noonNoArrive = noonUserGroup.Where(p => p.Where(s => s.state == "0").Count() == p.Count()).Count();
// 已识别 => 正常
int noonArrive = noonUserGroup.Where(p => p.Where(s => s.state == "1").Any()).Count();
// 迟到
int noonLate = noonUserGroup.Where(p => p.Where(s => s.state == "2").Count() == p.Count()).Count();
// 请假
int noonLeave = noonUserGroup.Where(p => p.Where(s => s.state == "3").Count() == p.Count()).Count();
// 公差
int noonTolerance = noonUserGroup.Where(p => p.Where(s => s.state == "4").Count() == p.Count()).Count();
// 站岗值班
int noonDuty = noonUserGroup.Where(p => p.Where(s => s.state == "5").Count() == p.Count()).Count();
orgMo += ",\"noonTotal\":\"" + noonTotal + "\",\"noonLeave\":\"" + noonLeave + "\",\"noonArrive\":\"" + noonArrive +
"\",\"noonNoArrive\":\"" + noonNoArrive + "\",\"noonTolerance\":\"" + noonTolerance + "\",\"noonLate\":\"" + noonLate + "\",\"noonDuty\":\"" + noonDuty + "\"";
totalSum += noonTotal;
leaveSum += noonLeave;
arriveSum += noonArrive;
noArriveSum += noonNoArrive;
toleranceSum += noonTolerance;
lateSum += noonLate;
dutySum += noonDuty;
//晚点名
var nightList = list.Where(p => p.orgId == _orgId && p.timeType == "5");
// 按人分组
var nightUserGroup = nightList.GroupBy(p => p.userId);
// 应到
int nightTotal = nightUserGroup.Count();
// 未识别
int nightNoArrive = nightUserGroup.Where(p => p.Where(s => s.state == "0").Count() == p.Count()).Count();
// 已识别 => 正常
int nightArrive = nightUserGroup.Where(p => p.Where(s => s.state == "1").Any()).Count();
// 迟到
int nightLate = nightUserGroup.Where(p => p.Where(s => s.state == "2").Count() == p.Count()).Count();
// 请假
int nightLeave = nightUserGroup.Where(p => p.Where(s => s.state == "3").Count() == p.Count()).Count();
// 公差
int nightTolerance = nightUserGroup.Where(p => p.Where(s => s.state == "4").Count() == p.Count()).Count();
// 站岗值班
int nightDuty = nightUserGroup.Where(p => p.Where(s => s.state == "5").Count() == p.Count()).Count();
orgMo += ",\"nightTotal\":\"" + nightTotal + "\",\"nightLeave\":\"" + nightLeave + "\",\"nightArrive\":\"" + nightArrive +
"\",\"nightNoArrive\":\"" + nightNoArrive + "\",\"nightTolerance\":\"" + nightTolerance + "\",\"nightLate\":\"" + nightLate + "\",\"nightDuty\":\"" + nightDuty + "\"}";
totalSum += nightTotal;
leaveSum += nightLeave;
arriveSum += nightArrive;
noArriveSum += nightNoArrive;
toleranceSum += nightTolerance;
lateSum += nightLate;
dutySum += nightDuty;
totalData[i] = totalSum;
leaveData[i] = leaveSum;
arriveData[i] = arriveSum;
noArriveData[i] = noArriveSum;
toleranceData[i] = toleranceSum;
lateData[i] = lateSum;
dutyData[i] = dutySum;
returnstr += orgMo;
}
returnstr += "]";
returnstr += ",\"echartsData\":{\"xAxisData\":[" + string.Join(",", xAxisData.ToArray()) + "],\"totalData\":[" + string.Join(",", totalData) + "],\"leaveData\":[" +
string.Join(",", leaveData) + "],\"arriveData\":[" + string.Join(",", arriveData) + "],\"noArriveData\":[" + string.Join(",", noArriveData) +
"],\"toleranceData\":[" + string.Join(",", toleranceData) + "],\"lateData\":[" + string.Join(",", lateData) + "],\"dutyData\":[" + string.Join(",", dutyData) + "]}";
returnstr += "}";
}
catch (Exception e)
{
var a = Regex.Replace(e.Message, @"\r", "");
var b = Regex.Replace(a, @"\n", "");
returnstr = "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员!\",\"error\":\"" + b + "\",\"data\":[]}";
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Error, "人脸点名统计操作请求", "出操统计列表-只获取本机构异常:" + e);
}
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Query, "人脸点名统计操作请求", "出操统计列表-只获取本机构");
return returnstr;
}
// ///
// /// 出操统计列表
// ///
// ///
// ///
// private string getExerciseSta(HttpContext context)
// {
// string returnstr = "";
// try
// {
// string findOrgId = context.Request.Params["orgId"];
// if (string.IsNullOrEmpty(findOrgId))
// {
// return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"orgId参数不能为空!\",\"data\":[]}";
// }
// string findDate = context.Request.Params["findDate"];
// if (string.IsNullOrEmpty(findDate))
// {
// findDate = DateTime.Now.ToString("yyyy-MM-dd");
// }
// string isContent = context.Request.Params["isContent"];
// //直属下级机构 点名信息
// string orgSql = @"SELECT o.org_id,o.org_name,o.pid AS pid,o.all_num FROM fire_org o WHERE TYPE = 0 AND (o.org_id = '" + findOrgId + @"' or pid = '" + findOrgId + @"')";
// string rcSql = @"WITH t1 as(
// SELECT ID,ORG_ID,ORG_NAME,USERS_UID,TIME_TYPE,FACE_READ_STATE STATE,TASK_ID
// from oa_Exercise_record r WHERE TASK_ID in
// ( SELECT id from oa_Exercise_task tk,(select get_Org_child_list_OrgIds('" + findOrgId + @"') cids ) s WHERE
// find_in_set(tk.org_id,cids) and date_format( tk.report_time, '%Y-%m-%d' ) = date_format( '" + findDate + @"', '%Y-%m-%d' )
// )
// )
// SELECT t1.*,tk.REPORT_TIME
// ,if (STATE = 0,if ((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
// and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( tk.REPORT_TIME , '%Y-%m-%d %H:%i') and
// date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( tk.REPORT_TIME , '%Y-%m-%d %H:%i')
// )>0,4,
// if((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' AND L_TYPE != '8fb6e5cc-419d-45a6-9926-ce8f704dc4d7' and
// date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.REPORT_TIME , '%Y-%m-%d %H:%i:%s')
// and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.REPORT_TIME , '%Y-%m-%d %H:%i:%s') )>0,3,
// if((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' AND L_TYPE = '8fb6e5cc-419d-45a6-9926-ce8f704dc4d7' and
// date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.REPORT_TIME , '%Y-%m-%d %H:%i:%s')
// and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.REPORT_TIME , '%Y-%m-%d %H:%i:%s') )>0,5,0)
// )),STATE) WORKSTATE
// from t1 LEFT JOIN oa_Exercise_task tk on t1.TASK_ID=tk.ID
//";
// //,if (STATE = 0,if ((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
// // date_format(S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format(tk.REPORT_TIME, '%Y-%m-%d %H:%i:%s')
// //and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format(tk.REPORT_TIME, '%Y-%m-%d %H:%i:%s') )> 0,3,
// //if ((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
// // and date_format(S_TIME, '%Y-%m-%d %H:%i') <= date_format(tk.REPORT_TIME, '%Y-%m-%d %H:%i') and
// // date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format(tk.REPORT_TIME, '%Y-%m-%d %H:%i') )> 0,4,0)
// //),STATE) WORKSTATE
// //,if (STATE = 0,
// if (isContent == "1")
// {
// //递归下级机构 点名信息
// orgSql = @"SELECT o.org_id,o.org_name,o.pid AS pid,o.all_num FROM fire_org o, ( SELECT get_Org_child_list ( '" + findOrgId + @"' ) cids ) s WHERE TYPE = 0 AND find_in_set( org_id, cids )";
// }
// DataTable orgDt = FangYar.Common.MySqlHelper.QueryTable(orgSql);
// DataTable rcDt = FangYar.Common.MySqlHelper.QueryTable(rcSql);
// //点名信息 存入缓存
// List list = new List();
// for (int i = 0; i < rcDt.Rows.Count; i++)
// {
// list.Add(new RollcallMo()
// {
// orgId = rcDt.Rows[i]["ORG_ID"] + "",
// timeType = rcDt.Rows[i]["TIME_TYPE"] + "",
// userId = rcDt.Rows[i]["USERS_UID"] + "",
// state = rcDt.Rows[i]["WORKSTATE"] + "",
// WORKSTATE = rcDt.Rows[i]["STATE"] + ""
// });
// }
// returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":[";
// string[] xAxisData = new string[orgDt.Rows.Count];
// int[] totalData = new int[orgDt.Rows.Count];
// int[] leaveData = new int[orgDt.Rows.Count];
// int[] arriveData = new int[orgDt.Rows.Count];
// int[] noArriveData = new int[orgDt.Rows.Count];
// int[] toleranceData = new int[orgDt.Rows.Count];
// int[] lateData = new int[orgDt.Rows.Count];
// int[] dutyData = new int[orgDt.Rows.Count];
// for (int i = 0; i < orgDt.Rows.Count; i++)
// {
// int totalSum = 0, leaveSum = 0, arriveSum = 0, noArriveSum = 0, toleranceSum = 0, lateSum = 0, dutySum = 0;
// if (i != 0) returnstr += ",";
// string _orgId = orgDt.Rows[i]["ORG_ID"].ToString();
// string _pId = orgDt.Rows[i]["PID"].ToString();
// string _orgName = orgDt.Rows[i]["ORG_NAME"].ToString();
// string _allNum = orgDt.Rows[i]["ALL_NUM"].ToString() == "" ? "0" : orgDt.Rows[i]["ALL_NUM"].ToString();
// string orgMo = "{\"findDate\":\"" + findDate + "\",\"orgId\":\"" + _orgId + "\",\"pId\":\"" + _pId + "\",\"orgName\":\"" + _orgName + "\",\"allNum\":\"" + _allNum + "\"";
// xAxisData[i] = "\"" + _orgName + "\"";
// //早点名
// var mornList = list.Where(p => p.orgId == _orgId && p.timeType == "1");
// // 按人分组
// var userGroup = mornList.GroupBy(p => p.userId);
// // 应到
// int mornTotal = userGroup.Count();
// // 未识别
// int mornNoArrive = userGroup.Where(p => p.Where(s => s.state == "0").Count() == p.Count()).Count();
// // 已识别 => 正常
// int mornArrive = userGroup.Where(p => p.Where(s => s.state == "1").Any()).Count();
// // 迟到
// int mornLate = userGroup.Where(p => p.Where(s => s.state == "2").Count() == p.Count()).Count();
// // 请假
// int mornLeave = userGroup.Where(p => p.Where(s => s.state == "3").Count() == p.Count()).Count();
// // 公差
// int mornTolerance = userGroup.Where(p => p.Where(s => s.state == "4").Count() == p.Count()).Count();
// // 站岗值班
// int mornDuty = userGroup.Where(p => p.Where(s => s.state == "5").Count() == p.Count()).Count();
// orgMo += ",\"mornTotal\":\"" + mornTotal + "\",\"mornLeave\":\"" + mornLeave + "\",\"mornArrive\":\"" + mornArrive +
// "\",\"mornNoArrive\":\"" + mornNoArrive + "\",\"mornTolerance\":\"" + mornTolerance + "\",\"mornLate\":\"" + mornLate + "\",\"mornDuty\":\"" + mornDuty + "\"";
// totalSum += mornTotal;
// leaveSum += mornLeave;
// arriveSum += mornArrive;
// noArriveSum += mornNoArrive;
// toleranceSum += mornTolerance;
// lateSum += mornLate;
// dutySum += mornDuty;
// //午点名
// var noonList = list.Where(p => p.orgId == _orgId && p.timeType == "3");
// // 按人分组
// var noonUserGroup = noonList.GroupBy(p => p.userId);
// // 应到
// int noonTotal = noonUserGroup.Count();
// // 未识别
// int noonNoArrive = noonUserGroup.Where(p => p.Where(s => s.state == "0").Count() == p.Count()).Count();
// // 已识别 => 正常
// int noonArrive = noonUserGroup.Where(p => p.Where(s => s.state == "1").Any()).Count();
// // 迟到
// int noonLate = noonUserGroup.Where(p => p.Where(s => s.state == "2").Count() == p.Count()).Count();
// // 请假
// int noonLeave = noonUserGroup.Where(p => p.Where(s => s.state == "3").Count() == p.Count()).Count();
// // 公差
// int noonTolerance = noonUserGroup.Where(p => p.Where(s => s.state == "4").Count() == p.Count()).Count();
// // 站岗值班
// int noonDuty = noonUserGroup.Where(p => p.Where(s => s.state == "5").Count() == p.Count()).Count();
// orgMo += ",\"noonTotal\":\"" + noonTotal + "\",\"noonLeave\":\"" + noonLeave + "\",\"noonArrive\":\"" + noonArrive +
// "\",\"noonNoArrive\":\"" + noonNoArrive + "\",\"noonTolerance\":\"" + noonTolerance + "\",\"noonLate\":\"" + noonLate + "\",\"noonDuty\":\"" + noonDuty + "\"";
// totalSum += noonTotal;
// leaveSum += noonLeave;
// arriveSum += noonArrive;
// noArriveSum += noonNoArrive;
// toleranceSum += noonTolerance;
// lateSum += noonLate;
// dutySum += noonDuty;
// //晚点名
// var nightList = list.Where(p => p.orgId == _orgId && p.timeType == "5");
// // 按人分组
// var nightUserGroup = nightList.GroupBy(p => p.userId);
// // 应到
// int nightTotal = nightUserGroup.Count();
// // 未识别
// int nightNoArrive = nightUserGroup.Where(p => p.Where(s => s.state == "0").Count() == p.Count()).Count();
// // 已识别 => 正常
// int nightArrive = nightUserGroup.Where(p => p.Where(s => s.state == "1").Any()).Count();
// // 迟到
// int nightLate = nightUserGroup.Where(p => p.Where(s => s.state == "2").Count() == p.Count()).Count();
// // 请假
// int nightLeave = nightUserGroup.Where(p => p.Where(s => s.state == "3").Count() == p.Count()).Count();
// // 公差
// int nightTolerance = nightUserGroup.Where(p => p.Where(s => s.state == "4").Count() == p.Count()).Count();
// // 站岗值班
// int nightDuty = nightUserGroup.Where(p => p.Where(s => s.state == "5").Count() == p.Count()).Count();
// orgMo += ",\"nightTotal\":\"" + nightTotal + "\",\"nightLeave\":\"" + nightLeave + "\",\"nightArrive\":\"" + nightArrive +
// "\",\"nightNoArrive\":\"" + nightNoArrive + "\",\"nightTolerance\":\"" + nightTolerance + "\",\"nightLate\":\"" + nightLate + "\",\"nightDuty\":\"" + nightDuty + "\"}";
// totalSum += nightTotal;
// leaveSum += nightLeave;
// arriveSum += nightArrive;
// noArriveSum += nightNoArrive;
// toleranceSum += nightTolerance;
// lateSum += nightLate;
// dutySum += nightDuty;
// totalData[i] = totalSum;
// leaveData[i] = leaveSum;
// arriveData[i] = arriveSum;
// noArriveData[i] = noArriveSum;
// toleranceData[i] = toleranceSum;
// lateData[i] = lateSum;
// dutyData[i] = dutySum;
// returnstr += orgMo;
// }
// returnstr += "]";
// returnstr += ",\"echartsData\":{\"xAxisData\":[" + string.Join(",", xAxisData.ToArray()) + "],\"totalData\":[" + string.Join(",", totalData) + "],\"leaveData\":[" +
// string.Join(",", leaveData) + "],\"arriveData\":[" + string.Join(",", arriveData) + "],\"noArriveData\":[" + string.Join(",", noArriveData) +
// "],\"toleranceData\":[" + string.Join(",", toleranceData) + "],\"lateData\":[" + string.Join(",", lateData) + "],\"dutyData\":[" + string.Join(",", dutyData) + "]}";
// returnstr += "}";
// }
// catch (Exception e)
// {
// var a = Regex.Replace(e.Message, @"\r", "");
// var b = Regex.Replace(a, @"\n", "");
// returnstr = "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员!\",\"error\":\"" + b + "\",\"data\":[]}";
// }
// return returnstr;
// }
///
/// 出操统计详情
///
///
///
private string getExerciseStaItem(HttpContext context)
{
string returnstr = "";
try
{
string findOrgId = context.Request.Params["orgId"];
if (string.IsNullOrEmpty(findOrgId))
{
return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"orgId参数不能为空!\",\"data\":[]}";
}
string findDate = context.Request.Params["findDate"];
if (string.IsNullOrEmpty(findDate))
{
return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"findDate参数不能为空!\",\"data\":[]}";
}
string findTimeType = context.Request.Params["timeType"];
if (string.IsNullOrEmpty(findTimeType))
{
return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"timeType参数不能为空!\",\"data\":[]}";
}
//查询点名信息详情
string sql = "WITH t1 as( SELECT r.ORG_ID,r.id,r.USERS_UID,r.USERS_NAME,date_format(r.FACE_READ_START_TIME,'%Y-%m-%d %H:%i:%s') REPORT_TIME, " +
" t.REPORT_TIME setTime,r.FACE_READ_STATE STATE, " +
" date_format(t.EXTEND2,'%Y-%m-%d %H:%i:%s') EXTEND2,date_format(t.EXTEND3,'%Y-%m-%d %H:%i:%s') EXTEND3, " +
" IFNULL(IFNULL(r.FACE_READ_SMALL_IMG,CONCAT('/',e.PHOTO)),'/images/imgPerDefaut.jpg') FACE_READ_SMALL_IMG, " +
" IFNULL(IFNULL(r.FACE_READ_BIG_IMG,CONCAT('/',e.PHOTO)),'/images/imgPerDefaut.jpg') FACE_READ_BIG_IMG FROM oa_Exercise_task t " +
" LEFT JOIN oa_Exercise_record r ON t.id = r.task_id LEFT JOIN tbl_sys_emp e on e.USERS_UID=r.USERS_UID WHERE t.ORG_ID = '" + findOrgId +
"' and date_format( t.report_time, '%Y-%m-%d' ) = date_format( '" + findDate + "', '%Y-%m-%d' ) AND r.TIME_TYPE = '" + findTimeType +
"' order BY r.FACE_READ_START_TIME )" +
@"
, oa_leave1 as ( SELECT * from oa_leave WHERE S_TIME > DATE_ADD(NOW(), INTERVAL -13 MONTH)
and ppl_id in (SELECT users_uid from tbl_sys_emp WHERE ORG_ID = '" + findOrgId + @"')LIMIT 20000)
, oa_tolerance1 as (SELECT * from oa_tolerance WHERE S_TIME > DATE_ADD(NOW(), INTERVAL -13 MONTH)
and ppl_id in (SELECT users_uid from tbl_sys_emp WHERE ORG_ID = '" + findOrgId + @"') LIMIT 20000)
SELECT ORG_ID,id,USERS_NAME,REPORT_TIME
,if(if ((SELECT count(1) from oa_tolerance1 WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
and date_format( S_TIME, '%Y-%m-%d %H') <= date_format( setTime , '%Y-%m-%d %H') and
date_format(E_TIME, '%Y-%m-%d %H') >= date_format( setTime , '%Y-%m-%d %H') )>0,4,
if(((SELECT count(1) from oa_leave1 WHERE PPL_ID = t1.USERS_UID and STATE = '1' AND L_TYPE != '8fb6e5cc-419d-45a6-9926-ce8f704dc4d7' and
((date_format( S_TIME, '%Y-%m-%d %H') <= date_format( setTime , '%Y-%m-%d %H')
and date_format(E_TIME, '%Y-%m-%d %H') >= date_format( setTime , '%Y-%m-%d %H') )
or
( date_format( t1.EXTEND2 , '%Y-%m-%d %H') <= date_format( S_TIME, '%Y-%m-%d %H')
and date_format( t1.EXTEND3 , '%Y-%m-%d %H') >= date_format( S_TIME, '%Y-%m-%d %H'))
or
( date_format( t1.EXTEND2 , '%Y-%m-%d %H') <= date_format( E_TIME, '%Y-%m-%d %H')
and date_format( t1.EXTEND3 , '%Y-%m-%d %H') >= date_format( E_TIME, '%Y-%m-%d %H'))
))+
(SELECT count(1) from oa_vacation v LEFT JOIN tbl_sys_emp e on v.PPL_ID=e.ID WHERE v.Info_State='1' and e.USERS_UID=t1.USERS_UID
and date_format( v.S_TIME, '%Y-%m-%d %H') <= date_format( t1.EXTEND2 , '%Y-%m-%d %H')
and date_format(v.E_TIME, '%Y-%m-%d %H') >= date_format(t1.EXTEND3 , '%Y-%m-%d %H'))
)>0,3,
if((SELECT count(1) from oa_leave1 WHERE PPL_ID = t1.USERS_UID and STATE = '1' AND L_TYPE = '8fb6e5cc-419d-45a6-9926-ce8f704dc4d7' and
((date_format( S_TIME, '%Y-%m-%d %H') <= date_format( setTime , '%Y-%m-%d %H')
and date_format(E_TIME, '%Y-%m-%d %H') >= date_format( setTime , '%Y-%m-%d %H') )
or
( date_format( t1.EXTEND2 , '%Y-%m-%d %H') <= date_format( S_TIME, '%Y-%m-%d %H')
and date_format( t1.EXTEND3 , '%Y-%m-%d %H') >= date_format( S_TIME, '%Y-%m-%d %H'))
or
( date_format( t1.EXTEND2 , '%Y-%m-%d %H') <= date_format( E_TIME, '%Y-%m-%d %H')
and date_format( t1.EXTEND3 , '%Y-%m-%d %H') >= date_format( E_TIME, '%Y-%m-%d %H'))
)
)>0,5,0)
))=0,STATE,if ((SELECT count(1) from oa_tolerance1 WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
and date_format( S_TIME, '%Y-%m-%d %H') <= date_format( setTime , '%Y-%m-%d %H') and
date_format(E_TIME, '%Y-%m-%d %H') >= date_format( setTime , '%Y-%m-%d %H') )>0,4,
if(((SELECT count(1) from oa_leave1 WHERE PPL_ID = t1.USERS_UID and STATE = '1' AND L_TYPE != '8fb6e5cc-419d-45a6-9926-ce8f704dc4d7' and
((date_format( S_TIME, '%Y-%m-%d %H') <= date_format( setTime , '%Y-%m-%d %H')
and date_format(E_TIME, '%Y-%m-%d %H') >= date_format( setTime , '%Y-%m-%d %H') )
or
( date_format( t1.EXTEND2 , '%Y-%m-%d %H') <= date_format( S_TIME, '%Y-%m-%d %H')
and date_format( t1.EXTEND3 , '%Y-%m-%d %H') >= date_format( S_TIME, '%Y-%m-%d %H'))
or
( date_format( t1.EXTEND2 , '%Y-%m-%d %H') <= date_format( E_TIME, '%Y-%m-%d %H')
and date_format( t1.EXTEND3 , '%Y-%m-%d %H') >= date_format( E_TIME, '%Y-%m-%d %H'))
))+
(SELECT count(1) from oa_vacation v LEFT JOIN tbl_sys_emp e on v.PPL_ID=e.ID WHERE v.Info_State='1' and e.USERS_UID=t1.USERS_UID
and date_format( v.S_TIME, '%Y-%m-%d %H') <= date_format( t1.EXTEND2 , '%Y-%m-%d %H')
and date_format(v.E_TIME, '%Y-%m-%d %H') >= date_format(t1.EXTEND3 , '%Y-%m-%d %H'))
)>0,3,
if((SELECT count(1) from oa_leave1 WHERE PPL_ID = t1.USERS_UID and STATE = '1' AND L_TYPE = '8fb6e5cc-419d-45a6-9926-ce8f704dc4d7' and
((date_format( S_TIME, '%Y-%m-%d %H') <= date_format( setTime , '%Y-%m-%d %H')
and date_format(E_TIME, '%Y-%m-%d %H') >= date_format( setTime , '%Y-%m-%d %H') )
or
( date_format( t1.EXTEND2 , '%Y-%m-%d %H') <= date_format( S_TIME, '%Y-%m-%d %H')
and date_format( t1.EXTEND3 , '%Y-%m-%d %H') >= date_format( S_TIME, '%Y-%m-%d %H'))
or
( date_format( t1.EXTEND2 , '%Y-%m-%d %H') <= date_format( E_TIME, '%Y-%m-%d %H')
and date_format( t1.EXTEND3 , '%Y-%m-%d %H') >= date_format( E_TIME, '%Y-%m-%d %H'))
)
)>0,5,0)
))) FACE_READ_STATE,FACE_READ_BIG_IMG,FACE_READ_SMALL_IMG from t1
";
#region 旧代码注释
/*
* 优先查询是否出操,如果出操,则不统计请假、公差数据,现改为如果有请假或公差数据,则无论是否出操都显示请假或公差数据
*
SELECT ORG_ID, id, USERS_NAME, REPORT_TIME
,if (STATE = 0,if ((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
and date_format(S_TIME, '%Y-%m-%d %H:%i') <= date_format(setTime, '%Y-%m-%d %H:%i') and
date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format(setTime, '%Y-%m-%d %H:%i') )> 0,4,
if ((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' AND L_TYPE != '8fb6e5cc-419d-45a6-9926-ce8f704dc4d7' and
((date_format(S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format(setTime, '%Y-%m-%d %H:%i:%s')
and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format(setTime, '%Y-%m-%d %H:%i:%s'))
or
(date_format(t1.EXTEND2, '%Y-%m-%d %H:%i:%s') <= date_format(S_TIME, '%Y-%m-%d %H:%i:%s')
and date_format(t1.EXTEND3, '%Y-%m-%d %H:%i:%s') >= date_format(S_TIME, '%Y-%m-%d %H:%i:%s'))
or
(date_format(t1.EXTEND2, '%Y-%m-%d %H:%i:%s') <= date_format(E_TIME, '%Y-%m-%d %H:%i:%s')
and date_format(t1.EXTEND3, '%Y-%m-%d %H:%i:%s') >= date_format(E_TIME, '%Y-%m-%d %H:%i:%s'))
)
)> 0,3,
if ((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' AND L_TYPE = '8fb6e5cc-419d-45a6-9926-ce8f704dc4d7' and
((date_format(S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format(setTime, '%Y-%m-%d %H:%i:%s')
and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format(setTime, '%Y-%m-%d %H:%i:%s'))
or
(date_format(t1.EXTEND2, '%Y-%m-%d %H:%i:%s') <= date_format(S_TIME, '%Y-%m-%d %H:%i:%s')
and date_format(t1.EXTEND3, '%Y-%m-%d %H:%i:%s') >= date_format(S_TIME, '%Y-%m-%d %H:%i:%s'))
or
(date_format(t1.EXTEND2, '%Y-%m-%d %H:%i:%s') <= date_format(E_TIME, '%Y-%m-%d %H:%i:%s')
and date_format(t1.EXTEND3, '%Y-%m-%d %H:%i:%s') >= date_format(E_TIME, '%Y-%m-%d %H:%i:%s'))
)
)> 0,5,0)
)),STATE) FACE_READ_STATE,FACE_READ_BIG_IMG,FACE_READ_SMALL_IMG from t1
*/
#endregion
DataTable dt = FangYar.Common.MySqlHelper.QueryTable(sql);
returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":";
returnstr += FangYar.Common.JsonHelper.ToJson(dt);
//查询出操上传文件
string sqlVideo = " SELECT * FROM oa_exercise_file WHERE ORG_ID='" + findOrgId + "' and FILE_STATE='0' and EXERCISE_DATE='" + findDate + "' order by createtime DESC ";
var dtVideo = FangYar.Common.MySqlHelper.QueryTable(sqlVideo);
returnstr += ",\"ExerciseFile\":[";
for (int i = 0; i < dtVideo.Rows.Count; i++)
{
if (i > 0)
{
returnstr += ",";
}
returnstr += "{\"fileUrl\":\"" + dtVideo.Rows[i]["FILE_URL"] + "\",\"fileTime\":\"" + dtVideo.Rows[i]["createtime"] + "\",\"ID\":\"" + dtVideo.Rows[i]["ID"] + "\"}";
}
returnstr += "]";
returnstr += "}";
}
catch (Exception e)
{
var a = Regex.Replace(e.Message, @"\r", "");
var b = Regex.Replace(a, @"\n", "");
returnstr = "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员!\",\"error\":\"" + b + "\",\"data\":[]}";
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Error, "人脸点名统计操作请求", "出操统计详情异常:" + e);
}
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Query, "人脸点名统计操作请求", "出操统计详情");
return returnstr;
}
///
/// 删除人员
///
///
///
private string DelExerciseFile(HttpContext context)
{
string returnstr = "";
int code = -1;
string msg = "";
try
{
string fileId = context.Request.Params["fileId"];
string sql = " update oa_exercise_file set FILE_STATE='-1' where id='" + fileId + "' ";
var n1 = FangYar.Common.MySqlHelper.Execute(sql);
if (n1 > 0)
{
msg = "删除成功!";
code = 1;
}
else
{
msg = "删除失败!";
}
}
catch (Exception e)
{
msg = e.Message;
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Error, "出操现场视频删除", "删除异常:" + e);
}
returnstr = "{\"code\":" + code + ",\"msg\":\"" + msg + "\"}";
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Delete, "出操现场视频删除", "删除");
return returnstr;
}
#endregion
#region 考勤统计数据查询
///
/// 考勤统计列表
///
///
///
private string getAttendanceSta(HttpContext context)
{
string returnstr = "";
try
{
string findOrgId = context.Request.Params["orgId"];
if (string.IsNullOrEmpty(findOrgId))
{
return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"orgId参数不能为空!\",\"data\":[]}";
}
string findDate = context.Request.Params["findDate"];
if (string.IsNullOrEmpty(findDate))
{
findDate = DateTime.Now.ToString("yyyy-MM-dd");
}
string isContent = context.Request.Params["isContent"];
//直属下级机构 点名信息
string orgSql = @"SELECT o.org_id,o.org_name,o.pid AS pid,o.all_num FROM fire_org o WHERE TYPE = 0 AND (o.org_id = '" + findOrgId + @"' or pid = '" + findOrgId + @"')";
string rcSql = @"WITH t1 as(
SELECT ID,ORG_ID,ORG_NAME,USERS_UID,TIME_TYPE,FACE_READ_STATE STATE,FACE_READ_STATE_PM STATE_PM,TASK_ID
from oa_attendance_record r WHERE TASK_ID in
( SELECT id from oa_attendance_task tk,(select get_Org_child_list_OrgIds('" + findOrgId + @"') cids ) s WHERE
find_in_set(tk.org_id,cids) and date_format( tk.UP_START_DATE, '%Y-%m-%d' ) = date_format( '" + findDate + @"', '%Y-%m-%d' )
)
)
SELECT t1.*
,if(STATE=0,if((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i:%s')
and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i:%s') )>0,3,
if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i') and
date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i') )>0,4,0)
),STATE) WORKSTATE
,if(STATE_PM=0,if((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i:%s')
and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i:%s') )>0,3,
if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i') and
date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i') )>0,4,0)
),STATE_PM) WORKSTATE_PM
from t1 LEFT JOIN oa_attendance_task tk on t1.TASK_ID=tk.ID
";
if (isContent == "1")
{
//递归下级机构 点名信息
orgSql = @"SELECT o.org_id,o.org_name,o.pid AS pid,o.all_num FROM fire_org o, ( SELECT get_Org_child_list ( '" + findOrgId + @"' ) cids ) s WHERE TYPE = 0 AND find_in_set( org_id, cids )";
}
DataTable orgDt = FangYar.Common.MySqlHelper.QueryTable(orgSql);
DataTable rcDt = FangYar.Common.MySqlHelper.QueryTable(rcSql);
//点名信息 存入缓存
List list = new List();
for (int i = 0; i < rcDt.Rows.Count; i++)
{
list.Add(new RollcallMo()
{
orgId = rcDt.Rows[i]["ORG_ID"] + "",
timeType = rcDt.Rows[i]["TIME_TYPE"] + "",
userId = rcDt.Rows[i]["USERS_UID"] + "",
state = rcDt.Rows[i]["WORKSTATE"] + "",
state_pm = rcDt.Rows[i]["WORKSTATE_PM"] + "",
});
}
returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":[";
string[] xAxisData = new string[orgDt.Rows.Count];
int[] totalData = new int[orgDt.Rows.Count];
int[] leaveData = new int[orgDt.Rows.Count];
int[] arriveData = new int[orgDt.Rows.Count];
int[] noArriveData = new int[orgDt.Rows.Count];
int[] toleranceData = new int[orgDt.Rows.Count];
int[] lateData = new int[orgDt.Rows.Count];
for (int i = 0; i < orgDt.Rows.Count; i++)
{
int totalSum = 0, leaveSum = 0, arriveSum = 0, noArriveSum = 0, toleranceSum = 0, lateSum = 0;
if (i != 0) returnstr += ",";
string _orgId = orgDt.Rows[i]["ORG_ID"].ToString();
string _pId = orgDt.Rows[i]["PID"].ToString();
string _orgName = orgDt.Rows[i]["ORG_NAME"].ToString();
string _allNum = orgDt.Rows[i]["ALL_NUM"].ToString() == "" ? "0" : orgDt.Rows[i]["ALL_NUM"].ToString();
string orgMo = "{\"findDate\":\"" + findDate + "\",\"orgId\":\"" + _orgId + "\",\"pId\":\"" + _pId + "\",\"orgName\":\"" + _orgName + "\",\"allNum\":\"" + _allNum + "\"";
xAxisData[i] = "\"" + _orgName + "\"";
//早点名
var mornList = list.Where(p => p.orgId == _orgId);
// 按人分组
var userGroup = mornList.GroupBy(p => p.userId);
// 应到
int mornTotal = userGroup.Count();
// 未识别
int mornNoArrive = userGroup.Where(p => p.Where(s => s.state == "0").Count() == p.Count()).Count();
// 已识别 => 正常
int mornArrive = userGroup.Where(p => p.Where(s => s.state == "1").Any()).Count();
// 迟到
int mornLate = userGroup.Where(p => p.Where(s => s.state == "2").Count() == p.Count()).Count();
// 请假
int mornLeave = userGroup.Where(p => p.Where(s => s.state == "3").Count() == p.Count()).Count();
// 公差
int mornTolerance = userGroup.Where(p => p.Where(s => s.state == "4").Count() == p.Count()).Count();
orgMo += ",\"mornTotal\":\"" + mornTotal + "\",\"mornLeave\":\"" + mornLeave + "\",\"mornArrive\":\"" + mornArrive +
"\",\"mornNoArrive\":\"" + mornNoArrive + "\",\"mornTolerance\":\"" + mornTolerance + "\",\"mornLate\":\"" + mornLate + "\"";
totalSum += mornTotal;
leaveSum += mornLeave;
arriveSum += mornArrive;
noArriveSum += mornNoArrive;
toleranceSum += mornTolerance;
lateSum += mornLate;
//午点名
var noonList = list.Where(p => p.orgId == _orgId && p.timeType == "3");
// 按人分组
var noonUserGroup = noonList.GroupBy(p => p.userId);
// 应到
int noonTotal = noonUserGroup.Count();
// 未识别
int noonNoArrive = noonUserGroup.Where(p => p.Where(s => s.state == "0").Count() == p.Count()).Count();
// 已识别 => 正常
int noonArrive = noonUserGroup.Where(p => p.Where(s => s.state == "1").Any()).Count();
// 迟到
int noonLate = noonUserGroup.Where(p => p.Where(s => s.state == "2").Count() == p.Count()).Count();
// 请假
int noonLeave = noonUserGroup.Where(p => p.Where(s => s.state == "3").Count() == p.Count()).Count();
// 公差
int noonTolerance = noonUserGroup.Where(p => p.Where(s => s.state == "4").Count() == p.Count()).Count();
orgMo += ",\"noonTotal\":\"" + noonTotal + "\",\"noonLeave\":\"" + noonLeave + "\",\"noonArrive\":\"" + noonArrive +
"\",\"noonNoArrive\":\"" + noonNoArrive + "\",\"noonTolerance\":\"" + noonTolerance + "\",\"noonLate\":\"" + noonLate + "\"";
totalSum += noonTotal;
leaveSum += noonLeave;
arriveSum += noonArrive;
noArriveSum += noonNoArrive;
toleranceSum += noonTolerance;
lateSum += noonLate;
//晚点名
var nightList = list.Where(p => p.orgId == _orgId);
// 按人分组
var nightUserGroup = nightList.GroupBy(p => p.userId);
// 应到
int nightTotal = nightUserGroup.Count();
// 未识别
int nightNoArrive = nightUserGroup.Where(p => p.Where(s => s.state_pm == "0").Count() == p.Count()).Count();
// 已识别 => 正常
int nightArrive = nightUserGroup.Where(p => p.Where(s => s.state_pm == "1").Any()).Count();
// 迟到
int nightLate = nightUserGroup.Where(p => p.Where(s => s.state_pm == "2").Count() == p.Count()).Count();
// 请假
int nightLeave = nightUserGroup.Where(p => p.Where(s => s.state_pm == "3").Count() == p.Count()).Count();
// 公差
int nightTolerance = nightUserGroup.Where(p => p.Where(s => s.state == "4").Count() == p.Count()).Count();
orgMo += ",\"nightTotal\":\"" + nightTotal + "\",\"nightLeave\":\"" + nightLeave + "\",\"nightArrive\":\"" + nightArrive +
"\",\"nightNoArrive\":\"" + nightNoArrive + "\",\"nightTolerance\":\"" + nightTolerance + "\",\"nightLate\":\"" + nightLate + "\"}";
totalSum += nightTotal;
leaveSum += nightLeave;
arriveSum += nightArrive;
noArriveSum += nightNoArrive;
toleranceSum += nightTolerance;
lateSum += nightLate;
totalData[i] = totalSum;
leaveData[i] = leaveSum;
arriveData[i] = arriveSum;
noArriveData[i] = noArriveSum;
toleranceData[i] = toleranceSum;
lateData[i] = lateSum;
returnstr += orgMo;
}
returnstr += "]";
returnstr += ",\"echartsData\":{\"xAxisData\":[" + string.Join(",", xAxisData.ToArray()) + "],\"totalData\":[" + string.Join(",", totalData) + "],\"leaveData\":[" +
string.Join(",", leaveData) + "],\"arriveData\":[" + string.Join(",", arriveData) + "],\"noArriveData\":[" + string.Join(",", noArriveData) +
"],\"toleranceData\":[" + string.Join(",", toleranceData) + "],\"lateData\":[" + string.Join(",", lateData) + "]}";
returnstr += "}";
}
catch (Exception e)
{
var a = Regex.Replace(e.Message, @"\r", "");
var b = Regex.Replace(a, @"\n", "");
returnstr = "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员!\",\"error\":\"" + b + "\",\"data\":[]}";
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Error, "人脸点名统计操作请求", "考勤统计列表异常:" + e);
}
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Query, "人脸点名统计操作请求", "考勤统计列表");
return returnstr;
}
///
/// 考勤统计详情
///
///
///
private string getAttendanceStaItem(HttpContext context)
{
string returnstr = "";
try
{
string findOrgId = context.Request.Params["orgId"];
if (string.IsNullOrEmpty(findOrgId))
{
return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"orgId参数不能为空!\",\"data\":[]}";
}
string findDate = context.Request.Params["findDate"];
if (string.IsNullOrEmpty(findDate))
{
return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"findDate参数不能为空!\",\"data\":[]}";
}
//查询数据类型:1、上午;5、下午
string findTimeType = context.Request.Params["timeType"];
if (string.IsNullOrEmpty(findTimeType))
{
return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"timeType参数不能为空!\",\"data\":[]}";
}
//查询点名信息详情
string sql = "WITH t1 as( SELECT r.ORG_ID,r.id,r.USERS_UID,r.USERS_NAME,date_format(r.FACE_READ_START_TIME,'%Y-%m-%d %H:%i:%s') REPORT_TIME,t.UP_END_DATE setTime,r.FACE_READ_STATE STATE, IFNULL(IFNULL(r.FACE_READ_SMALL_IMG,CONCAT('/',e.PHOTO)),'/images/imgPerDefaut.jpg') FACE_READ_SMALL_IMG, IFNULL(IFNULL(r.FACE_READ_BIG_IMG,CONCAT('/',e.PHOTO)),'/images/imgPerDefaut.jpg') FACE_READ_BIG_IMG FROM oa_attendance_task t LEFT JOIN oa_attendance_record r ON t.id = r.task_id LEFT JOIN tbl_sys_emp e on e.USERS_UID=r.USERS_UID WHERE t.ORG_ID = '" + findOrgId + "' and date_format( t.UP_END_DATE, '%Y-%m-%d' ) = date_format( '" + findDate + "', '%Y-%m-%d' ) order BY r.FACE_READ_START_TIME )" +
@"
SELECT ORG_ID,id,USERS_UID,USERS_NAME,REPORT_TIME,if(STATE=0,if((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( setTime , '%Y-%m-%d %H:%i:%s')
and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( setTime , '%Y-%m-%d %H:%i:%s') )>0,3,
if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( setTime , '%Y-%m-%d %H:%i') and
date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( setTime , '%Y-%m-%d %H:%i') )>0,4,0)
),STATE) FACE_READ_STATE,FACE_READ_BIG_IMG,FACE_READ_SMALL_IMG from t1 ";
if (findTimeType == "5")
{
sql = "WITH t1 as( SELECT r.ORG_ID,r.id,r.USERS_UID,r.USERS_NAME,date_format(r.FACE_READ_START_TIME_PM,'%Y-%m-%d %H:%i:%s') REPORT_TIME,t.DOWN_START_DATE setTime,r.FACE_READ_STATE_PM STATE, IFNULL(IFNULL(r.FACE_READ_SMALL_IMG_PM,CONCAT('/',e.PHOTO)),'/images/imgPerDefaut.jpg') FACE_READ_SMALL_IMG, IFNULL(IFNULL(r.FACE_READ_BIG_IMG_PM,CONCAT('/',e.PHOTO)),'/images/imgPerDefaut.jpg') FACE_READ_BIG_IMG FROM oa_attendance_task t LEFT JOIN oa_attendance_record r ON t.id = r.task_id LEFT JOIN tbl_sys_emp e on e.USERS_UID=r.USERS_UID WHERE t.ORG_ID = '" + findOrgId + "' and date_format( t.DOWN_START_DATE, '%Y-%m-%d' ) = date_format( '" + findDate + "', '%Y-%m-%d' ) order BY r.FACE_READ_START_TIME_PM )" +
@"
SELECT ORG_ID,id,USERS_UID,USERS_NAME,REPORT_TIME,if(STATE=0,if((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( setTime , '%Y-%m-%d %H:%i:%s')
and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( setTime , '%Y-%m-%d %H:%i:%s') )>0,3,
if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( setTime , '%Y-%m-%d %H:%i') and
date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( setTime , '%Y-%m-%d %H:%i') )>0,4,0)
),STATE) FACE_READ_STATE,FACE_READ_BIG_IMG,FACE_READ_SMALL_IMG from t1 ";
}
DataTable dt = FangYar.Common.MySqlHelper.QueryTable(sql);
returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":";
returnstr += FangYar.Common.JsonHelper.ToJson(dt);
returnstr += "}";
}
catch (Exception e)
{
var a = Regex.Replace(e.Message, @"\r", "");
var b = Regex.Replace(a, @"\n", "");
returnstr = "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员!\",\"error\":\"" + b + "\",\"data\":[]}";
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Error, "人脸点名统计操作请求", "考勤统计详情异常:" + e);
}
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Query, "人脸点名统计操作请求", "考勤统计详情");
return returnstr;
}
#endregion
#region 门禁考勤统计数据查询
///
/// 判断是否存在下级单位,若存在则展示下级机构,若不存在则展示本机构部门
///
///
///
private string getAttendanceStaDoorOptionals(HttpContext context)
{
string returnstr = "";
try
{
returnstr = getAttendanceStaDoorForDept(context); //不包含下级单位
}
catch (Exception e)
{
returnstr = "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员!\",\"error\":\"" + e.Message + "\",\"data\":[]}";
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Error, "人脸点名统计操作请求", "判断是否存在下级单位异常:" + e);
}
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Query, "人脸点名统计操作请求", "判断是否存在下级单位");
return returnstr;
}
//private string getAttendanceStaDoorOptionals(HttpContext context)
//{
// string returnstr = "";
// try
// {
// string findOrgId = context.Request.Params["orgId"];
// FangYar.BLL.FIRE.FIRE_ORG fireOrgBll = new BLL.FIRE.FIRE_ORG();
// List fireOrgList = fireOrgBll.GetOrgListTreeByOrgId(findOrgId);
// if (fireOrgList.Count > 1)
// {
// returnstr = getAttendanceStaDoorForOrg(context); //包含下级单位
// }
// else
// {
// returnstr = getAttendanceStaDoorForDept(context); //不包含下级单位
// }
// }
// catch (Exception e)
// {
// returnstr = "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员!\",\"error\":\"" + e.Message + "\",\"data\":[]}";
// }
// return returnstr;
//}
///
/// 考勤统计列表
///
///
///
private string getAttendanceStaDoorForOrg(HttpContext context)
{
string returnstr = "";
try
{
string findOrgId = context.Request.Params["orgId"];
if (string.IsNullOrEmpty(findOrgId))
{
return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"orgId参数不能为空!\",\"data\":[]}";
}
string findDate = context.Request.Params["findDate"];
if (string.IsNullOrEmpty(findDate))
{
findDate = DateTime.Now.ToString("yyyy-MM-dd");
}
string isContent = context.Request.Params["isContent"];
//直属下级机构 点名信息
string orgSql = @"SELECT o.org_id,o.org_name,o.pid AS pid,o.all_num FROM fire_org o WHERE TYPE = 0 AND (o.org_id = '" + findOrgId + @"' or pid = '" + findOrgId + @"')";
string rcSql = @"WITH t1 as(
SELECT ID,ORG_ID,ORG_NAME,USERS_UID,TIME_TYPE,FACE_READ_STATE STATE,FACE_READ_STATE_PM STATE_PM,TASK_ID
from oa_attendance_record r WHERE TASK_ID in
( SELECT id from oa_attendance_task tk,(select get_Org_child_list_OrgIds('" + findOrgId + @"') cids ) s WHERE
find_in_set(tk.org_id,cids) and date_format( tk.UP_START_DATE, '%Y-%m-%d' ) = date_format( '" + findDate + @"', '%Y-%m-%d' )
)
)
SELECT t1.*,tk.UP_START_DATE,tk.UP_END_DATE,tk.DOWN_START_DATE,tk.DOWN_END_DATE
, if((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i:%s')
and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i:%s') )>0,3,
if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i') and
date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i') )>0,4,0)
) WORKSTATE
, if((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i:%s')
and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i:%s') )>0,3,
if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i') and
date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i') )>0,4,0)
) WORKSTATE_PM
from t1 LEFT JOIN oa_attendance_task tk on t1.TASK_ID=tk.ID
";
if (isContent == "1")
{
//递归下级机构 点名信息
orgSql = @"SELECT o.org_id,o.org_name,o.pid AS pid,o.all_num FROM fire_org o, ( SELECT get_Org_child_list ( '" + findOrgId + @"' ) cids ) s WHERE TYPE = 0 AND find_in_set( org_id, cids )";
}
// 插叙出入记录数据
string sqlInOrOut = @" WITH t2 as(
SELECT p.`NAME`,p.EXTEND2,p.START_TIME,p.org_id,p.CLOSEUP_PIC_URL from tbl_personaccess p,(select get_Org_child_list_OrgIds('" + findOrgId + @"') cids ) s
WHERE find_in_set(p.org_id,cids) and date_format( p.START_TIME, '%Y-%m-%d' ) = date_format( '" + findDate + @"', '%Y-%m-%d' )
and p.extend3 in (SELECT EPUIP_ID from tbl_epuip_org WHERE IS_Attendance='1')
)
, t3 as (
SELECT t2.*,e.USERS_UID from t2 LEFT JOIN tbl_sys_emp e on t2.EXTEND2 = e.IDNUMBER
) SELECT * from t3 ";
DataTable orgDt = FangYar.Common.MySqlHelper.QueryTable(orgSql);
DataTable rcDt = FangYar.Common.MySqlHelper.QueryTable(rcSql);
DataTable inOrOutDt = FangYar.Common.MySqlHelper.QueryTable(sqlInOrOut);
//出入信息缓存
List listInOrOut = new List();
for (int i = 0; i < inOrOutDt.Rows.Count; i++)
{
listInOrOut.Add(new InOrOutMo()
{
NAME = inOrOutDt.Rows[i]["NAME"] + "",
org_id = inOrOutDt.Rows[i]["org_id"] + "",
EXTEND2 = inOrOutDt.Rows[i]["EXTEND2"] + "",
USERS_UID = inOrOutDt.Rows[i]["USERS_UID"] + "",
START_TIME = inOrOutDt.Rows[i]["START_TIME"] + "",
});
}
//点名信息 存入缓存
List list = new List();
for (int i = 0; i < rcDt.Rows.Count; i++)
{
list.Add(new RollcallMo()
{
orgId = rcDt.Rows[i]["ORG_ID"] + "",
timeType = rcDt.Rows[i]["TIME_TYPE"] + "",
userId = rcDt.Rows[i]["USERS_UID"] + "",
state = rcDt.Rows[i]["WORKSTATE"] + "",
state_pm = rcDt.Rows[i]["WORKSTATE_PM"] + "",
WORKSTATE = rcDt.Rows[i]["WORKSTATE"] + "",
WORKSTATE_PM = rcDt.Rows[i]["WORKSTATE_PM"] + "",
DOWN_END_DATE = rcDt.Rows[i]["DOWN_END_DATE"] + "",
DOWN_START_DATE = rcDt.Rows[i]["DOWN_START_DATE"] + "",
UP_END_DATE = rcDt.Rows[i]["UP_END_DATE"] + "",
UP_START_DATE = rcDt.Rows[i]["UP_START_DATE"] + "",
});
}
returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":[";
string[] xAxisData = new string[orgDt.Rows.Count];
int[] totalData = new int[orgDt.Rows.Count];
int[] leaveData = new int[orgDt.Rows.Count];
int[] arriveData = new int[orgDt.Rows.Count];
int[] noArriveData = new int[orgDt.Rows.Count];
int[] toleranceData = new int[orgDt.Rows.Count];
int[] lateData = new int[orgDt.Rows.Count];
//DateTime dtmZW = Convert.ToDateTime(findDate.Trim() + " 12:00:00");//*********原来是12点,我把12点注释了
DateTime dtmZW = Convert.ToDateTime(findDate.Trim() + " 14:30:00"); //此处依然保留,是为保留老数据的适用性,下边方法是在新数据下适用
string sqlTask = "SELECT * from oa_attendance_task where org_id = '" + findOrgId + "' and ATTENDANCE_DATE='" + findDate + "'";
DataTable dtTask = FangYar.Common.MySqlHelper.QueryTable(sqlTask);
if (dtTask != null && !string.IsNullOrEmpty(dtTask.Rows[0]["UP_START_DATE2"].ToString()))
{
dtmZW = Convert.ToDateTime(dtTask.Rows[0]["UP_START_DATE2"].ToString());
}
for (int i = 0; i < orgDt.Rows.Count; i++)
{
int totalSum = 0, leaveSum = 0, arriveSum = 0, noArriveSum = 0, toleranceSum = 0, lateSum = 0;
if (i != 0) returnstr += ",";
string _orgId = orgDt.Rows[i]["ORG_ID"].ToString();
string _pId = orgDt.Rows[i]["PID"].ToString();
string _orgName = orgDt.Rows[i]["ORG_NAME"].ToString();
string _allNum = orgDt.Rows[i]["ALL_NUM"].ToString() == "" ? "0" : orgDt.Rows[i]["ALL_NUM"].ToString();
string orgMo = "{\"findDate\":\"" + findDate + "\",\"orgId\":\"" + _orgId + "\",\"pId\":\"" + _pId + "\",\"orgName\":\"" + _orgName + "\",\"allNum\":\"" + _allNum + "\"";
xAxisData[i] = "\"" + _orgName + "\"";
//早点名
var mornList = list.Where(p => p.orgId == _orgId);
// 按人分组
var userGroup = mornList.GroupBy(p => p.userId);
//需要识别人员ID集合
var userList = userGroup.Where(p => p.Any(s => s.WORKSTATE == "0")).Select(p => p.Key).ToList();
// 对应出入记录信息
var list1 = listInOrOut.Where(p => p.org_id == _orgId && userList.Contains(p.USERS_UID));
// 已经识别人员
var list2 = list1.Where(p => Convert.ToDateTime(p.START_TIME) <= dtmZW).GroupBy(p => p.USERS_UID);
// 已识别人员ID集合
var list3 = list2.Select(p => p.Key).ToList();
// 已经识别人员信息
var list4 = userList.Where(p => list3.Contains(p)).GroupBy(p => p).ToList();
DateTime dtmUpS = DateTime.MinValue;
DateTime dtmUpE = DateTime.MaxValue;
DateTime dtmDoS = DateTime.MinValue;
DateTime dtmDoE = DateTime.MaxValue;
// 考勤时间获取
var objTime = userGroup.FirstOrDefault();
if (objTime != null)
{
DateTime.TryParse(objTime.First().UP_START_DATE, out dtmUpS);
DateTime.TryParse(objTime.First().UP_END_DATE, out dtmUpE);
DateTime.TryParse(objTime.First().DOWN_START_DATE, out dtmDoS);
DateTime.TryParse(objTime.First().DOWN_END_DATE, out dtmDoE);
}
// 正常考勤
var list5 = list1.Where(p => Convert.ToDateTime(p.START_TIME) <= dtmUpE).GroupBy(p => p.USERS_UID).ToList();
// 应到
int mornTotal = userGroup.Count();
// 未识别
int mornNoArrive = userList.Count() - list4.Count();
mornNoArrive = mornNoArrive < 0 ? 0 : mornNoArrive;
// 已识别 => 正常
int mornArrive = list5.Count();
// 迟到
int mornLate = list4.Count() - mornArrive;
mornLate = mornLate < 0 ? 0 : mornLate;
// 请假
int mornLeave = userGroup.Where(p => p.Where(s => s.state == "3").Count() == p.Count()).Count();
// 公差
int mornTolerance = userGroup.Where(p => p.Where(s => s.state == "4").Count() == p.Count()).Count();
// 设置应到人数减去出差以及请假人数
mornTotal = mornTotal - mornLeave - mornTolerance;
mornTotal = mornTotal < 0 ? 0 : mornTotal;
orgMo += ",\"mornTotal\":\"" + mornTotal + "\",\"mornLeave\":\"" + mornLeave + "\",\"mornArrive\":\"" + mornArrive +
"\",\"mornNoArrive\":\"" + mornNoArrive + "\",\"mornTolerance\":\"" + mornTolerance + "\",\"mornLate\":\"" + mornLate + "\"";
totalSum += mornTotal;
leaveSum += mornLeave;
arriveSum += mornArrive;
noArriveSum += mornNoArrive;
toleranceSum += mornTolerance;
lateSum += mornLate;
// 应到
int noonTotal = 0;
// 未识别
int noonNoArrive = 0;
// 已识别 => 正常
int noonArrive = 0;
// 迟到
int noonLate = 0;
// 请假
int noonLeave = 0;
// 公差
int noonTolerance = 0;
orgMo += ",\"noonTotal\":\"" + noonTotal + "\",\"noonLeave\":\"" + noonLeave + "\",\"noonArrive\":\"" + noonArrive +
"\",\"noonNoArrive\":\"" + noonNoArrive + "\",\"noonTolerance\":\"" + noonTolerance + "\",\"noonLate\":\"" + noonLate + "\"";
totalSum += noonTotal;
leaveSum += noonLeave;
arriveSum += noonArrive;
noArriveSum += noonNoArrive;
toleranceSum += noonTolerance;
lateSum += noonLate;
//晚点名
var nightList = list.Where(p => p.orgId == _orgId);
// 按人分组
var nightUserGroup = nightList.GroupBy(p => p.userId);
//需要识别人员ID集合
var userList_pm = userGroup.Where(p => p.Any(s => s.WORKSTATE_PM == "0")).Select(p => p.Key).ToList();
// 对应出入记录信息
var list1_pm = listInOrOut.Where(p => p.org_id == _orgId && userList_pm.Contains(p.USERS_UID));
// 已经识别人员
var list2_pm = list1_pm.Where(p => Convert.ToDateTime(p.START_TIME) >= dtmZW).GroupBy(p => p.USERS_UID);
// 已识别人员ID集合
var list3_pm = list2_pm.Select(p => p.Key).ToList();
// 已经识别人员信息
var list4_pm = userList_pm.Where(p => list3_pm.Contains(p)).GroupBy(p => p).ToList();
// 正常考勤
var list5_pm = list1_pm.Where(p => Convert.ToDateTime(p.START_TIME) >= dtmDoS).GroupBy(p => p.USERS_UID);
// 应到
int nightTotal = nightUserGroup.Count();
// 未识别
int nightNoArrive = userList_pm.Count() - list4_pm.Count();
nightNoArrive = nightNoArrive < 0 ? 0 : nightNoArrive;
// 已识别 => 正常
int nightArrive = list5_pm.Count();
// 迟到
int nightLate = list4_pm.Count() - nightArrive;
nightLate = nightLate < 0 ? 0 : nightLate;
// 请假
int nightLeave = nightUserGroup.Where(p => p.Where(s => s.state_pm == "3").Count() == p.Count()).Count();
// 公差
int nightTolerance = nightUserGroup.Where(p => p.Where(s => s.state == "4").Count() == p.Count()).Count();
//设置应到人数减去请假公差人数
nightTotal = nightTotal - nightLeave - nightTolerance;
nightTolerance = nightTolerance < 0 ? 0 : nightTolerance;
orgMo += ",\"nightTotal\":\"" + nightTotal + "\",\"nightLeave\":\"" + nightLeave + "\",\"nightArrive\":\"" + nightArrive +
"\",\"nightNoArrive\":\"" + nightNoArrive + "\",\"nightTolerance\":\"" + nightTolerance + "\",\"nightLate\":\"" + nightLate + "\"}";
totalSum += nightTotal;
leaveSum += nightLeave;
arriveSum += nightArrive;
noArriveSum += nightNoArrive;
toleranceSum += nightTolerance;
lateSum += nightLate;
totalData[i] = totalSum;
leaveData[i] = leaveSum;
arriveData[i] = arriveSum;
noArriveData[i] = noArriveSum;
toleranceData[i] = toleranceSum;
lateData[i] = lateSum;
returnstr += orgMo;
}
returnstr += "]";
returnstr += ",\"echartsData\":{\"xAxisData\":[" + string.Join(",", xAxisData.ToArray()) + "],\"totalData\":[" + string.Join(",", totalData) + "],\"leaveData\":[" +
string.Join(",", leaveData) + "],\"arriveData\":[" + string.Join(",", arriveData) + "],\"noArriveData\":[" + string.Join(",", noArriveData) +
"],\"toleranceData\":[" + string.Join(",", toleranceData) + "],\"lateData\":[" + string.Join(",", lateData) + "]}";
returnstr += "}";
}
catch (Exception e)
{
returnstr = "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员!\",\"error\":\"" + e.Message + "\",\"data\":[]}";
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Error, "人脸点名统计操作请求", "考勤统计列表异常:" + e);
}
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Query, "人脸点名统计操作请求", "考勤统计列表");
return returnstr;
}
///
/// 考勤统计列表
///
///
///
private string getAttendanceStaDoorForDept(HttpContext context)
{
string returnstr = "";
try
{
string findOrgId = FangYar.Common.WebCommonUtil.GetOrgIdUpLevelToDownLevel(context.Request.Params["orgId"]);
if (string.IsNullOrEmpty(findOrgId))
{
return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"orgId参数不能为空!\",\"data\":[]}";
}
string findDate = context.Request.Params["findDate"];
string findStartDate = "";
string findEndDate = "";
if (string.IsNullOrEmpty(findDate))
{
findDate = DateTime.Now.ToString("yyyy-MM-dd");
findStartDate = DateTime.Now.ToString("yyyy-MM-dd 00:00:00");
findEndDate = DateTime.Now.ToString("yyyy-MM-dd 23:59:59");
}
else
{
findStartDate = Convert.ToDateTime(findDate).ToString("yyyy-MM-dd 00:00:00");
findEndDate = Convert.ToDateTime(findDate).ToString("yyyy-MM-dd 23:59:59");
}
string isContent = context.Request.Params["isContent"];
//直属下级机构 点名信息
//string orgSql = @"SELECT * FROM fire_org o WHERE o.org_id = '" + findOrgId + "'";
string orgSql = $"SELECT o.org_id,o.org_name,o.type,o.pid AS pid,o.all_num FROM fire_org o WHERE o.org_id = '{findOrgId}' OR (pid = '{findOrgId}' and type='1') ORDER BY type";
string rcSql = @"WITH t1 as(
SELECT ID, CASE WHEN (ISNULL(DEPT_ID)=1) || (LENGTH(trim(DEPT_ID))=0) THEN ORG_ID
WHEN (ISNULL(DEPT_ID)!=1) && (LENGTH(trim(DEPT_ID))!=0) THEN DEPT_ID
END as ORG_ID,USERS_UID,TASK_ID,KQ_FACE_READ_START_TIME_AM kqFaceReadStartTimeAm,KQ_FACE_READ_END_TIME_AM kqFaceReadEndTimeAm,
KQ_FACE_READ_START_TIME_PM kqFaceReadStartTimePm,KQ_FACE_READ_END_TIME_PM kqFaceReadEndTimePm,
KQ_FACE_READ_START_STATE_AM UP_STATE_AM,KQ_FACE_READ_END_STATE_AM DOWN_STATE_AM,KQ_FACE_READ_START_STATE_PM UP_STATE_PM,
KQ_FACE_READ_END_STATE_PM DOWN_STATE_PM
from ( select oar.*, tse.DEPT_ID from oa_attendance_record oar left join tbl_sys_emp tse on oar.USERS_UID=tse.users_uid
)r WHERE TASK_ID in
( SELECT id from oa_attendance_task tk,(select get_Org_child_list_OrgIds('" + findOrgId + @"') cids ) s WHERE
find_in_set(tk.org_id,cids) and tk.UP_START_DATE BETWEEN '" + findStartDate + @"' and '" + findEndDate + @"'
)
)
SELECT t1.*,tk.UP_START_DATE,tk.UP_END_DATE,tk.DOWN_START_DATE,tk.DOWN_END_DATE,tk.UP_START_DATE2,tk.UP_END_DATE2,tk.DOWN_START_DATE2,tk.DOWN_END_DATE2
, if(((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i:%s')
and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i:%s') )+
(SELECT count(1) from oa_vacation v LEFT JOIN tbl_sys_emp e on v.PPL_ID=e.ID WHERE v.Info_State='1' and e.USERS_UID=t1.USERS_UID
and date_format( v.S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format(tk.UP_END_DATE , '%Y-%m-%d %H:%i:%s')
and date_format(v.E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format(tk.UP_END_DATE , '%Y-%m-%d %H:%i:%s'))
)>0,3,
if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i') and
date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i') )>0,4,0)
) WORKSTATE
, if(((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i:%s')
and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i:%s') )+
(SELECT count(1) from oa_vacation v LEFT JOIN tbl_sys_emp e on v.PPL_ID=e.ID WHERE v.Info_State='1' and e.USERS_UID=t1.USERS_UID
and date_format( v.S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format(tk.DOWN_START_DATE , '%Y-%m-%d %H:%i:%s')
and date_format(v.E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format(tk.DOWN_START_DATE , '%Y-%m-%d %H:%i:%s'))
)>0,3,
if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i') and
date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i') )>0,4,0)
) WORKSTATE_DOWN
, if(((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.UP_END_DATE2 , '%Y-%m-%d %H:%i:%s')
and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.UP_END_DATE2 , '%Y-%m-%d %H:%i:%s') )+
(SELECT count(1) from oa_vacation v LEFT JOIN tbl_sys_emp e on v.PPL_ID=e.ID WHERE v.Info_State='1' and e.USERS_UID=t1.USERS_UID
and date_format( v.S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format(tk.UP_END_DATE2 , '%Y-%m-%d %H:%i:%s')
and date_format(v.E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format(tk.UP_END_DATE2 , '%Y-%m-%d %H:%i:%s'))
)>0,3,
if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( tk.UP_END_DATE2 , '%Y-%m-%d %H:%i') and
date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( tk.UP_END_DATE2 , '%Y-%m-%d %H:%i') )>0,4,0)
) WORKSTATE_PM
, if(((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.DOWN_START_DATE2 , '%Y-%m-%d %H:%i:%s')
and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.DOWN_START_DATE2 , '%Y-%m-%d %H:%i:%s') )+
(SELECT count(1) from oa_vacation v LEFT JOIN tbl_sys_emp e on v.PPL_ID=e.ID WHERE v.Info_State='1' and e.USERS_UID=t1.USERS_UID
and date_format( v.S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format(tk.DOWN_START_DATE2 , '%Y-%m-%d %H:%i:%s')
and date_format(v.E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format(tk.DOWN_START_DATE2 , '%Y-%m-%d %H:%i:%s'))
)>0,3,
if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( tk.DOWN_START_DATE2 , '%Y-%m-%d %H:%i') and
date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( tk.DOWN_START_DATE2 , '%Y-%m-%d %H:%i') )>0,4,0)
) WORKSTATE_PM_DOWN
from t1 LEFT JOIN oa_attendance_task tk on t1.TASK_ID=tk.ID
";
if (isContent == "1")
{
//递归下级机构 点名信息
orgSql = @"SELECT o.org_id,o.org_name,o.pid AS pid,o.all_num FROM fire_org o, ( SELECT get_Org_child_list ( '" + findOrgId + @"' ) cids ) s WHERE TYPE = 0 AND find_in_set( org_id, cids )";
}
DataTable orgDt = FangYar.Common.MySqlHelper.QueryTable(orgSql);
DataTable rcDt = FangYar.Common.MySqlHelper.QueryTable(rcSql);
//点名信息 存入缓存
List list = Common.DataTableExtensions.ConvertDataTableToGenericList(rcDt);
returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":[";
string[] xAxisData = new string[orgDt.Rows.Count];
int[] totalData = new int[orgDt.Rows.Count];
int[] leaveData = new int[orgDt.Rows.Count];
int[] arriveData = new int[orgDt.Rows.Count];
int[] noArriveData = new int[orgDt.Rows.Count];
int[] toleranceData = new int[orgDt.Rows.Count];
int[] lateData = new int[orgDt.Rows.Count];
//DateTime dtmZW = Convert.ToDateTime(findDate.Trim() + " 12:00:00");
DateTime dtmZW = Convert.ToDateTime(findDate.Trim() + " 14:30:00"); //此处依然保留,是为保留老数据的适用性,下边方法是在新数据下适用
string sqlTask = "SELECT * from oa_attendance_task where org_id = '" + findOrgId + "' and ATTENDANCE_DATE='" + findDate + "'";
DataTable dtTask = FangYar.Common.MySqlHelper.QueryTable(sqlTask);
if (dtTask != null && dtTask.Rows.Count > 0 && !string.IsNullOrEmpty(dtTask.Rows[0]["UP_START_DATE2"].ToString()))
{
dtmZW = Convert.ToDateTime(dtTask.Rows[0]["UP_START_DATE2"].ToString());
}
DateTime dtmUpS = DateTime.MinValue;
DateTime dtmUpE = DateTime.MaxValue;
DateTime dtmDoS = DateTime.MinValue;
DateTime dtmDoE = DateTime.MaxValue;
DateTime dtmUpS2 = DateTime.MinValue;
DateTime dtmUpE2 = DateTime.MaxValue;
DateTime dtmDoS2 = DateTime.MinValue;
DateTime dtmDoE2 = DateTime.MaxValue;
// 考勤时间获取
var objTime = list.FirstOrDefault();
if (objTime != null)
{
DateTime.TryParse(objTime.UP_START_DATE, out dtmUpS);
DateTime.TryParse(objTime.UP_END_DATE, out dtmUpE);
DateTime.TryParse(objTime.DOWN_START_DATE, out dtmDoS);
DateTime.TryParse(objTime.DOWN_END_DATE, out dtmDoE);
DateTime.TryParse(objTime.UP_START_DATE2, out dtmUpS2);
DateTime.TryParse(objTime.UP_END_DATE2, out dtmUpE2);
DateTime.TryParse(objTime.DOWN_START_DATE2, out dtmDoS2);
DateTime.TryParse(objTime.DOWN_END_DATE2, out dtmDoE2);
}
for (int i = 0; i < orgDt.Rows.Count; i++)
{
int totalSum = 0, leaveSum = 0, arriveSum = 0, noArriveSum = 0, toleranceSum = 0, lateSum = 0;
if (i != 0) returnstr += ",";
string _orgId = orgDt.Rows[i]["ORG_ID"].ToString();
string _pId = orgDt.Rows[i]["PID"].ToString();
string _orgName = orgDt.Rows[i]["ORG_NAME"].ToString();
string _type = orgDt.Rows[i]["TYPE"].ToString();
string _allNum = orgDt.Rows[i]["ALL_NUM"].ToString() == "" ? "0" : orgDt.Rows[i]["ALL_NUM"].ToString();
string orgMo = "{\"findDate\":\"" + findDate + "\",\"orgId\":\"" + _orgId + "\",\"pId\":\"" + _pId + "\",\"orgName\":\"" + _orgName + "\",\"allNum\":\"" + _allNum + "\"";
xAxisData[i] = "\"" + _orgName + "\"";
var dataList = _type == "0" ? list : list.Where(p => p.ORG_ID == _orgId); //此处判断是机构还是部门
#region 上午上班打卡
// 应到
int mornTotal = dataList.Count();
// 迟到
int mornLate = dataList.Where(p => p.UP_STATE_AM == 2).Count();
// 已识别 => 正常
int mornArrive = dataList.Where(p => p.UP_STATE_AM == 1).Count();
// 请假
int mornLeave = dataList.Where(p => p.WORKSTATE == 3 && p.UP_STATE_AM == 0).Count();
// 公差
int mornTolerance = dataList.Where(p => p.WORKSTATE == 4 && p.UP_STATE_AM == 0).Count();
// 未识别
int mornNoArrive = mornTotal - mornArrive - mornLeave - mornTolerance;
mornNoArrive = mornNoArrive < 0 ? 0 : mornNoArrive;
// 设置应到人数减去出差以及请假人数
//mornTotal = mornTotal - mornLeave - mornTolerance;
mornTotal = mornTotal < 0 ? 0 : mornTotal;
// 大标题 应到、实到、未到、未到率 小标题 请假、公差、(迟到/早退)识别人员、未到人员
orgMo += ",\"mornTotalB\":\"" + mornTotal + "\",\"mornArriveB\":\"" + mornArrive + "\",\"mornNoArriveB\":\"" + (mornTotal - mornArrive) + "\",\"mornArriveRateB\":\"" + (Math.Round((decimal)mornArrive / (mornTotal == 0 ? 1 : mornTotal) * 100, 2) + "%") +
"\",\"mornLeaveS\":\"" + mornLeave + "\",\"mornToleranceS\":\"" + mornTolerance + "\",\"mornLateS\":\"" + mornLate + "\",\"mornNoArriveS\":\"" + (mornNoArrive - mornLate) + "\"";
//orgMo += ",\"mornTotal\":\"" + mornTotal + "\",\"mornLeave\":\"" + mornLeave + "\",\"mornArrive\":\"" + mornArrive +
// "\",\"mornNoArrive\":\"" + mornNoArrive + "\",\"mornTolerance\":\"" + mornTolerance + "\",\"mornLate\":\"" + mornLate + "\"";
totalSum += mornTotal;
leaveSum += mornLeave;
arriveSum += mornArrive;
noArriveSum += mornNoArrive;
toleranceSum += mornTolerance;
lateSum += mornLate;
#endregion
#region 上午下班打卡
// 应到
int mornTotal_down = dataList.Count();
//早退
int mornEarly_down = dataList.Where(p => p.DOWN_STATE_AM == 2).Count();
// 已识别 => 正常
int mornArrive_down = dataList.Where(p => p.DOWN_STATE_AM == 1).Count();
// 请假
int mornLeave_down = dataList.Where(p => p.WORKSTATE_DOWN == 3 && p.DOWN_STATE_AM == 0).Count();
// 公差
int mornTolerance_down = dataList.Where(p => p.WORKSTATE_DOWN == 4 && p.DOWN_STATE_AM == 0).Count();
// 未识别
int mornNoArrive_down = mornTotal_down - mornLeave_down - mornTolerance_down - mornArrive_down;
mornNoArrive_down = mornNoArrive_down < 0 ? 0 : mornNoArrive_down;
// 设置应到人数减去出差以及请假人数
//mornTotal_down = mornTotal_down - mornLeave_down - mornTolerance_down;
mornTotal_down = mornTotal_down < 0 ? 0 : mornTotal_down;
// 大标题 应到、实到、未到、未到率 小标题 请假、公差、(迟到/早退)识别人员、未到人员
orgMo += ",\"mornTotalDownB\":\"" + mornTotal_down + "\",\"mornArriveDownB\":\"" + mornArrive_down + "\",\"mornNoArriveDownB\":\"" + (mornTotal_down - mornArrive_down) + "\",\"mornArriveDownRateB\":\"" + (Math.Round((decimal)mornArrive_down / (mornTotal_down == 0 ? 1 : mornTotal_down) * 100, 2) + "%") +
"\",\"mornLeaveDownS\":\"" + mornLeave_down + "\",\"mornToleranceDownS\":\"" + mornTolerance_down + "\",\"mornLateDownS\":\"" + mornEarly_down + "\",\"mornNoArriveDownS\":\"" + (mornNoArrive_down - mornEarly_down) + "\"";
//orgMo += ",\"mornTotalDown\":\"" + mornTotal_down + "\",\"mornLeaveDown\":\"" + mornLeave_down + "\",\"mornArriveDown\":\"" + mornArrive_down +
// "\",\"mornNoArriveDown\":\"" + mornNoArrive_down + "\",\"mornToleranceDown\":\"" + mornTolerance_down + "\",\"mornLateDown\":\"" + mornEarly_down + "\"";
totalSum += mornTotal_down;
leaveSum += mornLeave_down;
arriveSum += mornArrive_down;
noArriveSum += mornNoArrive_down;
toleranceSum += mornTolerance_down;
lateSum += mornEarly_down;
#endregion
#region 下午上班打卡
// 应到
int nightTotal_up = dataList.Count();
// 已识别 => 正常
int nightArrive_up = dataList.Where(p => p.UP_STATE_PM == 1).Count();
// 迟到
int nightLate_up = dataList.Where(p => p.UP_STATE_PM == 2).Count();
// 请假
int nightLeave_up = dataList.Where(p => p.WORKSTATE_PM == 3 && p.UP_STATE_PM == 0).Count();
// 公差
int nightTolerance_up = dataList.Where(p => p.WORKSTATE_PM == 4 && p.UP_STATE_PM == 0).Count();
// 未识别
int nightNoArrive_up = nightTotal_up - nightArrive_up - nightLeave_up - nightTolerance_up;
nightNoArrive_up = nightNoArrive_up < 0 ? 0 : nightNoArrive_up;
//设置应到人数减去请假公差人数
//nightTotal_up = nightTotal_up - nightLeave_up - nightTolerance_up;
nightTolerance_up = nightTolerance_up < 0 ? 0 : nightTolerance_up;
// 大标题 应到、实到、未到、未到率 小标题 请假、公差、(迟到 / 早退)识别人员、未到人员
orgMo += ",\"nightTotalUpB\":\"" + nightTotal_up + "\",\"nightArriveUpB\":\"" + nightArrive_up + "\",\"nightNoArriveUpB\":\"" + (nightTotal_up - nightArrive_up) + "\",\"nightArriveUpRateB\":\"" + (Math.Round((decimal)nightArrive_up / (nightTotal_up == 0 ? 1 : nightTotal_up) * 100, 2) + "%") +
"\",\"nightLeaveUpS\":\"" + nightLeave_up + "\",\"nightToleranceUpS\":\"" + nightTolerance_up + "\",\"nightLateUpS\":\"" + nightLate_up + "\",\"nightNoArriveUpS\":\"" + (nightNoArrive_up - nightLate_up) + "\"";
//orgMo += ",\"nightTotalUp\":\"" + nightTotal_up + "\",\"nightLeaveUp\":\"" + nightLeave_up + "\",\"nightArriveUp\":\"" + nightArrive_up +
// "\",\"nightNoArriveUp\":\"" + nightNoArrive_up + "\",\"nightToleranceUp\":\"" + nightTolerance_up + "\",\"nightLateUp\":\"" + nightLate_up + "\"";
totalSum += nightTotal_up;
leaveSum += nightLeave_up;
arriveSum += nightArrive_up;
noArriveSum += nightNoArrive_up;
toleranceSum += nightTolerance_up;
lateSum += nightLate_up;
#endregion
#region 下午下班打卡
// 应到
int nightTotal = dataList.Count();
// 已识别 => 正常
int nightArrive = dataList.Where(p => p.DOWN_STATE_PM == 1).Count();
// 早退
int nightEarly = dataList.Where(p => p.DOWN_STATE_PM == 2).Count();
// 请假
int nightLeave = dataList.Where(p => p.WORKSTATE_PM_DOWN == 3 && p.DOWN_STATE_PM == 0).Count();
// 公差
int nightTolerance = dataList.Where(p => p.WORKSTATE_PM_DOWN == 4 && p.DOWN_STATE_PM == 0).Count();
// 未识别
int nightNoArrive = nightTotal - nightArrive - nightLeave - nightTolerance;
nightNoArrive = nightNoArrive < 0 ? 0 : nightNoArrive;
//设置应到人数减去请假公差人数
//nightTotal = nightTotal - nightLeave - nightTolerance;
nightTolerance = nightTolerance < 0 ? 0 : nightTolerance;
// 大标题 应到、实到、未到、未到率 小标题 请假、公差、(迟到/早退)识别人员、未到人员
orgMo += ",\"nightTotalB\":\"" + nightTotal + "\",\"nightArriveB\":\"" + nightArrive + "\",\"nightNoArriveB\":\"" + (nightTotal_up - nightArrive) + "\",\"nightArriveRateB\":\"" + (Math.Round((decimal)nightArrive / (nightTotal == 0 ? 1 : nightTotal) * 100, 2) + "%") +
"\",\"nightLeaveS\":\"" + nightLeave + "\",\"nightToleranceS\":\"" + nightTolerance + "\",\"nightLateS\":\"" + nightEarly + "\",\"nightNoArriveS\":\"" + (nightNoArrive - nightEarly) + "\"}";
//orgMo += ",\"nightTotal\":\"" + nightTotal + "\",\"nightLeave\":\"" + nightLeave + "\",\"nightArrive\":\"" + nightArrive +
// "\",\"nightNoArrive\":\"" + nightNoArrive + "\",\"nightTolerance\":\"" + nightTolerance + "\",\"nightLate\":\"" + nightEarly + "\"}";
totalSum += nightTotal;
leaveSum += nightLeave;
arriveSum += nightArrive;
noArriveSum += nightNoArrive;
toleranceSum += nightTolerance;
lateSum += nightEarly;
#endregion
totalData[i] = totalSum;
leaveData[i] = leaveSum;
arriveData[i] = arriveSum;
noArriveData[i] = noArriveSum;
toleranceData[i] = toleranceSum;
lateData[i] = lateSum;
returnstr += orgMo;
}
returnstr += "]";
returnstr += ",\"echartsData\":{\"xAxisData\":[" + string.Join(",", xAxisData.ToArray()) + "],\"totalData\":[" + string.Join(",", totalData) + "],\"leaveData\":[" +
string.Join(",", leaveData) + "],\"arriveData\":[" + string.Join(",", arriveData) + "],\"noArriveData\":[" + string.Join(",", noArriveData) +
"],\"toleranceData\":[" + string.Join(",", toleranceData) + "],\"lateData\":[" + string.Join(",", lateData) + "]}";
returnstr += "}";
}
catch (Exception e)
{
returnstr = "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员!\",\"error\":\"" + e.Message + "\",\"data\":[]}";
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Error, "人脸点名统计操作请求", "考勤统计列表异常:" + e);
}
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Query, "人脸点名统计操作请求", "考勤统计列表");
return returnstr;
// string returnstr = "";
// try
// {
// string findOrgId = context.Request.Params["orgId"];
// if (string.IsNullOrEmpty(findOrgId))
// {
// return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"orgId参数不能为空!\",\"data\":[]}";
// }
// string findDate = context.Request.Params["findDate"];
// string findStartDate = "";
// string findEndDate = "";
// if (string.IsNullOrEmpty(findDate))
// {
// findDate = DateTime.Now.ToString("yyyy-MM-dd");
// findStartDate = DateTime.Now.ToString("yyyy-MM-dd 00:00:00");
// findEndDate = DateTime.Now.ToString("yyyy-MM-dd 23:59:59");
// }
// else
// {
// findStartDate = Convert.ToDateTime(findDate).ToString("yyyy-MM-dd 00:00:00");
// findEndDate = Convert.ToDateTime(findDate).ToString("yyyy-MM-dd 23:59:59");
// }
// string isContent = context.Request.Params["isContent"];
// //直属下级机构 点名信息
// string orgSql = @"SELECT * FROM fire_org o WHERE o.org_id = '" + findOrgId + "'";
// string rcSql = @"WITH t1 as(
// SELECT ID, CASE WHEN (ISNULL(DEPT_ID)=1) || (LENGTH(trim(DEPT_ID))=0) THEN ORG_ID
// WHEN (ISNULL(DEPT_ID)!=1) && (LENGTH(trim(DEPT_ID))!=0) THEN DEPT_ID
// END as ORG_ID,USERS_UID,TASK_ID,KQ_FACE_READ_START_TIME_AM kqFaceReadStartTimeAm,KQ_FACE_READ_END_TIME_AM kqFaceReadEndTimeAm,
// KQ_FACE_READ_START_TIME_PM kqFaceReadStartTimePm,KQ_FACE_READ_END_TIME_PM kqFaceReadEndTimePm,
// KQ_FACE_READ_START_STATE_AM UP_STATE_AM,KQ_FACE_READ_END_STATE_AM DOWN_STATE_AM,KQ_FACE_READ_START_STATE_PM UP_STATE_PM,
// KQ_FACE_READ_END_STATE_PM DOWN_STATE_PM
// from ( select oar.*, tse.DEPT_ID from oa_attendance_record oar left join tbl_sys_emp tse on oar.USERS_UID=tse.users_uid
// )r WHERE TASK_ID in
// ( SELECT id from oa_attendance_task tk,(select get_Org_child_list_OrgIds('" + findOrgId + @"') cids ) s WHERE
// find_in_set(tk.org_id,cids) and tk.UP_START_DATE BETWEEN '" + findStartDate + @"' and '" + findEndDate + @"'
// )
// )
// SELECT t1.*,tk.UP_START_DATE,tk.UP_END_DATE,tk.DOWN_START_DATE,tk.DOWN_END_DATE,tk.UP_START_DATE2,tk.UP_END_DATE2,tk.DOWN_START_DATE2,tk.DOWN_END_DATE2
// , if(((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
// date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i:%s')
// and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i:%s') )+
// (SELECT count(1) from oa_vacation v LEFT JOIN tbl_sys_emp e on v.PPL_ID=e.ID WHERE v.Info_State='1' and e.USERS_UID=t1.USERS_UID
// and date_format( v.S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format(tk.UP_END_DATE , '%Y-%m-%d %H:%i:%s')
// and date_format(v.E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format(tk.UP_END_DATE , '%Y-%m-%d %H:%i:%s'))
// )>0,3,
// if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
// and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i') and
// date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i') )>0,4,0)
// ) WORKSTATE
// , if(((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
// date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i:%s')
// and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i:%s') )+
// (SELECT count(1) from oa_vacation v LEFT JOIN tbl_sys_emp e on v.PPL_ID=e.ID WHERE v.Info_State='1' and e.USERS_UID=t1.USERS_UID
// and date_format( v.S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format(tk.DOWN_START_DATE , '%Y-%m-%d %H:%i:%s')
// and date_format(v.E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format(tk.DOWN_START_DATE , '%Y-%m-%d %H:%i:%s'))
// )>0,3,
// if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
// and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i') and
// date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i') )>0,4,0)
// ) WORKSTATE_DOWN
// , if(((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
// date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.UP_END_DATE2 , '%Y-%m-%d %H:%i:%s')
// and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.UP_END_DATE2 , '%Y-%m-%d %H:%i:%s') )+
// (SELECT count(1) from oa_vacation v LEFT JOIN tbl_sys_emp e on v.PPL_ID=e.ID WHERE v.Info_State='1' and e.USERS_UID=t1.USERS_UID
// and date_format( v.S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format(tk.UP_END_DATE2 , '%Y-%m-%d %H:%i:%s')
// and date_format(v.E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format(tk.UP_END_DATE2 , '%Y-%m-%d %H:%i:%s'))
// )>0,3,
// if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
// and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( tk.UP_END_DATE2 , '%Y-%m-%d %H:%i') and
// date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( tk.UP_END_DATE2 , '%Y-%m-%d %H:%i') )>0,4,0)
// ) WORKSTATE_PM
// , if(((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
// date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.DOWN_START_DATE2 , '%Y-%m-%d %H:%i:%s')
// and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.DOWN_START_DATE2 , '%Y-%m-%d %H:%i:%s') )+
// (SELECT count(1) from oa_vacation v LEFT JOIN tbl_sys_emp e on v.PPL_ID=e.ID WHERE v.Info_State='1' and e.USERS_UID=t1.USERS_UID
// and date_format( v.S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format(tk.DOWN_START_DATE2 , '%Y-%m-%d %H:%i:%s')
// and date_format(v.E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format(tk.DOWN_START_DATE2 , '%Y-%m-%d %H:%i:%s'))
// )>0,3,
// if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
// and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( tk.DOWN_START_DATE2 , '%Y-%m-%d %H:%i') and
// date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( tk.DOWN_START_DATE2 , '%Y-%m-%d %H:%i') )>0,4,0)
// ) WORKSTATE_PM_DOWN
// from t1 LEFT JOIN oa_attendance_task tk on t1.TASK_ID=tk.ID
//";
// if (isContent == "1")
// {
// //递归下级机构 点名信息
// orgSql = @"SELECT o.org_id,o.org_name,o.pid AS pid,o.all_num FROM fire_org o, ( SELECT get_Org_child_list ( '" + findOrgId + @"' ) cids ) s WHERE TYPE = 0 AND find_in_set( org_id, cids )";
// }
// DataTable orgDt = FangYar.Common.MySqlHelper.QueryTable(orgSql);
// DataTable rcDt = FangYar.Common.MySqlHelper.QueryTable(rcSql);
// //点名信息 存入缓存
// List list = Common.DataTableExtensions.ConvertDataTableToGenericList(rcDt);
// returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":[";
// string[] xAxisData = new string[orgDt.Rows.Count];
// int[] totalData = new int[orgDt.Rows.Count];
// int[] leaveData = new int[orgDt.Rows.Count];
// int[] arriveData = new int[orgDt.Rows.Count];
// int[] noArriveData = new int[orgDt.Rows.Count];
// int[] toleranceData = new int[orgDt.Rows.Count];
// int[] lateData = new int[orgDt.Rows.Count];
// //DateTime dtmZW = Convert.ToDateTime(findDate.Trim() + " 12:00:00");
// DateTime dtmZW = Convert.ToDateTime(findDate.Trim() + " 14:30:00"); //此处依然保留,是为保留老数据的适用性,下边方法是在新数据下适用
// string sqlTask = "SELECT * from oa_attendance_task where org_id = '" + findOrgId + "' and ATTENDANCE_DATE='" + findDate + "'";
// DataTable dtTask = FangYar.Common.MySqlHelper.QueryTable(sqlTask);
// if (dtTask != null && dtTask.Rows.Count > 0 && !string.IsNullOrEmpty(dtTask.Rows[0]["UP_START_DATE2"].ToString()))
// {
// dtmZW = Convert.ToDateTime(dtTask.Rows[0]["UP_START_DATE2"].ToString());
// }
// DateTime dtmUpS = DateTime.MinValue;
// DateTime dtmUpE = DateTime.MaxValue;
// DateTime dtmDoS = DateTime.MinValue;
// DateTime dtmDoE = DateTime.MaxValue;
// DateTime dtmUpS2 = DateTime.MinValue;
// DateTime dtmUpE2 = DateTime.MaxValue;
// DateTime dtmDoS2 = DateTime.MinValue;
// DateTime dtmDoE2 = DateTime.MaxValue;
// // 考勤时间获取
// var objTime = list.FirstOrDefault();
// if (objTime != null)
// {
// DateTime.TryParse(objTime.UP_START_DATE, out dtmUpS);
// DateTime.TryParse(objTime.UP_END_DATE, out dtmUpE);
// DateTime.TryParse(objTime.DOWN_START_DATE, out dtmDoS);
// DateTime.TryParse(objTime.DOWN_END_DATE, out dtmDoE);
// DateTime.TryParse(objTime.UP_START_DATE2, out dtmUpS2);
// DateTime.TryParse(objTime.UP_END_DATE2, out dtmUpE2);
// DateTime.TryParse(objTime.DOWN_START_DATE2, out dtmDoS2);
// DateTime.TryParse(objTime.DOWN_END_DATE2, out dtmDoE2);
// }
// for (int i = 0; i < orgDt.Rows.Count; i++)
// {
// int totalSum = 0, leaveSum = 0, arriveSum = 0, noArriveSum = 0, toleranceSum = 0, lateSum = 0;
// if (i != 0) returnstr += ",";
// string _orgId = orgDt.Rows[i]["ORG_ID"].ToString();
// string _pId = orgDt.Rows[i]["PID"].ToString();
// string _orgName = orgDt.Rows[i]["ORG_NAME"].ToString();
// string _type = orgDt.Rows[i]["TYPE"].ToString();
// string _allNum = orgDt.Rows[i]["ALL_NUM"].ToString() == "" ? "0" : orgDt.Rows[i]["ALL_NUM"].ToString();
// string orgMo = "{\"findDate\":\"" + findDate + "\",\"orgId\":\"" + _orgId + "\",\"pId\":\"" + _pId + "\",\"orgName\":\"" + _orgName + "\",\"allNum\":\"" + _allNum + "\"";
// xAxisData[i] = "\"" + _orgName + "\"";
// var dataList = _type == "0" ? list : list.Where(p => p.ORG_ID == _orgId); //此处判断是机构还是部门
// #region 上午上班打卡
// // 应到
// int mornTotal = dataList.Count();
// // 未识别
// int mornNoArrive = dataList.Where(p => p.UP_STATE_AM == 0).Count();
// // 迟到
// int mornLate = dataList.Where(p => p.UP_STATE_AM == 2).Count();
// // 已识别 => 正常
// int mornArrive = dataList.Where(p => p.UP_STATE_AM == 1).Count();
// // 请假
// int mornLeave = dataList.Where(p => p.WORKSTATE == 3 && p.UP_STATE_AM == 0).Count();
// // 公差
// int mornTolerance = dataList.Where(p => p.WORKSTATE == 4 && p.UP_STATE_AM == 0).Count();
// // 设置应到人数减去出差以及请假人数
// //mornTotal = mornTotal - mornLeave - mornTolerance;
// mornTotal = mornTotal < 0 ? 0 : mornTotal;
// orgMo += ",\"mornTotal\":\"" + mornTotal + "\",\"mornLeave\":\"" + mornLeave + "\",\"mornArrive\":\"" + mornArrive +
// "\",\"mornNoArrive\":\"" + mornNoArrive + "\",\"mornTolerance\":\"" + mornTolerance + "\",\"mornLate\":\"" + mornLate + "\"";
// totalSum += mornTotal;
// leaveSum += mornLeave;
// arriveSum += mornArrive;
// noArriveSum += mornNoArrive;
// toleranceSum += mornTolerance;
// lateSum += mornLate;
// #endregion
// #region 上午下班打卡
// // 应到
// int mornTotal_down = dataList.Count();
// // 未识别
// int mornNoArrive_down = dataList.Where(p => p.DOWN_STATE_AM == 0).Count();
// //早退
// int mornEarly_down = dataList.Where(p => p.DOWN_STATE_AM == 2).Count();
// // 已识别 => 正常
// int mornArrive_down = dataList.Where(p => p.DOWN_STATE_AM == 1).Count();
// // 请假
// int mornLeave_down = dataList.Where(p => p.WORKSTATE_DOWN == 3 && p.DOWN_STATE_AM == 0).Count();
// // 公差
// int mornTolerance_down = dataList.Where(p => p.WORKSTATE_DOWN == 4 && p.DOWN_STATE_AM == 0).Count();
// // 设置应到人数减去出差以及请假人数
// //mornTotal_down = mornTotal_down - mornLeave_down - mornTolerance_down;
// mornTotal_down = mornTotal_down < 0 ? 0 : mornTotal_down;
// orgMo += ",\"mornTotalDown\":\"" + mornTotal_down + "\",\"mornLeaveDown\":\"" + mornLeave_down + "\",\"mornArriveDown\":\"" + mornArrive_down +
// "\",\"mornNoArriveDown\":\"" + mornNoArrive_down + "\",\"mornToleranceDown\":\"" + mornTolerance_down + "\",\"mornLateDown\":\"" + mornEarly_down + "\"";
// totalSum += mornTotal_down;
// leaveSum += mornLeave_down;
// arriveSum += mornArrive_down;
// noArriveSum += mornNoArrive_down;
// toleranceSum += mornTolerance_down;
// lateSum += mornEarly_down;
// #endregion
// #region 下午上班打卡
// // 应到
// int nightTotal_up = dataList.Count();
// // 未识别
// int nightNoArrive_up = dataList.Where(p => p.UP_STATE_PM == 0).Count();
// // 已识别 => 正常
// int nightArrive_up = dataList.Where(p => p.UP_STATE_PM == 1).Count();
// // 迟到
// int nightLate_up = dataList.Where(p => p.UP_STATE_PM == 2).Count();
// // 请假
// int nightLeave_up = dataList.Where(p => p.WORKSTATE_PM == 3 && p.UP_STATE_PM == 0).Count();
// // 公差
// int nightTolerance_up = dataList.Where(p => p.WORKSTATE_PM == 4 && p.UP_STATE_PM == 0).Count();
// //设置应到人数减去请假公差人数
// //nightTotal_up = nightTotal_up - nightLeave_up - nightTolerance_up;
// nightTolerance_up = nightTolerance_up < 0 ? 0 : nightTolerance_up;
// orgMo += ",\"nightTotalUp\":\"" + nightTotal_up + "\",\"nightLeaveUp\":\"" + nightLeave_up + "\",\"nightArriveUp\":\"" + nightArrive_up +
// "\",\"nightNoArriveUp\":\"" + nightNoArrive_up + "\",\"nightToleranceUp\":\"" + nightTolerance_up + "\",\"nightLateUp\":\"" + nightLate_up + "\"";
// totalSum += nightTotal_up;
// leaveSum += nightLeave_up;
// arriveSum += nightArrive_up;
// noArriveSum += nightNoArrive_up;
// toleranceSum += nightTolerance_up;
// lateSum += nightLate_up;
// #endregion
// #region 下午下班打卡
// // 应到
// int nightTotal = dataList.Count();
// // 未识别
// int nightNoArrive = dataList.Where(p => p.DOWN_STATE_PM == 0).Count();
// // 已识别 => 正常
// int nightArrive = dataList.Where(p => p.DOWN_STATE_PM == 1).Count();
// // 早退
// int nightEarly = dataList.Where(p => p.DOWN_STATE_PM == 2).Count();
// // 请假
// int nightLeave = dataList.Where(p => p.WORKSTATE_PM_DOWN == 3 && p.DOWN_STATE_PM == 0).Count();
// // 公差
// int nightTolerance = dataList.Where(p => p.WORKSTATE_PM_DOWN == 4 && p.DOWN_STATE_PM == 0).Count();
// //设置应到人数减去请假公差人数
// //nightTotal = nightTotal - nightLeave - nightTolerance;
// nightTolerance = nightTolerance < 0 ? 0 : nightTolerance;
// orgMo += ",\"nightTotal\":\"" + nightTotal + "\",\"nightLeave\":\"" + nightLeave + "\",\"nightArrive\":\"" + nightArrive +
// "\",\"nightNoArrive\":\"" + nightNoArrive + "\",\"nightTolerance\":\"" + nightTolerance + "\",\"nightLate\":\"" + nightEarly + "\"}";
// totalSum += nightTotal;
// leaveSum += nightLeave;
// arriveSum += nightArrive;
// noArriveSum += nightNoArrive;
// toleranceSum += nightTolerance;
// lateSum += nightEarly;
// #endregion
// totalData[i] = totalSum;
// leaveData[i] = leaveSum;
// arriveData[i] = arriveSum;
// noArriveData[i] = noArriveSum;
// toleranceData[i] = toleranceSum;
// lateData[i] = lateSum;
// returnstr += orgMo;
// }
// returnstr += "]";
// returnstr += ",\"echartsData\":{\"xAxisData\":[" + string.Join(",", xAxisData.ToArray()) + "],\"totalData\":[" + string.Join(",", totalData) + "],\"leaveData\":[" +
// string.Join(",", leaveData) + "],\"arriveData\":[" + string.Join(",", arriveData) + "],\"noArriveData\":[" + string.Join(",", noArriveData) +
// "],\"toleranceData\":[" + string.Join(",", toleranceData) + "],\"lateData\":[" + string.Join(",", lateData) + "]}";
// returnstr += "}";
// }
// catch (Exception e)
// {
// returnstr = "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员!\",\"error\":\"" + e.Message + "\",\"data\":[]}";
// // 记录操作日志
// BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Error, "人脸点名统计操作请求", "考勤统计列表异常:" + e);
// }
// // 记录操作日志
// BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Query, "人脸点名统计操作请求", "考勤统计列表");
// return returnstr;
//string returnstr = "";
//try
//{
// string findOrgId = context.Request.Params["orgId"];
// if (string.IsNullOrEmpty(findOrgId))
// {
// return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"orgId参数不能为空!\",\"data\":[]}";
// }
// string findDate = context.Request.Params["findDate"];
// if (string.IsNullOrEmpty(findDate))
// {
// findDate = DateTime.Now.ToString("yyyy-MM-dd");
// }
// string isContent = context.Request.Params["isContent"];
// //直属下级机构 点名信息
// string orgSql = $"SELECT o.org_id,o.org_name,o.type,o.pid AS pid,o.all_num FROM fire_org o WHERE o.org_id = '{findOrgId}' OR (pid = '{findOrgId}' and type='1') ORDER BY type";
// string rcSql = @"WITH t1 as(
// select oar.KQ_FACE_READ_START_TIME_AM kqFaceReadStartTimeAm,oar.KQ_FACE_READ_END_TIME_AM kqFaceReadEndTimeAm,oar.KQ_FACE_READ_START_TIME_PM kqFaceReadStartTimePm,oar.KQ_FACE_READ_END_TIME_PM kqFaceReadEndTimePm,oar.TASK_ID,oar.USERS_UID,oar.KQ_FACE_READ_START_STATE_AM UP_STATE_AM,oar.KQ_FACE_READ_END_STATE_AM DOWN_STATE_AM,oar.KQ_FACE_READ_START_STATE_PM UP_STATE_PM,oar.KQ_FACE_READ_END_STATE_PM DOWN_STATE_PM,CASE WHEN (ISNULL(tse.DEPT_ID)=1) || (LENGTH(trim(tse.DEPT_ID))=0) THEN oar.ORG_ID WHEN(ISNULL(tse.DEPT_ID) != 1) && (LENGTH(trim(tse.DEPT_ID)) != 0) THEN tse.DEPT_ID END as ORG_ID from oa_attendance_record oar left join tbl_sys_emp tse on oar.USERS_UID = tse.users_uid WHERE TASK_ID in (SELECT id from oa_attendance_task tk WHERE
// org_id = '" + findOrgId + @"' and date_format(tk.UP_START_DATE, '%Y-%m-%d' ) = date_format('" + findDate + @"', '%Y-%m-%d')
// )
//)
//SELECT t1.*,tk.UP_START_DATE,tk.UP_END_DATE,tk.DOWN_START_DATE,tk.DOWN_END_DATE ,tk.UP_START_DATE2,tk.UP_END_DATE2,tk.DOWN_START_DATE2,tk.DOWN_END_DATE2, if ((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
// date_format(S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format(tk.UP_END_DATE, '%Y-%m-%d %H:%i:%s')
// and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format(tk.UP_END_DATE, '%Y-%m-%d %H:%i:%s') )> 0,3,
// if ((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
// and date_format(S_TIME, '%Y-%m-%d %H:%i') <= date_format(tk.UP_END_DATE, '%Y-%m-%d %H:%i') and
// date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format(tk.UP_END_DATE, '%Y-%m-%d %H:%i') )> 0,4,0)
// ) WORKSTATE, if ((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
// date_format(S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format(tk.DOWN_START_DATE, '%Y-%m-%d %H:%i:%s')
// and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format(tk.DOWN_START_DATE, '%Y-%m-%d %H:%i:%s') )> 0,3,
// if ((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
// and date_format(S_TIME, '%Y-%m-%d %H:%i') <= date_format(tk.DOWN_START_DATE, '%Y-%m-%d %H:%i') and
// date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format(tk.DOWN_START_DATE, '%Y-%m-%d %H:%i') )> 0,4,0)
// ) WORKSTATE_PM
// from t1 LEFT JOIN oa_attendance_task tk on t1.TASK_ID = tk.ID";
// DataTable orgDt = FangYar.Common.MySqlHelper.QueryTable(orgSql);
// DataTable rcDt = FangYar.Common.MySqlHelper.QueryTable(rcSql);
// //点名信息 存入缓存
// List list = Common.DataTableExtensions.ConvertDataTableToGenericList(rcDt);
// returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":[";
// string[] xAxisData = new string[orgDt.Rows.Count];
// int[] totalData = new int[orgDt.Rows.Count];
// int[] leaveData = new int[orgDt.Rows.Count];
// int[] arriveData = new int[orgDt.Rows.Count];
// int[] noArriveData = new int[orgDt.Rows.Count];
// int[] toleranceData = new int[orgDt.Rows.Count];
// int[] lateData = new int[orgDt.Rows.Count];
// //DateTime dtmZW = Convert.ToDateTime(findDate.Trim() + " 12:00:00");//*********原来是12点,我把12点注释了
// DateTime dtmZW = Convert.ToDateTime(findDate.Trim() + " 14:30:00"); //此处依然保留,是为保留老数据的适用性,下边方法是在新数据下适用
// string sqlTask = "SELECT * from oa_attendance_task where org_id = '" + findOrgId + "' and ATTENDANCE_DATE='" + findDate + "'";
// DataTable dtTask = FangYar.Common.MySqlHelper.QueryTable(sqlTask);
// if (dtTask != null && dtTask.Rows.Count > 0 && !string.IsNullOrEmpty(dtTask.Rows[0]["UP_START_DATE2"].ToString()))
// {
// dtmZW = Convert.ToDateTime(dtTask.Rows[0]["UP_START_DATE2"].ToString());
// }
// DateTime dtmUpS = DateTime.MinValue;
// DateTime dtmUpE = DateTime.MaxValue;
// DateTime dtmDoS = DateTime.MinValue;
// DateTime dtmDoE = DateTime.MaxValue;
// DateTime dtmUpS2 = DateTime.MinValue;
// DateTime dtmUpE2 = DateTime.MaxValue;
// DateTime dtmDoS2 = DateTime.MinValue;
// DateTime dtmDoE2 = DateTime.MaxValue;
// // 考勤时间获取
// var objTime = list.FirstOrDefault();
// if (objTime != null)
// {
// DateTime.TryParse(objTime.UP_START_DATE, out dtmUpS);
// DateTime.TryParse(objTime.UP_END_DATE, out dtmUpE);
// DateTime.TryParse(objTime.DOWN_START_DATE, out dtmDoS);
// DateTime.TryParse(objTime.DOWN_END_DATE, out dtmDoE);
// DateTime.TryParse(objTime.UP_START_DATE2, out dtmUpS2);
// DateTime.TryParse(objTime.UP_END_DATE2, out dtmUpE2);
// DateTime.TryParse(objTime.DOWN_START_DATE2, out dtmDoS2);
// DateTime.TryParse(objTime.DOWN_END_DATE2, out dtmDoE2);
// }
// for (int i = 0; i < orgDt.Rows.Count; i++)
// {
// int totalSum = 0, leaveSum = 0, arriveSum = 0, noArriveSum = 0, toleranceSum = 0, lateSum = 0;
// if (i != 0) returnstr += ",";
// string _orgId = orgDt.Rows[i]["ORG_ID"].ToString();
// string _pId = orgDt.Rows[i]["PID"].ToString();
// string _orgName = orgDt.Rows[i]["ORG_NAME"].ToString();
// string _type = orgDt.Rows[i]["TYPE"].ToString();
// string _allNum = orgDt.Rows[i]["ALL_NUM"].ToString() == "" ? "0" : orgDt.Rows[i]["ALL_NUM"].ToString();
// string orgMo = "{\"findDate\":\"" + findDate + "\",\"orgId\":\"" + _orgId + "\",\"pId\":\"" + _pId + "\",\"orgName\":\"" + _orgName + "\",\"allNum\":\"" + _allNum + "\"";
// xAxisData[i] = "\"" + _orgName + "\"";
// var dataList = _type == "0" ? list : list.Where(p => p.ORG_ID == _orgId); //此处判断是机构还是部门
// // 应到
// int mornTotal = dataList.Count();
// // 未识别
// int mornNoArrive = dataList.Where(p => p.UP_STATE_AM == 0).Count();
// // 迟到
// int mornLate = dataList.Where(p => p.UP_STATE_AM == 2).Count();
// //早退
// int mornEarly = dataList.Where(p => p.DOWN_STATE_AM == 2).Count();
// // 已识别 => 正常
// int mornArrive = dataList.Where(p => p.UP_STATE_AM == 1).Count();
// // 请假
// int mornLeave = dataList.Where(p => p.WORKSTATE == 3).Count();
// // 公差
// int mornTolerance = dataList.Where(p => p.WORKSTATE == 4).Count();
// // 设置应到人数减去出差以及请假人数
// // mornTotal = mornTotal - mornLeave - mornTolerance;
// // mornTotal = mornTotal < 0 ? 0 : mornTotal;
// orgMo += ",\"mornTotal\":\"" + mornTotal + "\",\"mornLeave\":\"" + mornLeave + "\",\"mornArrive\":\"" + mornArrive +
// "\",\"mornNoArrive\":\"" + mornNoArrive + "\",\"mornTolerance\":\"" + mornTolerance + "\",\"mornLate\":\"" + mornLate + "\"";
// totalSum += mornTotal;
// leaveSum += mornLeave;
// arriveSum += mornArrive;
// noArriveSum += mornNoArrive;
// toleranceSum += mornTolerance;
// lateSum += mornLate;
// // 应到
// int noonTotal = 0;
// // 未识别
// int noonNoArrive = 0;
// // 已识别 => 正常
// int noonArrive = 0;
// // 迟到
// int noonLate = 0;
// //早退
// int noonEarly = 0;
// // 请假
// int noonLeave = 0;
// // 公差
// int noonTolerance = 0;
// orgMo += ",\"noonTotal\":\"" + noonTotal + "\",\"noonLeave\":\"" + noonLeave + "\",\"noonArrive\":\"" + noonArrive +
// "\",\"noonNoArrive\":\"" + noonNoArrive + "\",\"noonTolerance\":\"" + noonTolerance + "\",\"noonLate\":\"" + noonLate + "\"";
// totalSum += noonTotal;
// leaveSum += noonLeave;
// arriveSum += noonArrive;
// noArriveSum += noonNoArrive;
// toleranceSum += noonTolerance;
// lateSum += noonLate;
// // 应到
// int nightTotal = dataList.Count();
// // 未识别
// int nightNoArrive = dataList.Where(p => p.DOWN_STATE_PM == 0).Count();
// // 已识别 => 正常
// int nightArrive = dataList.Where(p => p.DOWN_STATE_PM == 1).Count();
// // 迟到
// int nightLate = dataList.Where(p => p.UP_STATE_PM == 2).Count();
// // 早退
// int nightEarly = dataList.Where(p => p.DOWN_STATE_PM == 2).Count();
// // 请假
// int nightLeave = dataList.Where(p => p.WORKSTATE_PM == 3).Count();
// // 公差
// int nightTolerance = dataList.Where(p => p.WORKSTATE_PM == 4).Count();
// //设置应到人数减去请假公差人数
// //nightTotal = nightTotal - nightLeave - nightTolerance;
// //nightTolerance = nightTolerance < 0 ? 0 : nightTolerance;
// orgMo += ",\"nightTotal\":\"" + nightTotal + "\",\"nightLeave\":\"" + nightLeave + "\",\"nightArrive\":\"" + nightArrive +
// "\",\"nightNoArrive\":\"" + nightNoArrive + "\",\"nightTolerance\":\"" + nightTolerance + "\",\"nightLate\":\"" + nightLate + "\"}";
// totalSum += nightTotal;
// leaveSum += nightLeave;
// arriveSum += nightArrive;
// noArriveSum += nightNoArrive;
// toleranceSum += nightTolerance;
// lateSum += nightLate;
// totalData[i] = totalSum;
// leaveData[i] = leaveSum;
// arriveData[i] = arriveSum;
// noArriveData[i] = noArriveSum;
// toleranceData[i] = toleranceSum;
// lateData[i] = lateSum;
// returnstr += orgMo;
// }
// returnstr += "]";
// returnstr += ",\"echartsData\":{\"xAxisData\":[" + string.Join(",", xAxisData.ToArray()) + "],\"totalData\":[" + string.Join(",", totalData) + "],\"leaveData\":[" +
// string.Join(",", leaveData) + "],\"arriveData\":[" + string.Join(",", arriveData) + "],\"noArriveData\":[" + string.Join(",", noArriveData) +
// "],\"toleranceData\":[" + string.Join(",", toleranceData) + "],\"lateData\":[" + string.Join(",", lateData) + "]}";
// returnstr += "}";
//}
//catch (Exception e)
//{
// returnstr = "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员!\",\"error\":\"" + e.Message + "\",\"data\":[]}";
// // 记录操作日志
// BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Error, "人脸点名统计操作请求", "考勤统计列表异常:" + e);
//}
//// 记录操作日志
//BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Query, "人脸点名统计操作请求", "考勤统计列表");
//return returnstr;
}
#region 20220826 代码注释暂时弃用 qyl
// ///
// /// 考勤统计列表
// ///
// ///
// ///
// private string getAttendanceStaDoorForDept(HttpContext context)
// {
// string returnstr = "";
// try
// {
// string findOrgId = context.Request.Params["orgId"];
// if (string.IsNullOrEmpty(findOrgId))
// {
// return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"orgId参数不能为空!\",\"data\":[]}";
// }
// string findDate = context.Request.Params["findDate"];
// if (string.IsNullOrEmpty(findDate))
// {
// findDate = DateTime.Now.ToString("yyyy-MM-dd");
// }
// string isContent = context.Request.Params["isContent"];
// //直属下级机构 点名信息
// string orgSql = @"SELECT o.org_id,o.org_name,o.type,o.pid AS pid,o.all_num FROM fire_org o WHERE o.org_id = '" + findOrgId + @"'
// union all
// SELECT o.org_id,o.org_name,o.type,o.pid AS pid,o.all_num FROM fire_org o WHERE pid = '" + findOrgId + @"' and type='1' ORDER BY type";
// string rcSql = @"WITH t1 as(
// SELECT ID, CASE WHEN (ISNULL(DEPT_ID)=1) || (LENGTH(trim(DEPT_ID))=0) THEN ORG_ID
// WHEN (ISNULL(DEPT_ID)!=1) && (LENGTH(trim(DEPT_ID))!=0) THEN DEPT_ID
// END as ORG_ID,USERS_UID,TIME_TYPE,FACE_READ_STATE STATE,FACE_READ_STATE_PM STATE_PM,TASK_ID
// from ( select oar.*, tse.DEPT_ID from oa_attendance_record oar left join tbl_sys_emp tse on oar.USERS_UID=tse.users_uid
//)r WHERE TASK_ID in
// ( SELECT id from oa_attendance_task tk WHERE
// org_id = '" + findOrgId + @"' and date_format( tk.UP_START_DATE, '%Y-%m-%d' ) = date_format( '" + findDate + @"', '%Y-%m-%d' )
// )
// )
// SELECT t1.*,tk.UP_START_DATE,tk.UP_END_DATE,tk.DOWN_START_DATE,tk.DOWN_END_DATE ,tk.UP_START_DATE2,tk.UP_END_DATE2,tk.DOWN_START_DATE2,tk.DOWN_END_DATE2
// , if((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
// date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i:%s')
// and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i:%s') )>0,3,
// if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
// and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i') and
// date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i') )>0,4,0)
// ) WORKSTATE
// , if((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
// date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i:%s')
// and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i:%s') )>0,3,
// if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
// and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i') and
// date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i') )>0,4,0)
// ) WORKSTATE_PM
// from t1 LEFT JOIN oa_attendance_task tk on t1.TASK_ID=tk.ID";
// // 插叙出入记录数据
// string sqlInOrOut = @" WITH t2 as(
// SELECT p.`NAME`,p.EXTEND2,p.START_TIME,p.org_id,p.CLOSEUP_PIC_URL from tbl_personaccess p
// WHERE p.org_id='" + findOrgId + @"' and date_format( p.START_TIME, '%Y-%m-%d' ) = date_format( '" + findDate + @"', '%Y-%m-%d' )
// and p.extend3 in (SELECT EPUIP_ID from tbl_epuip_org WHERE IS_Attendance='1')
// )
// , t3 as (
// SELECT t2.`NAME`,t2.EXTEND2,t2.START_TIME,
// CASE
// WHEN (ISNULL(e.dept_id)=1) || (LENGTH(trim(e.dept_id))=0) THEN t2.ORG_ID
// WHEN (ISNULL(e.dept_id)!=1) && (LENGTH(trim(e.dept_id))!=0) THEN e.DEPT_ID
// END as ORG_ID,
// t2.CLOSEUP_PIC_URL
//,e.USERS_UID from t2 LEFT JOIN tbl_sys_emp e on t2.EXTEND2 = e.IDNUMBER
// ) SELECT * from t3 ";
// DataTable orgDt = FangYar.Common.MySqlHelper.QueryTable(orgSql);
// DataTable rcDt = FangYar.Common.MySqlHelper.QueryTable(rcSql);
// DataTable inOrOutDt = FangYar.Common.MySqlHelper.QueryTable(sqlInOrOut);
// //出入信息缓存
// List listInOrOut = new List();
// for (int i = 0; i < inOrOutDt.Rows.Count; i++)
// {
// listInOrOut.Add(new InOrOutMo()
// {
// NAME = inOrOutDt.Rows[i]["NAME"] + "",
// org_id = inOrOutDt.Rows[i]["org_id"] + "",
// EXTEND2 = inOrOutDt.Rows[i]["EXTEND2"] + "",
// USERS_UID = inOrOutDt.Rows[i]["USERS_UID"] + "",
// START_TIME = inOrOutDt.Rows[i]["START_TIME"] + "",
// });
// }
// //点名信息 存入缓存
// List list = new List();
// for (int i = 0; i < rcDt.Rows.Count; i++)
// {
// list.Add(new RollcallMo()
// {
// orgId = rcDt.Rows[i]["ORG_ID"] + "",
// timeType = rcDt.Rows[i]["TIME_TYPE"] + "",
// userId = rcDt.Rows[i]["USERS_UID"] + "",
// state = rcDt.Rows[i]["WORKSTATE"] + "",
// state_pm = rcDt.Rows[i]["WORKSTATE_PM"] + "",
// WORKSTATE = rcDt.Rows[i]["WORKSTATE"] + "",
// WORKSTATE_PM = rcDt.Rows[i]["WORKSTATE_PM"] + "",
// DOWN_END_DATE = rcDt.Rows[i]["DOWN_END_DATE"] + "",
// DOWN_START_DATE = rcDt.Rows[i]["DOWN_START_DATE"] + "",
// UP_END_DATE = rcDt.Rows[i]["UP_END_DATE"] + "",
// UP_START_DATE = rcDt.Rows[i]["UP_START_DATE"] + "",
// DOWN_END_DATE2 = rcDt.Rows[i]["DOWN_END_DATE2"] + "",
// DOWN_START_DATE2 = rcDt.Rows[i]["DOWN_START_DATE2"] + "",
// UP_END_DATE2 = rcDt.Rows[i]["UP_END_DATE2"] + "",
// UP_START_DATE2 = rcDt.Rows[i]["UP_START_DATE2"] + "",
// });
// }
// returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":[";
// string[] xAxisData = new string[orgDt.Rows.Count];
// int[] totalData = new int[orgDt.Rows.Count];
// int[] leaveData = new int[orgDt.Rows.Count];
// int[] arriveData = new int[orgDt.Rows.Count];
// int[] noArriveData = new int[orgDt.Rows.Count];
// int[] toleranceData = new int[orgDt.Rows.Count];
// int[] lateData = new int[orgDt.Rows.Count];
// //DateTime dtmZW = Convert.ToDateTime(findDate.Trim() + " 12:00:00");//*********原来是12点,我把12点注释了
// DateTime dtmZW = Convert.ToDateTime(findDate.Trim() + " 14:30:00"); //此处依然保留,是为保留老数据的适用性,下边方法是在新数据下适用
// string sqlTask = "SELECT * from oa_attendance_task where org_id = '" + findOrgId + "' and ATTENDANCE_DATE='" + findDate + "'";
// DataTable dtTask = FangYar.Common.MySqlHelper.QueryTable(sqlTask);
// if (dtTask != null && dtTask.Rows.Count > 0 && !string.IsNullOrEmpty(dtTask.Rows[0]["UP_START_DATE2"].ToString()))
// {
// dtmZW = Convert.ToDateTime(dtTask.Rows[0]["UP_START_DATE2"].ToString());
// }
// for (int i = 0; i < orgDt.Rows.Count; i++)
// {
// int totalSum = 0, leaveSum = 0, arriveSum = 0, noArriveSum = 0, toleranceSum = 0, lateSum = 0;
// if (i != 0) returnstr += ",";
// string _orgId = orgDt.Rows[i]["ORG_ID"].ToString();
// string _pId = orgDt.Rows[i]["PID"].ToString();
// string _orgName = orgDt.Rows[i]["ORG_NAME"].ToString();
// string _type = orgDt.Rows[i]["TYPE"].ToString();
// string _allNum = orgDt.Rows[i]["ALL_NUM"].ToString() == "" ? "0" : orgDt.Rows[i]["ALL_NUM"].ToString();
// string orgMo = "{\"findDate\":\"" + findDate + "\",\"orgId\":\"" + _orgId + "\",\"pId\":\"" + _pId + "\",\"orgName\":\"" + _orgName + "\",\"allNum\":\"" + _allNum + "\"";
// xAxisData[i] = "\"" + _orgName + "\"";
// //早点名
// var mornList = _type == "0" ? list : list.Where(p => p.orgId == _orgId); //此处判断是机构还是部门
// // 按人分组
// var userGroup = mornList.GroupBy(p => p.userId);
// //需要识别人员ID集合
// var userList = userGroup.Where(p => p.Any(s => s.WORKSTATE == "0")).Select(p => p.Key).ToList();
// // 对应出入记录信息
// var list1 = _type == "0" ? listInOrOut.Where(p => userList.Contains(p.USERS_UID)) : listInOrOut.Where(p => p.org_id == _orgId && userList.Contains(p.USERS_UID)); //此处判断是机构还是部门
// // 已经识别人员
// var list2 = list1.Where(p => Convert.ToDateTime(p.START_TIME) <= dtmZW).GroupBy(p => p.USERS_UID);
// // 已识别人员ID集合
// var list3 = list2.Select(p => p.Key).ToList();
// // 已经识别人员信息
// var list4 = userList.Where(p => list3.Contains(p)).GroupBy(p => p).ToList();
// DateTime dtmUpS = DateTime.MinValue;
// DateTime dtmUpE = DateTime.MaxValue;
// DateTime dtmDoS = DateTime.MinValue;
// DateTime dtmDoE = DateTime.MaxValue;
// DateTime dtmUpS2 = DateTime.MinValue;
// DateTime dtmUpE2 = DateTime.MaxValue;
// DateTime dtmDoS2 = DateTime.MinValue;
// DateTime dtmDoE2 = DateTime.MaxValue;
// // 考勤时间获取
// var objTime = userGroup.FirstOrDefault();
// if (objTime != null)
// {
// DateTime.TryParse(objTime.First().UP_START_DATE, out dtmUpS);
// DateTime.TryParse(objTime.First().UP_END_DATE, out dtmUpE);
// DateTime.TryParse(objTime.First().DOWN_START_DATE, out dtmDoS);
// DateTime.TryParse(objTime.First().DOWN_END_DATE, out dtmDoE);
// DateTime.TryParse(objTime.First().UP_START_DATE2, out dtmUpS2);
// DateTime.TryParse(objTime.First().UP_END_DATE2, out dtmUpE2);
// DateTime.TryParse(objTime.First().DOWN_START_DATE2, out dtmDoS2);
// DateTime.TryParse(objTime.First().DOWN_END_DATE2, out dtmDoE2);
// }
// // 正常考勤
// var list5 = list1.Where(p => Convert.ToDateTime(p.START_TIME) <= dtmUpE).GroupBy(p => p.USERS_UID).ToList();
// // 应到
// int mornTotal = userGroup.Count();
// // 未识别
// int mornNoArrive = userList.Count() - list4.Count();
// mornNoArrive = mornNoArrive < 0 ? 0 : mornNoArrive;
// // 已识别 => 正常
// int mornArrive = list5.Count();
// // 迟到
// int mornLate = list4.Count() - mornArrive;
// mornLate = mornLate < 0 ? 0 : mornLate;
// // 请假
// int mornLeave = userGroup.Where(p => p.Where(s => s.state == "3").Count() == p.Count()).Count();
// // 公差
// int mornTolerance = userGroup.Where(p => p.Where(s => s.state == "4").Count() == p.Count()).Count();
// // 设置应到人数减去出差以及请假人数
// mornTotal = mornTotal - mornLeave - mornTolerance;
// mornTotal = mornTotal < 0 ? 0 : mornTotal;
// orgMo += ",\"mornTotal\":\"" + mornTotal + "\",\"mornLeave\":\"" + mornLeave + "\",\"mornArrive\":\"" + mornArrive +
// "\",\"mornNoArrive\":\"" + mornNoArrive + "\",\"mornTolerance\":\"" + mornTolerance + "\",\"mornLate\":\"" + mornLate + "\"";
// totalSum += mornTotal;
// leaveSum += mornLeave;
// arriveSum += mornArrive;
// noArriveSum += mornNoArrive;
// toleranceSum += mornTolerance;
// lateSum += mornLate;
// // 应到
// int noonTotal = 0;
// // 未识别
// int noonNoArrive = 0;
// // 已识别 => 正常
// int noonArrive = 0;
// // 迟到
// int noonLate = 0;
// // 请假
// int noonLeave = 0;
// // 公差
// int noonTolerance = 0;
// orgMo += ",\"noonTotal\":\"" + noonTotal + "\",\"noonLeave\":\"" + noonLeave + "\",\"noonArrive\":\"" + noonArrive +
// "\",\"noonNoArrive\":\"" + noonNoArrive + "\",\"noonTolerance\":\"" + noonTolerance + "\",\"noonLate\":\"" + noonLate + "\"";
// totalSum += noonTotal;
// leaveSum += noonLeave;
// arriveSum += noonArrive;
// noArriveSum += noonNoArrive;
// toleranceSum += noonTolerance;
// lateSum += noonLate;
// //晚点名
// var nightList = _type == "0" ? list : list.Where(p => p.orgId == _orgId); //此处判断是机构还是部门
// // 按人分组
// var nightUserGroup = nightList.GroupBy(p => p.userId);
// //需要识别人员ID集合
// var userList_pm = userGroup.Where(p => p.Any(s => s.WORKSTATE_PM == "0")).Select(p => p.Key).ToList();
// // 对应出入记录信息
// var list1_pm = _type == "0" ? listInOrOut.Where(p => userList_pm.Contains(p.USERS_UID)) : listInOrOut.Where(p => p.org_id == _orgId && userList_pm.Contains(p.USERS_UID));//此处判断是机构还是部门
// // 已经识别人员
// var list2_pm = list1_pm.Where(p => Convert.ToDateTime(p.START_TIME) >= dtmZW).GroupBy(p => p.USERS_UID);
// // 已识别人员ID集合
// var list3_pm = list2_pm.Select(p => p.Key).ToList();
// // 已经识别人员信息
// var list4_pm = userList_pm.Where(p => list3_pm.Contains(p)).GroupBy(p => p).ToList();
// // 正常考勤
// var list5_pm = list1_pm.Where(p => Convert.ToDateTime(p.START_TIME) >= dtmUpS2 && Convert.ToDateTime(p.START_TIME) <= dtmUpE2).GroupBy(p => p.USERS_UID);
// // 应到
// int nightTotal = nightUserGroup.Count();
// // 未识别
// int nightNoArrive = userList_pm.Count() - list4_pm.Count();
// nightNoArrive = nightNoArrive < 0 ? 0 : nightNoArrive;
// // 已识别 => 正常
// int nightArrive = list5_pm.Count();
// // 迟到
// int nightLate = list4_pm.Count() - nightArrive;
// nightLate = nightLate < 0 ? 0 : nightLate;
// // 请假
// int nightLeave = nightUserGroup.Where(p => p.Where(s => s.state_pm == "3").Count() == p.Count()).Count();
// // 公差
// int nightTolerance = nightUserGroup.Where(p => p.Where(s => s.state == "4").Count() == p.Count()).Count();
// //设置应到人数减去请假公差人数
// nightTotal = nightTotal - nightLeave - nightTolerance;
// nightTolerance = nightTolerance < 0 ? 0 : nightTolerance;
// orgMo += ",\"nightTotal\":\"" + nightTotal + "\",\"nightLeave\":\"" + nightLeave + "\",\"nightArrive\":\"" + nightArrive +
// "\",\"nightNoArrive\":\"" + nightNoArrive + "\",\"nightTolerance\":\"" + nightTolerance + "\",\"nightLate\":\"" + nightLate + "\"}";
// totalSum += nightTotal;
// leaveSum += nightLeave;
// arriveSum += nightArrive;
// noArriveSum += nightNoArrive;
// toleranceSum += nightTolerance;
// lateSum += nightLate;
// totalData[i] = totalSum;
// leaveData[i] = leaveSum;
// arriveData[i] = arriveSum;
// noArriveData[i] = noArriveSum;
// toleranceData[i] = toleranceSum;
// lateData[i] = lateSum;
// returnstr += orgMo;
// }
// returnstr += "]";
// returnstr += ",\"echartsData\":{\"xAxisData\":[" + string.Join(",", xAxisData.ToArray()) + "],\"totalData\":[" + string.Join(",", totalData) + "],\"leaveData\":[" +
// string.Join(",", leaveData) + "],\"arriveData\":[" + string.Join(",", arriveData) + "],\"noArriveData\":[" + string.Join(",", noArriveData) +
// "],\"toleranceData\":[" + string.Join(",", toleranceData) + "],\"lateData\":[" + string.Join(",", lateData) + "]}";
// returnstr += "}";
// }
// catch (Exception e)
// {
// returnstr = "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员!\",\"error\":\"" + e.Message + "\",\"data\":[]}";
// // 记录操作日志
// BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Error, "人脸点名统计操作请求", "考勤统计列表异常:" + e);
// }
// // 记录操作日志
// BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Query, "人脸点名统计操作请求", "考勤统计列表");
// return returnstr;
// }
#endregion
#region 上一方法的备份
// private string getAttendanceStaDoorForDept(HttpContext context)
// {
// string returnstr = "";
// try
// {
// string findOrgId = context.Request.Params["orgId"];
// if (string.IsNullOrEmpty(findOrgId))
// {
// return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"orgId参数不能为空!\",\"data\":[]}";
// }
// string findDate = context.Request.Params["findDate"];
// if (string.IsNullOrEmpty(findDate))
// {
// findDate = DateTime.Now.ToString("yyyy-MM-dd");
// }
// string isContent = context.Request.Params["isContent"];
// //直属下级机构 点名信息
// string orgSql = @"SELECT o.org_id,o.org_name,o.type,o.pid AS pid,o.all_num FROM fire_org o WHERE (o.org_id = '" + findOrgId + @"' or pid = '" + findOrgId + @"') order by type ";
// string rcSql = @"WITH t1 as(
// SELECT ID, CASE WHEN (ISNULL(DEPT_ID)=1) || (LENGTH(trim(DEPT_ID))=0) THEN ORG_ID
// WHEN (ISNULL(DEPT_ID)!=1) && (LENGTH(trim(DEPT_ID))!=0) THEN DEPT_ID
// END as ORG_ID,USERS_UID,TIME_TYPE,FACE_READ_STATE STATE,FACE_READ_STATE_PM STATE_PM,TASK_ID
// from ( select oar.*, tse.DEPT_ID from oa_attendance_record oar left join tbl_sys_emp tse on oar.USERS_UID=tse.users_uid
//)r WHERE TASK_ID in
// ( SELECT id from oa_attendance_task tk,(select get_Org_child_list_OrgIds('" + findOrgId + @"') cids ) s WHERE
// find_in_set(tk.org_id,cids) and date_format( tk.UP_START_DATE, '%Y-%m-%d' ) = date_format( '" + findDate + @"', '%Y-%m-%d' )
// )
// )
// SELECT t1.*,tk.UP_START_DATE,tk.UP_END_DATE,tk.DOWN_START_DATE,tk.DOWN_END_DATE
// , if((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
// date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i:%s')
// and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i:%s') )>0,3,
// if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
// and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i') and
// date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i') )>0,4,0)
// ) WORKSTATE
// , if((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
// date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i:%s')
// and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i:%s') )>0,3,
// if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
// and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i') and
// date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i') )>0,4,0)
// ) WORKSTATE_PM
// from t1 LEFT JOIN oa_attendance_task tk on t1.TASK_ID=tk.ID";
// if (isContent == "1")
// {
// //递归下级机构 点名信息
// orgSql = @"SELECT o.org_id,o.org_name,o.pid AS pid,o.all_num FROM fire_org o, ( SELECT get_Org_child_list ( '" + findOrgId + @"' ) cids ) s WHERE TYPE = 0 AND find_in_set( org_id, cids )";
// }
// // 插叙出入记录数据
// string sqlInOrOut = @" WITH t2 as(
// SELECT p.`NAME`,p.EXTEND2,p.START_TIME,p.org_id,p.CLOSEUP_PIC_URL from tbl_personaccess p,(select get_Org_child_list_OrgIds('" + findOrgId + @"') cids ) s
// WHERE find_in_set(p.org_id,cids) and date_format( p.START_TIME, '%Y-%m-%d' ) = date_format( '" + findDate + @"', '%Y-%m-%d' )
// and p.extend3 in (SELECT EPUIP_ID from tbl_epuip_org WHERE IS_Attendance='1')
// )
// , t3 as (
// SELECT t2.`NAME`,t2.EXTEND2,t2.START_TIME,
// CASE
// WHEN (ISNULL(e.dept_id)=1) || (LENGTH(trim(e.dept_id))=0) THEN t2.ORG_ID
// WHEN (ISNULL(e.dept_id)!=1) && (LENGTH(trim(e.dept_id))!=0) THEN e.DEPT_ID
// END as ORG_ID,
// t2.CLOSEUP_PIC_URL
//,e.USERS_UID from t2 LEFT JOIN tbl_sys_emp e on t2.EXTEND2 = e.IDNUMBER
// ) SELECT * from t3 ";
// DataTable orgDt = FangYar.Common.MySqlHelper.QueryTable(orgSql);
// DataTable rcDt = FangYar.Common.MySqlHelper.QueryTable(rcSql);
// DataTable inOrOutDt = FangYar.Common.MySqlHelper.QueryTable(sqlInOrOut);
// //出入信息缓存
// List listInOrOut = new List();
// for (int i = 0; i < inOrOutDt.Rows.Count; i++)
// {
// listInOrOut.Add(new InOrOutMo()
// {
// NAME = inOrOutDt.Rows[i]["NAME"] + "",
// org_id = inOrOutDt.Rows[i]["org_id"] + "",
// EXTEND2 = inOrOutDt.Rows[i]["EXTEND2"] + "",
// USERS_UID = inOrOutDt.Rows[i]["USERS_UID"] + "",
// START_TIME = inOrOutDt.Rows[i]["START_TIME"] + "",
// });
// }
// //点名信息 存入缓存
// List list = new List();
// for (int i = 0; i < rcDt.Rows.Count; i++)
// {
// list.Add(new RollcallMo()
// {
// orgId = rcDt.Rows[i]["ORG_ID"] + "",
// timeType = rcDt.Rows[i]["TIME_TYPE"] + "",
// userId = rcDt.Rows[i]["USERS_UID"] + "",
// state = rcDt.Rows[i]["WORKSTATE"] + "",
// state_pm = rcDt.Rows[i]["WORKSTATE_PM"] + "",
// WORKSTATE = rcDt.Rows[i]["WORKSTATE"] + "",
// WORKSTATE_PM = rcDt.Rows[i]["WORKSTATE_PM"] + "",
// DOWN_END_DATE = rcDt.Rows[i]["DOWN_END_DATE"] + "",
// DOWN_START_DATE = rcDt.Rows[i]["DOWN_START_DATE"] + "",
// UP_END_DATE = rcDt.Rows[i]["UP_END_DATE"] + "",
// UP_START_DATE = rcDt.Rows[i]["UP_START_DATE"] + "",
// });
// }
// returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":[";
// string[] xAxisData = new string[orgDt.Rows.Count];
// int[] totalData = new int[orgDt.Rows.Count];
// int[] leaveData = new int[orgDt.Rows.Count];
// int[] arriveData = new int[orgDt.Rows.Count];
// int[] noArriveData = new int[orgDt.Rows.Count];
// int[] toleranceData = new int[orgDt.Rows.Count];
// int[] lateData = new int[orgDt.Rows.Count];
// //DateTime dtmZW = Convert.ToDateTime(findDate.Trim() + " 12:00:00");//*********原来是12点,我把12点注释了
// DateTime dtmZW = Convert.ToDateTime(findDate.Trim() + " 14:30:00"); //此处依然保留,是为保留老数据的适用性,下边方法是在新数据下适用
// string sqlTask = "SELECT * from oa_attendance_task where org_id = '" + findOrgId + "' and ATTENDANCE_DATE='" + findDate + "'";
// DataTable dtTask = FangYar.Common.MySqlHelper.QueryTable(sqlTask);
// if (dtTask != null && !string.IsNullOrEmpty(dtTask.Rows[0]["UP_START_DATE2"].ToString()))
// {
// dtmZW = Convert.ToDateTime(dtTask.Rows[0]["UP_START_DATE2"].ToString());
// }
// for (int i = 0; i < orgDt.Rows.Count; i++)
// {
// int totalSum = 0, leaveSum = 0, arriveSum = 0, noArriveSum = 0, toleranceSum = 0, lateSum = 0;
// if (i != 0) returnstr += ",";
// string _orgId = orgDt.Rows[i]["ORG_ID"].ToString();
// string _pId = orgDt.Rows[i]["PID"].ToString();
// string _orgName = orgDt.Rows[i]["ORG_NAME"].ToString();
// string _type = orgDt.Rows[i]["TYPE"].ToString();
// string _allNum = orgDt.Rows[i]["ALL_NUM"].ToString() == "" ? "0" : orgDt.Rows[i]["ALL_NUM"].ToString();
// string orgMo = "{\"findDate\":\"" + findDate + "\",\"orgId\":\"" + _orgId + "\",\"pId\":\"" + _pId + "\",\"orgName\":\"" + _orgName + "\",\"allNum\":\"" + _allNum + "\"";
// xAxisData[i] = "\"" + _orgName + "\"";
// //早点名
// var mornList = _type == "0" ? list : list.Where(p => p.orgId == _orgId); //此处判断是机构还是部门
// // 按人分组
// var userGroup = mornList.GroupBy(p => p.userId);
// //需要识别人员ID集合
// var userList = userGroup.Where(p => p.Any(s => s.WORKSTATE == "0")).Select(p => p.Key).ToList();
// // 对应出入记录信息
// var list1 = _type == "0" ? listInOrOut.Where(p => userList.Contains(p.USERS_UID)) : listInOrOut.Where(p => p.org_id == _orgId && userList.Contains(p.USERS_UID)); //此处判断是机构还是部门
// // 已经识别人员
// var list2 = list1.Where(p => Convert.ToDateTime(p.START_TIME) <= dtmZW).GroupBy(p => p.USERS_UID);
// // 已识别人员ID集合
// var list3 = list2.Select(p => p.Key).ToList();
// // 已经识别人员信息
// var list4 = userList.Where(p => list3.Contains(p)).GroupBy(p => p).ToList();
// DateTime dtmUpS = DateTime.MinValue;
// DateTime dtmUpE = DateTime.MaxValue;
// DateTime dtmDoS = DateTime.MinValue;
// DateTime dtmDoE = DateTime.MaxValue;
// // 考勤时间获取
// var objTime = userGroup.FirstOrDefault();
// if (objTime != null)
// {
// DateTime.TryParse(objTime.First().UP_START_DATE, out dtmUpS);
// DateTime.TryParse(objTime.First().UP_END_DATE, out dtmUpE);
// DateTime.TryParse(objTime.First().DOWN_START_DATE, out dtmDoS);
// DateTime.TryParse(objTime.First().DOWN_END_DATE, out dtmDoE);
// }
// // 正常考勤
// var list5 = list1.Where(p => Convert.ToDateTime(p.START_TIME) <= dtmUpE).GroupBy(p => p.USERS_UID).ToList();
// // 应到
// int mornTotal = userGroup.Count();
// // 未识别
// int mornNoArrive = userList.Count() - list4.Count();
// mornNoArrive = mornNoArrive < 0 ? 0 : mornNoArrive;
// // 已识别 => 正常
// int mornArrive = list5.Count();
// // 迟到
// int mornLate = list4.Count() - mornArrive;
// mornLate = mornLate < 0 ? 0 : mornLate;
// // 请假
// int mornLeave = userGroup.Where(p => p.Where(s => s.state == "3").Count() == p.Count()).Count();
// // 公差
// int mornTolerance = userGroup.Where(p => p.Where(s => s.state == "4").Count() == p.Count()).Count();
// // 设置应到人数减去出差以及请假人数
// mornTotal = mornTotal - mornLeave - mornTolerance;
// mornTotal = mornTotal < 0 ? 0 : mornTotal;
// orgMo += ",\"mornTotal\":\"" + mornTotal + "\",\"mornLeave\":\"" + mornLeave + "\",\"mornArrive\":\"" + mornArrive +
// "\",\"mornNoArrive\":\"" + mornNoArrive + "\",\"mornTolerance\":\"" + mornTolerance + "\",\"mornLate\":\"" + mornLate + "\"";
// totalSum += mornTotal;
// leaveSum += mornLeave;
// arriveSum += mornArrive;
// noArriveSum += mornNoArrive;
// toleranceSum += mornTolerance;
// lateSum += mornLate;
// // 应到
// int noonTotal = 0;
// // 未识别
// int noonNoArrive = 0;
// // 已识别 => 正常
// int noonArrive = 0;
// // 迟到
// int noonLate = 0;
// // 请假
// int noonLeave = 0;
// // 公差
// int noonTolerance = 0;
// orgMo += ",\"noonTotal\":\"" + noonTotal + "\",\"noonLeave\":\"" + noonLeave + "\",\"noonArrive\":\"" + noonArrive +
// "\",\"noonNoArrive\":\"" + noonNoArrive + "\",\"noonTolerance\":\"" + noonTolerance + "\",\"noonLate\":\"" + noonLate + "\"";
// totalSum += noonTotal;
// leaveSum += noonLeave;
// arriveSum += noonArrive;
// noArriveSum += noonNoArrive;
// toleranceSum += noonTolerance;
// lateSum += noonLate;
// //晚点名
// var nightList = _type == "0" ? list : list.Where(p => p.orgId == _orgId); //此处判断是机构还是部门
// // 按人分组
// var nightUserGroup = nightList.GroupBy(p => p.userId);
// //需要识别人员ID集合
// var userList_pm = userGroup.Where(p => p.Any(s => s.WORKSTATE_PM == "0")).Select(p => p.Key).ToList();
// // 对应出入记录信息
// var list1_pm = _type == "0" ? listInOrOut.Where(p => userList_pm.Contains(p.USERS_UID)) : listInOrOut.Where(p => p.org_id == _orgId && userList_pm.Contains(p.USERS_UID));//此处判断是机构还是部门
// // 已经识别人员
// var list2_pm = list1_pm.Where(p => Convert.ToDateTime(p.START_TIME) >= dtmZW).GroupBy(p => p.USERS_UID);
// // 已识别人员ID集合
// var list3_pm = list2_pm.Select(p => p.Key).ToList();
// // 已经识别人员信息
// var list4_pm = userList_pm.Where(p => list3_pm.Contains(p)).GroupBy(p => p).ToList();
// // 正常考勤
// var list5_pm = list1_pm.Where(p => Convert.ToDateTime(p.START_TIME) >= dtmDoS).GroupBy(p => p.USERS_UID);
// // 应到
// int nightTotal = nightUserGroup.Count();
// // 未识别
// int nightNoArrive = userList_pm.Count() - list4_pm.Count();
// nightNoArrive = nightNoArrive < 0 ? 0 : nightNoArrive;
// // 已识别 => 正常
// int nightArrive = list5_pm.Count();
// // 迟到
// int nightLate = list4_pm.Count() - nightArrive;
// nightLate = nightLate < 0 ? 0 : nightLate;
// // 请假
// int nightLeave = nightUserGroup.Where(p => p.Where(s => s.state_pm == "3").Count() == p.Count()).Count();
// // 公差
// int nightTolerance = nightUserGroup.Where(p => p.Where(s => s.state == "4").Count() == p.Count()).Count();
// //设置应到人数减去请假公差人数
// nightTotal = nightTotal - nightLeave - nightTolerance;
// nightTolerance = nightTolerance < 0 ? 0 : nightTolerance;
// orgMo += ",\"nightTotal\":\"" + nightTotal + "\",\"nightLeave\":\"" + nightLeave + "\",\"nightArrive\":\"" + nightArrive +
// "\",\"nightNoArrive\":\"" + nightNoArrive + "\",\"nightTolerance\":\"" + nightTolerance + "\",\"nightLate\":\"" + nightLate + "\"}";
// totalSum += nightTotal;
// leaveSum += nightLeave;
// arriveSum += nightArrive;
// noArriveSum += nightNoArrive;
// toleranceSum += nightTolerance;
// lateSum += nightLate;
// totalData[i] = totalSum;
// leaveData[i] = leaveSum;
// arriveData[i] = arriveSum;
// noArriveData[i] = noArriveSum;
// toleranceData[i] = toleranceSum;
// lateData[i] = lateSum;
// returnstr += orgMo;
// }
// returnstr += "]";
// returnstr += ",\"echartsData\":{\"xAxisData\":[" + string.Join(",", xAxisData.ToArray()) + "],\"totalData\":[" + string.Join(",", totalData) + "],\"leaveData\":[" +
// string.Join(",", leaveData) + "],\"arriveData\":[" + string.Join(",", arriveData) + "],\"noArriveData\":[" + string.Join(",", noArriveData) +
// "],\"toleranceData\":[" + string.Join(",", toleranceData) + "],\"lateData\":[" + string.Join(",", lateData) + "]}";
// returnstr += "}";
// }
// catch (Exception e)
// {
// returnstr = "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员!\",\"error\":\"" + e.Message + "\",\"data\":[]}";
// }
// return returnstr;
// }
#endregion
///
/// 考勤统计列表
///
///
///
private string getAttendanceStaDoorForDeptForHome(HttpContext context)
{
string returnstr = "";
try
{
string findOrgId = context.Request.Params["orgId"];
if (string.IsNullOrEmpty(findOrgId))
{
return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"orgId参数不能为空!\",\"data\":[]}";
}
string findDate = context.Request.Params["findDate"];
string findStartDate = "";
string findEndDate = "";
if (string.IsNullOrEmpty(findDate))
{
findDate = DateTime.Now.ToString("yyyy-MM-dd");
findStartDate = DateTime.Now.ToString("yyyy-MM-dd 00:00:00");
findEndDate = DateTime.Now.ToString("yyyy-MM-dd 23:59:59");
}
else
{
findStartDate = Convert.ToDateTime(findDate).ToString("yyyy-MM-dd 00:00:00");
findEndDate = Convert.ToDateTime(findDate).ToString("yyyy-MM-dd 23:59:59");
}
string isContent = context.Request.Params["isContent"];
//直属下级机构 点名信息
string orgSql = @"SELECT * FROM fire_org o WHERE o.org_id = '" + findOrgId + "'";
string rcSql = @"WITH t1 as(
SELECT ID, CASE WHEN (ISNULL(DEPT_ID)=1) || (LENGTH(trim(DEPT_ID))=0) THEN ORG_ID
WHEN (ISNULL(DEPT_ID)!=1) && (LENGTH(trim(DEPT_ID))!=0) THEN DEPT_ID
END as ORG_ID,USERS_UID,TASK_ID,KQ_FACE_READ_START_TIME_AM kqFaceReadStartTimeAm,KQ_FACE_READ_END_TIME_AM kqFaceReadEndTimeAm,
KQ_FACE_READ_START_TIME_PM kqFaceReadStartTimePm,KQ_FACE_READ_END_TIME_PM kqFaceReadEndTimePm,
KQ_FACE_READ_START_STATE_AM UP_STATE_AM,KQ_FACE_READ_END_STATE_AM DOWN_STATE_AM,KQ_FACE_READ_START_STATE_PM UP_STATE_PM,
KQ_FACE_READ_END_STATE_PM DOWN_STATE_PM
from ( select oar.*, tse.DEPT_ID from oa_attendance_record oar left join tbl_sys_emp tse on oar.USERS_UID=tse.users_uid
)r WHERE TASK_ID in ( SELECT id from oa_attendance_task tk WHERE tk.org_id ='" + findOrgId + @"' and tk.UP_START_DATE BETWEEN '" + findStartDate + @"' and '" + findEndDate + @"' )
)
, oa_leave1 as ( SELECT * from oa_leave WHERE S_TIME > DATE_ADD(NOW(), INTERVAL -2 MONTH) and ppl_id in
(SELECT users_uid from tbl_sys_emp WHERE org_id = '" + findOrgId + @"' ) LIMIT 1000)
, oa_tolerance1 as (SELECT * from oa_tolerance WHERE S_TIME > DATE_ADD(NOW(), INTERVAL -2 MONTH) and ppl_id in
(SELECT users_uid from tbl_sys_emp WHERE org_id = '" + findOrgId + @"' ) LIMIT 1000)
SELECT t1.*,tk.UP_START_DATE,tk.UP_END_DATE,tk.DOWN_START_DATE,tk.DOWN_END_DATE,tk.UP_START_DATE2,tk.UP_END_DATE2,tk.DOWN_START_DATE2,tk.DOWN_END_DATE2
, if(((SELECT count(1) from oa_leave1 WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i:%s')
and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i:%s') )+
(SELECT count(1) from oa_vacation v LEFT JOIN tbl_sys_emp e on v.PPL_ID=e.ID WHERE v.Info_State='1' and e.USERS_UID=t1.USERS_UID
and date_format( v.S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format(tk.UP_END_DATE , '%Y-%m-%d %H:%i:%s')
and date_format(v.E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format(tk.UP_END_DATE , '%Y-%m-%d %H:%i:%s'))
)>0,3,
if((SELECT count(1) from oa_tolerance1 WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i') and
date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i') )>0,4,0)
) WORKSTATE
, if(((SELECT count(1) from oa_leave1 WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i:%s')
and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i:%s') )+
(SELECT count(1) from oa_vacation v LEFT JOIN tbl_sys_emp e on v.PPL_ID=e.ID WHERE v.Info_State='1' and e.USERS_UID=t1.USERS_UID
and date_format( v.S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format(tk.DOWN_START_DATE , '%Y-%m-%d %H:%i:%s')
and date_format(v.E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format(tk.DOWN_START_DATE , '%Y-%m-%d %H:%i:%s'))
)>0,3,
if((SELECT count(1) from oa_tolerance1 WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i') and
date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( tk.DOWN_START_DATE , '%Y-%m-%d %H:%i') )>0,4,0)
) WORKSTATE_DOWN
, if(((SELECT count(1) from oa_leave1 WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.UP_END_DATE2 , '%Y-%m-%d %H:%i:%s')
and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.UP_END_DATE2 , '%Y-%m-%d %H:%i:%s') )+
(SELECT count(1) from oa_vacation v LEFT JOIN tbl_sys_emp e on v.PPL_ID=e.ID WHERE v.Info_State='1' and e.USERS_UID=t1.USERS_UID
and date_format( v.S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format(tk.UP_END_DATE2 , '%Y-%m-%d %H:%i:%s')
and date_format(v.E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format(tk.UP_END_DATE2 , '%Y-%m-%d %H:%i:%s'))
)>0,3,
if((SELECT count(1) from oa_tolerance1 WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( tk.UP_END_DATE2 , '%Y-%m-%d %H:%i') and
date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( tk.UP_END_DATE2 , '%Y-%m-%d %H:%i') )>0,4,0)
) WORKSTATE_PM
, if(((SELECT count(1) from oa_leave1 WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.DOWN_START_DATE2 , '%Y-%m-%d %H:%i:%s')
and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.DOWN_START_DATE2 , '%Y-%m-%d %H:%i:%s') )+
(SELECT count(1) from oa_vacation v LEFT JOIN tbl_sys_emp e on v.PPL_ID=e.ID WHERE v.Info_State='1' and e.USERS_UID=t1.USERS_UID
and date_format( v.S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format(tk.DOWN_START_DATE2 , '%Y-%m-%d %H:%i:%s')
and date_format(v.E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format(tk.DOWN_START_DATE2 , '%Y-%m-%d %H:%i:%s'))
)>0,3,
if((SELECT count(1) from oa_tolerance1 WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( tk.DOWN_START_DATE2 , '%Y-%m-%d %H:%i') and
date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( tk.DOWN_START_DATE2 , '%Y-%m-%d %H:%i') )>0,4,0)
) WORKSTATE_PM_DOWN
from t1 LEFT JOIN oa_attendance_task tk on t1.TASK_ID=tk.ID
";
if (isContent == "1")
{
//递归下级机构 点名信息
orgSql = @"SELECT o.org_id,o.org_name,o.pid AS pid,o.all_num FROM fire_org o, ( SELECT get_Org_child_list ( '" + findOrgId + @"' ) cids ) s WHERE TYPE = 0 AND find_in_set( org_id, cids )";
}
DataTable orgDt = FangYar.Common.MySqlHelper.QueryTable(orgSql);
DataTable rcDt = FangYar.Common.MySqlHelper.QueryTable(rcSql);
//点名信息 存入缓存
List list = Common.DataTableExtensions.ConvertDataTableToGenericList(rcDt);
returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":[";
string[] xAxisData = new string[orgDt.Rows.Count];
int[] totalData = new int[orgDt.Rows.Count];
int[] leaveData = new int[orgDt.Rows.Count];
int[] arriveData = new int[orgDt.Rows.Count];
int[] noArriveData = new int[orgDt.Rows.Count];
int[] toleranceData = new int[orgDt.Rows.Count];
int[] lateData = new int[orgDt.Rows.Count];
//DateTime dtmZW = Convert.ToDateTime(findDate.Trim() + " 12:00:00");
DateTime dtmZW = Convert.ToDateTime(findDate.Trim() + " 14:30:00"); //此处依然保留,是为保留老数据的适用性,下边方法是在新数据下适用
string sqlTask = "SELECT * from oa_attendance_task where org_id = '" + findOrgId + "' and ATTENDANCE_DATE='" + findDate + "'";
DataTable dtTask = FangYar.Common.MySqlHelper.QueryTable(sqlTask);
if (dtTask != null && dtTask.Rows.Count > 0 && !string.IsNullOrEmpty(dtTask.Rows[0]["UP_START_DATE2"].ToString()))
{
dtmZW = Convert.ToDateTime(dtTask.Rows[0]["UP_START_DATE2"].ToString());
}
DateTime dtmUpS = DateTime.MinValue;
DateTime dtmUpE = DateTime.MaxValue;
DateTime dtmDoS = DateTime.MinValue;
DateTime dtmDoE = DateTime.MaxValue;
DateTime dtmUpS2 = DateTime.MinValue;
DateTime dtmUpE2 = DateTime.MaxValue;
DateTime dtmDoS2 = DateTime.MinValue;
DateTime dtmDoE2 = DateTime.MaxValue;
// 考勤时间获取
var objTime = list.FirstOrDefault();
if (objTime != null)
{
DateTime.TryParse(objTime.UP_START_DATE, out dtmUpS);
DateTime.TryParse(objTime.UP_END_DATE, out dtmUpE);
DateTime.TryParse(objTime.DOWN_START_DATE, out dtmDoS);
DateTime.TryParse(objTime.DOWN_END_DATE, out dtmDoE);
DateTime.TryParse(objTime.UP_START_DATE2, out dtmUpS2);
DateTime.TryParse(objTime.UP_END_DATE2, out dtmUpE2);
DateTime.TryParse(objTime.DOWN_START_DATE2, out dtmDoS2);
DateTime.TryParse(objTime.DOWN_END_DATE2, out dtmDoE2);
}
for (int i = 0; i < orgDt.Rows.Count; i++)
{
int totalSum = 0, leaveSum = 0, arriveSum = 0, noArriveSum = 0, toleranceSum = 0, lateSum = 0;
if (i != 0) returnstr += ",";
string _orgId = orgDt.Rows[i]["ORG_ID"].ToString();
string _pId = orgDt.Rows[i]["PID"].ToString();
string _orgName = orgDt.Rows[i]["ORG_NAME"].ToString();
string _type = orgDt.Rows[i]["TYPE"].ToString();
string _allNum = orgDt.Rows[i]["ALL_NUM"].ToString() == "" ? "0" : orgDt.Rows[i]["ALL_NUM"].ToString();
string orgMo = "{\"findDate\":\"" + findDate + "\",\"orgId\":\"" + _orgId + "\",\"pId\":\"" + _pId + "\",\"orgName\":\"" + _orgName + "\",\"allNum\":\"" + _allNum + "\"";
xAxisData[i] = "\"" + _orgName + "\"";
var dataList = _type == "0" ? list : list.Where(p => p.ORG_ID == _orgId); //此处判断是机构还是部门
#region 上午上班打卡
// 应到
int mornTotal = dataList.Count();
// 迟到
int mornLate = dataList.Where(p => p.UP_STATE_AM == 2).Count();
// 已识别 => 正常
int mornArrive = dataList.Where(p => p.UP_STATE_AM == 1).Count();
// 请假
int mornLeave = dataList.Where(p => p.WORKSTATE == 3 && p.UP_STATE_AM == 0).Count();
// 公差
int mornTolerance = dataList.Where(p => p.WORKSTATE == 4 && p.UP_STATE_AM == 0).Count();
// 未识别
int mornNoArrive = mornTotal - mornArrive - mornLeave - mornTolerance;
mornNoArrive = mornNoArrive < 0 ? 0 : mornNoArrive;
// 设置应到人数减去出差以及请假人数
//mornTotal = mornTotal - mornLeave - mornTolerance;
mornTotal = mornTotal < 0 ? 0 : mornTotal;
orgMo += ",\"mornTotal\":\"" + mornTotal + "\",\"mornLeave\":\"" + mornLeave + "\",\"mornArrive\":\"" + mornArrive +
"\",\"mornNoArrive\":\"" + mornNoArrive + "\",\"mornTolerance\":\"" + mornTolerance + "\",\"mornLate\":\"" + mornLate + "\"";
totalSum += mornTotal;
leaveSum += mornLeave;
arriveSum += mornArrive;
noArriveSum += mornNoArrive;
toleranceSum += mornTolerance;
lateSum += mornLate;
#endregion
#region 上午下班打卡
// 应到
int mornTotal_down = dataList.Count();
//早退
int mornEarly_down = dataList.Where(p => p.DOWN_STATE_AM == 2).Count();
// 已识别 => 正常
int mornArrive_down = dataList.Where(p => p.DOWN_STATE_AM == 1).Count();
// 请假
int mornLeave_down = dataList.Where(p => p.WORKSTATE_DOWN == 3 && p.DOWN_STATE_AM == 0).Count();
// 公差
int mornTolerance_down = dataList.Where(p => p.WORKSTATE_DOWN == 4 && p.DOWN_STATE_AM == 0).Count();
// 未识别
int mornNoArrive_down = mornTotal_down - mornLeave_down - mornTolerance_down - mornArrive_down;
mornNoArrive_down = mornNoArrive_down < 0 ? 0 : mornNoArrive_down;
// 设置应到人数减去出差以及请假人数
//mornTotal_down = mornTotal_down - mornLeave_down - mornTolerance_down;
mornTotal_down = mornTotal_down < 0 ? 0 : mornTotal_down;
orgMo += ",\"mornTotalDown\":\"" + mornTotal_down + "\",\"mornLeaveDown\":\"" + mornLeave_down + "\",\"mornArriveDown\":\"" + mornArrive_down +
"\",\"mornNoArriveDown\":\"" + mornNoArrive_down + "\",\"mornToleranceDown\":\"" + mornTolerance_down + "\",\"mornLateDown\":\"" + mornEarly_down + "\"";
totalSum += mornTotal_down;
leaveSum += mornLeave_down;
arriveSum += mornArrive_down;
noArriveSum += mornNoArrive_down;
toleranceSum += mornTolerance_down;
lateSum += mornEarly_down;
#endregion
#region 下午上班打卡
// 应到
int nightTotal_up = dataList.Count();
// 已识别 => 正常
int nightArrive_up = dataList.Where(p => p.UP_STATE_PM == 1).Count();
// 迟到
int nightLate_up = dataList.Where(p => p.UP_STATE_PM == 2).Count();
// 请假
int nightLeave_up = dataList.Where(p => p.WORKSTATE_PM == 3 && p.UP_STATE_PM == 0).Count();
// 公差
int nightTolerance_up = dataList.Where(p => p.WORKSTATE_PM == 4 && p.UP_STATE_PM == 0).Count();
// 未识别
int nightNoArrive_up = nightTotal_up - nightArrive_up - nightLeave_up - nightTolerance_up;
nightNoArrive_up = nightNoArrive_up < 0 ? 0 : nightNoArrive_up;
//设置应到人数减去请假公差人数
//nightTotal_up = nightTotal_up - nightLeave_up - nightTolerance_up;
nightTolerance_up = nightTolerance_up < 0 ? 0 : nightTolerance_up;
orgMo += ",\"nightTotalUp\":\"" + nightTotal_up + "\",\"nightLeaveUp\":\"" + nightLeave_up + "\",\"nightArriveUp\":\"" + nightArrive_up +
"\",\"nightNoArriveUp\":\"" + nightNoArrive_up + "\",\"nightToleranceUp\":\"" + nightTolerance_up + "\",\"nightLateUp\":\"" + nightLate_up + "\"";
totalSum += nightTotal_up;
leaveSum += nightLeave_up;
arriveSum += nightArrive_up;
noArriveSum += nightNoArrive_up;
toleranceSum += nightTolerance_up;
lateSum += nightLate_up;
#endregion
#region 下午下班打卡
// 应到
int nightTotal = dataList.Count();
// 已识别 => 正常
int nightArrive = dataList.Where(p => p.DOWN_STATE_PM == 1).Count();
// 早退
int nightEarly = dataList.Where(p => p.DOWN_STATE_PM == 2).Count();
// 请假
int nightLeave = dataList.Where(p => p.WORKSTATE_PM_DOWN == 3 && p.DOWN_STATE_PM == 0).Count();
// 公差
int nightTolerance = dataList.Where(p => p.WORKSTATE_PM_DOWN == 4 && p.DOWN_STATE_PM == 0).Count();
// 未识别
int nightNoArrive = nightTotal - nightArrive - nightLeave - nightTolerance;
nightNoArrive = nightNoArrive < 0 ? 0 : nightNoArrive;
//设置应到人数减去请假公差人数
//nightTotal = nightTotal - nightLeave - nightTolerance;
nightTolerance = nightTolerance < 0 ? 0 : nightTolerance;
orgMo += ",\"nightTotal\":\"" + nightTotal + "\",\"nightLeave\":\"" + nightLeave + "\",\"nightArrive\":\"" + nightArrive +
"\",\"nightNoArrive\":\"" + nightNoArrive + "\",\"nightTolerance\":\"" + nightTolerance + "\",\"nightLate\":\"" + nightEarly + "\"}";
totalSum += nightTotal;
leaveSum += nightLeave;
arriveSum += nightArrive;
noArriveSum += nightNoArrive;
toleranceSum += nightTolerance;
lateSum += nightEarly;
#endregion
totalData[i] = totalSum;
leaveData[i] = leaveSum;
arriveData[i] = arriveSum;
noArriveData[i] = noArriveSum;
toleranceData[i] = toleranceSum;
lateData[i] = lateSum;
returnstr += orgMo;
}
returnstr += "]";
returnstr += ",\"echartsData\":{\"xAxisData\":[" + string.Join(",", xAxisData.ToArray()) + "],\"totalData\":[" + string.Join(",", totalData) + "],\"leaveData\":[" +
string.Join(",", leaveData) + "],\"arriveData\":[" + string.Join(",", arriveData) + "],\"noArriveData\":[" + string.Join(",", noArriveData) +
"],\"toleranceData\":[" + string.Join(",", toleranceData) + "],\"lateData\":[" + string.Join(",", lateData) + "]}";
returnstr += "}";
}
catch (Exception e)
{
returnstr = "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员!\",\"error\":\"" + e.Message + "\",\"data\":[]}";
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Error, "人脸点名统计操作请求", "考勤统计列表异常:" + e);
}
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Query, "人脸点名统计操作请求", "考勤统计列表");
return returnstr;
}
#region 20220831 代码注释暂时弃用 qyl
// ///
// /// 考勤统计列表
// ///
// ///
// ///
// private string getAttendanceStaDoorForDeptForHome(HttpContext context)
// {
// string returnstr = "";
// try
// {
// string findOrgId = context.Request.Params["orgId"];
// if (string.IsNullOrEmpty(findOrgId))
// {
// return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"orgId参数不能为空!\",\"data\":[]}";
// }
// string findDate = context.Request.Params["findDate"];
// string findStartDate = "";
// string findEndDate = "";
// if (string.IsNullOrEmpty(findDate))
// {
// findDate = DateTime.Now.ToString("yyyy-MM-dd");
// findStartDate = DateTime.Now.ToString("yyyy-MM-dd 00:00:00");
// findEndDate = DateTime.Now.ToString("yyyy-MM-dd 23:59:59");
// }
// string isContent = context.Request.Params["isContent"];
// //直属下级机构 点名信息
// string orgSql = @"SELECT * FROM fire_org o WHERE o.org_id = '" + findOrgId + "'";
// string rcSql = @"WITH t1 as(
// SELECT ID, CASE WHEN (ISNULL(DEPT_ID)=1) || (LENGTH(trim(DEPT_ID))=0) THEN ORG_ID
// WHEN (ISNULL(DEPT_ID)!=1) && (LENGTH(trim(DEPT_ID))!=0) THEN DEPT_ID
// END as ORG_ID,USERS_UID,TIME_TYPE,FACE_READ_STATE STATE,FACE_READ_STATE_PM STATE_PM,TASK_ID
// from ( select oar.*, tse.DEPT_ID from oa_attendance_record oar left join tbl_sys_emp tse on oar.USERS_UID=tse.users_uid
// )r WHERE TASK_ID in
// ( SELECT id from oa_attendance_task tk,(select get_Org_child_list_OrgIds('" + findOrgId + @"') cids ) s WHERE
// find_in_set(tk.org_id,cids) and tk.UP_START_DATE BETWEEN '" + findStartDate + @"' and '" + findEndDate + @"'
// )
// )
// SELECT t1.*,tk.UP_START_DATE,tk.UP_END_DATE,tk.DOWN_START_DATE,tk.DOWN_END_DATE,tk.UP_START_DATE2,tk.UP_END_DATE2,tk.DOWN_START_DATE2,tk.DOWN_END_DATE2
// , if((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
// date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i:%s')
// and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i:%s') )>0,3,
// if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
// and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i') and
// date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( tk.UP_END_DATE , '%Y-%m-%d %H:%i') )>0,4,0)
// ) WORKSTATE
// , if((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
// date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( tk.DOWN_START_DATE2 , '%Y-%m-%d %H:%i:%s')
// and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( tk.DOWN_START_DATE2 , '%Y-%m-%d %H:%i:%s') )>0,3,
// if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
// and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( tk.DOWN_START_DATE2 , '%Y-%m-%d %H:%i') and
// date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( tk.DOWN_START_DATE2 , '%Y-%m-%d %H:%i') )>0,4,0)
// ) WORKSTATE_PM
// from t1 LEFT JOIN oa_attendance_task tk on t1.TASK_ID=tk.ID
//";
// if (isContent == "1")
// {
// //递归下级机构 点名信息
// orgSql = @"SELECT o.org_id,o.org_name,o.pid AS pid,o.all_num FROM fire_org o, ( SELECT get_Org_child_list ( '" + findOrgId + @"' ) cids ) s WHERE TYPE = 0 AND find_in_set( org_id, cids )";
// }
// // 插叙出入记录数据
// string sqlInOrOut = @" WITH t2 as(
// SELECT p.`NAME`,p.EXTEND2,p.START_TIME,p.org_id,p.CLOSEUP_PIC_URL from tbl_personaccess p,(select get_Org_child_list_OrgIds('" + findOrgId + @"') cids ) s
// WHERE find_in_set(p.org_id,cids) and p.START_TIME BETWEEN '" + findStartDate + @"' and '" + findEndDate + @"'
// and p.extend3 in (SELECT EPUIP_ID from tbl_epuip_org WHERE IS_Attendance='1')
// )
// , t3 as (
// SELECT t2.`NAME`,t2.EXTEND2,t2.START_TIME,
// CASE
// WHEN (ISNULL(e.dept_id)=1) || (LENGTH(trim(e.dept_id))=0) THEN t2.ORG_ID
// WHEN (ISNULL(e.dept_id)!=1) && (LENGTH(trim(e.dept_id))!=0) THEN e.DEPT_ID
// END as ORG_ID,
// t2.CLOSEUP_PIC_URL
// ,e.USERS_UID from t2 LEFT JOIN tbl_sys_emp e on t2.EXTEND2 = e.IDNUMBER
// ) SELECT * from t3 ";
// DataTable orgDt = FangYar.Common.MySqlHelper.QueryTable(orgSql);
// DataTable rcDt = FangYar.Common.MySqlHelper.QueryTable(rcSql);
// DataTable inOrOutDt = FangYar.Common.MySqlHelper.QueryTable(sqlInOrOut);
// //出入信息缓存
// List listInOrOut = new List();
// for (int i = 0; i < inOrOutDt.Rows.Count; i++)
// {
// listInOrOut.Add(new InOrOutMo()
// {
// NAME = inOrOutDt.Rows[i]["NAME"] + "",
// org_id = inOrOutDt.Rows[i]["org_id"] + "",
// EXTEND2 = inOrOutDt.Rows[i]["EXTEND2"] + "",
// USERS_UID = inOrOutDt.Rows[i]["USERS_UID"] + "",
// START_TIME = inOrOutDt.Rows[i]["START_TIME"] + "",
// });
// }
// //点名信息 存入缓存
// List list = new List();
// for (int i = 0; i < rcDt.Rows.Count; i++)
// {
// list.Add(new RollcallMo()
// {
// orgId = rcDt.Rows[i]["ORG_ID"] + "",
// timeType = rcDt.Rows[i]["TIME_TYPE"] + "",
// userId = rcDt.Rows[i]["USERS_UID"] + "",
// state = rcDt.Rows[i]["WORKSTATE"] + "",
// state_pm = rcDt.Rows[i]["WORKSTATE_PM"] + "",
// WORKSTATE = rcDt.Rows[i]["WORKSTATE"] + "",
// WORKSTATE_PM = rcDt.Rows[i]["WORKSTATE_PM"] + "",
// DOWN_END_DATE = rcDt.Rows[i]["DOWN_END_DATE"] + "",
// DOWN_START_DATE = rcDt.Rows[i]["DOWN_START_DATE"] + "",
// UP_END_DATE = rcDt.Rows[i]["UP_END_DATE"] + "",
// UP_START_DATE = rcDt.Rows[i]["UP_START_DATE"] + "",
// DOWN_END_DATE2 = rcDt.Rows[i]["DOWN_END_DATE2"] + "",
// DOWN_START_DATE2 = rcDt.Rows[i]["DOWN_START_DATE2"] + "",
// UP_END_DATE2 = rcDt.Rows[i]["UP_END_DATE2"] + "",
// UP_START_DATE2 = rcDt.Rows[i]["UP_START_DATE2"] + "",
// });
// }
// returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":[";
// string[] xAxisData = new string[orgDt.Rows.Count];
// int[] totalData = new int[orgDt.Rows.Count];
// int[] leaveData = new int[orgDt.Rows.Count];
// int[] arriveData = new int[orgDt.Rows.Count];
// int[] noArriveData = new int[orgDt.Rows.Count];
// int[] toleranceData = new int[orgDt.Rows.Count];
// int[] lateData = new int[orgDt.Rows.Count];
// //DateTime dtmZW = Convert.ToDateTime(findDate.Trim() + " 12:00:00");
// DateTime dtmZW = Convert.ToDateTime(findDate.Trim() + " 14:30:00"); //此处依然保留,是为保留老数据的适用性,下边方法是在新数据下适用
// string sqlTask = "SELECT * from oa_attendance_task where org_id = '" + findOrgId + "' and ATTENDANCE_DATE='" + findDate + "'";
// DataTable dtTask = FangYar.Common.MySqlHelper.QueryTable(sqlTask);
// if (dtTask != null && dtTask.Rows.Count > 0 && !string.IsNullOrEmpty(dtTask.Rows[0]["UP_START_DATE2"].ToString()))
// {
// dtmZW = Convert.ToDateTime(dtTask.Rows[0]["UP_START_DATE2"].ToString());
// }
// for (int i = 0; i < orgDt.Rows.Count; i++)
// {
// int totalSum = 0, leaveSum = 0, arriveSum = 0, noArriveSum = 0, toleranceSum = 0, lateSum = 0;
// if (i != 0) returnstr += ",";
// string _orgId = orgDt.Rows[i]["ORG_ID"].ToString();
// string _pId = orgDt.Rows[i]["PID"].ToString();
// string _orgName = orgDt.Rows[i]["ORG_NAME"].ToString();
// string _type = orgDt.Rows[i]["TYPE"].ToString();
// string _allNum = orgDt.Rows[i]["ALL_NUM"].ToString() == "" ? "0" : orgDt.Rows[i]["ALL_NUM"].ToString();
// string orgMo = "{\"findDate\":\"" + findDate + "\",\"orgId\":\"" + _orgId + "\",\"pId\":\"" + _pId + "\",\"orgName\":\"" + _orgName + "\",\"allNum\":\"" + _allNum + "\"";
// xAxisData[i] = "\"" + _orgName + "\"";
// //早点名
// var mornList = _type == "0" ? list : list.Where(p => p.orgId == _orgId); //此处判断是机构还是部门
// // 按人分组
// var userGroup = mornList.GroupBy(p => p.userId);
// //需要识别人员ID集合
// var userList = userGroup.Where(p => p.Any(s => s.WORKSTATE == "0")).Select(p => p.Key).ToList();
// // 对应出入记录信息
// var list1 = _type == "0" ? listInOrOut.Where(p => userList.Contains(p.USERS_UID)) : listInOrOut.Where(p => p.org_id == _orgId && userList.Contains(p.USERS_UID)); //此处判断是机构还是部门
// // 已经识别人员
// var list2 = list1.Where(p => Convert.ToDateTime(p.START_TIME) <= dtmZW).GroupBy(p => p.USERS_UID);
// // 已识别人员ID集合
// var list3 = list2.Select(p => p.Key).ToList();
// // 已经识别人员信息
// var list4 = userList.Where(p => list3.Contains(p)).GroupBy(p => p).ToList();
// DateTime dtmUpS = DateTime.MinValue;
// DateTime dtmUpE = DateTime.MaxValue;
// DateTime dtmDoS = DateTime.MinValue;
// DateTime dtmDoE = DateTime.MaxValue;
// DateTime dtmUpS2 = DateTime.MinValue;
// DateTime dtmUpE2 = DateTime.MaxValue;
// DateTime dtmDoS2 = DateTime.MinValue;
// DateTime dtmDoE2 = DateTime.MaxValue;
// // 考勤时间获取
// var objTime = userGroup.FirstOrDefault();
// if (objTime != null)
// {
// DateTime.TryParse(objTime.First().UP_START_DATE, out dtmUpS);
// DateTime.TryParse(objTime.First().UP_END_DATE, out dtmUpE);
// DateTime.TryParse(objTime.First().DOWN_START_DATE, out dtmDoS);
// DateTime.TryParse(objTime.First().DOWN_END_DATE, out dtmDoE);
// DateTime.TryParse(objTime.First().UP_START_DATE2, out dtmUpS2);
// DateTime.TryParse(objTime.First().UP_END_DATE2, out dtmUpE2);
// DateTime.TryParse(objTime.First().DOWN_START_DATE2, out dtmDoS2);
// DateTime.TryParse(objTime.First().DOWN_END_DATE2, out dtmDoE2);
// }
// // 正常考勤
// var list5 = list1.Where(p => Convert.ToDateTime(p.START_TIME) <= dtmUpE).GroupBy(p => p.USERS_UID).ToList();
// // 应到
// int mornTotal = userGroup.Count();
// // 未识别
// int mornNoArrive = userList.Count() - list4.Count();
// mornNoArrive = mornNoArrive < 0 ? 0 : mornNoArrive;
// // 已识别 => 正常
// int mornArrive = list5.Count();
// // 迟到
// int mornLate = list4.Count() - mornArrive;
// mornLate = mornLate < 0 ? 0 : mornLate;
// // 请假
// int mornLeave = userGroup.Where(p => p.Where(s => s.state == "3").Count() == p.Count()).Count();
// // 公差
// int mornTolerance = userGroup.Where(p => p.Where(s => s.state == "4").Count() == p.Count()).Count();
// // 设置应到人数减去出差以及请假人数
// mornTotal = mornTotal - mornLeave - mornTolerance;
// mornTotal = mornTotal < 0 ? 0 : mornTotal;
// orgMo += ",\"mornTotal\":\"" + mornTotal + "\",\"mornLeave\":\"" + mornLeave + "\",\"mornArrive\":\"" + mornArrive +
// "\",\"mornNoArrive\":\"" + mornNoArrive + "\",\"mornTolerance\":\"" + mornTolerance + "\",\"mornLate\":\"" + mornLate + "\"";
// totalSum += mornTotal;
// leaveSum += mornLeave;
// arriveSum += mornArrive;
// noArriveSum += mornNoArrive;
// toleranceSum += mornTolerance;
// lateSum += mornLate;
// // 应到
// int noonTotal = 0;
// // 未识别
// int noonNoArrive = 0;
// // 已识别 => 正常
// int noonArrive = 0;
// // 迟到
// int noonLate = 0;
// // 请假
// int noonLeave = 0;
// // 公差
// int noonTolerance = 0;
// orgMo += ",\"noonTotal\":\"" + noonTotal + "\",\"noonLeave\":\"" + noonLeave + "\",\"noonArrive\":\"" + noonArrive +
// "\",\"noonNoArrive\":\"" + noonNoArrive + "\",\"noonTolerance\":\"" + noonTolerance + "\",\"noonLate\":\"" + noonLate + "\"";
// totalSum += noonTotal;
// leaveSum += noonLeave;
// arriveSum += noonArrive;
// noArriveSum += noonNoArrive;
// toleranceSum += noonTolerance;
// lateSum += noonLate;
// //晚点名
// var nightList = _type == "0" ? list : list.Where(p => p.orgId == _orgId); //此处判断是机构还是部门
// // 按人分组
// var nightUserGroup = nightList.GroupBy(p => p.userId);
// //需要识别人员ID集合
// var userList_pm = userGroup.Where(p => p.Any(s => s.WORKSTATE_PM == "0")).Select(p => p.Key).ToList();
// // 对应出入记录信息
// var list1_pm = _type == "0" ? listInOrOut.Where(p => userList_pm.Contains(p.USERS_UID)) : listInOrOut.Where(p => p.org_id == _orgId && userList_pm.Contains(p.USERS_UID));//此处判断是机构还是部门
// // 已经识别人员
// var list2_pm = list1_pm.Where(p => Convert.ToDateTime(p.START_TIME) >= dtmZW).GroupBy(p => p.USERS_UID);
// // 已识别人员ID集合
// var list3_pm = list2_pm.Select(p => p.Key).ToList();
// // 已经识别人员信息
// var list4_pm = userList_pm.Where(p => list3_pm.Contains(p)).GroupBy(p => p).ToList();
// // 正常考勤
// var list5_pm = list1_pm.Where(p => Convert.ToDateTime(p.START_TIME) >= dtmUpS2 && Convert.ToDateTime(p.START_TIME) <= dtmUpE2).GroupBy(p => p.USERS_UID);
// // 应到
// int nightTotal = nightUserGroup.Count();
// // 未识别
// int nightNoArrive = userList_pm.Count() - list4_pm.Count();
// nightNoArrive = nightNoArrive < 0 ? 0 : nightNoArrive;
// // 已识别 => 正常
// int nightArrive = list5_pm.Count();
// // 迟到
// int nightLate = list4_pm.Count() - nightArrive;
// nightLate = nightLate < 0 ? 0 : nightLate;
// // 请假
// int nightLeave = nightUserGroup.Where(p => p.Where(s => s.state_pm == "3").Count() == p.Count()).Count();
// // 公差
// int nightTolerance = nightUserGroup.Where(p => p.Where(s => s.state == "4").Count() == p.Count()).Count();
// //设置应到人数减去请假公差人数
// nightTotal = nightTotal - nightLeave - nightTolerance;
// nightTolerance = nightTolerance < 0 ? 0 : nightTolerance;
// orgMo += ",\"nightTotal\":\"" + nightTotal + "\",\"nightLeave\":\"" + nightLeave + "\",\"nightArrive\":\"" + nightArrive +
// "\",\"nightNoArrive\":\"" + nightNoArrive + "\",\"nightTolerance\":\"" + nightTolerance + "\",\"nightLate\":\"" + nightLate + "\"}";
// totalSum += nightTotal;
// leaveSum += nightLeave;
// arriveSum += nightArrive;
// noArriveSum += nightNoArrive;
// toleranceSum += nightTolerance;
// lateSum += nightLate;
// totalData[i] = totalSum;
// leaveData[i] = leaveSum;
// arriveData[i] = arriveSum;
// noArriveData[i] = noArriveSum;
// toleranceData[i] = toleranceSum;
// lateData[i] = lateSum;
// returnstr += orgMo;
// }
// returnstr += "]";
// returnstr += ",\"echartsData\":{\"xAxisData\":[" + string.Join(",", xAxisData.ToArray()) + "],\"totalData\":[" + string.Join(",", totalData) + "],\"leaveData\":[" +
// string.Join(",", leaveData) + "],\"arriveData\":[" + string.Join(",", arriveData) + "],\"noArriveData\":[" + string.Join(",", noArriveData) +
// "],\"toleranceData\":[" + string.Join(",", toleranceData) + "],\"lateData\":[" + string.Join(",", lateData) + "]}";
// returnstr += "}";
// }
// catch (Exception e)
// {
// returnstr = "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员!\",\"error\":\"" + e.Message + "\",\"data\":[]}";
// // 记录操作日志
// BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Error, "人脸点名统计操作请求", "考勤统计列表异常:" + e);
// }
// // 记录操作日志
// BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Query, "人脸点名统计操作请求", "考勤统计列表");
// return returnstr;
// }
#endregion
///
/// 考勤统计详情
///
///
///
private string getAttendanceStaItemDoor(HttpContext context)
{
string returnstr = "";
try
{
string findOrgId = context.Request.Params["orgId"];
if (string.IsNullOrEmpty(findOrgId))
{
return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"orgId参数不能为空!\",\"data\":[]}";
}
string findDate = context.Request.Params["findDate"];
if (string.IsNullOrEmpty(findDate))
{
return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"findDate参数不能为空!\",\"data\":[]}";
}
string findStartDate = DateTime.Now.ToString("yyyy-MM-dd 00:00:00");
string findEndDate = DateTime.Now.ToString("yyyy-MM-dd 23:59:59");
//查询数据类型:1、上午上班打卡 2、上午下班打卡 3、下午上班打卡 4、下午下班打卡
string findTimeType = context.Request.Params["timeType"];
if (string.IsNullOrEmpty(findTimeType))
{
return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"timeType参数不能为空!\",\"data\":[]}";
}
string sql = "";
switch (findTimeType)
{
case "1"://上午上班打卡
sql = @"WITH t1 as( SELECT r.USERS_UID,r.USERS_NAME,date_format(r.KQ_FACE_READ_START_TIME_AM,'%Y-%m-%d %H:%i:%s') REPORT_TIME,t.UP_END_DATE setTime,r.KQ_FACE_READ_START_STATE_AM STATE, IFNULL(IFNULL(r.KQ_FACE_READ_START_IMG_AM,CONCAT('/',e.PHOTO)),'/images/imgPerDefaut.jpg') FACE_READ_SMALL_IMG, IFNULL(IFNULL(r.KQ_FACE_READ_START_IMG_AM,CONCAT('/',e.PHOTO)),'/images/imgPerDefaut.jpg') FACE_READ_BIG_IMG FROM oa_attendance_task t LEFT JOIN oa_attendance_record r ON t.id = r.task_id LEFT JOIN tbl_sys_emp e on e.USERS_UID=r.USERS_UID and e.org_id = r.org_id WHERE (t.ORG_ID = '" + findOrgId + "' or e.DEPT_ID='" + findOrgId + "') and date_format( t.UP_END_DATE, '%Y-%m-%d' ) = date_format( '" + findDate + "', '%Y-%m-%d' ) order BY r.FACE_READ_START_TIME )SELECT USERS_NAME,REPORT_TIME, if(((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( setTime , '%Y-%m-%d %H:%i:%s') and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( setTime , '%Y-%m-%d %H:%i:%s') )+(SELECT count(1) from oa_vacation v LEFT JOIN tbl_sys_emp e on v.PPL_ID=e.ID WHERE v.Info_State='1' and e.USERS_UID=t1.USERS_UID and date_format( v.S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format(setTime , '%Y-%m-%d %H:%i:%s') and date_format(v.E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format(setTime , '%Y-%m-%d %H:%i:%s')))>0 and STATE=0,3,if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1' and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( setTime , '%Y-%m-%d %H:%i') and date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( setTime , '%Y-%m-%d %H:%i') )>0 and STATE=0,4,STATE)) FACE_READ_STATE,FACE_READ_BIG_IMG,FACE_READ_SMALL_IMG,setTime,USERS_UID,STATE from t1 ";
break;
case "2"://上午下班打卡
sql = @"WITH t1 as( SELECT r.USERS_UID,r.USERS_NAME,date_format(r.KQ_FACE_READ_END_TIME_AM,'%Y-%m-%d %H:%i:%s') REPORT_TIME,t.DOWN_START_DATE setTime,r.KQ_FACE_READ_END_STATE_AM STATE, IFNULL(IFNULL(r.KQ_FACE_READ_End_IMG_AM,CONCAT('/',e.PHOTO)),'/images/imgPerDefaut.jpg') FACE_READ_SMALL_IMG, IFNULL(IFNULL(r.KQ_FACE_READ_End_IMG_AM,CONCAT('/',e.PHOTO)),'/images/imgPerDefaut.jpg') FACE_READ_BIG_IMG FROM oa_attendance_task t LEFT JOIN oa_attendance_record r ON t.id = r.task_id LEFT JOIN tbl_sys_emp e on e.USERS_UID=r.USERS_UID and e.org_id = r.org_id WHERE (t.ORG_ID = '" + findOrgId + "' or e.DEPT_ID='" + findOrgId + "') and date_format( t.DOWN_START_DATE, '%Y-%m-%d' ) = date_format( '" + findDate + "', '%Y-%m-%d' ) order BY r.FACE_READ_START_TIME )SELECT USERS_NAME,REPORT_TIME, if(((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( setTime , '%Y-%m-%d %H:%i:%s') and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( setTime , '%Y-%m-%d %H:%i:%s') )+(SELECT count(1) from oa_vacation v LEFT JOIN tbl_sys_emp e on v.PPL_ID=e.ID WHERE v.Info_State='1' and e.USERS_UID=t1.USERS_UID and date_format( v.S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format(setTime , '%Y-%m-%d %H:%i:%s') and date_format(v.E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format(setTime , '%Y-%m-%d %H:%i:%s')))>0 and STATE=0,3,if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1' and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( setTime , '%Y-%m-%d %H:%i') and date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( setTime , '%Y-%m-%d %H:%i') )>0 and STATE=0,4,STATE)) FACE_READ_STATE,FACE_READ_BIG_IMG,FACE_READ_SMALL_IMG,setTime,USERS_UID,STATE from t1 ";
break;
case "3"://下午上班打卡
sql = @"WITH t1 as( SELECT r.USERS_UID,r.USERS_NAME,date_format(r.KQ_FACE_READ_START_TIME_PM,'%Y-%m-%d %H:%i:%s') REPORT_TIME,t.UP_END_DATE2 setTime,r.KQ_FACE_READ_START_STATE_PM STATE, IFNULL(IFNULL(r.KQ_FACE_READ_START_IMG_PM,CONCAT('/',e.PHOTO)),'/images/imgPerDefaut.jpg') FACE_READ_SMALL_IMG, IFNULL(IFNULL(r.KQ_FACE_READ_START_IMG_PM,CONCAT('/',e.PHOTO)),'/images/imgPerDefaut.jpg') FACE_READ_BIG_IMG FROM oa_attendance_task t LEFT JOIN oa_attendance_record r ON t.id = r.task_id LEFT JOIN tbl_sys_emp e on e.USERS_UID=r.USERS_UID and e.org_id = r.org_id WHERE (t.ORG_ID = '" + findOrgId + "' or e.DEPT_ID='" + findOrgId + "') and date_format( t.UP_END_DATE2, '%Y-%m-%d' ) = date_format( '" + findDate + "', '%Y-%m-%d' ) order BY r.FACE_READ_START_TIME )SELECT USERS_NAME,REPORT_TIME, if(((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( setTime , '%Y-%m-%d %H:%i:%s') and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( setTime , '%Y-%m-%d %H:%i:%s') )+(SELECT count(1) from oa_vacation v LEFT JOIN tbl_sys_emp e on v.PPL_ID=e.ID WHERE v.Info_State='1' and e.USERS_UID=t1.USERS_UID and date_format( v.S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format(setTime , '%Y-%m-%d %H:%i:%s') and date_format(v.E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format(setTime , '%Y-%m-%d %H:%i:%s')))>0 and STATE=0,3,if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1' and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( setTime , '%Y-%m-%d %H:%i') and date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( setTime , '%Y-%m-%d %H:%i') )>0 and STATE=0,4,STATE)) FACE_READ_STATE,FACE_READ_BIG_IMG,FACE_READ_SMALL_IMG,setTime,USERS_UID,STATE from t1 ";
break;
case "4"://下午下班打卡
sql = @"WITH t1 as( SELECT r.USERS_UID,r.USERS_NAME,date_format(r.KQ_FACE_READ_END_TIME_PM,'%Y-%m-%d %H:%i:%s') REPORT_TIME,t.DOWN_START_DATE2 setTime,r.KQ_FACE_READ_END_STATE_PM STATE, IFNULL(IFNULL(r.KQ_FACE_READ_End_IMG_PM,CONCAT('/',e.PHOTO)),'/images/imgPerDefaut.jpg') FACE_READ_SMALL_IMG, IFNULL(IFNULL(r.KQ_FACE_READ_End_IMG_PM,CONCAT('/',e.PHOTO)),'/images/imgPerDefaut.jpg') FACE_READ_BIG_IMG FROM oa_attendance_task t LEFT JOIN oa_attendance_record r ON t.id = r.task_id LEFT JOIN tbl_sys_emp e on e.USERS_UID=r.USERS_UID and e.org_id = r.org_id WHERE (t.ORG_ID = '" + findOrgId + "' or e.DEPT_ID='" + findOrgId + "') and date_format( t.DOWN_START_DATE2, '%Y-%m-%d' ) = date_format( '" + findDate + "', '%Y-%m-%d' ) order BY r.FACE_READ_START_TIME_PM )SELECT USERS_NAME,REPORT_TIME, if(((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( setTime , '%Y-%m-%d %H:%i:%s') and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( setTime , '%Y-%m-%d %H:%i:%s'))+(SELECT count(1) from oa_vacation v LEFT JOIN tbl_sys_emp e on v.PPL_ID=e.ID WHERE v.Info_State='1' and e.USERS_UID=t1.USERS_UID and date_format( v.S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format(setTime , '%Y-%m-%d %H:%i:%s') and date_format(v.E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format(setTime , '%Y-%m-%d %H:%i:%s')))>0 and STATE=0,3,if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1' and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( setTime , '%Y-%m-%d %H:%i') and date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( setTime , '%Y-%m-%d %H:%i') )>0 and STATE=0,4,STATE))FACE_READ_STATE,FACE_READ_BIG_IMG,FACE_READ_SMALL_IMG,setTime,USERS_UID,STATE from t1 ";
break;
}
DataTable dt = FangYar.Common.MySqlHelper.QueryTable(sql);
////DateTime dtmZW = Convert.ToDateTime(findDate.Trim() + " 12:00:00");
//DateTime dtmZW = Convert.ToDateTime(findDate.Trim() + " 14:30:00"); //此处依然保留,是为保留老数据的适用性,下边方法是在新数据下适用
//DateTime dtmZW2 = Convert.ToDateTime(findDate.Trim() + " 15:45:00");
//string sqlTask = "SELECT * from oa_attendance_task where org_id = '" + findOrgId + "' and ATTENDANCE_DATE='" + findDate + "'";
//DataTable dtTask = FangYar.Common.MySqlHelper.QueryTable(sqlTask);
//if (dtTask != null && dtTask.Rows.Count > 0 && !string.IsNullOrEmpty(dtTask.Rows[0]["UP_START_DATE2"].ToString()) && !string.IsNullOrEmpty(dtTask.Rows[0]["UP_END_DATE2"].ToString()))
//{
// dtmZW = Convert.ToDateTime(dtTask.Rows[0]["UP_START_DATE2"].ToString());
// dtmZW2 = Convert.ToDateTime(dtTask.Rows[0]["UP_END_DATE2"].ToString());
//}
returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":";
returnstr += FangYar.Common.JsonHelper.ToJson(dt);
returnstr += "}";
}
catch (Exception e)
{
returnstr = "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员!\",\"error\":\"" + e.Message + "\",\"data\":[]}";
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Error, "人脸点名统计操作请求", "考勤统计详情异常:" + e);
}
// 记录操作日志
BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Query, "人脸点名统计操作请求", "考勤统计详情");
return returnstr;
}
#region 20220830 代码注释暂时弃用 qyl
/////
///// 考勤统计详情
/////
/////
/////
//private string getAttendanceStaItemDoor(HttpContext context)
//{
// string returnstr = "";
// try
// {
// string findOrgId = context.Request.Params["orgId"];
// if (string.IsNullOrEmpty(findOrgId))
// {
// return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"orgId参数不能为空!\",\"data\":[]}";
// }
// string findDate = context.Request.Params["findDate"];
// if (string.IsNullOrEmpty(findDate))
// {
// return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"findDate参数不能为空!\",\"data\":[]}";
// }
// string findStartDate = DateTime.Now.ToString("yyyy-MM-dd 00:00:00");
// string findEndDate = DateTime.Now.ToString("yyyy-MM-dd 23:59:59");
// //查询数据类型:1、上午;5、下午
// string findTimeType = context.Request.Params["timeType"];
// if (string.IsNullOrEmpty(findTimeType))
// {
// return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"timeType参数不能为空!\",\"data\":[]}";
// }
// //查询点名信息详情
// string sql = "WITH t1 as( SELECT r.USERS_UID,r.USERS_NAME,date_format(r.FACE_READ_START_TIME,'%Y-%m-%d %H:%i:%s') REPORT_TIME,t.UP_END_DATE setTime,r.FACE_READ_STATE STATE, IFNULL(IFNULL(r.FACE_READ_SMALL_IMG,CONCAT('/',e.PHOTO)),'/images/imgPerDefaut.jpg') FACE_READ_SMALL_IMG, IFNULL(IFNULL(r.FACE_READ_BIG_IMG,CONCAT('/',e.PHOTO)),'/images/imgPerDefaut.jpg') FACE_READ_BIG_IMG FROM oa_attendance_task t LEFT JOIN oa_attendance_record r ON t.id = r.task_id LEFT JOIN tbl_sys_emp e on e.USERS_UID=r.USERS_UID and e.org_id = r.org_id WHERE (t.ORG_ID = '" + findOrgId + "' or e.DEPT_ID='" + findOrgId + "') and date_format( t.UP_END_DATE, '%Y-%m-%d' ) = date_format( '" + findDate + "', '%Y-%m-%d' ) order BY r.FACE_READ_START_TIME )" +
// @"
// SELECT USERS_NAME,REPORT_TIME, if((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
// date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( setTime , '%Y-%m-%d %H:%i:%s')
// and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( setTime , '%Y-%m-%d %H:%i:%s') )>0,3,
// if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
// and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( setTime , '%Y-%m-%d %H:%i') and
// date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( setTime , '%Y-%m-%d %H:%i') )>0,4,0)
// ) FACE_READ_STATE,FACE_READ_BIG_IMG,FACE_READ_SMALL_IMG,setTime,USERS_UID from t1 ";
// if (findTimeType == "5")
// {
// sql = "WITH t1 as( SELECT r.USERS_UID,r.USERS_NAME,date_format(r.FACE_READ_START_TIME_PM,'%Y-%m-%d %H:%i:%s') REPORT_TIME,t.DOWN_START_DATE setTime,r.FACE_READ_STATE_PM STATE, IFNULL(IFNULL(r.FACE_READ_SMALL_IMG_PM,CONCAT('/',e.PHOTO)),'/images/imgPerDefaut.jpg') FACE_READ_SMALL_IMG, IFNULL(IFNULL(r.FACE_READ_BIG_IMG_PM,CONCAT('/',e.PHOTO)),'/images/imgPerDefaut.jpg') FACE_READ_BIG_IMG FROM oa_attendance_task t LEFT JOIN oa_attendance_record r ON t.id = r.task_id LEFT JOIN tbl_sys_emp e on e.USERS_UID=r.USERS_UID and e.org_id = r.org_id WHERE (t.ORG_ID = '" + findOrgId + "' or e.DEPT_ID='" + findOrgId + "') and date_format( t.DOWN_START_DATE, '%Y-%m-%d' ) = date_format( '" + findDate + "', '%Y-%m-%d' ) order BY r.FACE_READ_START_TIME_PM )" +
// @"
// SELECT USERS_NAME,REPORT_TIME, if((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
// date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( setTime , '%Y-%m-%d %H:%i:%s')
// and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( setTime , '%Y-%m-%d %H:%i:%s') )>0,3,
// if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
// and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( setTime , '%Y-%m-%d %H:%i') and
// date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( setTime , '%Y-%m-%d %H:%i') )>0,4,0)
// ) FACE_READ_STATE,FACE_READ_BIG_IMG,FACE_READ_SMALL_IMG,setTime,USERS_UID from t1 ";
// }
// //查询出入记录数据
// string sqlInOrOut = @" WITH t2 as(
// SELECT p.`NAME`,p.EXTEND2,p.START_TIME,p.org_id,p.CLOSEUP_PIC_URL,
// p.DEPT_ID from (select tp.*,tse.DEPT_ID from tbl_personaccess tp left join tbl_sys_emp tse on tp.EMPID =tse.ID) p,(select get_Org_child_list_OrgIds('" + findOrgId + @"') cids ) s
// WHERE (find_in_set( p.org_id, cids ) or p.DEPT_ID = '" + findOrgId + @"') and p.START_TIME BETWEEN '" + findStartDate + @"' and '" + findEndDate + @"'
// and p.extend3 in (SELECT EPUIP_ID from tbl_epuip_org WHERE IS_Attendance='1')
// )
// , t3 as (
// SELECT t2.*,e.USERS_UID from t2 LEFT JOIN tbl_sys_emp e on t2.EXTEND2 = e.IDNUMBER where t2.org_id ='" + findOrgId + @"' or e.DEPT_id='" + findOrgId + @"'
// ) SELECT * from t3 ";
// DataTable inOrOutDt = FangYar.Common.MySqlHelper.QueryTable(sqlInOrOut);
// //出入信息缓存
// List listInOrOut = new List();
// for (int i = 0; i < inOrOutDt.Rows.Count; i++)
// {
// listInOrOut.Add(new InOrOutMo()
// {
// NAME = inOrOutDt.Rows[i]["NAME"] + "",
// org_id = inOrOutDt.Rows[i]["org_id"] + "",
// EXTEND2 = inOrOutDt.Rows[i]["EXTEND2"] + "",
// USERS_UID = inOrOutDt.Rows[i]["USERS_UID"] + "",
// START_TIME = inOrOutDt.Rows[i]["START_TIME"] + "",
// CLOSEUP_PIC_URL = inOrOutDt.Rows[i]["CLOSEUP_PIC_URL"] + "",
// });
// }
// DataTable dt = FangYar.Common.MySqlHelper.QueryTable(sql);
// //DateTime dtmZW = Convert.ToDateTime(findDate.Trim() + " 12:00:00");
// DateTime dtmZW = Convert.ToDateTime(findDate.Trim() + " 14:30:00"); //此处依然保留,是为保留老数据的适用性,下边方法是在新数据下适用
// DateTime dtmZW2 = Convert.ToDateTime(findDate.Trim() + " 15:45:00");
// string sqlTask = "SELECT * from oa_attendance_task where org_id = '" + findOrgId + "' and ATTENDANCE_DATE='" + findDate + "'";
// DataTable dtTask = FangYar.Common.MySqlHelper.QueryTable(sqlTask);
// if (dtTask != null && dtTask.Rows.Count > 0 && !string.IsNullOrEmpty(dtTask.Rows[0]["UP_START_DATE2"].ToString()) && !string.IsNullOrEmpty(dtTask.Rows[0]["UP_END_DATE2"].ToString()))
// {
// dtmZW = Convert.ToDateTime(dtTask.Rows[0]["UP_START_DATE2"].ToString());
// dtmZW2 = Convert.ToDateTime(dtTask.Rows[0]["UP_END_DATE2"].ToString());
// }
// for (int i = 0; i < dt.Rows.Count; i++)
// {
// var dr = dt.Rows[i];
// if (dr["FACE_READ_STATE"] + "" == "0")
// {
// DateTime.TryParse(dr["setTime"] + "", out DateTime dtm);
// string USERS_UID = dr["USERS_UID"] + "";
// if (findTimeType == "5")
// {
// //下午出入记录
// var list = listInOrOut.Where(p => Convert.ToDateTime(p.START_TIME) > dtmZW && p.USERS_UID == USERS_UID).ToList();
// //判断是否存在出入记录
// if (list.Count > 0)
// {
// dr["FACE_READ_STATE"] = list.Any(p => Convert.ToDateTime(p.START_TIME) >= Convert.ToDateTime(dtmZW) &&
// Convert.ToDateTime(p.START_TIME) <= Convert.ToDateTime(dtmZW2)) ? 1 : 2;
// var obj = list.OrderByDescending(p => p.START_TIME).First();
// string imgUrl = obj.CLOSEUP_PIC_URL;
// dr["FACE_READ_BIG_IMG"] = imgUrl;
// dr["FACE_READ_SMALL_IMG"] = imgUrl;
// dr["REPORT_TIME"] = obj.START_TIME;
// }
// }
// else
// {
// //上午出入记录
// var list = listInOrOut.Where(p => Convert.ToDateTime(p.START_TIME) <= dtmZW && p.USERS_UID == USERS_UID).ToList();
// //判断是否存在出入记录
// if (list.Count > 0)
// {
// dr["FACE_READ_STATE"] = list.Any(p => Convert.ToDateTime(p.START_TIME) < dtm) ? 1 : 2;
// var obj = list.OrderByDescending(p => p.START_TIME).First();
// string imgUrl = obj.CLOSEUP_PIC_URL;
// dr["FACE_READ_BIG_IMG"] = imgUrl;
// dr["FACE_READ_SMALL_IMG"] = imgUrl;
// dr["REPORT_TIME"] = obj.START_TIME;
// }
// }
// }
// }
// returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":";
// returnstr += FangYar.Common.JsonHelper.ToJson(dt);
// returnstr += "}";
// }
// catch (Exception e)
// {
// returnstr = "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员!\",\"error\":\"" + e.Message + "\",\"data\":[]}";
// // 记录操作日志
// BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Error, "人脸点名统计操作请求", "考勤统计详情异常:" + e);
// }
// // 记录操作日志
// BLL.SysOperationLogHelp.AddSysOperationLog(context, Common.EnumOperationLogType.Query, "人脸点名统计操作请求", "考勤统计详情");
// return returnstr;
//}
#endregion
/////
///// 考勤统计详情
/////
/////
/////
//private string getAttendanceStaItemDoor(HttpContext context)
//{
// string returnstr = "";
// try
// {
// string findOrgId = context.Request.Params["orgId"];
// if (string.IsNullOrEmpty(findOrgId))
// {
// return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"orgId参数不能为空!\",\"data\":[]}";
// }
// string findDate = context.Request.Params["findDate"];
// if (string.IsNullOrEmpty(findDate))
// {
// return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"findDate参数不能为空!\",\"data\":[]}";
// }
// //查询数据类型:1、上午;5、下午
// string findTimeType = context.Request.Params["timeType"];
// if (string.IsNullOrEmpty(findTimeType))
// {
// return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"timeType参数不能为空!\",\"data\":[]}";
// }
// //查询点名信息详情
// string sql = "WITH t1 as( SELECT r.USERS_UID,r.USERS_NAME,date_format(r.FACE_READ_START_TIME,'%Y-%m-%d %H:%i:%s') REPORT_TIME,t.UP_END_DATE setTime,r.FACE_READ_STATE STATE, IFNULL(IFNULL(r.FACE_READ_SMALL_IMG,CONCAT('/',e.PHOTO)),'/images/imgPerDefaut.jpg') FACE_READ_SMALL_IMG, IFNULL(IFNULL(r.FACE_READ_BIG_IMG,CONCAT('/',e.PHOTO)),'/images/imgPerDefaut.jpg') FACE_READ_BIG_IMG FROM oa_attendance_task t LEFT JOIN oa_attendance_record r ON t.id = r.task_id LEFT JOIN tbl_sys_emp e on e.USERS_UID=r.USERS_UID WHERE t.ORG_ID = '" + findOrgId + "' and date_format( t.UP_END_DATE, '%Y-%m-%d' ) = date_format( '" + findDate + "', '%Y-%m-%d' ) order BY r.FACE_READ_START_TIME )" +
// @"
// SELECT USERS_NAME,REPORT_TIME, if((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
// date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( setTime , '%Y-%m-%d %H:%i:%s')
// and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( setTime , '%Y-%m-%d %H:%i:%s') )>0,3,
// if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
// and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( setTime , '%Y-%m-%d %H:%i') and
// date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( setTime , '%Y-%m-%d %H:%i') )>0,4,0)
// ) FACE_READ_STATE,FACE_READ_BIG_IMG,FACE_READ_SMALL_IMG,setTime,USERS_UID from t1 ";
// if (findTimeType == "5")
// {
// sql = "WITH t1 as( SELECT r.USERS_UID,r.USERS_NAME,date_format(r.FACE_READ_START_TIME_PM,'%Y-%m-%d %H:%i:%s') REPORT_TIME,t.DOWN_START_DATE setTime,r.FACE_READ_STATE_PM STATE, IFNULL(IFNULL(r.FACE_READ_SMALL_IMG_PM,CONCAT('/',e.PHOTO)),'/images/imgPerDefaut.jpg') FACE_READ_SMALL_IMG, IFNULL(IFNULL(r.FACE_READ_BIG_IMG_PM,CONCAT('/',e.PHOTO)),'/images/imgPerDefaut.jpg') FACE_READ_BIG_IMG FROM oa_attendance_task t LEFT JOIN oa_attendance_record r ON t.id = r.task_id LEFT JOIN tbl_sys_emp e on e.USERS_UID=r.USERS_UID WHERE t.ORG_ID = '" + findOrgId + "' and date_format( t.DOWN_START_DATE, '%Y-%m-%d' ) = date_format( '" + findDate + "', '%Y-%m-%d' ) order BY r.FACE_READ_START_TIME_PM )" +
// @"
// SELECT USERS_NAME,REPORT_TIME, if((SELECT count(1) from oa_leave WHERE PPL_ID = t1.USERS_UID and STATE = '1' and
// date_format( S_TIME, '%Y-%m-%d %H:%i:%s') <= date_format( setTime , '%Y-%m-%d %H:%i:%s')
// and date_format(E_TIME, '%Y-%m-%d %H:%i:%s') >= date_format( setTime , '%Y-%m-%d %H:%i:%s') )>0,3,
// if((SELECT count(1) from oa_tolerance WHERE (PPL_ID = t1.USERS_UID or find_in_set(t1.USERS_UID, ACC_PPL)) and STATE = '1'
// and date_format( S_TIME, '%Y-%m-%d %H:%i') <= date_format( setTime , '%Y-%m-%d %H:%i') and
// date_format(E_TIME, '%Y-%m-%d %H:%i') >= date_format( setTime , '%Y-%m-%d %H:%i') )>0,4,0)
// ) FACE_READ_STATE,FACE_READ_BIG_IMG,FACE_READ_SMALL_IMG,setTime,USERS_UID from t1 ";
// }
// //查询出入记录数据
// string sqlInOrOut = @" WITH t2 as(
// SELECT p.`NAME`,p.EXTEND2,p.START_TIME,p.org_id,p.CLOSEUP_PIC_URL from tbl_personaccess p,(select get_Org_child_list_OrgIds('" + findOrgId + @"') cids ) s
// WHERE find_in_set(p.org_id,cids) and date_format( p.START_TIME, '%Y-%m-%d' ) = date_format( '" + findDate + @"', '%Y-%m-%d' )
// and p.extend3 in (SELECT EPUIP_ID from tbl_epuip_org WHERE IS_Attendance='1')
// )
// , t3 as (
// SELECT t2.*,e.USERS_UID from t2 LEFT JOIN tbl_sys_emp e on t2.EXTEND2 = e.IDNUMBER
// ) SELECT * from t3 ";
// DataTable inOrOutDt = FangYar.Common.MySqlHelper.QueryTable(sqlInOrOut);
// //出入信息缓存
// List listInOrOut = new List();
// for (int i = 0; i < inOrOutDt.Rows.Count; i++)
// {
// listInOrOut.Add(new InOrOutMo()
// {
// NAME = inOrOutDt.Rows[i]["NAME"] + "",
// org_id = inOrOutDt.Rows[i]["org_id"] + "",
// EXTEND2 = inOrOutDt.Rows[i]["EXTEND2"] + "",
// USERS_UID = inOrOutDt.Rows[i]["USERS_UID"] + "",
// START_TIME = inOrOutDt.Rows[i]["START_TIME"] + "",
// CLOSEUP_PIC_URL = inOrOutDt.Rows[i]["CLOSEUP_PIC_URL"] + "",
// });
// }
// DataTable dt = FangYar.Common.MySqlHelper.QueryTable(sql);
// DateTime dtmZW = Convert.ToDateTime(findDate.Trim() + " 12:00:00");
// for (int i = 0; i < dt.Rows.Count; i++)
// {
// var dr = dt.Rows[i];
// if (dr["FACE_READ_STATE"] + "" == "0")
// {
// DateTime.TryParse(dr["setTime"] + "", out DateTime dtm);
// string USERS_UID = dr["USERS_UID"] + "";
// if (findTimeType == "5")
// {
// //下午出入记录
// var list = listInOrOut.Where(p => Convert.ToDateTime(p.START_TIME) > dtmZW && p.USERS_UID == USERS_UID).ToList();
// //判断是否存在出入记录
// if (list.Count > 0)
// {
// dr["FACE_READ_STATE"] = list.Any(p => Convert.ToDateTime(p.START_TIME) > dtm) ? 1 : 2;
// var obj = list.OrderByDescending(p => p.START_TIME).First();
// string imgUrl = obj.CLOSEUP_PIC_URL;
// dr["FACE_READ_BIG_IMG"] = imgUrl;
// dr["FACE_READ_SMALL_IMG"] = imgUrl;
// dr["REPORT_TIME"] = obj.START_TIME;
// }
// }
// else
// {
// //上午出入记录
// var list = listInOrOut.Where(p => Convert.ToDateTime(p.START_TIME) <= dtmZW && p.USERS_UID == USERS_UID).ToList();
// //判断是否存在出入记录
// if (list.Count > 0)
// {
// dr["FACE_READ_STATE"] = list.Any(p => Convert.ToDateTime(p.START_TIME) < dtm) ? 1 : 2;
// var obj = list.OrderBy(p => p.START_TIME).First();
// string imgUrl = obj.CLOSEUP_PIC_URL;
// dr["FACE_READ_BIG_IMG"] = imgUrl;
// dr["FACE_READ_SMALL_IMG"] = imgUrl;
// dr["REPORT_TIME"] = obj.START_TIME;
// }
// }
// }
// }
// returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":";
// returnstr += FangYar.Common.JsonHelper.ToJson(dt);
// returnstr += "}";
// }
// catch (Exception e)
// {
// returnstr = "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员!\",\"error\":\"" + e.Message + "\",\"data\":[]}";
// }
// return returnstr;
//}
///
/// 考勤统计 八天迟到统计
///
///
///
private string getAttendanceStaDoorWeek(HttpContext context)
{
string returnstr = "";
try
{
string findOrgId = context.Request.Params["orgId"];
string todayDate = DateTime.Now.ToString("yyyy-MM-dd");
string beforeEightDate = DateTime.Now.AddDays(-7).ToString("yyyy-MM-dd");
if (string.IsNullOrEmpty(findOrgId))
{
return "{\"code\":\"-1\",\"msg\":\"请求异常,请联系平台管理员。\",\"error\":\"orgId参数不能为空!\",\"data\":[]}";
}
// 查询最近八天的任务
string sqlTask = @"SELECT * FROM `oa_attendance_task` where ORG_ID ='" + findOrgId + @"'
AND STR_TO_DATE(ATTENDANCE_DATE,'%Y-%m-%d')>= STR_TO_DATE('" + beforeEightDate + @"', '%Y-%m-%d')
AND STR_TO_DATE(ATTENDANCE_DATE,'%Y-%m-%d')<= STR_TO_DATE('" + todayDate + @"', '%Y-%m-%d')
ORDER BY ATTENDANCE_DATE desc";
DataTable dtTask = FangYar.Common.MySqlHelper.QueryTable(sqlTask);
//获取最近八天的人脸识别数据
string sqlPacc = @"select tp.*,tse.USERS_UID from tbl_personaccess tp left join tbl_sys_emp tse on tp.EMPID=tse.id where EXTEND3 in (select EPUIP_ID from tbl_epuip_org where org_id='" + findOrgId + @"' and IS_Attendance ='1')
AND name !='' and name is not NULL and STR_TO_DATE(START_TIME,'%Y-%m-%d')>= STR_TO_DATE('" + beforeEightDate + @"', '%Y-%m-%d')
AND STR_TO_DATE(START_TIME,'%Y-%m-%d')<= STR_TO_DATE('" + todayDate + @"', '%Y-%m-%d')
ORDER BY START_TIME desc";
DataTable dtPacc = FangYar.Common.MySqlHelper.QueryTable(sqlPacc);
//获取最近八天的请假记录和公差记录
string sqlLeave = @"select ol.ID as ID ,ol.PPL_ID as PPL_ID ,ol.PPL_NAME as PPL_NAME,ol.S_TIME as S_TIME ,ol.E_TIME as E_TIME,tse.ORG_ID as ORG_ID from oa_leave ol left join tbl_sys_emp tse on ol.PPL_ID = tse.USERS_UID
where org_id='" + findOrgId + @"' and state='1'
union
select ot.ID as ID ,ot.PPL_ID as PPL_ID ,ot.PPL_NAME as PPL_NAME ,ot.S_TIME as S_TIME ,ot.E_TIME as E_TIME,tse.ORG_ID as ORG_ID from oa_tolerance ot left join tbl_sys_emp tse on ot.PPL_ID = tse.USERS_UID
where org_id='" + findOrgId + @"' and state='1' order by S_TIME desc";
DataTable dtLeave = FangYar.Common.MySqlHelper.QueryTable(sqlLeave);
//出入信息缓存
List listInOrOut = new List();
for (int i = 0; i < dtPacc.Rows.Count; i++)
{
listInOrOut.Add(new InOrOutMo()
{
NAME = dtPacc.Rows[i]["NAME"].ToString(),
org_id = dtPacc.Rows[i]["ORG_ID"].ToString(),
EXTEND2 = dtPacc.Rows[i]["EXTEND2"].ToString(),
USERS_UID = dtPacc.Rows[i]["USERS_UID"].ToString(),
START_TIME = dtPacc.Rows[i]["START_TIME"].ToString()
});
}
//请假公差信息缓存
List listLeaveAndAttendance = new List();
for (int i = 0; i < dtLeave.Rows.Count; i++)
{
listLeaveAndAttendance.Add(new LeaveAndAttendanceMo()
{
PPL_ID = dtLeave.Rows[i]["PPL_ID"].ToString(),
PPL_NAME = dtLeave.Rows[i]["PPL_NAME"].ToString(),
S_TIME = dtLeave.Rows[i]["S_TIME"].ToString(),
E_TIME = dtLeave.Rows[i]["E_TIME"].ToString(),
ORG_ID = dtLeave.Rows[i]["ORG_ID"].ToString()
});
}
List returnList = new List();
//遍历每日考勤任务
for (int i = 0; i < dtTask.Rows.Count; i++)
{
string attDate = dtTask.Rows[i]["ATTENDANCE_DATE"].ToString(); //日期
string upStartDate = dtTask.Rows[i]["UP_START_DATE"].ToString(); //开始时间
string upEndDate = dtTask.Rows[i]["UP_END_DATE"].ToString(); //结束时间
string usersUids = dtTask.Rows[i]["ATTENDANCE_USER_UID"].ToString(); //考勤人员UIDS
int numAtt = usersUids.Split(',').Length;
//筛选在开始时间和结束时间段内的人员出入数据,并根据UID进行分组统计
var aaa = listInOrOut.Where(p => Convert.ToDateTime(p.START_TIME) >= Convert.ToDateTime(upStartDate)
&& Convert.ToDateTime(p.START_TIME) <= Convert.ToDateTime(upEndDate)
).GroupBy(p => p.USERS_UID);
int a = aaa.Count();
//筛选在包含开始时间和结束时间段的人员请假公差数据,并根据UID进行分组统计
var bbb = listLeaveAndAttendance.Where(p => Convert.ToDateTime(p.S_TIME) <= Convert.ToDateTime(upStartDate)
&& Convert.ToDateTime(p.E_TIME) >= Convert.ToDateTime(upEndDate)
).GroupBy(p => p.PPL_ID);
int b = bbb.Count();
int numBeLate = numAtt - a - b;
returnList.Add(new staReturnDoorWeekMo
{
xDate = attDate,
yNum = numBeLate
});
}
List