/// ****************************************************************** /// <summary> /// 获取所有员工列表, 管理员、总经理 /// </summary> /// <returns> /// 返回所有员工的数据集合 /// </returns> /// ****************************************************************** private List <EmployeeInfo> getList(string strWhere) { string sql = string.Format(@"SELECT * FROM T_EmployeeInfo {0}", strWhere); DataRowCollection rows = MrDBAccess.ExecuteDataSet(sql).Tables[0].Rows; return(getEmployeeInfo(rows)); }
/******************************************************************* *获取员工的出勤信息,部门经理、总经理和管理与昂 * 参数:depID 部门ID * empName 员工姓名,nullable * date 查询时间,nullable * rate 出勤率 枚举类型 ******************************************************************/ public List <CheckInInfo> GetCheckInInfoList(int depID = 0, string empNameLike = null, string startDate = null, string endDate = null, string rate = null) { string sql = "SELECT * FROM T_CheckingInInfo WHERE 1=1 "; if (!string.IsNullOrEmpty(empNameLike)) { sql += string.Format(@"AND F_EmpName LIKE '%{0}%' ", empNameLike); } if (!string.IsNullOrEmpty(startDate) && !string.IsNullOrEmpty(endDate)) { sql += string.Format(@"AND (F_Date>='{0}' AND F_Date<='{1}') ", startDate, endDate); } if (!string.IsNullOrEmpty(rate) && rate == "1") { sql += string.Format(@"AND F_CIIsNormal='1' "); } if (!string.IsNullOrEmpty(rate) && rate == "0") { sql += string.Format(@"AND F_CIIsNormal!='1'"); } if (depID != 0) { sql += string.Format(@"AND F_DepID={0} ", depID); } sql += string.Format(@" order by F_Date desc"); DataRowCollection rows = MrDBAccess.ExecuteDataSet(sql).Tables[0].Rows; if (rows != null && rows.Count > 0) { return(getCheckInInfo(rows)); } return(null); }
/// ****************************************************************** /// <summary> /// 获取本人信息, 普通员工 /// </summary> /// <param name="empID">员工ID</param> /// <returns> /// 返回一个EmployeeInfo对象 /// </returns> /// ****************************************************************** public EmployeeInfo GetEmployee(int empID) { string sql = string.Format(@"SELECT * FROM T_EmployeeInfo WHERE F_EmpID={0}", empID); DataRowCollection row = MrDBAccess.ExecuteDataSet(sql).Tables[0].Rows; return(getEmployeeInfo(row)[0]); }
/************************************************************************* * 描述:获取月考勤信息 * 参数:empID 员工ID * empName 员工姓名 * date 查询日期 * rate 出勤率,全勤1,非全勤0,所有null * depID 部门ID * **********************************************************************/ /*获取部门员工考勤月统计数据*/ public List <MonthAttendance> GetAttendanceStatistics(string date, string depID = null, string empName = null, string rate = null) { string sql = string.Format(@"SELECT * FROM T_AttendanceStatistics WHERE F_ASMonth={0} ", date); if (!string.IsNullOrEmpty(depID)) { sql += string.Format(@"AND F_DepID={0} ", depID); } if (!string.IsNullOrEmpty(empName)) { sql += string.Format(@"AND F_EmpName LIKE '%{0}%' ", empName); } if (!string.IsNullOrEmpty(rate) && rate.Equals("1")) { sql += string.Format(@"AND F_ASLateNumber=0 AND F_ASLeaveEavlyNumber=0 AND F_ASAbsenteeismNumber=0 "); } else if (!string.IsNullOrEmpty(rate) && rate.Equals("0")) { sql += string.Format(@"AND F_ASLateNumber!=0 OR F_ASLeaveEavlyNumber!=0 OR F_ASAbsenteeismNumber!=0 "); } sql += string.Format(@"ORDER BY F_ASMonth"); DataRowCollection rows = MrDBAccess.ExecuteDataSet(sql).Tables[0].Rows; if (rows != null && rows.Count > 0) { return(getAttendanceStatistics(rows)); } return(null); }
///******************************************************************************* /// <summary> /// 获取部门列表 /// </summary> /// <param name="depName">部门名称</param> /// <returns></returns> ///******************************************************************************* private List <Department> getList(string strWhere) { string sql = string.Format(@"SELECT * FROM T_Department {0}", strWhere); DataRowCollection rows = MrDBAccess.ExecuteDataSet(sql).Tables[0].Rows; return(getDepartment(rows)); }
/******************************************************************* * 功能:获取个人的出勤信息,普通员工 * 可用于查询 * 参数:empID 员工ID * empName 员工姓名 * date 查询时间,nullable * rate 出勤率 * 1全勤,0非全勤,null所有 * ****************************************************************/ public List <CheckInInfo> GetCheckInInfoList(string empID, string startDate, string endDate, string rate) { string sql = string.Format(@"SELECT * FROM T_CheckingInInfo WHERE F_EmpID={0} ", empID); if (!string.IsNullOrEmpty(startDate) && !string.IsNullOrEmpty(endDate)) { sql += string.Format(@" AND (F_Date>='{0}' AND F_Date<='{1}') ", startDate, endDate); } if (!string.IsNullOrEmpty(rate)) { //MODIFYED if (rate.Equals("1")) { sql += " AND F_CIIsNormal='1'"; } else { sql += " AND F_CIIsNormal!='1'"; } } sql += string.Format(@" order by F_Date desc"); DataRowCollection rows = MrDBAccess.ExecuteDataSet(sql).Tables[0].Rows; if (rows != null && rows.Count > 0) { return(getCheckInInfo(rows)); } return(null); }
/// <summary> /// 根据depID取部门单条信息 /// </summary> /// <param name="depID">部门id</param> /// <returns></returns> public Department GetInfo(int id) { string sql = string.Format(@"select * from T_Department where F_DepID={0}", id); DataRowCollection rows = MrDBAccess.ExecuteDataSet(sql).Tables[0].Rows; List <Department> deplist = getDepartment(rows); return(deplist != null ? deplist[0] : null); }
public CheckInInfo GetCheckInInfo(int checkInInfoID) { string sql = string.Format(@"SELECT * FROM T_CheckingInInfo WHERE F_CIID={0}", checkInInfoID); DataRowCollection row = MrDBAccess.ExecuteDataSet(sql).Tables[0].Rows; if (row != null && row.Count > 0) { return(getCheckInInfo(row)[0]); } return(null); }
/********************************************************************** * 获取WorkDuration数据 * *******************************************************************/ public WorkDuration GetWorkDuration() { string sql = string.Format(@"select * from T_WorkDuration"); DataRowCollection rows = MrDBAccess.ExecuteDataSet(sql).Tables[0].Rows; if (rows != null && rows.Count > 0) { return(getWorkDuration(rows)); } return(null); }
private CheckInInfo isCheckInInfoExisted(string date /*2015-11-23*/, int empID) { string sql = string.Format(@"SELECT * FROM T_CheckingInInfo WHERE F_Date='{0}' AND F_EmpID={1}", date, empID); DataRowCollection rows = MrDBAccess.ExecuteDataSet(sql).Tables[0].Rows; if (rows.Count == 0) { return(null); } return(getCheckInInfo(rows)[0]); }
/// ********************************************************************* /// <summary> /// 描述:判断该员工当月是否已经统计过 /// </summary> /// <param name="asMonth">员工签到的月份</param> /// <param name="empID">员工ID</param> /// <returns> /// 返回:存在;true /// 不存在:false /// </returns> /// ********************************************************************* private bool isMonthAttendanceExist(int asMonth, int empID) { string sql = string.Format(@"SELECT * FROM T_AttendanceStatistics WHERE F_ASMonth={0} AND F_EmpID={1}", asMonth, empID); DataRowCollection rows = MrDBAccess.ExecuteDataSet(sql).Tables[0].Rows; if (rows.Count > 0) { return(true); } return(false); }
public bool hasSingOut(int empID, string appendDate) { string sql = string.Format(@"SELECT F_CIID FROM T_CheckingInInfo WHERE F_EmpID={0} AND F_Date='{1}' AND F_CIIsSignOut='1'", empID, appendDate); int count = MrDBAccess.ExecuteDataSet(sql).Tables[0].Rows.Count; if (count == 0) { return(false); } return(true); }
/// <summary> /// 重置密码 /// </summary> /// <returns>成功“1”,失败“0”</returns> public int ResetPwd(string empID) { /*1. 重置员工密码*/ string sql = string.Format(@"UPDATE T_EmployeeInfo SET F_EmpPwd='{0}' WHERE F_EmpID={1}", DataBase.StringToMD5Hash("123456"), empID); int res = MrDBAccess.ExecuteNonQuery(sql); if (res == 0) { return(0); } return(1); }
public CheckInInfo GetCheckInfo(int empID, string date) { string sql = string.Format(@"SELECT * FROM T_CheckingInInfo WHERE F_EmpID={0} AND F_Date='{1}'", empID, date); DataRowCollection rows = MrDBAccess.ExecuteDataSet(sql).Tables[0].Rows; List <CheckInInfo> list = getCheckInInfo(rows); if (list != null && list.Count > 0) { return(list[0]); } return(null); }
/// ************************************************************* /// <summary> /// 查询没有统计的所有签到信息 /// </summary> /// <returns></returns> /// ************************************************************* public List <CheckInInfo> GetCheckInInfoListNoCalculate() { string sql = string.Format(@"SELECT * FROM T_CheckingInInfo WHERE F_CIIsCalculate='0' AND F_CISignOutDate >= '1900-01-01'"); DataRowCollection rows = MrDBAccess.ExecuteDataSet(sql).Tables[0].Rows; List <CheckInInfo> list = new List <CheckInInfo>(); if (rows != null && rows.Count > 0) { list = getCheckInInfo(rows); return(list); } return(null); }
/// ************************************************************* /// <summary> /// 描述:根据员工的ID和姓名获取员工信息 /// </summary> /// <param name="empName">员工姓名</param> /// <param name="empID">员工ID</param> /// <returns> /// 返回:存在,返回员工对象 /// 不存在,返回NULL /// </returns> /// ************************************************************* public CheckInInfo GetCurrentCheckInInfo(int empID) { //MODIFY string sql = string.Format(@"SELECT * FROM T_CheckingInInfo WHERE F_EmpID={0} AND F_Date='{1}'", empID, DateTime.Now.ToString("yyyy-MM-dd")); DataRowCollection rows = MrDBAccess.ExecuteDataSet(sql).Tables[0].Rows; List <CheckInInfo> list = getCheckInInfo(rows); if (list != null && list.Count > 0) { return(list[0]); } return(null); }
/// ****************************************************************** /// <summary> /// 功能:删除员工 /// 参数:员工ID /// 返回:成功“1”,失败“0” /// </summary> /// <param name="empID">员工ID</param> /// <returns>成功返回“1”,否则返回“0”</returns> /// ****************************************************************** public int DeleteEmployee(string empID) { /*1. 执行删除操作*/ MonthAttendanceService.Instance.Delete(int.Parse(empID)); CheckInInfoService.Instance.DeleteCheckInInfo(int.Parse(empID)); string sql = string.Format(@"DELETE FROM T_EmployeeInfo WHERE F_EmpID={0}", empID); int res = MrDBAccess.ExecuteNonQuery(sql); if (res == 0) { return(0); } return(1); }
/******************************************************************************* * 功能:删除部门 * 参数:depID 部门ID * 返回:1 成功 * 0 失败 * *****************************************************************************/ public int DeleteDepartment(string id) { /*1. 删除部门后对其部门下的员工的处理*/ string strSql = string.Format(@"SELECT COUNT(1) as count FROM T_EmployeeInfo WHERE F_DepID={0}", id); int count = int.Parse(MrDBAccess.ExecuteDataSet(strSql).Tables[0].Rows[0]["count"].ToString()); if (count <= 0) { string sql = string.Format(@"delete from T_Department where F_DepID={0}", id); int res = MrDBAccess.ExecuteNonQuery(sql); if (res != 0) { return(1); } } return(0); }
/// ****************************************************************** /// <summary> /// 功能:修改密码 /// 参数:empID 员工ID /// newPwd 新密码 /// oldPwd旧密码 /// 返回:成功“1”,失败“0” /// </summary> /// <param name="newPwd">新密码</param> /// <param name="empID">员工ID</param> /// <param name="oldPwd">旧密码</param> /// <returns>成功“1”,失败“0”</returns> /// ****************************************************************** public int ModifyPwd(string id, string newPwd, string oldPwd) { /*1. 修改密码*/ string confirmSql = string.Format("SELECT COUNT(1) FROM T_EmployeeInfo WHERE F_EmpID={0} AND F_EmpPwd='{1}'", id, oldPwd); int count = MrDBAccess.ExecuteNonQuery(confirmSql); if (count == 0) { return(0); } string sql = string.Format(@"UPDATE T_EmployeeInfo SET F_EmpPwd='{0}' WHERE F_EmpID={1}", newPwd, id); int res = MrDBAccess.ExecuteNonQuery(sql); if (res == 0) { return(0); } return(1); }
/*当前员工的考勤信息*/ public List <MonthAttendance> GetAttendanceStatistics(string empID, string date, string rate) { string sql = string.Format(@"SELECT * FROM T_AttendanceStatistics WHERE F_ASMonth={0} AND F_EmpID={1} ", date, empID); if (!string.IsNullOrEmpty(rate) && rate.Equals("0")) { sql += "AND F_ASStandardDuration > F_ASRealityDuration"; } else if (!string.IsNullOrEmpty(rate) && rate.Equals("1")) { sql += "AND F_ASStandardDuration = F_ASRealityDuration"; } sql += string.Format(@"ORDER BY F_ASMonth"); DataRowCollection rows = MrDBAccess.ExecuteDataSet(sql).Tables[0].Rows; if (rows != null && rows.Count > 0) { return(getAttendanceStatistics(rows)); } return(null); }
/// <summary> /// 描述:将没有统计过的签到信息设置为已经被统计过 /// </summary> public void SetCheckInInfoIsCalculate(List <CheckInInfo> checkInInfoList) { string sql = ""; if (checkInInfoList != null && checkInInfoList.Count > 0) { for (int i = 0; i < checkInInfoList.Count; i++) { sql += string.Format(@"UPDATE T_CheckingInInfo SET F_CIIsCalculate='1' WHERE F_CIID={0};", checkInInfoList[i].CIID); } try { MrDBAccess.ExecuteNonQuery(sql); } catch (Exception e) { //do something //TODO } } }
/******************************************************************************** * 功能:更新部门表 * 参数:depID 部门ID,可以为null * depName 部门名称 * 返回:1 更新成功 * 0 更新失败 * *****************************************************************************/ public int UpdateDepartment(string name, int id = 0) { string sql = ""; //判断部门名称是否存在 if (id == 0) { //添加 if (isDepartmentExist(name)) { return(0); } sql = string.Format(@"insert into T_Department(F_DepName) values('{0}')", name.Replace("'", "''")); return(MrDBAccess.ExecuteNonQuery(sql)); } else { //修改 if (isDepartmentExist(name)) { return(0); } int result = 0; sql = string.Format(@"update T_Department set F_DepName='{0}' where F_DepID={1}", name.Replace("'", "''"), id); string strSql = string.Format(@"update T_EmployeeInfo set F_DepName='{0}' where F_DepID={1}", name.Replace("'", "''"), id);//修改员工信息中的部门名称 try { MrDBAccess.BeginTransaction(); result = MrDBAccess.ExecuteNonQuery(sql); MrDBAccess.ExecuteNonQuery(strSql); MrDBAccess.CommitTransaction(); return(result); } catch (Exception) { MrDBAccess.RollbackTransaction(); } return(result); } }
/// ********************************************************************* /// <summary> /// 描述:当系统管理员修改了某个月份的工作时间时,将当月统计的所有信息 /// </summary> /// ********************************************************************* public void UpdateWhenDurationChange(int changeTime, int changeDay, int asMonth) { //MODIFY string sql = ""; WorkDuration workDuration = WorkDurationService.Instance.GetWorkDuration(); sql = string.Format(@"UPDATE T_AttendanceStatistics SET"); if (changeTime != 0) { sql += string.Format(@" F_ASStandardDuration=F_ASStandardDuration+({0})", workDuration.WDMonthDuration * changeTime); } if (changeDay != 0) { sql += string.Format(@" F_ASStandardDuration=F_ASStandardDuration+({0})", workDuration.WDDayDuration * changeDay); } sql += string.Format(@" WHERE F_ASMonth={0}", asMonth); try { MrDBAccess.ExecuteNonQuery(sql); } catch (Exception e) { /*TODO:*/ } }
/// ******************************************************************** /// <summary> /// 更新工作时长表 /// </summary> /// <param name="workDuration">WorkDuration对象</param> /// <returns>更新成功“1”,否则“0”</returns> /// ******************************************************************** public int UpdateWorkDuration(WorkDuration wd) { //更新WorkDuration数据表中的数据 WorkDuration workDuration = GetWorkDuration(); int oldWorkDayDuration = workDuration.WDDayDuration; TimeSpan timeSpan = DateTime.Parse(wd.LeaveEarlyTime) - DateTime.Parse(wd.NormalTime); int newWorkDayDuration = timeSpan.Hours; string sql = string.Format(@"UPDATE T_WorkDuration SET F_WDMonthDuration={0}, F_WDSignInMonth='{1}', F_NormalTime='{2}', F_AbsentSignInTime='{3}', F_AbsentSignOutTime='{4}', F_LeaveEarlyTime='{5}', F_WDFloatTime={6}, F_WDDayDurattion={7}", wd.WDMonthDuration, wd.WDSignInMonth.Replace("'", "''"), wd.NormalTime.Replace("'", "''"), wd.AbsentSignInTime.Replace("'", "''"), wd.AbsentSignOutTime.Replace("'", "''"), wd.LeaveEarlyTime.Replace("'", "''"), wd.WDFloatTime.Replace("'", "''"), newWorkDayDuration); int res = MrDBAccess.ExecuteNonQuery(sql); if (oldWorkDayDuration != newWorkDayDuration || wd.WDMonthDuration != workDuration.WDMonthDuration) { MonthAttendanceService.Instance.UpdateWhenDurationChange(newWorkDayDuration - oldWorkDayDuration, wd.WDMonthDuration - workDuration.WDMonthDuration, DataBase.SetInt(DateTime.Now.ToString())); } if (res == 0) { return(0); } return(1); }
/// ****************************************************************** /// <summary> /// 更新Employee数据表数据 /// </summary> /// <param name="employee">员工对象</param> /// <returns> /// 更新成功“1” /// 否则返回“0” /// </returns> /// ****************************************************************** public int Update(EmployeeInfo employee) { string sql = ""; /*1. empID为null,执行添加操作*/ if (string.IsNullOrEmpty(employee.EmpID)) { sql = string.Format(@"INSERT INTO T_EmployeeInfo(F_EmpName, F_EmpRole, F_DepID, F_DepName, F_EmpAccount, F_EmpPwd, F_EmpCreateDate) VALUES('{0}','{1}',{2},'{3}','{4}','{5}','{6}')", employee.EmpName, employee.EmpRole, employee.DepID, employee.DepName, employee.EmpAccount, employee.EmpPwd, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); } /*2. empID不为null,执行修改操作*/ else { sql = string.Format(@"UPDATE T_EmployeeInfo SET F_EmpName='{0}',F_EmpRole='{1}',F_EmpAccount='{2}',F_DepID={3},F_DepName='{4}' WHERE F_EmpID={5}", employee.EmpName, employee.EmpRole, employee.EmpAccount, employee.DepID, employee.DepName, employee.EmpID); } int res = MrDBAccess.ExecuteNonQuery(sql); if (res == 0) { return(0); } return(1); }
public void Delete(int empID) { string sql = string.Format(@"DELETE FROM T_AttendanceStatistics WHERE F_EmpID={0}", empID); MrDBAccess.ExecuteNonQuery(sql); }
/***************************************************************** * 功能:补签到补签退 * 补签到 * 补签退 * 参数:checkInInfoID 被操作的考勤信息的ID(可选参数) * empID 补签到(补签退)员工ID * empName 补签到(补签退)员工姓名 * note 补签到(补签退)说明 * 返回:成功“1”,失败“0” * **************************************************************/ public int UpdateCheckInInfoBySystem(string empID, string empName, int depID, string depName, string date, string note, string appendEmpID = null, string appendEmpName = null, int checkInInfoID = 0) { //MODIFY string sql = ""; if (checkInInfoID == 0) { //补签到 //1. 如果已经被补签到过,更新操作 CheckInInfo oldCheckInfo = isCheckInInfoExisted(DateTime.Parse(date).ToString("yyyy-MM-dd"), int.Parse(empID)); WorkDuration workDuration = WorkDurationService.Instance.GetWorkDuration(); if (oldCheckInfo != null) { DateTime signInTime = DateTime.Parse(date); DateTime signOutTime = DateTime.Parse(oldCheckInfo.CISignOutDate); TimeSpan ts = signOutTime - signInTime; int workTime = 0; if (ts.Minutes > 40) { workTime = ts.Hours + 1; } workTime = ts.Hours; if (workTime > workDuration.WDDayDuration) { workTime = workDuration.WDDayDuration; } sql = string.Format(@"UPDATE T_CheckingInInfo SET F_CISignInDate='{0}', F_AppendSignOutPersonID={1}, F_AppendSignOutPersonName='{2}', F_AppendSignOutPersonNote='{3}', F_CIRealityWorkDuration={4} {5} WHERE F_CIID={6}", date, appendEmpID, appendEmpName, note.Replace("'", "''"), workTime, makeUpdateSql(signInTime, signOutTime, workDuration, DateTime.Parse(date).ToString("yyyy-MM-dd")), oldCheckInfo.CIID); int res = MrDBAccess.ExecuteNonQuery(sql); if (res == 0) { return(0); } CheckInInfo newCheckInfo = GetCheckInInfo(oldCheckInfo.CIID); doCalculate(newCheckInfo, oldCheckInfo); return(1); } #region --------------------------------------------插入Sql语句 else { //2. 没有被补签到过,进行插入操作 sql = string.Format(@"Insert into T_CheckingInInfo( F_EmpID, F_EmpName, F_DepID, F_DepName, F_CISignInDate, F_CIRealityWorkDuration, F_AppendSignInPersonID, F_AppendSignInPersonName, F_AppendSignInPersonNote, F_CIIsLate, F_CIIsLeaveEarvly, F_CIIsAbsenteeism, F_CIIsNormal, F_CICreateDate, F_CIIsSignIn, F_CIIsSignOut, F_CIIsCalculate, F_Date ) values({0},'{1}',{2},'{3}','{4}',{5},{6},'{7}','{8}',{9},{10},{11},{12},'{13}',{14},{15},{16}, '{17}')", empID, empName, depID, depName, date, 0, int.Parse(appendEmpID), appendEmpName, note.Replace("'", "''"), "0 ", //F_CIIsLate "0", //F_CIIsLeaveEavly "0", //F_CIIsAbsenteeism "0", //F_CIIsNormal DateTime.Now.ToString("yyyy-MM-dd"), "0", "0", "0", DateTime.Parse(date).ToString("yyyy-MM-dd")); //设置补签为true int res = MrDBAccess.ExecuteNonQuery(sql); if (res == 0) { return(0); } return(1); } #endregion } else { #region ------------------------------------------补签退 CheckInInfo oldCheckInInfo = GetCheckInInfo(checkInInfoID); DateTime signInTime = DateTime.Parse(oldCheckInInfo.CISignInDate); DateTime signOutTime = DateTime.Parse(date); //MODIFY 补签退时进行这一天的工作装填统计 TimeSpan ts = signOutTime - signInTime; int workTime = 0; if (ts.Minutes > 40) { workTime = ts.Hours + 1; } workTime = ts.Hours; sql = string.Format(@"UPDATE T_CheckingInInfo SET F_CISignOutDate='{0}', F_AppendSignOutPersonID={1}, F_AppendSignOutPersonName='{2}', F_AppendSignOutPersonNote='{3}', F_CIRealityWorkDuration={4} {5} WHERE F_CIID={6}", signOutTime, appendEmpID, appendEmpName, note, workTime, makeUpdateSql(signInTime, signOutTime, WorkDurationService.Instance.GetWorkDuration(), DateTime.Parse(date).ToString("yyyy-MM-dd")), checkInInfoID); int res = MrDBAccess.ExecuteNonQuery(sql); #endregion #region ---------------------------------------补签退后面的统计处理 //补签退失败 if (res == 0) { return(0); } else { //补签退成功 //对被补签的员工进行统计 CheckInInfo newCheckInfo = GetCheckInInfo(checkInInfoID); doCalculate(newCheckInfo, oldCheckInInfo); return(1); } #endregion } }
/***************************************************************** * 功能:正常情况下 * 签到 * 签退 * 参数:checkInInfoID 被操作的考勤信息的ID(可选参数) * empID 员工ID * empName 员工姓名 * depID 员工所属部门 * depName 员工所属部门名称 * date 签到签退时间 * 返回:成功“1”,失败“0” * **************************************************************/ public int UpdateCheckInInfo(int empID, string empName, int depID, string depName, string date, int checkInInfoID = 0) { //MODIFY string sql = ""; /*是否有签到记录*/ string checkSql = string.Format(@"select * from T_CheckingInInfo where F_EmpID={0} and (F_CISignInDate>'{1}' and F_CISignInDate<'{2}') ", empID, DateTime.Now.ToString("yyyy-MM-dd"), DateTime.Now.AddDays(1).ToString("yyyy-MM-dd")); DataRowCollection rows = MrDBAccess.ExecuteDataSet(checkSql).Tables[0].Rows; WorkDuration workDuration = WorkDurationService.Instance.GetWorkDuration(); /*1. checkInInfoID为0时,添加(签到)*/ if (checkInInfoID == 0) { //已经签过到,退出,返回0 if (rows != null && rows.Count > 0) { return(0); } //签到时间 DateTime signInTime = DateTime.Parse(date); sql = string.Format(@"Insert into T_CheckingInInfo( F_EmpID, F_EmpName, F_DepID, F_DepName, F_CISignInDate, F_CIRealityWorkDuration, F_AppendSignInPersonID, F_AppendSignInPersonName, F_AppendSignInPersonNote, F_CIIsLate, F_CIIsLeaveEarvly, F_CIIsAbsenteeism, F_CIIsNormal, F_CICreateDate, F_CIIsSignIn, F_CIIsSignOut, F_CIIsCalculate, F_Date ) values({0},'{1}',{2},'{3}','{4}',{5},{6},'{7}','{8}',{9},{10},{11},{12},'{13}',{14},{15},{16}, '{17}')", empID, empName, depID, depName, signInTime.ToString("yyyy-MM-dd HH:mm:ss"), 0, 0, "", "", "0 ", //F_CIIsLate "0", //F_CIIsLeaveEavly "0", //F_CIIsAbsenteeism "0", //F_CIIsNormal DateTime.Now.ToString("yyyy-MM-dd"), "1", "0", "0", signInTime.ToString("yyyy-MM-dd")); } /*2. checkInInfoID不为0时,修改(签退)*/ else { bool isLate = false; bool isAbsent = false; bool isLeaveEarly = false; bool isNormal = false; //还没签到,不能进行签退,正常情况下是不会执行句代码 if (rows == null && rows.Count == 0) { return(0); } //用户点击签退时时间 DateTime signOutTime = DateTime.Parse(date); //签到时间 DateTime signInTime = DateTime.Parse(rows[0]["F_CISignInDate"].ToString()); //正常签到时间 DateTime normalSignInTime = DateTime.Parse(workDuration.NormalTime); //缺席时间 DateTime absentTimeSignIn = DateTime.Parse(workDuration.AbsentSignInTime); DateTime absentTimeSignOut = DateTime.Parse(workDuration.AbsentSignOutTime); //正常下班时间 DateTime normalLeaveTime = DateTime.Parse(workDuration.LeaveEarlyTime); //浮动时间,单位:分钟 int floatTime = int.Parse(workDuration.WDFloatTime); //一天工作时长计算 TimeSpan ts = signOutTime - signInTime; int workTime = 0; if (ts.Minutes > 40) { workTime = ts.Hours + 1; } workTime = ts.Hours; if (workTime > workDuration.WDDayDuration) { workTime = workDuration.WDDayDuration; } //出现旷工情况 if (signInTime > absentTimeSignIn || signOutTime < absentTimeSignOut) { isAbsent = true; } //迟到 if ((signInTime > normalSignInTime && signInTime < absentTimeSignIn && workTime < 9) || (signInTime > normalSignInTime.AddMinutes(floatTime) && signInTime < absentTimeSignIn)) { isLate = true; } //早退 if (signOutTime < normalLeaveTime && signOutTime > absentTimeSignOut) { isLeaveEarly = true; } //正常 if (!isLate && !isAbsent && !isLeaveEarly) { isNormal = true; } int normalCount = 0, lateCount = 0, absentCount = 0, leaveEarlyCount = 0; if (isNormal) { normalCount = 1; } if (isAbsent) { absentCount = 1; } if (isLate) { lateCount = 1; } if (isLeaveEarly) { leaveEarlyCount = 1; } sql = string.Format(@"UPDATE T_CheckingInInfo SET F_CISignOutDate='{0}', F_CIRealityWorkDuration={1},F_CIIsLate='{2}', F_CIIsLeaveEarvly='{3}', F_CIIsAbsenteeism='{4}', F_CIIsNormal='{5}' WHERE F_CIID={6}", signOutTime, workTime, lateCount, leaveEarlyCount, absentCount, normalCount, checkInInfoID); } int result = MrDBAccess.ExecuteNonQuery(sql); //更新失败 if (result == 0) { return(0); } return(1); }
public void DeleteCheckInInfo(int empID) { string sql = string.Format(@"DELETE FROM T_CheckingInInfo WHERE F_EmpID={0}", empID); MrDBAccess.ExecuteNonQuery(sql); }
/// ************************************************************** /// <summary> /// 描述:为所有人补签到签退 /// </summary> /// <param name="date">签到或者签退的日期</param> /// <param name="signInTime">签到时间</param> /// <param name="signOutTime">签退时间</param> /// <param name="appendForEmpID">被补签到人的ID</param> /// <param name="note">说明</param> /// <returns></returns> /// ************************************************************** public int UpdateCheckInInfoBySystem(string date, string signInTime, string signOutTime, string note, int appendEmpID, string appendEmpName, int appendForEmpID) { string sql = ""; DateTime signInDate = DateTime.Parse(date + " " + signInTime); DateTime signOutDate = DateTime.Parse(date + " " + signOutTime); TimeSpan timeSpan = signOutDate - signInDate; WorkDuration workDuration = WorkDurationService.Instance.GetWorkDuration(); List <CheckInInfo> modifyedEmpList = new List <CheckInInfo>(); int workTime = timeSpan.Hours; if (workTime > workDuration.WDDayDuration) { workTime = workDuration.WDDayDuration; } if (appendForEmpID == 0) { List <EmployeeInfo> empList = EmployeeService.Instance.GetList(); if (empList != null && empList.Count > 0) { for (int i = 0; i < empList.Count; i++) { //为所有人进行签到签退 //判断是否已经签过到/退 //MODIFY CheckInInfo checkInfo = isCheckInInfoExisted(date, int.Parse(empList[i].EmpID)); if (checkInfo != null) { return(0); } #region ------------------1. 插入语句 //MODIFY //SQL语句过长问题 sql = string.Format(@"Insert into T_CheckingInInfo( F_EmpID, F_EmpName, F_DepID, F_DepName, F_CISignInDate, F_CISignOutDate, F_CIRealityWorkDuration, F_AppendSignInPersonID, F_AppendSignInPersonName, F_AppendSignInPersonNote, F_CIIsLate, F_CIIsLeaveEarvly, F_CIIsAbsenteeism, F_CIIsNormal, F_CICreateDate, F_CIIsSignIn, F_CIIsCalculate, F_Date ) values({0},'{1}',{2},'{3}','{4}','{5}',{6},{7},'{8}','{9}',{10}, '{11}',{12},{13},'{14}');", empList[i].EmpID, empList[i].EmpName, empList[i].DepID, empList[i].DepName, signInDate, signOutDate, workTime, appendEmpID, appendEmpName, note.Replace("'", "''"), makeSql(signOutDate, signInDate, workDuration), DateTime.Now.ToString("yyyy-MM-dd"), "0", "0", date); #endregion int res = MrDBAccess.ExecuteNonQuery(sql); if (res == 0) { return(0); } modifyedEmpList.Add(GetCheckInfo(int.Parse(empList[i].EmpID), date)); } } } else { //为某个员工进行签到签退 #region ---------------------------sql语句 EmployeeInfo employeeInfo = EmployeeService.Instance.GetEmployee(appendForEmpID); CheckInInfo checkInfo = isCheckInInfoExisted(date, int.Parse(employeeInfo.EmpID)); if (checkInfo != null) { return(0); } sql = string.Format(@"INSERT INTO T_CheckingInInfo(F_EmpID, F_EmpName, F_DepID, F_DepName, F_CISignInDate, F_CISignOutDate, F_CIRealityWorkDuration, F_AppendSignInPersonID, F_AppendSignInPersonName, F_AppendSignInPersonNote, F_CIIsLate, F_CIIsLeaveEarvly, F_CIIsAbsenteeism, F_CIIsNormal, F_CICreateDate, F_CIIsSignIn, F_CIIsCalculate, F_Date) VALUES({0},'{1}',{2},'{3}','{4}','{5}',{6},{7},'{8}','{9}',{10}, '{11}',{12},{13},'{14}')", employeeInfo.EmpID, employeeInfo.EmpName, employeeInfo.DepID, employeeInfo.DepName, signInDate, signOutDate, workTime, appendEmpID, appendEmpName, note.Replace("'", "''"), makeSql(signOutDate, signInDate, workDuration), DateTime.Now.ToString("yyyy-MM-dd"), "0", "0", date); #endregion int res = MrDBAccess.ExecuteNonQuery(sql); if (res == 0) { return(0); } modifyedEmpList.Add(GetCheckInfo(int.Parse(employeeInfo.EmpID), date)); } //List<CheckInInfo> modifyedEmpList = GetCheckInInfoListNoCalculate(); MonthAttendanceService.Instance.UpdateForAppendSignEmp(modifyedEmpList, true); return(1); }