You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
7075 lines
412 KiB
7075 lines
412 KiB
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
|
|
{
|
|
/// <summary>
|
|
/// CarHandler 的摘要说明
|
|
/// </summary>
|
|
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);
|
|
}
|
|
/// <summary>
|
|
/// 点名状态
|
|
/// </summary>
|
|
/// <param name="context"></param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
/// <summary>
|
|
/// 点名任务时间区域
|
|
/// </summary>
|
|
/// <param name="context"></param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 出操时间区域获取
|
|
/// </summary>
|
|
/// <param name="context"></param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
/// <summary>
|
|
/// 查询摄像头编码
|
|
/// </summary>
|
|
/// <param name="context"></param>
|
|
/// <returns></returns>
|
|
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<RollcallMo> list = new List<RollcallMo>();
|
|
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 出操统计数据查询
|
|
/// <summary>
|
|
/// 出操统计列表--只获取本机构
|
|
/// </summary>
|
|
/// <param name="context"></param>
|
|
/// <returns></returns>
|
|
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<RollcallMo> list = new List<RollcallMo>();
|
|
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;
|
|
}
|
|
|
|
// /// <summary>
|
|
// /// 出操统计列表
|
|
// /// </summary>
|
|
// /// <param name="context"></param>
|
|
// /// <returns></returns>
|
|
// 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<RollcallMo> list = new List<RollcallMo>();
|
|
// 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;
|
|
// }
|
|
/// <summary>
|
|
/// 出操统计详情
|
|
/// </summary>
|
|
/// <param name="context"></param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 删除人员
|
|
/// </summary>
|
|
/// <param name="context"></param>
|
|
/// <returns></returns>
|
|
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 考勤统计数据查询
|
|
/// <summary>
|
|
/// 考勤统计列表
|
|
/// </summary>
|
|
/// <param name="context"></param>
|
|
/// <returns></returns>
|
|
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<RollcallMo> list = new List<RollcallMo>();
|
|
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;
|
|
}
|
|
/// <summary>
|
|
/// 考勤统计详情
|
|
/// </summary>
|
|
/// <param name="context"></param>
|
|
/// <returns></returns>
|
|
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 门禁考勤统计数据查询
|
|
|
|
/// <summary>
|
|
/// 判断是否存在下级单位,若存在则展示下级机构,若不存在则展示本机构部门
|
|
/// </summary>
|
|
/// <param name="context"></param>
|
|
/// <returns></returns>
|
|
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<FangYar.Model.FIRE.FIRE_ORG> 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;
|
|
//}
|
|
|
|
|
|
/// <summary>
|
|
/// 考勤统计列表
|
|
/// </summary>
|
|
/// <param name="context"></param>
|
|
/// <returns></returns>
|
|
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<InOrOutMo> listInOrOut = new List<InOrOutMo>();
|
|
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<RollcallMo> list = new List<RollcallMo>();
|
|
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;
|
|
}
|
|
/// <summary>
|
|
/// 考勤统计列表
|
|
/// </summary>
|
|
/// <param name="context"></param>
|
|
/// <returns></returns>
|
|
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<OA_Attendance_Summary> list = Common.DataTableExtensions.ConvertDataTableToGenericList<OA_Attendance_Summary>(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<OA_Attendance_Summary> list = Common.DataTableExtensions.ConvertDataTableToGenericList<OA_Attendance_Summary>(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<OA_Attendance_Summary> list = Common.DataTableExtensions.ConvertDataTableToGenericList<OA_Attendance_Summary>(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
|
|
// /// <summary>
|
|
// /// 考勤统计列表
|
|
// /// </summary>
|
|
// /// <param name="context"></param>
|
|
// /// <returns></returns>
|
|
// 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<InOrOutMo> listInOrOut = new List<InOrOutMo>();
|
|
// 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<RollcallMo> list = new List<RollcallMo>();
|
|
// 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<InOrOutMo> listInOrOut = new List<InOrOutMo>();
|
|
// 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<RollcallMo> list = new List<RollcallMo>();
|
|
// 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
|
|
/// <summary>
|
|
/// 考勤统计列表
|
|
/// </summary>
|
|
/// <param name="context"></param>
|
|
/// <returns></returns>
|
|
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<OA_Attendance_Summary> list = Common.DataTableExtensions.ConvertDataTableToGenericList<OA_Attendance_Summary>(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
|
|
// /// <summary>
|
|
// /// 考勤统计列表
|
|
// /// </summary>
|
|
// /// <param name="context"></param>
|
|
// /// <returns></returns>
|
|
// 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<InOrOutMo> listInOrOut = new List<InOrOutMo>();
|
|
// 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<RollcallMo> list = new List<RollcallMo>();
|
|
// 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
|
|
|
|
|
|
/// <summary>
|
|
/// 考勤统计详情
|
|
/// </summary>
|
|
/// <param name="context"></param>
|
|
/// <returns></returns>
|
|
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
|
|
///// <summary>
|
|
///// 考勤统计详情
|
|
///// </summary>
|
|
///// <param name="context"></param>
|
|
///// <returns></returns>
|
|
//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<InOrOutMo> listInOrOut = new List<InOrOutMo>();
|
|
// 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
|
|
|
|
|
|
|
|
|
|
///// <summary>
|
|
///// 考勤统计详情
|
|
///// </summary>
|
|
///// <param name="context"></param>
|
|
///// <returns></returns>
|
|
//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<InOrOutMo> listInOrOut = new List<InOrOutMo>();
|
|
// 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;
|
|
//}
|
|
|
|
|
|
/// <summary>
|
|
/// 考勤统计 八天迟到统计
|
|
/// </summary>
|
|
/// <param name="context"></param>
|
|
/// <returns></returns>
|
|
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<InOrOutMo> listInOrOut = new List<InOrOutMo>();
|
|
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<LeaveAndAttendanceMo> listLeaveAndAttendance = new List<LeaveAndAttendanceMo>();
|
|
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<staReturnDoorWeekMo> returnList = new List<staReturnDoorWeekMo>();
|
|
|
|
//遍历每日考勤任务
|
|
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<Object> cccList = new List<Object>();
|
|
|
|
for (int i = 0; i < 8; i++)
|
|
{
|
|
cccList.Add(new
|
|
{
|
|
xDate = DateTime.Now.AddDays(-i).ToString("yyyy-MM-dd"),
|
|
yNum = returnList.Where(p => p.xDate == DateTime.Now.AddDays(-i).ToString("yyyy-MM-dd")).Sum(p => p.yNum)
|
|
});
|
|
}
|
|
|
|
returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":";
|
|
returnstr += FangYar.Common.JsonHelper.ToJson(cccList);
|
|
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 getDoorMonitor(HttpContext context)
|
|
{
|
|
string returnstr = "";
|
|
|
|
try
|
|
{
|
|
|
|
string ORG_ID = context.Request.Params["orgId"];
|
|
|
|
// 考勤时间查询
|
|
string sql4 = " SELECT * from oa_attendance_task WHERE ORG_ID='" + ORG_ID + "' and date_format(UP_START_DATE,'%Y-%m-%d') = date_format(now(),'%Y-%m-%d') ORDER BY UP_START_DATE LIMIT 1 ";
|
|
DataTable dt4 = FangYar.Common.MySqlHelper.QueryTable(sql4);
|
|
string UP_END_DATE = "";
|
|
if (dt4.Rows.Count > 0)
|
|
{
|
|
UP_END_DATE = dt4.Rows[0]["UP_END_DATE"] + "";
|
|
}
|
|
DateTime.TryParse(UP_END_DATE, out DateTime dtm1);
|
|
|
|
//请假、公差人员集合
|
|
List<string> list7 = new List<string>();
|
|
|
|
string sql5 = " SELECT * from oa_leave WHERE PPL_ID in (SELECT USERS_UID from tbl_sys_emp WHERE ORG_ID='" + ORG_ID +
|
|
"') and STATE='1' and S_TIME <='" + UP_END_DATE + "' and E_TIME >='" + UP_END_DATE + "' ";
|
|
DataTable dt5 = FangYar.Common.MySqlHelper.QueryTable(sql5);
|
|
|
|
string sql6 = " SELECT * from oa_tolerance WHERE PPL_ID in (SELECT USERS_UID from tbl_sys_emp WHERE ORG_ID='" + ORG_ID +
|
|
"') and STATE='1' and S_TIME <='" + UP_END_DATE + "' and E_TIME >='" + UP_END_DATE + "' ";
|
|
DataTable dt6 = FangYar.Common.MySqlHelper.QueryTable(sql6);
|
|
|
|
for (int i = 0; i < dt5.Rows.Count; i++)
|
|
{
|
|
list7.Add(dt5.Rows[i]["PPL_ID"] + "");
|
|
}
|
|
for (int i = 0; i < dt6.Rows.Count; i++)
|
|
{
|
|
list7.Add(dt6.Rows[i]["PPL_ID"] + "");
|
|
}
|
|
|
|
|
|
// 待考勤人员数据
|
|
string sql1 = @" WITH t1 as(
|
|
SELECT USERS_UID from oa_attendance_record WHERE ORG_ID = '" + ORG_ID + @"' and date_format(ATTENDANCE_DATE,'%Y-%m-%d') = date_format(now(), '%Y-%m-%d')
|
|
GROUP BY USERS_UID )
|
|
SELECT e.USERS_UID,IFNULL(e.DEPT_ID,'') DEPT_ID from t1 LEFT JOIN tbl_sys_emp e on t1.USERS_UID = e.USERS_UID WHERE ORG_ID = '" + ORG_ID + @"' and e.USERS_UID is not NULL ";
|
|
DataTable dt1 = FangYar.Common.MySqlHelper.QueryTable(sql1);
|
|
// 待识别人员账号信息缓存
|
|
List<UserCheckMo> list1 = new List<UserCheckMo>();
|
|
List<string> list11 = new List<string>();
|
|
// 循环添加待识别人员账号信息
|
|
for (int i = 0; i < dt1.Rows.Count; i++)
|
|
{
|
|
// 待识别人员账号信息
|
|
var USERS_UID = (dt1.Rows[i]["USERS_UID"] + "").Trim();
|
|
var DEPT_ID = (dt1.Rows[i]["DEPT_ID"] + "").Trim();
|
|
if (list7.Contains(USERS_UID))
|
|
{
|
|
continue;
|
|
}
|
|
list1.Add(new UserCheckMo() { DEPT_ID = DEPT_ID, USERS_UID = USERS_UID, });
|
|
list11.Add(USERS_UID);
|
|
}
|
|
|
|
|
|
// 组织机构下级
|
|
string sql2 = " SELECT * from fire_org WHERE pid='" + ORG_ID + "' and TYPE='1' or ORG_ID='" + ORG_ID + "' ORDER BY TYPE ";
|
|
DataTable dt2 = FangYar.Common.MySqlHelper.QueryTable(sql2);
|
|
List<OrgInfoMo> list2 = new List<OrgInfoMo>();
|
|
for (int i = 0; i < dt2.Rows.Count; i++)
|
|
{
|
|
list2.Add(new OrgInfoMo()
|
|
{
|
|
ORG_ID = dt2.Rows[i]["ORG_ID"] + "",
|
|
ORG_NAME = dt2.Rows[i]["ORG_NAME"] + "",
|
|
TYPE = dt2.Rows[i]["TYPE"] + "",
|
|
});
|
|
}
|
|
|
|
// 已经识别人员信息
|
|
string sql3 = @" with t1 as (
|
|
SELECT * from tbl_personaccess WHERE date_format(START_TIME,'%Y-%m-%d') = date_format(now(),'%Y-%m-%d')
|
|
and org_id='" + ORG_ID + @"'
|
|
and EXTEND3 in (SELECT EPUIP_ID from tbl_epuip_org WHERE ORG_ID='" + ORG_ID + @"' and IS_Attendance='1')
|
|
ORDER BY START_TIME DESC
|
|
)
|
|
SELECT e.USERS_UID,IFNULL(o.ORG_NAME,'机关') DEPT_NAME,e.EMP_NAME,t1.START_TIME, IFNULL(e.DEPT_ID,'') DEPT_ID,e.ORG_ID,t1.ADDR,t1.PICTURE_URL,t1.CLOSEUP_PIC_URL
|
|
from t1 LEFT JOIN tbl_sys_emp e on t1.EMPID=e.ID LEFT JOIN fire_org o on e.DEPT_ID=o.ORG_ID ORDER BY START_TIME DESC ";
|
|
DataTable dt3 = FangYar.Common.MySqlHelper.QueryTable(sql3);
|
|
List<UserFaceReadMo> list3 = new List<UserFaceReadMo>();
|
|
for (int i = 0; i < dt3.Rows.Count; i++)
|
|
{
|
|
list3.Add(new UserFaceReadMo()
|
|
{
|
|
ADDR = dt3.Rows[i]["ADDR"] + "",
|
|
CLOSEUP_PIC_URL = dt3.Rows[i]["CLOSEUP_PIC_URL"] + "",
|
|
DEPT_ID = dt3.Rows[i]["DEPT_ID"] + "",
|
|
EMP_NAME = dt3.Rows[i]["EMP_NAME"] + "",
|
|
ORG_ID = dt3.Rows[i]["ORG_ID"] + "",
|
|
PICTURE_URL = dt3.Rows[i]["PICTURE_URL"] + "",
|
|
START_TIME = dt3.Rows[i]["START_TIME"] + "",
|
|
USERS_UID = dt3.Rows[i]["USERS_UID"] + "",
|
|
DEPT_NAME = dt3.Rows[i]["DEPT_NAME"] + "",
|
|
});
|
|
}
|
|
|
|
|
|
// 人员总数
|
|
int userCount = list1.Count();
|
|
userCount = userCount < 1 ? 0 : userCount;
|
|
|
|
//// 正常考勤
|
|
//var list5 = list1.Where(p => Convert.ToDateTime(p.START_TIME) <= dtmUpE).GroupBy(p => p.USERS_UID).ToList();
|
|
|
|
//实到人员总数
|
|
var list33 = list3.Where(p => list11.Contains(p.USERS_UID));
|
|
var sdUserCount = list33.Where(p => p.ReadTime <= dtm1).GroupBy(p => p.USERS_UID).Count();
|
|
//实到人员比例
|
|
var sdbfb = sdUserCount * 100 / (userCount < 1 ? 1 : userCount);
|
|
|
|
//对应部门已经识别人员信息查询
|
|
|
|
List<DeptUserInfoMo> list5 = new List<DeptUserInfoMo>();
|
|
list5.Add(new DeptUserInfoMo()
|
|
{
|
|
DEPT_ID = ORG_ID,
|
|
DEPT_NAME = "机关",
|
|
ReadUserCount = list3.Where(p => string.IsNullOrEmpty(p.DEPT_ID) && p.ReadTime <= dtm1).GroupBy(p => p.USERS_UID).Count(),
|
|
UserCount = list1.Where(p => string.IsNullOrEmpty(p.DEPT_ID)).Count()
|
|
});
|
|
|
|
var itemList = list2.Where(p => p.TYPE == "1").ToList();
|
|
for (int i = 0; i < itemList.Count(); i++)
|
|
{
|
|
var itemObj = itemList[i];
|
|
var DEPT_ID = itemObj.ORG_ID;
|
|
list5.Add(new DeptUserInfoMo()
|
|
{
|
|
DEPT_ID = itemObj.ORG_ID,
|
|
DEPT_NAME = itemObj.ORG_NAME,
|
|
UserCount = list1.Where(p => p.DEPT_ID == DEPT_ID).Count(),
|
|
ReadUserCount = list3.Where(p => p.DEPT_ID == DEPT_ID && p.ReadTime <= dtm1).GroupBy(p => p.USERS_UID).Count(),
|
|
});
|
|
|
|
}
|
|
// 部门数据集合
|
|
string deptDataArr = "[";
|
|
// 部门数据背景集合
|
|
string deptDataBjArr = "[";
|
|
// 部门名称集合
|
|
string deptNameArr = "[";
|
|
for (int i = 0; i < list5.Count(); i++)
|
|
{
|
|
if (i > 0)
|
|
{
|
|
deptDataArr += ",";
|
|
deptNameArr += ",";
|
|
deptDataBjArr += ",";
|
|
}
|
|
deptDataArr += list5[i].ReadUserBfb;
|
|
deptDataBjArr += "100";
|
|
deptNameArr += "\"" + list5[i].DEPT_NAME + "\"";
|
|
}
|
|
deptDataArr += "]";
|
|
deptNameArr += "]";
|
|
deptDataBjArr += "]";
|
|
|
|
|
|
|
|
returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":{";
|
|
//人员总数
|
|
returnstr += "\"userCount\":" + userCount;
|
|
//实到人员总数
|
|
returnstr += ",\"sdUserCount\":" + sdUserCount;
|
|
//实到人员比例
|
|
returnstr += ",\"sdbfb\":" + sdbfb;
|
|
//部门数据集合
|
|
returnstr += ",\"deptDataArr\":" + deptDataArr;
|
|
//部门名称集合
|
|
returnstr += ",\"deptNameArr\":" + deptNameArr;
|
|
//部门数据背景集合
|
|
returnstr += ",\"deptDataBjArr\":" + deptDataBjArr;
|
|
//部门数据背景集合
|
|
returnstr += ",\"tbData\":" + FangYar.Common.JsonHelper.ToJson(dt3);
|
|
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 待识别人员信息
|
|
/// </summary>
|
|
public class UserCheckMo
|
|
{
|
|
/// <summary>
|
|
/// 用户ID
|
|
/// </summary>
|
|
public string USERS_UID { get; set; }
|
|
/// <summary>
|
|
/// 用户部门
|
|
/// </summary>
|
|
public string DEPT_ID { get; set; }
|
|
/// <summary>
|
|
/// 考勤日期
|
|
/// </summary>
|
|
public string ATTENDANCE_DATE { get; set; }
|
|
/// <summary>
|
|
/// 考勤人员名称
|
|
/// </summary>
|
|
public string EMP_NAME { get; set; }
|
|
/// <summary>
|
|
/// 考勤人员手机号
|
|
/// </summary>
|
|
public string EMP_MOBILE { get; set; }
|
|
/// <summary>
|
|
/// 考勤人员编号
|
|
/// </summary>
|
|
public string EMP_NUM { get; set; }
|
|
/// <summary>
|
|
/// 考勤人员身份证号
|
|
/// </summary>
|
|
public string IDNUMBER { get; set; }
|
|
|
|
/// <summary>
|
|
/// 考勤上午开始人脸识别状态:0、未识别;1、已经识别;2、迟到
|
|
/// </summary>
|
|
public int KQ_FACE_READ_START_STATE_AM { get; set; }
|
|
|
|
/// <summary>
|
|
/// 考勤上午最后人脸识别状态:0、未识别;1、已经识别;2、早退
|
|
/// </summary>
|
|
public int KQ_FACE_READ_END_STATE_AM { get; set; }
|
|
|
|
/// <summary>
|
|
/// 考勤下午开始人脸识别状态:0、未识别;1、已经识别;2、迟到
|
|
/// </summary>
|
|
public int KQ_FACE_READ_START_STATE_PM { get; set; }
|
|
|
|
/// <summary>
|
|
/// 考勤下午最后人脸识别状态:0、未识别;1、已经识别;2、早退
|
|
/// </summary>
|
|
public int KQ_FACE_READ_END_STATE_PM { get; set; }
|
|
|
|
/// <summary>
|
|
/// 考勤上午人脸识别开始时间
|
|
/// </summary>
|
|
public DateTime? KQ_FACE_READ_START_TIME_AM { get; set; }
|
|
|
|
/// <summary>
|
|
/// 考勤上午人脸识别最后时间
|
|
/// </summary>
|
|
public DateTime? KQ_FACE_READ_END_TIME_AM { get; set; }
|
|
|
|
/// <summary>
|
|
/// 考勤下午人脸识别开始时间
|
|
/// </summary>
|
|
public DateTime? KQ_FACE_READ_START_TIME_PM { get; set; }
|
|
|
|
/// <summary>
|
|
/// 考勤下午人脸识别最后时间
|
|
/// </summary>
|
|
public DateTime? KQ_FACE_READ_END_TIME_PM { get; set; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// 机构信息模型
|
|
/// </summary>
|
|
public class OrgInfoMo
|
|
{
|
|
/// <summary>
|
|
/// 机构ID
|
|
/// </summary>
|
|
public string ORG_ID { get; set; }
|
|
/// <summary>
|
|
/// 机构名称
|
|
/// </summary>
|
|
public string ORG_NAME { get; set; }
|
|
/// <summary>
|
|
/// 机构类型:0机构,1部门
|
|
/// </summary>
|
|
public string TYPE { get; set; }
|
|
}
|
|
/// <summary>
|
|
/// 人脸识别数据
|
|
/// </summary>
|
|
public class UserFaceReadMo
|
|
{
|
|
/// <summary>
|
|
/// 用户ID
|
|
/// </summary>
|
|
public string USERS_UID { get; set; }
|
|
/// <summary>
|
|
/// 用户名称
|
|
/// </summary>
|
|
public string EMP_NAME { get; set; }
|
|
/// <summary>
|
|
/// 识别时间
|
|
/// </summary>
|
|
public string START_TIME { get; set; }
|
|
/// <summary>
|
|
/// 识别时间转字符串
|
|
/// </summary>
|
|
public DateTime ReadTime { get { try { DateTime.TryParse(START_TIME, out DateTime retDtm); return retDtm; } catch (Exception ex) { return DateTime.MinValue; } } }
|
|
/// <summary>
|
|
/// 识别日期
|
|
/// </summary>
|
|
public string ReadTimeDay { get { return ReadTime.ToString("yyyy-MM-dd"); } }
|
|
/// <summary>
|
|
/// 部门ID
|
|
/// </summary>
|
|
public string DEPT_ID { get; set; }
|
|
/// <summary>
|
|
/// 机构名称
|
|
/// </summary>
|
|
public string DEPT_NAME { get; set; }
|
|
/// <summary>
|
|
/// 机构ID
|
|
/// </summary>
|
|
public string ORG_ID { get; set; }
|
|
/// <summary>
|
|
/// 设备地址
|
|
/// </summary>
|
|
public string ADDR { get; set; }
|
|
/// <summary>
|
|
/// 图片地址
|
|
/// </summary>
|
|
public string PICTURE_URL { get; set; }
|
|
/// <summary>
|
|
/// 图片地址详细
|
|
/// </summary>
|
|
public string CLOSEUP_PIC_URL { get; set; }
|
|
|
|
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 返回部门用户信息详情
|
|
/// </summary>
|
|
public class DeptUserInfoMo
|
|
{
|
|
/// <summary>
|
|
/// 部门ID
|
|
/// </summary>
|
|
public string DEPT_ID { get; set; }
|
|
/// <summary>
|
|
/// 部门名称
|
|
/// </summary>
|
|
public string DEPT_NAME { get; set; }
|
|
/// <summary>
|
|
/// 人员总数
|
|
/// </summary>
|
|
public int UserCount { get; set; }
|
|
/// <summary>
|
|
/// 识别人员数
|
|
/// </summary>
|
|
public int ReadUserCount { get; set; }
|
|
/// <summary>
|
|
/// 识别人员百分比
|
|
/// </summary>
|
|
public int ReadUserBfb { get { return UserCount > 0 ? ReadUserCount * 100 / UserCount : 0; } }
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 考勤任务
|
|
/// </summary>
|
|
public class AttendanceTaskMo
|
|
{
|
|
/// <summary>
|
|
/// 考勤日期
|
|
/// </summary>
|
|
public string ATTENDANCE_DATE { get; set; }
|
|
/// <summary>
|
|
/// 上午上班打卡开始时间
|
|
/// </summary>
|
|
public string UP_START_DATE { get; set; }
|
|
/// <summary>
|
|
/// 上午上班打卡结束时间
|
|
/// </summary>
|
|
public string UP_END_DATE { get; set; }
|
|
/// <summary>
|
|
/// 上午下班打卡开始时间
|
|
/// </summary>
|
|
public string DOWN_START_DATE { get; set; }
|
|
/// <summary>
|
|
/// 上午下班打卡结束时间
|
|
/// </summary>
|
|
public string DOWN_END_DATE { get; set; }
|
|
/// <summary>
|
|
/// 下午上班打卡开始时间
|
|
/// </summary>
|
|
public string UP_START_DATE2 { get; set; }
|
|
/// <summary>
|
|
/// 下午上班打卡结束时间
|
|
/// </summary>
|
|
public string UP_END_DATE2 { get; set; }
|
|
/// <summary>
|
|
/// 下午下班打卡开始时间
|
|
/// </summary>
|
|
public string DOWN_START_DATE2 { get; set; }
|
|
/// <summary>
|
|
/// 下午下班打卡结束时间
|
|
/// </summary>
|
|
public string DOWN_END_DATE2 { get; set; }
|
|
|
|
|
|
/// <summary>
|
|
/// 上班超过XX分钟记为迟到
|
|
/// </summary>
|
|
public string ATT_RULE1 { get; set; }
|
|
/// <summary>
|
|
/// 迟到超过XX分钟记为旷工
|
|
/// </summary>
|
|
public string ATT_RULE2 { get; set; }
|
|
/// <summary>
|
|
/// 下班提前XX分钟记为早退
|
|
/// </summary>
|
|
public string ATT_RULE3 { get; set; }
|
|
/// <summary>
|
|
/// 早退超过XX分钟记为旷工
|
|
/// </summary>
|
|
public string ATT_RULE4 { get; set; }
|
|
/// <summary>
|
|
/// 下班结束XX分钟后签出记为加班
|
|
/// </summary>
|
|
public string ATT_RULE5 { get; set; }
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
#region 实体类
|
|
/// <summary>
|
|
/// 出入信息汇总
|
|
/// </summary>
|
|
public class OA_Attendance_Summary
|
|
{
|
|
/// <summary>
|
|
/// 组织机构ID
|
|
/// </summary>
|
|
public string ORG_ID { get; set; }
|
|
/// <summary>
|
|
/// 用户登录账号
|
|
/// </summary>
|
|
public string USERS_UID { get; set; }
|
|
/// <summary>
|
|
/// 上午上班人脸识别状态:0、未识别;1、正常识别;2、迟到/早退
|
|
/// </summary>
|
|
public long UP_STATE_AM { get; set; }
|
|
/// <summary>
|
|
/// 上午下班人脸识别状态:0、未识别;1、正常识别;2、迟到/早退
|
|
/// </summary>
|
|
public long DOWN_STATE_AM { get; set; }
|
|
/// <summary>
|
|
/// 下午上班人脸识别状态:0、未识别;1、正常识别;2、迟到/早退
|
|
/// </summary>
|
|
public long UP_STATE_PM { get; set; }
|
|
/// <summary>
|
|
/// 下午下班人脸识别状态:0、未识别;1、正常识别;2、迟到/早退
|
|
/// </summary>
|
|
public long DOWN_STATE_PM { get; set; }
|
|
/// <summary>
|
|
/// 人员工作状态(上午上班):0、未识别;1、已经识别;2、迟到/早退;3、请假;4、公差;
|
|
/// </summary>
|
|
public long WORKSTATE { get; set; }
|
|
/// <summary>
|
|
/// 人员工作状态(上午下班):0、未识别;1、已经识别;2、迟到/早退;3、请假;4、公差;
|
|
/// </summary>
|
|
public long WORKSTATE_DOWN { get; set; }
|
|
/// <summary>
|
|
/// 人员工作状态(下午上班):0、未识别;1、已经识别;2、迟到/早退;3、请假;4、公差;
|
|
/// </summary>
|
|
public long WORKSTATE_PM { get; set; }
|
|
/// <summary>
|
|
/// 人员工作状态(下午下班):0、未识别;1、已经识别;2、迟到/早退;3、请假;4、公差;
|
|
/// </summary>
|
|
public long WORKSTATE_PM_DOWN { get; set; }
|
|
/// <summary>
|
|
/// 上午上班打卡开始日期时间
|
|
/// </summary>
|
|
public string UP_START_DATE { get; set; }
|
|
/// <summary>
|
|
/// 上午上班打卡结束日期时间
|
|
/// </summary>
|
|
public string UP_END_DATE { get; set; }
|
|
/// <summary>
|
|
/// 上午下班打卡开始日期时间
|
|
/// </summary>
|
|
public string DOWN_START_DATE { get; set; }
|
|
/// <summary>
|
|
/// 上午下班打卡结束日期时间
|
|
/// </summary>
|
|
public string DOWN_END_DATE { get; set; }
|
|
/// <summary>
|
|
/// 下午上班打卡开始日期时间
|
|
/// </summary>
|
|
public string UP_START_DATE2 { get; set; }
|
|
/// <summary>
|
|
/// 下午上班打卡结束日期时间
|
|
/// </summary>
|
|
public string UP_END_DATE2 { get; set; }
|
|
/// <summary>
|
|
/// 下午下班打卡开始日期时间
|
|
/// </summary>
|
|
public string DOWN_START_DATE2 { get; set; }
|
|
/// <summary>
|
|
/// 下午下班打卡结束日期时间
|
|
/// </summary>
|
|
public string DOWN_END_DATE2 { get; set; }
|
|
/// <summary>
|
|
/// 上午上班打卡时间
|
|
/// </summary>
|
|
|
|
public DateTime? kqFaceReadStartTimeAm { get; set; }
|
|
/// <summary>
|
|
/// 上午下班打卡时间
|
|
/// </summary>
|
|
public DateTime? kqFaceReadEndTimeAm { get; set; }
|
|
/// <summary>
|
|
/// 下午上班打卡时间
|
|
/// </summary>
|
|
public DateTime? kqFaceReadStartTimePm { get; set; }
|
|
/// <summary>
|
|
/// 下午下班打卡时间
|
|
/// </summary>
|
|
public DateTime? kqFaceReadEndTimePm { get; set; }
|
|
}
|
|
/// <summary>
|
|
/// 点名信息实体类
|
|
/// </summary>
|
|
public class RollcallMo
|
|
{
|
|
/// <summary>
|
|
/// 组织机构ID
|
|
/// </summary>
|
|
public string orgId { get; set; }
|
|
/// <summary>
|
|
/// 出操任务ID
|
|
/// </summary>
|
|
public string TASK_ID { get; set; }
|
|
/// <summary>
|
|
/// 标记是否出操:0、出操;1、未出操
|
|
/// </summary>
|
|
public string MARK_IS_DRILL { get; set; }
|
|
/// <summary>
|
|
/// 未出操说明
|
|
/// </summary>
|
|
public string MARK_REMARK { get; set; }
|
|
/// <summary>
|
|
/// 时间类型:1、早晨;2、上午;3、中午;4、下午;5、晚上
|
|
/// </summary>
|
|
public string timeType { get; set; }
|
|
/// <summary>
|
|
/// 用户登录账号
|
|
/// </summary>
|
|
public string userId { get; set; }
|
|
/// <summary>
|
|
/// 人脸识别状态:0、未识别;1、正常识别;2、迟到/早退
|
|
/// </summary>
|
|
public string state { get; set; }
|
|
/// <summary>
|
|
/// 人脸识别状态:0、未识别;1、正常识别;2、迟到/早退
|
|
/// </summary>
|
|
public string state_pm { get; set; }
|
|
/// <summary>
|
|
/// 人员工作状态:0、未识别;1、已经识别;2、迟到/早退;3、请假;4、公差;
|
|
/// </summary>
|
|
public string WORKSTATE { get; set; }
|
|
/// <summary>
|
|
/// 人员工作状态:0、未识别;1、已经识别;2、迟到/早退;3、请假;4、公差;
|
|
/// </summary>
|
|
public string WORKSTATE_PM { get; set; }
|
|
/// <summary>
|
|
/// 上午上班打卡开始日期时间
|
|
/// </summary>
|
|
public string UP_START_DATE { get; set; }
|
|
/// <summary>
|
|
/// 上午上班打卡结束日期时间
|
|
/// </summary>
|
|
public string UP_END_DATE { get; set; }
|
|
/// <summary>
|
|
/// 上午下班打卡开始日期时间
|
|
/// </summary>
|
|
public string DOWN_START_DATE { get; set; }
|
|
/// <summary>
|
|
/// 上午下班打卡结束日期时间
|
|
/// </summary>
|
|
public string DOWN_END_DATE { get; set; }
|
|
/// <summary>
|
|
/// 下午上班打卡开始日期时间
|
|
/// </summary>
|
|
public string UP_START_DATE2 { get; set; }
|
|
/// <summary>
|
|
/// 下午上班打卡结束日期时间
|
|
/// </summary>
|
|
public string UP_END_DATE2 { get; set; }
|
|
/// <summary>
|
|
/// 下午下班打卡开始日期时间
|
|
/// </summary>
|
|
public string DOWN_START_DATE2 { get; set; }
|
|
/// <summary>
|
|
/// 下午下班打卡结束日期时间
|
|
/// </summary>
|
|
public string DOWN_END_DATE2 { get; set; }
|
|
|
|
|
|
|
|
}
|
|
/// <summary>
|
|
/// 出入信息实体类
|
|
/// </summary>
|
|
public class InOrOutMo
|
|
{
|
|
/// <summary>
|
|
/// 人员名称
|
|
/// </summary>
|
|
public string NAME { get; set; }
|
|
/// <summary>
|
|
/// 身份证号
|
|
/// </summary>
|
|
public string EXTEND2 { get; set; }
|
|
/// <summary>
|
|
/// 出入时间
|
|
/// </summary>
|
|
public string START_TIME { get; set; }
|
|
/// <summary>
|
|
/// 用户信息ID
|
|
/// </summary>
|
|
public string USERS_UID { get; set; }
|
|
/// <summary>
|
|
/// 组织机构ID
|
|
/// </summary>
|
|
public string org_id { get; set; }
|
|
/// <summary>
|
|
/// 图片路径
|
|
/// </summary>
|
|
public string CLOSEUP_PIC_URL { get; set; }
|
|
}
|
|
/// <summary>
|
|
/// 请假公差信息
|
|
/// </summary>
|
|
public class LeaveAndAttendanceMo
|
|
{
|
|
/// <summary>
|
|
/// 人员UID
|
|
/// </summary>
|
|
public string PPL_ID { get; set; }
|
|
/// <summary>
|
|
/// 随行人
|
|
/// </summary>
|
|
public string ACC_PPL { get; set; }
|
|
/// <summary>
|
|
/// 人员姓名
|
|
/// </summary>
|
|
public string PPL_NAME { get; set; }
|
|
/// <summary>
|
|
/// 开始时间
|
|
/// </summary>
|
|
public string S_TIME { get; set; }
|
|
|
|
/// <summary>
|
|
/// 开始时间时间类型
|
|
/// </summary>
|
|
public DateTime S_TIME_Date { get { try { DateTime.TryParse(S_TIME, out DateTime retDtm); return retDtm; } catch (Exception ex) { return DateTime.MinValue; } } }
|
|
/// <summary>
|
|
/// 结束时间
|
|
/// </summary>
|
|
public string E_TIME { get; set; }
|
|
/// <summary>
|
|
/// 结束时间时间类型
|
|
/// </summary>
|
|
public DateTime E_TIME_Date { get { try { DateTime.TryParse(E_TIME, out DateTime retDtm); return retDtm; } catch (Exception ex) { return DateTime.MinValue; } } }
|
|
/// <summary>
|
|
/// 组织机构ID
|
|
/// </summary>
|
|
public string ORG_ID { get; set; }
|
|
}
|
|
public class staReturnDoorWeekMo
|
|
{
|
|
/// <summary>
|
|
/// 日期
|
|
/// </summary>
|
|
public string xDate { get; set; }
|
|
/// <summary>
|
|
/// 迟到人数
|
|
/// </summary>
|
|
public int yNum { get; set; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// 西藏总队机关考勤统计查询
|
|
/// </summary>
|
|
/// <param name="context"></param>
|
|
/// <returns></returns>
|
|
private string getAttendanceStatisticsXZZDJG(HttpContext context)
|
|
{
|
|
string returnstr = "";
|
|
var m = new UserCheckMo();
|
|
try
|
|
{
|
|
string ORG_ID = context.Request.Params["OrgId"];
|
|
string selTreeID = context.Request.Params["selTreeID"];
|
|
string selType = context.Request.Params["selType"];
|
|
|
|
string DeptID = context.Request.Params["DeptID"];
|
|
string IsAdmin = context.Request.Params["IsAdmin"];
|
|
|
|
//判断是否管理员账号,如果不是管理员则只查询本部门数据
|
|
if (IsAdmin != "1")
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(DeptID))
|
|
{
|
|
selTreeID = DeptID;
|
|
selType = "dept";
|
|
|
|
}
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(selTreeID) && selType == "org")
|
|
{
|
|
ORG_ID = selTreeID;
|
|
}
|
|
else if (!string.IsNullOrEmpty(selTreeID) && selType == "dept")
|
|
{
|
|
string sqlP = "select PID from fire_org where org_id='" + selTreeID + "'";
|
|
DataTable dtP = FangYar.Common.MySqlHelper.QueryTable(sqlP);
|
|
ORG_ID = dtP.Rows[0]["PID"].ToString();
|
|
}
|
|
|
|
//判断是否和上级营区同驻地
|
|
string pOrgId = "";
|
|
|
|
try
|
|
{
|
|
//查询当前单位是否和上级单位同一驻地
|
|
string sqlStr1 = " SELECT IS_TOP_CAMP,PID from fire_org WHERE ORG_ID = '" + ORG_ID + "' ";
|
|
|
|
var dto = Common.MySqlHelper.QueryTable(sqlStr1);
|
|
|
|
if (dto.Rows[0]["IS_TOP_CAMP"] + "" == "1")
|
|
{
|
|
pOrgId = Common.WebCommonUtil.GetOrgIdUpLevelToDownLevel(dto.Rows[0]["PID"] + "");
|
|
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
string startTime = context.Request.Params["startTime"] + " 00:00:00";
|
|
string endTime = context.Request.Params["endTime"] + " 23:59:59";
|
|
string keywords = context.Request.Params["keywords"];
|
|
|
|
//信息查询状态
|
|
string attendanceState = context.Request.Params["attendanceState"];
|
|
|
|
|
|
if (string.IsNullOrWhiteSpace(startTime) || string.IsNullOrWhiteSpace(endTime))
|
|
{
|
|
startTime = DateTime.Now.AddMonths(-1).ToString("yyyy-MM-dd") + " 00:00:00";
|
|
endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 23:59:59";
|
|
}
|
|
|
|
var newStartTime = Convert.ToDateTime(startTime).AddHours(-1).ToString("yyyy-MM-dd") + " 23:59:59";
|
|
var newEndTime = Convert.ToDateTime(endTime).AddHours(1).ToString("yyyy-MM-dd") + " 00:00:00";
|
|
//请假信息查询
|
|
string sql5 = " SELECT * from oa_leave WHERE PPL_ID in (SELECT USERS_UID from tbl_sys_emp WHERE ORG_ID='" + ORG_ID +
|
|
"') and STATE='1' and ('" + newStartTime + "' BETWEEN S_TIME and E_TIME or '" + newEndTime + "' BETWEEN S_TIME and E_TIME " +
|
|
" or S_TIME BETWEEN '" + newStartTime + "' and '" + newEndTime + "' or E_TIME BETWEEN '" + newStartTime + "' and '" + newEndTime + "') ";
|
|
DataTable dt5 = FangYar.Common.MySqlHelper.QueryTable(sql5);
|
|
//请假信息集合
|
|
List<LeaveAndAttendanceMo> list8 = Common.DataTableExtensions.ConvertDataTableToGenericList<LeaveAndAttendanceMo>(dt5);
|
|
|
|
|
|
//公差信息查询
|
|
string sql6 = " SELECT * from oa_tolerance WHERE PPL_ID in (SELECT USERS_UID from tbl_sys_emp WHERE (ORG_ID='" + ORG_ID +
|
|
"' or ORG_ID = '" + pOrgId + "' ) ) and STATE='1' and ('" + newStartTime + "' BETWEEN S_TIME and E_TIME or '" + newEndTime + "' BETWEEN S_TIME and E_TIME " +
|
|
" or S_TIME BETWEEN '" + newStartTime + "' and '" + newEndTime + "' or E_TIME BETWEEN '" + newStartTime + "' and '" + newEndTime + "' ) ";
|
|
DataTable dt6 = FangYar.Common.MySqlHelper.QueryTable(sql6);
|
|
|
|
//公差信息集合
|
|
List<LeaveAndAttendanceMo> list9 = Common.DataTableExtensions.ConvertDataTableToGenericList<LeaveAndAttendanceMo>(dt6);
|
|
|
|
|
|
|
|
//休假信息查询
|
|
string sqlXj = " SELECT e.USERS_UID PPL_ID,e.EMP_NAME PPL_NAME,v.S_TIME S_TIME,v.E_TIME E_TIME,e.ORG_ID ORG_ID " +
|
|
" from oa_vacation v LEFT JOIN tbl_sys_emp e on v.PPL_ID=e.ID WHERE e.ORG_ID = '" + ORG_ID + "' and Info_State ='1' " +
|
|
" and ('" + newStartTime + "' BETWEEN v.S_TIME and v.E_TIME or '" + newEndTime + "' BETWEEN v.S_TIME and v.E_TIME " +
|
|
" or v.S_TIME BETWEEN '" + newStartTime + "' and '" + newEndTime + "' or v.E_TIME BETWEEN '" + newStartTime + "' and '" + newEndTime + "' ) ";
|
|
DataTable dtXJ = FangYar.Common.MySqlHelper.QueryTable(sqlXj);
|
|
|
|
//休假信息集合
|
|
List<LeaveAndAttendanceMo> listXj = Common.DataTableExtensions.ConvertDataTableToGenericList<LeaveAndAttendanceMo>(dtXJ);
|
|
|
|
|
|
|
|
// 待考勤人员数据
|
|
string sql1 = @" WITH t1 as(
|
|
SELECT USERS_UID,ATTENDANCE_DATE,KQ_FACE_READ_START_STATE_AM,KQ_FACE_READ_END_STATE_AM,KQ_FACE_READ_START_STATE_PM,KQ_FACE_READ_END_STATE_PM,KQ_FACE_READ_START_IMG_AM,KQ_FACE_READ_End_IMG_AM,KQ_FACE_READ_START_IMG_PM,KQ_FACE_READ_End_IMG_PM,KQ_FACE_READ_START_TIME_AM,KQ_FACE_READ_END_TIME_AM,KQ_FACE_READ_START_TIME_PM,KQ_FACE_READ_END_TIME_PM from oa_attendance_record WHERE ORG_ID = '" + ORG_ID + @"' and ATTENDANCE_DATE BETWEEN '" + startTime.Split(' ')[0] + "' and '" + endTime.Split(' ')[0] + @"' )
|
|
SELECT e.USERS_UID, if(LENGTH(IFNULL(e.DEPT_ID,''))<1,e.ORG_ID,e.DEPT_ID) DEPT_ID,t1.ATTENDANCE_DATE,e.EMP_NAME,e.EMP_MOBILE,e.EMP_NUM,e.IDNUMBER,t1.KQ_FACE_READ_START_STATE_AM,t1.KQ_FACE_READ_END_STATE_AM,t1.KQ_FACE_READ_START_STATE_PM,t1.KQ_FACE_READ_END_STATE_PM,t1.KQ_FACE_READ_START_IMG_AM,t1.KQ_FACE_READ_End_IMG_AM,t1.KQ_FACE_READ_START_IMG_PM,t1.KQ_FACE_READ_End_IMG_PM,t1.KQ_FACE_READ_START_TIME_AM,t1.KQ_FACE_READ_END_TIME_AM,t1.KQ_FACE_READ_START_TIME_PM,t1.KQ_FACE_READ_END_TIME_PM
|
|
from t1 LEFT JOIN tbl_sys_emp e on t1.USERS_UID = e.USERS_UID WHERE ORG_ID = '" + ORG_ID +
|
|
@"' and e.USERS_UID is not NULL ";
|
|
DataTable dt1 = FangYar.Common.MySqlHelper.QueryTable(sql1);
|
|
// 待识别人员账号信息缓存
|
|
List<UserCheckMo> list1 = Common.DataTableExtensions.ConvertDataTableToGenericList<UserCheckMo>(dt1);
|
|
|
|
|
|
|
|
// 组织机构下级
|
|
string sql2 = " SELECT * from fire_org WHERE pid='" + ORG_ID + "' and TYPE='1' or ORG_ID='" + ORG_ID + "' ORDER BY TYPE ";
|
|
DataTable dt2 = FangYar.Common.MySqlHelper.QueryTable(sql2);
|
|
List<OrgInfoMo> list2 = new List<OrgInfoMo>();
|
|
|
|
for (int i = 0; i < dt2.Rows.Count; i++)
|
|
{
|
|
list2.Add(new OrgInfoMo()
|
|
{
|
|
ORG_ID = dt2.Rows[i]["ORG_ID"] + "",
|
|
ORG_NAME = dt2.Rows[i]["ORG_NAME"] + "",
|
|
TYPE = dt2.Rows[i]["TYPE"] + "",
|
|
});
|
|
}
|
|
|
|
|
|
//获取时间段内考勤任务
|
|
string sqlTask = @"SELECT* from oa_attendance_task where org_id = '" + ORG_ID + @"' and ATTENDANCE_DATE BETWEEN '" + startTime.Split(' ')[0] + @"' and '" + endTime.Split(' ')[0] + @"'order by task_name desc";
|
|
DataTable dtTask = FangYar.Common.MySqlHelper.QueryTable(sqlTask);
|
|
List<AttendanceTaskMo> listTask = Common.DataTableExtensions.ConvertDataTableToGenericList<AttendanceTaskMo>(dtTask);
|
|
|
|
|
|
List<AttendanceStatisticsXZZDJGMo> retList = new List<AttendanceStatisticsXZZDJGMo>();
|
|
|
|
//日期转换
|
|
DateTime.TryParse(startTime, out DateTime sDtm);
|
|
DateTime.TryParse(endTime, out DateTime eDtm);
|
|
//
|
|
int days = (eDtm - sDtm).Days + 1;
|
|
|
|
|
|
|
|
foreach (var item in list1)
|
|
{
|
|
m = item;
|
|
if (item.IDNUMBER == "510824198803012779" && item.ATTENDANCE_DATE == "2022-08-04")
|
|
{
|
|
Console.WriteLine("");
|
|
}
|
|
//姓名查询条件
|
|
if (!string.IsNullOrWhiteSpace(keywords) && !item.EMP_NAME.Contains(keywords)) continue;
|
|
//机构查询条件
|
|
if (!string.IsNullOrWhiteSpace(selTreeID) && ORG_ID != selTreeID && item.DEPT_ID != selTreeID) continue;
|
|
//组织机构信息
|
|
var orgObj = list2.FirstOrDefault(p => p.ORG_ID == item.DEPT_ID);
|
|
|
|
|
|
var dayStr = item.ATTENDANCE_DATE;
|
|
|
|
var listTaskRet = listTask.Where(p => p.ATTENDANCE_DATE == dayStr).ToList();
|
|
|
|
//var d1 = Convert.ToDateTime(dayStr + " 07:30:00");
|
|
//var d2 = Convert.ToDateTime(dayStr + " 09:45:00");
|
|
|
|
//var d3 = Convert.ToDateTime(dayStr + " 12:50:00");
|
|
//var d4 = Convert.ToDateTime(dayStr + " 13:30:00");
|
|
|
|
//var d5 = Convert.ToDateTime(dayStr + " 14:30:00");
|
|
//var d6 = Convert.ToDateTime(dayStr + " 15:45:00");
|
|
|
|
//var d7 = Convert.ToDateTime(dayStr + " 18:20:00");
|
|
//var d8 = Convert.ToDateTime(dayStr + " 19:30:00");
|
|
DateTime? d1 = null;
|
|
DateTime? d2 = null;
|
|
|
|
DateTime? d3 = null;
|
|
DateTime? d4 = null;
|
|
|
|
DateTime? d5 = null;
|
|
DateTime? d6 = null;
|
|
|
|
DateTime? d7 = null;
|
|
DateTime? d8 = null;
|
|
if (listTaskRet.Count > 0)
|
|
{
|
|
if (!string.IsNullOrEmpty(listTaskRet[0].UP_START_DATE))
|
|
{
|
|
d1 = Convert.ToDateTime(listTaskRet[0].UP_START_DATE);
|
|
}
|
|
if (!string.IsNullOrEmpty(listTaskRet[0].UP_END_DATE))
|
|
{
|
|
d2 = Convert.ToDateTime(listTaskRet[0].UP_END_DATE);
|
|
}
|
|
if (!string.IsNullOrEmpty(listTaskRet[0].DOWN_START_DATE))
|
|
{
|
|
d3 = Convert.ToDateTime(listTaskRet[0].DOWN_START_DATE);
|
|
}
|
|
if (!string.IsNullOrEmpty(listTaskRet[0].DOWN_END_DATE))
|
|
{
|
|
d4 = Convert.ToDateTime(listTaskRet[0].DOWN_END_DATE);
|
|
}
|
|
if (!string.IsNullOrEmpty(listTaskRet[0].UP_START_DATE2))
|
|
{
|
|
d5 = Convert.ToDateTime(listTaskRet[0].UP_START_DATE2);
|
|
}
|
|
if (!string.IsNullOrEmpty(listTaskRet[0].UP_END_DATE2))
|
|
{
|
|
d6 = Convert.ToDateTime(listTaskRet[0].UP_END_DATE2);
|
|
}
|
|
if (!string.IsNullOrEmpty(listTaskRet[0].DOWN_START_DATE2))
|
|
{
|
|
d7 = Convert.ToDateTime(listTaskRet[0].DOWN_START_DATE2);
|
|
}
|
|
if (!string.IsNullOrEmpty(listTaskRet[0].DOWN_END_DATE2))
|
|
{
|
|
d8 = Convert.ToDateTime(listTaskRet[0].DOWN_END_DATE2);
|
|
}
|
|
}
|
|
double lateHours1 = 0; //迟到时长
|
|
double LeaveEarlyHours1 = 0;//早退时长
|
|
double workOvertimeHours1 = 0;//加班时长
|
|
double absenteeismHours1 = 0;//旷工时长
|
|
|
|
double lateHours2 = 0; //迟到时长
|
|
double LeaveEarlyHours2 = 0;//早退时长
|
|
double workOvertimeHours2 = 0;//加班时长
|
|
double absenteeismHours2 = 0;//旷工时长
|
|
|
|
bool isAbsenteeism1 = false; //上午打卡旷工
|
|
bool isAbsenteeism2 = false; //下午打卡旷工
|
|
|
|
|
|
//上午是否签入
|
|
string InStart = "未签入";
|
|
if (d1.HasValue && d2.HasValue)
|
|
{
|
|
|
|
|
|
//判断是否存在请假信息
|
|
var InStartl1 = list8.Where(p => (p.PPL_ID == item.USERS_UID || p.ACC_PPL.Contains(item.USERS_UID)) && p.S_TIME_Date <= d2 && p.E_TIME_Date >= d2).FirstOrDefault();
|
|
//请假
|
|
if (InStartl1 != null)
|
|
{
|
|
InStart = "请假";
|
|
}
|
|
else
|
|
{
|
|
//判断是否存在公差信息
|
|
var InStartl2 = list9.Where(p => (p.PPL_ID == item.USERS_UID || p.ACC_PPL.Contains(item.USERS_UID)) && p.S_TIME_Date <= d2 && p.E_TIME_Date >= d2).FirstOrDefault();
|
|
//公差
|
|
if (InStartl2 != null)
|
|
{
|
|
InStart = "公差";
|
|
}
|
|
else
|
|
{
|
|
//判断是否存在休假信息
|
|
var InStartlXj = listXj.Where(p => p.PPL_ID == item.USERS_UID && p.S_TIME_Date <= d2 && p.E_TIME_Date >= d2).FirstOrDefault();
|
|
if (InStartlXj != null)
|
|
{
|
|
InStart = "休假";
|
|
}
|
|
else
|
|
{
|
|
//判断上午考勤状态 未识别
|
|
if (item.KQ_FACE_READ_START_STATE_AM == 1)
|
|
{
|
|
InStart = item.KQ_FACE_READ_START_TIME_AM.HasValue ? item.KQ_FACE_READ_START_TIME_AM.Value.ToString("yyyy-MM-dd HH:mm:ss") : "";
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
#region 旧代码(计算加班、迟到之类)
|
|
////判断上午考勤状态 未识别
|
|
//if (item.KQ_FACE_READ_START_STATE_AM == 0) InStart = "未签入";
|
|
|
|
////判断是否存在请假信息
|
|
//var InStartl1 = list8.Where(p => p.PPL_ID == item.USERS_UID && p.S_TIME_Date <= d2 && p.E_TIME_Date >= d2).FirstOrDefault();
|
|
////请假
|
|
//if (InStartl1 != null) InStart = "请假";
|
|
////判断是否存在公差信息
|
|
//var InStartl2 = list9.Where(p => p.PPL_ID == item.USERS_UID && p.S_TIME_Date <= d2 && p.E_TIME_Date >= d2).FirstOrDefault();
|
|
////公差
|
|
//if (InStartl2 != null) InStart = "公差";
|
|
|
|
////判断上午考勤状态 已识别 或 迟到
|
|
//if (item.KQ_FACE_READ_START_STATE_AM == 1 || item.KQ_FACE_READ_START_STATE_AM == 2) InStart = item.KQ_FACE_READ_START_TIME_AM.HasValue ? item.KQ_FACE_READ_START_TIME_AM.Value.ToString("yyyy-MM-dd HH:mm:ss") : "";
|
|
|
|
////上午上班考勤
|
|
//if (InStart == "未签入")//未签入属于旷工
|
|
//{
|
|
// absenteeismHours1 += DiffHours(Convert.ToDateTime(listTask[0].UP_END_DATE), Convert.ToDateTime(listTask[0].DOWN_START_DATE), 0);
|
|
// isAbsenteeism1 = true;
|
|
//}
|
|
//if (item.KQ_FACE_READ_START_STATE_AM == 2)//迟到
|
|
//{
|
|
// //判断是否存在迟到 开始时间、结束时间、相差分钟因子 ATT_RULE1
|
|
// lateHours1 += DiffHours(Convert.ToDateTime(d2), Convert.ToDateTime(InStart), Convert.ToInt32(listTask[0].ATT_RULE1));
|
|
//}
|
|
#endregion
|
|
}
|
|
|
|
//上午是否签出
|
|
string OutStart = "未签出";
|
|
if (d3.HasValue && d4.HasValue)
|
|
{
|
|
//判断是否存在请假信息
|
|
var OutStartl1 = list8.Where(p => (p.PPL_ID == item.USERS_UID || p.ACC_PPL.Contains(item.USERS_UID)) && p.S_TIME_Date <= d4 && p.E_TIME_Date >= d4).FirstOrDefault();
|
|
//请假
|
|
if (OutStartl1 != null)
|
|
{
|
|
OutStart = "请假";
|
|
}
|
|
else
|
|
{
|
|
//判断是否存在公差信息
|
|
var OutStartl2 = list9.Where(p => (p.PPL_ID == item.USERS_UID || p.ACC_PPL.Contains(item.USERS_UID)) && p.S_TIME_Date <= d4 && p.E_TIME_Date >= d4).FirstOrDefault();
|
|
//公差
|
|
if (OutStartl2 != null)
|
|
{
|
|
OutStart = "公差";
|
|
}
|
|
else
|
|
{
|
|
//判断是否存在休假信息
|
|
var OutStartlXJ = listXj.Where(p => p.PPL_ID == item.USERS_UID && p.S_TIME_Date <= d4 && p.E_TIME_Date >= d4).FirstOrDefault();
|
|
if (OutStartlXJ != null)
|
|
{
|
|
OutStart = "休假";
|
|
}
|
|
else
|
|
{
|
|
if (item.KQ_FACE_READ_END_STATE_AM == 1)
|
|
{
|
|
OutStart = item.KQ_FACE_READ_END_TIME_AM.HasValue ? item.KQ_FACE_READ_END_TIME_AM.Value.ToString("yyyy-MM-dd HH:mm:ss") : "";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#region 旧代码(计算加班、迟到之类)
|
|
////判断上午考勤状态 未识别
|
|
//if (item.KQ_FACE_READ_END_STATE_AM == 0) OutStart = "未签出";
|
|
|
|
////判断是否存在请假信息
|
|
//var OutStartl1 = list8.Where(p => p.PPL_ID == item.USERS_UID && p.S_TIME_Date <= d4 && p.E_TIME_Date >= d4).FirstOrDefault();
|
|
////请假
|
|
//if (OutStartl1 != null) OutStart = "请假";
|
|
////判断是否存在公差信息
|
|
//var OutStartl2 = list9.Where(p => p.PPL_ID == item.USERS_UID && p.S_TIME_Date <= d4 && p.E_TIME_Date >= d4).FirstOrDefault();
|
|
////公差
|
|
//if (OutStartl2 != null) OutStart = "公差";
|
|
|
|
////判断上午考勤状态 已识别 或 早退
|
|
//if (item.KQ_FACE_READ_END_STATE_AM == 1 || item.KQ_FACE_READ_END_STATE_AM == 2) OutStart = item.KQ_FACE_READ_END_TIME_AM.HasValue ? item.KQ_FACE_READ_END_TIME_AM.Value.ToString("yyyy-MM-dd HH:mm:ss") : "";
|
|
|
|
////上午下班考勤
|
|
//if (OutStart == "未签出" && !isAbsenteeism1)
|
|
//{
|
|
// absenteeismHours1 += DiffHours(Convert.ToDateTime(listTask[0].UP_END_DATE), Convert.ToDateTime(listTask[0].DOWN_START_DATE), 0);
|
|
//}
|
|
//if (item.KQ_FACE_READ_END_STATE_AM == 2)//早退
|
|
//{
|
|
// //判断是否存在早退 开始时间、结束时间、相差分钟因子 ATT_RULE3
|
|
// LeaveEarlyHours1 += DiffHours(Convert.ToDateTime(OutStart), Convert.ToDateTime(d3), Convert.ToInt32(listTask[0].ATT_RULE3));
|
|
//}
|
|
//if (item.KQ_FACE_READ_END_STATE_AM == 1)//正常识别
|
|
//{
|
|
// //判断是否加班
|
|
// workOvertimeHours1 += DiffHours(Convert.ToDateTime(d4), Convert.ToDateTime(OutStart), Convert.ToInt32(listTask[0].ATT_RULE5));
|
|
//}
|
|
////判断 如果是当天的考勤需要判断一下上午上下班的考勤时间是否都已经结束,如果已经结束,才能确认为旷工
|
|
//if (DateTime.Now < d4)
|
|
//{
|
|
// absenteeismHours1 = 0;
|
|
//}
|
|
#endregion
|
|
}
|
|
|
|
|
|
//下午签入
|
|
string InStartPm = "未签入";
|
|
if (d5.HasValue && d6.HasValue)
|
|
{
|
|
|
|
//判断是否存在请假信息
|
|
var InStartPml1 = list8.Where(p => (p.PPL_ID == item.USERS_UID || p.ACC_PPL.Contains(item.USERS_UID)) && p.S_TIME_Date <= d6 && p.E_TIME_Date >= d6).FirstOrDefault();
|
|
//请假
|
|
if (InStartPml1 != null)
|
|
{
|
|
InStartPm = "请假";
|
|
}
|
|
else
|
|
{
|
|
//判断是否存在公差信息
|
|
var InStartPml2 = list9.Where(p => (p.PPL_ID == item.USERS_UID || p.ACC_PPL.Contains(item.USERS_UID)) && p.S_TIME_Date <= d6 && p.E_TIME_Date >= d6).FirstOrDefault();
|
|
//公差
|
|
if (InStartPml2 != null)
|
|
{
|
|
InStartPm = "公差";
|
|
}
|
|
else
|
|
{
|
|
//判断是否存在休假信息
|
|
var InStartPmlXJ = listXj.Where(p => p.PPL_ID == item.USERS_UID && p.S_TIME_Date <= d6 && p.E_TIME_Date >= d6).FirstOrDefault();
|
|
if (InStartPmlXJ != null)
|
|
{
|
|
InStartPm = "休假";
|
|
}
|
|
else
|
|
{
|
|
if (item.KQ_FACE_READ_START_STATE_PM == 1)
|
|
{
|
|
InStartPm = item.KQ_FACE_READ_START_TIME_PM.HasValue ? item.KQ_FACE_READ_START_TIME_PM.Value.ToString("yyyy-MM-dd HH:mm:ss") : "";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
#region 旧代码(计算加班、迟到之类)
|
|
////判断下午考勤状态 未识别
|
|
//if (item.KQ_FACE_READ_START_STATE_PM == 0) InStartPm = "未签入";
|
|
|
|
////判断是否存在请假信息
|
|
//var InStartPml1 = list8.Where(p => p.PPL_ID == item.USERS_UID && p.S_TIME_Date <= d6 && p.E_TIME_Date >= d6).FirstOrDefault();
|
|
////请假
|
|
//if (InStartPml1 != null) InStartPm = "请假";
|
|
////判断是否存在公差信息
|
|
//var InStartPml2 = list9.Where(p => p.PPL_ID == item.USERS_UID && p.S_TIME_Date <= d6 && p.E_TIME_Date >= d6).FirstOrDefault();
|
|
////公差
|
|
//if (InStartPml2 != null) InStartPm = "公差";
|
|
|
|
////判断下午考勤状态 已识别 或 迟到
|
|
//if (item.KQ_FACE_READ_START_STATE_PM == 1 || item.KQ_FACE_READ_START_STATE_PM == 2) InStartPm = item.KQ_FACE_READ_START_TIME_PM.HasValue ? item.KQ_FACE_READ_START_TIME_PM.Value.ToString("yyyy-MM-dd HH:mm:ss") : "";
|
|
|
|
////下午上班考勤
|
|
//if (InStartPm == "未签入")
|
|
//{
|
|
// //未签入属于旷工
|
|
// absenteeismHours2 += DiffHours(Convert.ToDateTime(listTask[0].UP_END_DATE2), Convert.ToDateTime(listTask[0].DOWN_START_DATE2), 0);
|
|
// isAbsenteeism2 = true;
|
|
//}
|
|
//if (item.KQ_FACE_READ_START_STATE_PM == 2)//迟到
|
|
//{
|
|
// //判断是否存在迟到 开始时间、结束时间、相差分钟因子 ATT_RULE1
|
|
// lateHours2 += DiffHours(Convert.ToDateTime(d6), Convert.ToDateTime(InStartPm), Convert.ToInt32(listTask[0].ATT_RULE1));
|
|
//}
|
|
#endregion
|
|
}
|
|
|
|
|
|
|
|
//下午签出
|
|
string OutStartPm = "未签出";
|
|
if (d7.HasValue && d8.HasValue)
|
|
{
|
|
|
|
//判断是否存在请假信息
|
|
var OutStartPml1 = list8.Where(p => (p.PPL_ID == item.USERS_UID || p.ACC_PPL.Contains(item.USERS_UID)) && p.S_TIME_Date <= d7 && p.E_TIME_Date >= d7).FirstOrDefault();
|
|
//请假
|
|
if (OutStartPml1 != null)
|
|
{
|
|
OutStartPm = "请假";
|
|
}
|
|
else
|
|
{
|
|
//判断是否存在公差信息
|
|
var OutStartPml2 = list9.Where(p => (p.PPL_ID == item.USERS_UID || p.ACC_PPL.Contains(item.USERS_UID)) && p.S_TIME_Date <= d7 && p.E_TIME_Date >= d7).FirstOrDefault();
|
|
//公差
|
|
if (OutStartPml2 != null)
|
|
{
|
|
OutStartPm = "公差";
|
|
}
|
|
else
|
|
{
|
|
//判断是否存在公差信息
|
|
var OutStartPmlXJ = listXj.Where(p => p.PPL_ID == item.USERS_UID && p.S_TIME_Date <= d7 && p.E_TIME_Date >= d7).FirstOrDefault();
|
|
if (OutStartPmlXJ != null)
|
|
{
|
|
OutStartPm = "休假";
|
|
}
|
|
else
|
|
{
|
|
if (item.KQ_FACE_READ_END_STATE_PM == 1)
|
|
{
|
|
OutStartPm = item.KQ_FACE_READ_END_TIME_PM.HasValue ? item.KQ_FACE_READ_END_TIME_PM.Value.ToString("yyyy-MM-dd HH:mm:ss") : "";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
#region 旧代码(计算加班、迟到之类)
|
|
////判断下午考勤状态 未识别
|
|
//if (item.KQ_FACE_READ_END_STATE_PM == 0) OutStartPm = "未签出";
|
|
|
|
////判断是否存在请假信息
|
|
//var OutStartPml1 = list8.Where(p => p.PPL_ID == item.USERS_UID && p.S_TIME_Date <= d7 && p.E_TIME_Date >= d7).FirstOrDefault();
|
|
////请假
|
|
//if (OutStartPml1 != null) OutStartPm = "请假";
|
|
////判断是否存在公差信息
|
|
//var OutStartPml2 = list9.Where(p => p.PPL_ID == item.USERS_UID && p.S_TIME_Date <= d7 && p.E_TIME_Date >= d7).FirstOrDefault();
|
|
////公差
|
|
//if (OutStartPml2 != null) OutStartPm = "公差";
|
|
|
|
////判断下午考勤状态 已识别 或 早退
|
|
//if (item.KQ_FACE_READ_END_STATE_PM == 1 || item.KQ_FACE_READ_END_STATE_PM == 2 || item.KQ_FACE_READ_END_STATE_PM == 4) OutStartPm = item.KQ_FACE_READ_END_TIME_PM.HasValue ? item.KQ_FACE_READ_END_TIME_PM.Value.ToString("yyyy-MM-dd HH:mm:ss") : "";
|
|
|
|
////下午下班考勤
|
|
//if (OutStartPm == "未签出" && !isAbsenteeism2)
|
|
//{
|
|
// //未签入属于旷工
|
|
// absenteeismHours2 += DiffHours(Convert.ToDateTime(listTask[0].UP_END_DATE2), Convert.ToDateTime(listTask[0].DOWN_START_DATE2), 0);
|
|
//}
|
|
//if (item.KQ_FACE_READ_END_STATE_PM == 2)//早退
|
|
//{
|
|
// //判断是否存在早退 开始时间、结束时间、相差分钟因子 ATT_RULE3
|
|
// LeaveEarlyHours2 += DiffHours(Convert.ToDateTime(OutStartPm), Convert.ToDateTime(d7), Convert.ToInt32(listTask[0].ATT_RULE3));
|
|
//}
|
|
//if (item.KQ_FACE_READ_END_STATE_PM == 1)//正常识别
|
|
//{
|
|
// //判断是否加班
|
|
// workOvertimeHours1 += DiffHours(Convert.ToDateTime(d7), Convert.ToDateTime(OutStartPm), Convert.ToInt32(listTask[0].ATT_RULE5));
|
|
//}
|
|
////判断 如果是当天的考勤需要判断一下下午上下班的考勤时间是否都已经结束,如果已经结束,才能确认为旷工
|
|
//if (DateTime.Now < d8)
|
|
//{
|
|
// absenteeismHours2 = 0;
|
|
//}
|
|
#endregion
|
|
}
|
|
|
|
//判断是否存在状态查询条件
|
|
if (!string.IsNullOrWhiteSpace(attendanceState))
|
|
{
|
|
|
|
|
|
//< option value = "0" > 正常 </ option >
|
|
//< option value = "1" > 未签入 </ option >
|
|
//< option value = "2" > 未签出 </ option >
|
|
//< option value = "3" > 请假 </ option >
|
|
//< option value = "4" > 公差 </ option >
|
|
//< option value = "5" > 休假 </ option >
|
|
|
|
switch (attendanceState)
|
|
{
|
|
//查询正常状态
|
|
case "0":
|
|
if (!(InStart.Length > 4 && OutStart.Length > 4 && InStartPm.Length > 4 && OutStartPm.Length > 4))
|
|
{
|
|
continue;
|
|
}
|
|
break;
|
|
//未签入
|
|
case "1":
|
|
if (!(InStart.Contains("未签入") || OutStart.Contains("未签入") || InStartPm.Contains("未签入") || OutStartPm.Contains("未签入")))
|
|
{
|
|
continue;
|
|
}
|
|
break;
|
|
//未签出
|
|
case "2":
|
|
if (!(InStart.Contains("未签出") || OutStart.Contains("未签出") || InStartPm.Contains("未签出") || OutStartPm.Contains("未签出")))
|
|
{
|
|
continue;
|
|
}
|
|
break;
|
|
//请假
|
|
case "3":
|
|
if (!(InStart.Contains("请假") || OutStart.Contains("请假") || InStartPm.Contains("请假") || OutStartPm.Contains("请假")))
|
|
{
|
|
continue;
|
|
}
|
|
break;
|
|
//公差
|
|
case "4":
|
|
if (!(InStart.Contains("公差") || OutStart.Contains("公差") || InStartPm.Contains("公差") || OutStartPm.Contains("公差")))
|
|
{
|
|
continue;
|
|
}
|
|
break;
|
|
//休假
|
|
case "5":
|
|
if (!(InStart.Contains("休假") || OutStart.Contains("休假") || InStartPm.Contains("休假") || OutStartPm.Contains("休假")))
|
|
{
|
|
continue;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
retList.Add(new AttendanceStatisticsXZZDJGMo()
|
|
{
|
|
DataStr = dayStr,
|
|
DepName = orgObj.ORG_NAME,
|
|
EmpName = item.EMP_NAME,
|
|
InStart = InStart,
|
|
OutStart = OutStart,
|
|
InfoState = 0,
|
|
InStartPm = InStartPm,
|
|
OutStartPm = OutStartPm,
|
|
lateHours = lateHours1 + lateHours2,
|
|
LeaveEarlyHours = LeaveEarlyHours1 + LeaveEarlyHours2,
|
|
workOvertimeHours = workOvertimeHours1 + workOvertimeHours2,
|
|
absenteeismHours = absenteeismHours1 + absenteeismHours2,
|
|
KQ_FACE_READ_START_STATE_AM = item.KQ_FACE_READ_START_STATE_AM,
|
|
KQ_FACE_READ_END_STATE_AM = item.KQ_FACE_READ_END_STATE_AM,
|
|
KQ_FACE_READ_START_STATE_PM = item.KQ_FACE_READ_START_STATE_PM,
|
|
KQ_FACE_READ_END_STATE_PM = item.KQ_FACE_READ_END_STATE_PM,
|
|
});
|
|
|
|
}
|
|
|
|
//修改前面时间
|
|
for (int i = 0; i < retList.Count; i++)
|
|
{
|
|
|
|
var itemObj = retList[i];
|
|
try
|
|
{
|
|
if (itemObj.KQ_FACE_READ_START_STATE_AM == 1)
|
|
{
|
|
var str = itemObj.InStart;
|
|
var arr = str.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
|
|
retList[i].InStart = itemObj.DataStr + " " + arr[1];
|
|
}
|
|
}
|
|
catch (Exception ex) { }
|
|
|
|
|
|
try
|
|
{
|
|
if (itemObj.KQ_FACE_READ_END_STATE_AM == 1)
|
|
{
|
|
var str = itemObj.OutStart;
|
|
var arr = str.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
|
|
retList[i].OutStart = itemObj.DataStr + " " + arr[1];
|
|
}
|
|
}
|
|
catch (Exception ex) { }
|
|
|
|
|
|
try
|
|
{
|
|
if (itemObj.KQ_FACE_READ_START_STATE_PM == 1)
|
|
{
|
|
var str = itemObj.InStartPm;
|
|
var arr = str.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
|
|
retList[i].InStartPm = itemObj.DataStr + " " + arr[1];
|
|
}
|
|
}
|
|
catch (Exception ex) { }
|
|
|
|
|
|
try
|
|
{
|
|
if (itemObj.KQ_FACE_READ_END_STATE_PM == 1)
|
|
{
|
|
var str = itemObj.OutStartPm;
|
|
var arr = str.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
|
|
retList[i].OutStartPm = itemObj.DataStr + " " + arr[1];
|
|
}
|
|
}
|
|
catch (Exception ex) { }
|
|
|
|
|
|
}
|
|
|
|
List<AttendanceStatisticsXZZDJGMo> returnList = retList.OrderByDescending(p => p.DataStr).ToList();
|
|
|
|
//if (attendanceState == "0") //正常
|
|
//{
|
|
// returnList = retList.Where(p => p.lateHours == 0 && p.LeaveEarlyHours == 0 && p.absenteeismHours == 0).ToList();
|
|
|
|
//}
|
|
//else if (attendanceState == "1") //迟到
|
|
//{
|
|
// returnList = retList.Where(p => p.lateHours != 0).ToList();
|
|
//}
|
|
//else if (attendanceState == "2") // 早退
|
|
//{
|
|
// returnList = retList.Where(p => p.LeaveEarlyHours != 0).ToList();
|
|
//}
|
|
//else if (attendanceState == "3") //加班
|
|
//{
|
|
// returnList = retList.Where(p => p.workOvertimeHours != 0).ToList();
|
|
//}
|
|
//else if (attendanceState == "4") // 旷工
|
|
//{
|
|
// returnList = retList.Where(p => p.absenteeismHours != 0).ToList();
|
|
//}
|
|
//else
|
|
//{
|
|
// returnList = retList; //
|
|
//}
|
|
|
|
|
|
//// 查询考勤计划
|
|
//string sqlJH = " SELECT * from oa_attendance_plan WHERE ORG_ID = '" + ORG_ID + "' ";
|
|
//var dtJh = Common.MySqlHelper.QueryTable(sqlJH);
|
|
|
|
////记录
|
|
//string sqlJL = " SELECT * from tbl_personaccess WHERE ORG_ID = '" + ORG_ID + "' and (1=1 ";
|
|
//var listDt = returnList.GroupBy(p => p.DataStr).ToList();
|
|
//for (int i = 0; i < listDt.Count; i++)
|
|
//{
|
|
// sqlJL += " or date_format(START_TIME,'%Y-%m-%d') = date_format('" + listDt[i].Key + "','%Y-%m-%d') ";
|
|
//}
|
|
//sqlJL += " ) ";
|
|
//var dtJl = Common.MySqlHelper.QueryTable(sqlJH);
|
|
|
|
//List<EmpDeviceRecordMo> list3 = new List<EmpDeviceRecordMo>();
|
|
//for (int i = 0; i < dtJl.Rows.Count; i++)
|
|
//{
|
|
|
|
//}
|
|
|
|
|
|
returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":" + FangYar.Common.JsonHelper.ToJson(returnList) + "}";
|
|
}
|
|
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, "人脸点名统计操作请求", "西藏总队机关考勤统计查询");
|
|
|
|
////人员总数
|
|
//returnstr += "\"userCount\":" + userCount;
|
|
////实到人员总数
|
|
//returnstr += ",\"sdUserCount\":" + sdUserCount;
|
|
////实到人员比例
|
|
//returnstr += ",\"sdbfb\":" + sdbfb;
|
|
////部门数据集合
|
|
//returnstr += ",\"deptDataArr\":" + deptDataArr;
|
|
////部门名称集合
|
|
//returnstr += ",\"deptNameArr\":" + deptNameArr;
|
|
////部门数据背景集合
|
|
//returnstr += ",\"deptDataBjArr\":" + deptDataBjArr;
|
|
////部门数据背景集合
|
|
//returnstr += ",\"tbData\":" + FangYar.Common.JsonHelper.ToJson(dt3);
|
|
|
|
//returnstr += "}}";
|
|
return returnstr;
|
|
}
|
|
/// <summary>
|
|
/// 已经识别人员信息
|
|
/// </summary>
|
|
public class EmpDeviceRecordMo
|
|
{
|
|
/// <summary>
|
|
/// 姓名
|
|
/// </summary>
|
|
public string NAME { get; set; }
|
|
/// <summary>
|
|
/// 时间
|
|
/// </summary>
|
|
public string START_TIME { get; set; }
|
|
/// <summary>
|
|
/// 时间格式的数据识别时间
|
|
/// </summary>
|
|
public DateTime START_TIME_DTM { get { DateTime.TryParse(START_TIME, out DateTime retDtm); return retDtm; } }
|
|
|
|
/// <summary>
|
|
/// 身份证
|
|
/// </summary>
|
|
public string EXTEND2 { get; set; }
|
|
/// <summary>
|
|
/// 设备地址
|
|
/// </summary>
|
|
public string ADDR { get; set; }
|
|
/// <summary>
|
|
/// 设备编码
|
|
/// </summary>
|
|
public string EXTEND3 { get; set; }
|
|
/// <summary>
|
|
/// 图片地址
|
|
/// </summary>
|
|
public string PICTURE_URL { get; set; }
|
|
|
|
}
|
|
|
|
#region 20220830 代码注释暂时弃用 qyl
|
|
///// <summary>
|
|
///// 西藏总队机关考勤统计查询
|
|
///// </summary>
|
|
///// <param name="context"></param>
|
|
///// <returns></returns>
|
|
//private string getAttendanceStatisticsXZZDJG(HttpContext context)
|
|
//{
|
|
// string returnstr = "";
|
|
// try
|
|
// {
|
|
// string ORG_ID = context.Request.Params["OrgId"];
|
|
// string selTreeID = context.Request.Params["selTreeID"];
|
|
// string selType = context.Request.Params["selType"];
|
|
|
|
// string DeptID = context.Request.Params["DeptID"];
|
|
// string IsAdmin = context.Request.Params["IsAdmin"];
|
|
|
|
|
|
|
|
// //判断是否管理员账号,如果不是管理员则只查询本部门数据
|
|
// if (IsAdmin != "1")
|
|
// {
|
|
// if (!string.IsNullOrWhiteSpace(DeptID))
|
|
// {
|
|
// selTreeID = DeptID;
|
|
// selType = "dept";
|
|
|
|
// }
|
|
// }
|
|
|
|
|
|
// if (!string.IsNullOrEmpty(selTreeID) && selType == "org")
|
|
// {
|
|
// ORG_ID = selTreeID;
|
|
// }
|
|
// else if (!string.IsNullOrEmpty(selTreeID) && selType == "dept")
|
|
// {
|
|
// string sqlP = "select PID from fire_org where org_id='" + selTreeID + "'";
|
|
// DataTable dtP = FangYar.Common.MySqlHelper.QueryTable(sqlP);
|
|
// ORG_ID = dtP.Rows[0]["PID"].ToString();
|
|
// }
|
|
|
|
// string startTime = context.Request.Params["startTime"] + " 00:00:00";
|
|
// string endTime = context.Request.Params["endTime"] + " 23:59:59";
|
|
// string keywords = context.Request.Params["keywords"];
|
|
|
|
// string attendanceState = context.Request.Params["attendanceState"];
|
|
|
|
|
|
// if (string.IsNullOrWhiteSpace(startTime) || string.IsNullOrWhiteSpace(endTime))
|
|
// {
|
|
// startTime = DateTime.Now.AddMonths(-1).ToString("yyyy-MM-dd") + " 00:00:00";
|
|
// endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 23:59:59";
|
|
// }
|
|
|
|
|
|
// //请假信息集合
|
|
// List<LeaveAndAttendanceMo> list8 = new List<LeaveAndAttendanceMo>();
|
|
// //请假信息查询
|
|
// string sql5 = " SELECT * from oa_leave WHERE PPL_ID in (SELECT USERS_UID from tbl_sys_emp WHERE ORG_ID='" + ORG_ID +
|
|
// "') and STATE='1' and (S_TIME BETWEEN '" + startTime + "' and '" + endTime + "' or E_TIME BETWEEN '" + startTime + "' and '" + endTime + "' ) ";
|
|
// DataTable dt5 = FangYar.Common.MySqlHelper.QueryTable(sql5);
|
|
// for (int i = 0; i < dt5.Rows.Count; i++)
|
|
// {
|
|
// //list8.Add.Add(dt5.Rows[i]["PPL_ID"] + "");
|
|
// list8.Add(new LeaveAndAttendanceMo()
|
|
// {
|
|
// ORG_ID = "",
|
|
// PPL_ID = dt5.Rows[i]["PPL_ID"] + "",
|
|
// PPL_NAME = dt5.Rows[i]["PPL_NAME"] + "",
|
|
// S_TIME = dt5.Rows[i]["S_TIME"] + "",
|
|
// E_TIME = dt5.Rows[i]["E_TIME"] + "",
|
|
// });
|
|
// }
|
|
|
|
// //公差信息集合
|
|
// List<LeaveAndAttendanceMo> list9 = new List<LeaveAndAttendanceMo>();
|
|
// string sql6 = " SELECT * from oa_tolerance WHERE PPL_ID in (SELECT USERS_UID from tbl_sys_emp WHERE ORG_ID='" + ORG_ID +
|
|
// "') and STATE='1' and (S_TIME BETWEEN '" + startTime + "' and '" + endTime + "' or E_TIME BETWEEN '" + startTime + "' and '" + endTime + "') ";
|
|
// DataTable dt6 = FangYar.Common.MySqlHelper.QueryTable(sql6);
|
|
|
|
// for (int i = 0; i < dt6.Rows.Count; i++)
|
|
// {
|
|
// //list7.Add(dt6.Rows[i]["PPL_ID"] + "");
|
|
// list9.Add(new LeaveAndAttendanceMo()
|
|
// {
|
|
// ORG_ID = "",
|
|
// PPL_ID = dt6.Rows[i]["PPL_ID"] + "",
|
|
// PPL_NAME = dt6.Rows[i]["PPL_NAME"] + "",
|
|
// S_TIME = dt6.Rows[i]["S_TIME"] + "",
|
|
// E_TIME = dt6.Rows[i]["E_TIME"] + "",
|
|
// });
|
|
// }
|
|
|
|
|
|
// // 待考勤人员数据
|
|
// string sql1 = @" WITH t1 as(
|
|
// SELECT USERS_UID,ATTENDANCE_DATE from oa_attendance_record WHERE ORG_ID = '" + ORG_ID + @"' and ATTENDANCE_DATE BETWEEN '" + startTime.Split(' ')[0] + "' and '" + endTime.Split(' ')[0] + @"'
|
|
// GROUP BY USERS_UID,ATTENDANCE_DATE )
|
|
// SELECT e.USERS_UID, if(LENGTH(IFNULL(e.DEPT_ID,''))<1,e.ORG_ID,e.DEPT_ID) DEPT_ID,t1.ATTENDANCE_DATE,e.EMP_NAME,e.EMP_MOBILE,e.EMP_NUM,e.IDNUMBER
|
|
// from t1 LEFT JOIN tbl_sys_emp e on t1.USERS_UID = e.USERS_UID WHERE ORG_ID = '" + ORG_ID +
|
|
// @"' and e.USERS_UID is not NULL ";
|
|
// DataTable dt1 = FangYar.Common.MySqlHelper.QueryTable(sql1);
|
|
// // 待识别人员账号信息缓存
|
|
// List<UserCheckMo> list1 = new List<UserCheckMo>();
|
|
// // 循环添加待识别人员账号信息
|
|
// for (int i = 0; i < dt1.Rows.Count; i++)
|
|
// {
|
|
// // 待识别人员账号信息
|
|
// var USERS_UID = (dt1.Rows[i]["USERS_UID"] + "").Trim();
|
|
// var DEPT_ID = (dt1.Rows[i]["DEPT_ID"] + "").Trim();
|
|
// var ATTENDANCE_DATE = (dt1.Rows[i]["ATTENDANCE_DATE"] + "").Trim();
|
|
// var EMP_MOBILE = (dt1.Rows[i]["EMP_MOBILE"] + "").Trim();
|
|
// var EMP_NAME = dt1.Rows[i]["EMP_NAME"] + "";
|
|
// var EMP_NUM = dt1.Rows[i]["EMP_NUM"] + "";
|
|
// var IDNUMBER = dt1.Rows[i]["IDNUMBER"] + "";
|
|
// list1.Add(new UserCheckMo()
|
|
// {
|
|
// DEPT_ID = DEPT_ID,
|
|
// USERS_UID = USERS_UID,
|
|
// ATTENDANCE_DATE = ATTENDANCE_DATE,
|
|
// EMP_MOBILE = EMP_MOBILE,
|
|
// EMP_NAME = EMP_NAME,
|
|
// EMP_NUM = EMP_NUM,
|
|
// IDNUMBER = IDNUMBER
|
|
// });
|
|
|
|
// }
|
|
|
|
|
|
// // 组织机构下级
|
|
// string sql2 = " SELECT * from fire_org WHERE pid='" + ORG_ID + "' and TYPE='1' or ORG_ID='" + ORG_ID + "' ORDER BY TYPE ";
|
|
// DataTable dt2 = FangYar.Common.MySqlHelper.QueryTable(sql2);
|
|
// List<OrgInfoMo> list2 = new List<OrgInfoMo>();
|
|
// for (int i = 0; i < dt2.Rows.Count; i++)
|
|
// {
|
|
// list2.Add(new OrgInfoMo()
|
|
// {
|
|
// ORG_ID = dt2.Rows[i]["ORG_ID"] + "",
|
|
// ORG_NAME = dt2.Rows[i]["ORG_NAME"] + "",
|
|
// TYPE = dt2.Rows[i]["TYPE"] + "",
|
|
// });
|
|
// }
|
|
|
|
// // 已经识别人员信息
|
|
// string sql3 = @" with t1 as (
|
|
// SELECT * from tbl_personaccess WHERE START_TIME BETWEEN '" + startTime + "' and '" + endTime + @"'
|
|
// and org_id='" + ORG_ID + @"'
|
|
// and EXTEND3 in (SELECT EPUIP_ID from tbl_epuip_org WHERE ORG_ID='" + ORG_ID + @"' and IS_Attendance='1')
|
|
// ORDER BY START_TIME DESC
|
|
// )
|
|
// SELECT e.USERS_UID,IFNULL(o.ORG_NAME,'机关') DEPT_NAME,e.EMP_NAME,t1.START_TIME, IFNULL(e.DEPT_ID,'') DEPT_ID,e.ORG_ID,t1.ADDR,t1.PICTURE_URL,t1.CLOSEUP_PIC_URL
|
|
// from t1 LEFT JOIN tbl_sys_emp e on t1.EMPID=e.ID LEFT JOIN fire_org o on e.DEPT_ID=o.ORG_ID ORDER BY START_TIME DESC ";
|
|
// DataTable dt3 = FangYar.Common.MySqlHelper.QueryTable(sql3);
|
|
// List<UserFaceReadMo> list3 = new List<UserFaceReadMo>();
|
|
// for (int i = 0; i < dt3.Rows.Count; i++)
|
|
// {
|
|
// list3.Add(new UserFaceReadMo()
|
|
// {
|
|
// ADDR = dt3.Rows[i]["ADDR"] + "",
|
|
// CLOSEUP_PIC_URL = dt3.Rows[i]["CLOSEUP_PIC_URL"] + "",
|
|
// DEPT_ID = dt3.Rows[i]["DEPT_ID"] + "",
|
|
// EMP_NAME = dt3.Rows[i]["EMP_NAME"] + "",
|
|
// ORG_ID = dt3.Rows[i]["ORG_ID"] + "",
|
|
// PICTURE_URL = dt3.Rows[i]["PICTURE_URL"] + "",
|
|
// START_TIME = dt3.Rows[i]["START_TIME"] + "",
|
|
// USERS_UID = dt3.Rows[i]["USERS_UID"] + "",
|
|
// DEPT_NAME = dt3.Rows[i]["DEPT_NAME"] + "",
|
|
// });
|
|
// }
|
|
|
|
// //获取时间段内考勤任务
|
|
// string sqlTask = @"SELECT* from oa_attendance_task where org_id = '" + ORG_ID + @"' and ATTENDANCE_DATE BETWEEN '" + startTime.Split(' ')[0] + @"' and '" + endTime.Split(' ')[0] + @"'order by task_name desc";
|
|
// DataTable dtTask = FangYar.Common.MySqlHelper.QueryTable(sqlTask);
|
|
// List<AttendanceTaskMo> listTask = new List<AttendanceTaskMo>();
|
|
// for (int i = 0; i < dtTask.Rows.Count; i++)
|
|
// {
|
|
// listTask.Add(new AttendanceTaskMo()
|
|
// {
|
|
// ATTENDANCE_DATE = dtTask.Rows[i]["ATTENDANCE_DATE"] + "",
|
|
// UP_START_DATE = dtTask.Rows[i]["UP_START_DATE"] + "",
|
|
// UP_END_DATE = dtTask.Rows[i]["UP_END_DATE"] + "",
|
|
// DOWN_START_DATE = dtTask.Rows[i]["DOWN_START_DATE"] + "",
|
|
// DOWN_END_DATE = dtTask.Rows[i]["DOWN_END_DATE"] + "",
|
|
// UP_START_DATE2 = dtTask.Rows[i]["UP_START_DATE2"] + "",
|
|
// UP_END_DATE2 = dtTask.Rows[i]["UP_END_DATE2"] + "",
|
|
// DOWN_START_DATE2 = dtTask.Rows[i]["DOWN_START_DATE2"] + "",
|
|
// DOWN_END_DATE2 = dtTask.Rows[i]["DOWN_END_DATE2"] + "",
|
|
// ATT_RULE1 = dtTask.Rows[i]["ATT_RULE1"] + "",
|
|
// ATT_RULE2 = dtTask.Rows[i]["ATT_RULE2"] + "",
|
|
// ATT_RULE3 = dtTask.Rows[i]["ATT_RULE3"] + "",
|
|
// ATT_RULE4 = dtTask.Rows[i]["ATT_RULE4"] + "",
|
|
// ATT_RULE5 = dtTask.Rows[i]["ATT_RULE5"] + ""
|
|
// });
|
|
// }
|
|
|
|
// List<AttendanceStatisticsXZZDJGMo> retList = new List<AttendanceStatisticsXZZDJGMo>();
|
|
|
|
// //日期转换
|
|
// DateTime.TryParse(startTime, out DateTime sDtm);
|
|
// DateTime.TryParse(endTime, out DateTime eDtm);
|
|
// //
|
|
// int days = (eDtm - sDtm).Days + 1;
|
|
|
|
// //所有人员
|
|
// var lf1 = list1.GroupBy(p => p.USERS_UID).ToList();
|
|
// for (int i = 0; i < lf1.Count; i++)
|
|
// {
|
|
// // 人员信息
|
|
// var empObj = lf1[i].First();
|
|
// if (!string.IsNullOrWhiteSpace(keywords))
|
|
// {
|
|
// if (!empObj.EMP_NAME.Contains(keywords))
|
|
// {
|
|
// continue;
|
|
// }
|
|
// }
|
|
|
|
// if (!string.IsNullOrWhiteSpace(selTreeID))
|
|
// {
|
|
// if (ORG_ID != selTreeID)
|
|
// {
|
|
// if (empObj.DEPT_ID != selTreeID)
|
|
// {
|
|
// continue;
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
// //组织机构信息
|
|
// var orgObj = list2.FirstOrDefault(p => p.ORG_ID == empObj.DEPT_ID);
|
|
|
|
// //正常识别人员信息
|
|
// var itemList = list3.Where(p => p.USERS_UID == empObj.USERS_UID).ToList();
|
|
|
|
// for (int j = 0; j < days; j++)
|
|
// {
|
|
// try
|
|
// {
|
|
// var dtm = sDtm.AddDays(j);
|
|
// var dayStr = dtm.ToString("yyyy-MM-dd");
|
|
|
|
// var itemlist1 = itemList.Where(p => p.ReadTimeDay == dayStr).ToList();
|
|
|
|
// var listTaskRet = listTask.Where(p => p.ATTENDANCE_DATE == dayStr).ToList();
|
|
|
|
// var d1 = Convert.ToDateTime(dayStr + " 07:30:00");
|
|
// var d2 = Convert.ToDateTime(dayStr + " 09:45:00");
|
|
|
|
// var d3 = Convert.ToDateTime(dayStr + " 12:50:00");
|
|
// var d4 = Convert.ToDateTime(dayStr + " 13:30:00");
|
|
|
|
// var d5 = Convert.ToDateTime(dayStr + " 14:30:00");
|
|
// var d6 = Convert.ToDateTime(dayStr + " 15:45:00");
|
|
|
|
// var d7 = Convert.ToDateTime(dayStr + " 18:20:00");
|
|
// var d8 = Convert.ToDateTime(dayStr + " 19:30:00");
|
|
// if (listTaskRet.Count > 0)
|
|
// {
|
|
// if (!string.IsNullOrEmpty(listTaskRet[0].UP_START_DATE))
|
|
// {
|
|
// d1 = Convert.ToDateTime(listTaskRet[0].UP_START_DATE);
|
|
// }
|
|
// if (!string.IsNullOrEmpty(listTaskRet[0].UP_END_DATE))
|
|
// {
|
|
// d2 = Convert.ToDateTime(listTaskRet[0].UP_END_DATE);
|
|
// }
|
|
// if (!string.IsNullOrEmpty(listTaskRet[0].DOWN_START_DATE))
|
|
// {
|
|
// d3 = Convert.ToDateTime(listTaskRet[0].DOWN_START_DATE);
|
|
// }
|
|
// if (!string.IsNullOrEmpty(listTaskRet[0].DOWN_END_DATE))
|
|
// {
|
|
// d4 = Convert.ToDateTime(listTaskRet[0].DOWN_END_DATE);
|
|
// }
|
|
// if (!string.IsNullOrEmpty(listTaskRet[0].UP_START_DATE2))
|
|
// {
|
|
// d5 = Convert.ToDateTime(listTaskRet[0].UP_START_DATE2);
|
|
// }
|
|
// if (!string.IsNullOrEmpty(listTaskRet[0].UP_END_DATE2))
|
|
// {
|
|
// d6 = Convert.ToDateTime(listTaskRet[0].UP_END_DATE2);
|
|
// }
|
|
// if (!string.IsNullOrEmpty(listTaskRet[0].DOWN_START_DATE2))
|
|
// {
|
|
// d7 = Convert.ToDateTime(listTaskRet[0].DOWN_START_DATE2);
|
|
// }
|
|
// if (!string.IsNullOrEmpty(listTaskRet[0].DOWN_END_DATE2))
|
|
// {
|
|
// d8 = Convert.ToDateTime(listTaskRet[0].DOWN_END_DATE2);
|
|
// }
|
|
// }
|
|
|
|
// double lateHours1 = 0; //迟到时长
|
|
// double LeaveEarlyHours1 = 0;//早退时长
|
|
// double workOvertimeHours1 = 0;//加班时长
|
|
// double absenteeismHours1 = 0;//旷工时长
|
|
|
|
// double lateHours2 = 0; //迟到时长
|
|
// double LeaveEarlyHours2 = 0;//早退时长
|
|
// double workOvertimeHours2 = 0;//加班时长
|
|
// double absenteeismHours2 = 0;//旷工时长
|
|
|
|
// bool isAbsenteeism1 = false; //上午打卡旷工
|
|
// bool isAbsenteeism2 = false; //下午打卡旷工
|
|
|
|
// //上午是否签入
|
|
// string InStart = "*";
|
|
// var swIn = itemlist1.Where(p => p.ReadTime <= d2 && p.ReadTime >= d1).OrderBy(p => p.START_TIME).FirstOrDefault();
|
|
// if (swIn == null) //正常打卡时间段内没有打卡正常打卡记录
|
|
// {
|
|
// //判断是否存在请假信息
|
|
// var l1 = list8.Where(p => p.PPL_ID == empObj.USERS_UID && p.S_TIME_Date <= d2 && p.E_TIME_Date >= d2).FirstOrDefault();
|
|
// if (l1 == null)
|
|
// {
|
|
// //判断是否存在公差信息
|
|
// var l2 = list9.Where(p => p.PPL_ID == empObj.USERS_UID && p.S_TIME_Date <= d2 && p.E_TIME_Date >= d2).FirstOrDefault();
|
|
// if (l2 == null)
|
|
// {
|
|
// //判断是否存在迟到情况,获取上午下班前的刷脸数据
|
|
// swIn = itemlist1.Where(p => p.ReadTime <= d3 && p.ReadTime >= d1).OrderBy(p => p.START_TIME).FirstOrDefault();
|
|
// if (swIn == null) //
|
|
// {
|
|
// InStart = "未签入";
|
|
// }
|
|
// else
|
|
// {
|
|
// InStart = swIn.START_TIME; //打卡时间
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// InStart = "公差";
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// InStart = "请假";
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// InStart = swIn.START_TIME; //打卡时间
|
|
// }
|
|
|
|
// //上午是否签出
|
|
// string OutStart = "*";
|
|
// var swOut = itemlist1.Where(p => p.ReadTime <= d4 && p.ReadTime >= d3).OrderByDescending(p => p.START_TIME).FirstOrDefault();
|
|
// if (swOut == null)
|
|
// {
|
|
|
|
// //判断是否存在请假信息
|
|
// var l1 = list8.Where(p => p.PPL_ID == empObj.USERS_UID && p.S_TIME_Date <= d4 && p.E_TIME_Date >= d4).FirstOrDefault();
|
|
// if (l1 == null)
|
|
// {
|
|
// //判断是否存在公差信息
|
|
// var l2 = list9.Where(p => p.PPL_ID == empObj.USERS_UID && p.S_TIME_Date <= d4 && p.E_TIME_Date >= d4).FirstOrDefault();
|
|
// if (l2 == null)
|
|
// {
|
|
// //判断是否存在早退的情况,获取上午上班打卡结束点和上午下班结束点之间的数据
|
|
// swOut = itemlist1.Where(p => p.ReadTime <= d4 && p.ReadTime >= d2).OrderByDescending(p => p.START_TIME).FirstOrDefault();
|
|
// if (swOut == null || InStart == swOut.START_TIME || DateTime.Now < d4) //判断一下这条时间点数据是否和早打卡重叠 //
|
|
// {
|
|
// OutStart = "未签出";
|
|
// }
|
|
// else
|
|
// {
|
|
// OutStart = swOut.START_TIME; //打卡时间
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// OutStart = "公差";
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// OutStart = "请假";
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// OutStart = swOut.START_TIME;
|
|
// }
|
|
|
|
// //下午签入
|
|
// string InStartPm = "*";
|
|
// var pmIn = itemlist1.Where(p => p.ReadTime <= d6 && p.ReadTime >= d5).OrderBy(p => p.START_TIME).FirstOrDefault();
|
|
// if (pmIn == null)
|
|
// {
|
|
// //判断是否存在请假信息
|
|
// var l1 = list8.Where(p => p.PPL_ID == empObj.USERS_UID && p.S_TIME_Date <= d6 && p.E_TIME_Date >= d6).FirstOrDefault();
|
|
// if (l1 == null)
|
|
// {
|
|
// //判断是否存在公差信息
|
|
// var l2 = list9.Where(p => p.PPL_ID == empObj.USERS_UID && p.S_TIME_Date <= d6 && p.E_TIME_Date >= d6).FirstOrDefault();
|
|
// if (l2 == null)
|
|
// {
|
|
// //判断是否存在迟到情况,获取下午下班前的刷脸数据
|
|
// pmIn = itemlist1.Where(p => p.ReadTime <= d7 && p.ReadTime >= d5).OrderBy(p => p.START_TIME).FirstOrDefault();
|
|
// if (pmIn == null) //
|
|
// {
|
|
// InStartPm = "未签入";
|
|
// }
|
|
// else
|
|
// {
|
|
// InStartPm = pmIn.START_TIME; //打卡时间
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// InStartPm = "公差";
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// InStartPm = "请假";
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// InStartPm = pmIn.START_TIME;
|
|
// }
|
|
|
|
// //下午签出
|
|
// string OutStartPm = "*";
|
|
// var pmOut = itemlist1.Where(p => p.ReadTime >= d7).OrderByDescending(p => p.START_TIME).FirstOrDefault();
|
|
// if (pmOut == null)
|
|
// {
|
|
// //判断是否存在请假信息
|
|
// var l1 = list8.Where(p => p.PPL_ID == empObj.USERS_UID && p.S_TIME_Date <= d7 && p.E_TIME_Date >= d7).FirstOrDefault();
|
|
// if (l1 == null)
|
|
// {
|
|
// //判断是否存在公差信息
|
|
// var l2 = list9.Where(p => p.PPL_ID == empObj.USERS_UID && p.S_TIME_Date <= d7 && p.E_TIME_Date >= d7).FirstOrDefault();
|
|
// if (l2 == null)
|
|
// {
|
|
// OutStartPm = "未签出";
|
|
// //判断是否存在早退的情况,获取上午上班打卡结束点和上午下班结束点之间的数据
|
|
// pmOut = itemlist1.Where(p => p.ReadTime <= d8 && p.ReadTime >= d5).OrderByDescending(p => p.START_TIME).FirstOrDefault();
|
|
// if (pmOut == null || InStartPm == pmOut.START_TIME || DateTime.Now < d8) //判断一下这条时间点数据是否和下午打卡重叠 //
|
|
// {
|
|
// OutStartPm = "未签出";
|
|
// }
|
|
// else
|
|
// {
|
|
// OutStartPm = pmOut.START_TIME; //打卡时间
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// OutStartPm = "公差";
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// OutStartPm = "请假";
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// OutStartPm = pmOut.START_TIME;
|
|
// }
|
|
|
|
|
|
// //上午上班考勤
|
|
// if (InStart == "公差" || InStart == "请假")
|
|
// {
|
|
// //lateHours = 0;
|
|
// }
|
|
// else if (InStart == "未签入")
|
|
// {
|
|
// //未签入属于旷工
|
|
// absenteeismHours1 += DiffHours(Convert.ToDateTime(listTask[0].UP_END_DATE), Convert.ToDateTime(listTask[0].DOWN_START_DATE), 0);
|
|
// isAbsenteeism1 = true;
|
|
// }
|
|
// else
|
|
// {
|
|
// //判断是否存在矿工 开始时间、结束时间、相差分钟因子 ATT_RULE2
|
|
// absenteeismHours1 += DiffHours(Convert.ToDateTime(d2), Convert.ToDateTime(InStart), Convert.ToInt32(listTask[0].ATT_RULE2));
|
|
// //如果存在旷工的情况,则计算出旷工的时长,下班时间减去上班时间
|
|
// if (absenteeismHours1 == 0) //如果不旷工计算是否迟到
|
|
// {
|
|
// //判断是否存在迟到 开始时间、结束时间、相差分钟因子 ATT_RULE1
|
|
// lateHours1 += DiffHours(Convert.ToDateTime(d2), Convert.ToDateTime(InStart), Convert.ToInt32(listTask[0].ATT_RULE1));
|
|
// }
|
|
// else
|
|
// {
|
|
// absenteeismHours1 += absenteeismHours1 == 0 ? 0 : DiffHours(Convert.ToDateTime(listTask[0].DOWN_START_DATE), Convert.ToDateTime(listTask[0].UP_END_DATE), 0);
|
|
// isAbsenteeism1 = true;
|
|
// }
|
|
// }
|
|
|
|
// //上午下班考勤
|
|
// if (OutStart == "公差" || OutStart == "请假")
|
|
// {
|
|
// //lateHours = 0;
|
|
// }
|
|
// else if (OutStart == "未签出")
|
|
// {
|
|
// //未签入属于旷工
|
|
// if (!isAbsenteeism1)
|
|
// {
|
|
// absenteeismHours1 += DiffHours(Convert.ToDateTime(listTask[0].UP_END_DATE), Convert.ToDateTime(listTask[0].DOWN_START_DATE), 0);
|
|
// lateHours1 = 0; //已经属于旷工了,就可以把早上的迟到改为0了
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// //判断是否存在矿工 开始时间、结束时间、相差分钟因子 ATT_RULE2
|
|
// absenteeismHours1 += DiffHours(Convert.ToDateTime(OutStart), Convert.ToDateTime(d4), Convert.ToInt32(listTask[0].ATT_RULE4));
|
|
// //如果存在旷工的情况,则计算出旷工的时长,下班时间减去上班时间
|
|
// if (absenteeismHours1 == 0) //如果不旷工计算是否迟到
|
|
// {
|
|
// //判断是否存在早退 开始时间、结束时间、相差分钟因子 ATT_RULE3
|
|
// if (!isAbsenteeism1)
|
|
// {
|
|
// LeaveEarlyHours1 += DiffHours(Convert.ToDateTime(OutStart), Convert.ToDateTime(d3), Convert.ToInt32(listTask[0].ATT_RULE3));
|
|
// //判断是否加班
|
|
// workOvertimeHours1 += DiffHours(Convert.ToDateTime(d4), Convert.ToDateTime(OutStart), Convert.ToInt32(listTask[0].ATT_RULE5));
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// if (!isAbsenteeism1)
|
|
// {
|
|
// absenteeismHours1 += absenteeismHours1 == 0 ? 0 : DiffHours(Convert.ToDateTime(listTask[0].DOWN_START_DATE), Convert.ToDateTime(listTask[0].UP_END_DATE), 0);
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
// //判断 如果是当天的考勤需要判断一下上午上下班的考勤时间是否都已经结束,如果已经结束,才能确认为旷工
|
|
// if (DateTime.Now < d4)
|
|
// {
|
|
// absenteeismHours1 = 0;
|
|
// }
|
|
|
|
// //下午上班考勤
|
|
// if (InStartPm == "公差" || InStartPm == "请假")
|
|
// {
|
|
// //lateHours = 0;
|
|
// }
|
|
// else if (InStartPm == "未签入")
|
|
// {
|
|
// //未签入属于旷工
|
|
// absenteeismHours2 += DiffHours(Convert.ToDateTime(listTask[0].UP_END_DATE2), Convert.ToDateTime(listTask[0].DOWN_START_DATE2), 0);
|
|
// isAbsenteeism2 = true;
|
|
// }
|
|
// else
|
|
// {
|
|
// //判断是否存在矿工 开始时间、结束时间、相差分钟因子 ATT_RULE2
|
|
// absenteeismHours2 += DiffHours(Convert.ToDateTime(d6), Convert.ToDateTime(InStartPm), Convert.ToInt32(listTask[0].ATT_RULE4));
|
|
// //如果存在旷工的情况,则计算出旷工的时长,下班时间减去上班时间
|
|
// if (absenteeismHours2 == 0) //如果不旷工计算是否迟到
|
|
// {
|
|
// //判断是否存在迟到 开始时间、结束时间、相差分钟因子 ATT_RULE1
|
|
// lateHours2 += DiffHours(Convert.ToDateTime(d6), Convert.ToDateTime(InStartPm), Convert.ToInt32(listTask[0].ATT_RULE3));
|
|
// }
|
|
// else
|
|
// {
|
|
// absenteeismHours2 += absenteeismHours2 == 0 ? 0 : DiffHours(Convert.ToDateTime(listTask[0].DOWN_START_DATE2), Convert.ToDateTime(listTask[0].UP_END_DATE2), 0);
|
|
// isAbsenteeism2 = true;
|
|
// }
|
|
// }
|
|
|
|
// //下午下班考勤
|
|
// if (OutStartPm == "公差" || OutStartPm == "请假")
|
|
// {
|
|
// //lateHours = 0;
|
|
// }
|
|
// else if (OutStartPm == "未签出")
|
|
// {
|
|
// //未签入属于旷工
|
|
// if (!isAbsenteeism2)
|
|
// {
|
|
// absenteeismHours2 += DiffHours(Convert.ToDateTime(listTask[0].UP_END_DATE2), Convert.ToDateTime(listTask[0].DOWN_START_DATE2), 0);
|
|
// lateHours2 = 0; //已经属于旷工了,就可以把早上的迟到改为0了
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// //判断是否存在矿工 开始时间、结束时间、相差分钟因子 ATT_RULE2
|
|
// absenteeismHours2 += DiffHours(Convert.ToDateTime(OutStartPm), Convert.ToDateTime(d7), Convert.ToInt32(listTask[0].ATT_RULE4));
|
|
// //如果存在旷工的情况,则计算出旷工的时长,下班时间减去上班时间
|
|
// if (absenteeismHours2 == 0) //如果不旷工计算是否迟到
|
|
// {
|
|
// //判断是否存在早退 开始时间、结束时间、相差分钟因子 ATT_RULE3
|
|
// if (!isAbsenteeism2)
|
|
// {
|
|
// LeaveEarlyHours2 += DiffHours(Convert.ToDateTime(OutStartPm), Convert.ToDateTime(d7), Convert.ToInt32(listTask[0].ATT_RULE3));
|
|
// //判断是否加班
|
|
// workOvertimeHours1 += DiffHours(Convert.ToDateTime(d7), Convert.ToDateTime(OutStartPm), Convert.ToInt32(listTask[0].ATT_RULE5));
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// if (!isAbsenteeism2)
|
|
// {
|
|
// absenteeismHours2 += absenteeismHours2 == 0 ? 0 : DiffHours(Convert.ToDateTime(listTask[0].DOWN_START_DATE2), Convert.ToDateTime(listTask[0].UP_END_DATE2), 0);
|
|
// }
|
|
// }
|
|
// }
|
|
// //判断 如果是当天的考勤需要判断一下下午上下班的考勤时间是否都已经结束,如果已经结束,才能确认为旷工
|
|
// if (DateTime.Now < d8)
|
|
// {
|
|
// absenteeismHours2 = 0;
|
|
// }
|
|
|
|
|
|
|
|
// retList.Add(new AttendanceStatisticsXZZDJGMo()
|
|
// {
|
|
// DataStr = dayStr,
|
|
// DepName = orgObj.ORG_NAME,
|
|
// EmpName = empObj.EMP_NAME,
|
|
// InStart = InStart,
|
|
// OutStart = OutStart,
|
|
// InfoState = 0,
|
|
// InStartPm = InStartPm,
|
|
// OutStartPm = OutStartPm,
|
|
// lateHours = lateHours1 + lateHours2,
|
|
// LeaveEarlyHours = LeaveEarlyHours1 + LeaveEarlyHours2,
|
|
// workOvertimeHours = workOvertimeHours1 + workOvertimeHours2,
|
|
// absenteeismHours = absenteeismHours1 + absenteeismHours2
|
|
// });
|
|
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// retList.Add(new AttendanceStatisticsXZZDJGMo()
|
|
// {
|
|
// DataStr = "",
|
|
// DepName = orgObj.ORG_NAME,
|
|
// EmpName = empObj.EMP_NAME,
|
|
// InStart = "-",
|
|
// OutStart = "-",
|
|
// InfoState = 0,
|
|
// InStartPm = "-",
|
|
// OutStartPm = "-",
|
|
// lateHours = 0,
|
|
// LeaveEarlyHours = 0,
|
|
// workOvertimeHours = 0,
|
|
// absenteeismHours = 0
|
|
|
|
// });
|
|
// }
|
|
// }
|
|
// }
|
|
// List<AttendanceStatisticsXZZDJGMo> returnList = new List<AttendanceStatisticsXZZDJGMo>();
|
|
|
|
// if (attendanceState == "0") //正常
|
|
// {
|
|
// returnList = retList.Where(p => p.lateHours == 0 && p.LeaveEarlyHours == 0 && p.absenteeismHours == 0).ToList();
|
|
|
|
// }
|
|
// else if (attendanceState == "1") //迟到
|
|
// {
|
|
// returnList = retList.Where(p => p.lateHours != 0).ToList();
|
|
// }
|
|
// else if (attendanceState == "2") // 早退
|
|
// {
|
|
// returnList = retList.Where(p => p.LeaveEarlyHours != 0).ToList();
|
|
// }
|
|
// else if (attendanceState == "3") //加班
|
|
// {
|
|
// returnList = retList.Where(p => p.workOvertimeHours != 0).ToList();
|
|
// }
|
|
// else if (attendanceState == "4") // 旷工
|
|
// {
|
|
// returnList = retList.Where(p => p.absenteeismHours != 0).ToList();
|
|
// }
|
|
// else
|
|
// {
|
|
// returnList = retList; //
|
|
// }
|
|
|
|
|
|
|
|
// returnstr = "{\"code\":\"200\",\"msg\":\"操作成功!\",\"data\":" + FangYar.Common.JsonHelper.ToJson(returnList) + "}";
|
|
// }
|
|
// 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, "人脸点名统计操作请求", "西藏总队机关考勤统计查询");
|
|
|
|
// ////人员总数
|
|
// //returnstr += "\"userCount\":" + userCount;
|
|
// ////实到人员总数
|
|
// //returnstr += ",\"sdUserCount\":" + sdUserCount;
|
|
// ////实到人员比例
|
|
// //returnstr += ",\"sdbfb\":" + sdbfb;
|
|
// ////部门数据集合
|
|
// //returnstr += ",\"deptDataArr\":" + deptDataArr;
|
|
// ////部门名称集合
|
|
// //returnstr += ",\"deptNameArr\":" + deptNameArr;
|
|
// ////部门数据背景集合
|
|
// //returnstr += ",\"deptDataBjArr\":" + deptDataBjArr;
|
|
// ////部门数据背景集合
|
|
// //returnstr += ",\"tbData\":" + FangYar.Common.JsonHelper.ToJson(dt3);
|
|
|
|
// //returnstr += "}}";
|
|
// return returnstr;
|
|
//}
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
public double DiffHours(DateTime startTime, DateTime endTime, int diffMinutesFactor)
|
|
{
|
|
try
|
|
{
|
|
TimeSpan hoursSpan = new TimeSpan(endTime.Ticks - startTime.Ticks);
|
|
return Math.Round(hoursSpan.TotalHours > ((double)diffMinutesFactor / 60) ? hoursSpan.TotalHours : 0, 2);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
return 0.00;
|
|
}
|
|
|
|
}
|
|
|
|
public class AttendanceStatisticsXZZDJGMo
|
|
{
|
|
/// <summary>
|
|
/// 部门名称
|
|
/// </summary>
|
|
public string DepName { get; set; }
|
|
|
|
/// <summary>
|
|
/// 人员名称
|
|
/// </summary>
|
|
public string EmpName { get; set; }
|
|
/// <summary>
|
|
/// 考勤日期
|
|
/// </summary>
|
|
public string DataStr { get; set; }
|
|
/// <summary>
|
|
/// 上午签入状态
|
|
/// </summary>
|
|
public string InStart { get; set; }
|
|
/// <summary>
|
|
/// 上午签出状态
|
|
/// </summary>
|
|
public string OutStart { get; set; }
|
|
/// <summary>
|
|
/// 下午签入状态
|
|
/// </summary>
|
|
public string InStartPm { get; set; }
|
|
/// <summary>
|
|
/// 下午签出状态
|
|
/// </summary>
|
|
public string OutStartPm { get; set; }
|
|
/// <summary>
|
|
/// 信息状态:0、正常;1、旷工;2、迟到;3、早退;4、加班;5、请假;6、出差;
|
|
/// </summary>
|
|
public int InfoState { get; set; }
|
|
/// <summary>
|
|
/// 迟到
|
|
/// </summary>
|
|
public double lateHours { get; set; }
|
|
/// <summary>
|
|
/// 早退
|
|
/// </summary>
|
|
public double LeaveEarlyHours { get; set; }
|
|
/// <summary>
|
|
/// 加班
|
|
/// </summary>
|
|
public double workOvertimeHours { get; set; }
|
|
/// <summary>
|
|
/// 旷工
|
|
/// </summary>
|
|
public double absenteeismHours { get; set; }
|
|
/// <summary>
|
|
/// 考勤上午开始人脸识别状态:0、未识别;1、已经识别;2、迟到
|
|
/// </summary>
|
|
public int KQ_FACE_READ_START_STATE_AM { get; set; }
|
|
/// <summary>
|
|
/// 考勤上午最后人脸识别状态:0、未识别;1、已经识别;2、早退
|
|
/// </summary>
|
|
public int KQ_FACE_READ_END_STATE_AM { get; set; }
|
|
/// <summary>
|
|
/// 考勤下午开始人脸识别状态:0、未识别;1、已经识别;2、迟到
|
|
/// </summary>
|
|
public int KQ_FACE_READ_START_STATE_PM { get; set; }
|
|
/// <summary>
|
|
/// 考勤下午最后人脸识别状态:0、未识别;1、已经识别;2、早退
|
|
/// </summary>
|
|
public int KQ_FACE_READ_END_STATE_PM { get; set; }
|
|
}
|
|
|
|
|
|
|
|
public bool IsReusable
|
|
{
|
|
get
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|