| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  | using System; | 
					
						
							|  |  |  |  | using System.Collections.Generic; | 
					
						
							|  |  |  |  | using System.Linq; | 
					
						
							|  |  |  |  | using System.Text; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | namespace BLL | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |     /// <summary> | 
					
						
							| 
									
										
										
										
											2021-06-18 20:37:07 +08:00
										 |  |  |  |     /// 考勤 | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |     /// </summary> | 
					
						
							|  |  |  |  |     public static class DoorServerService | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         public static Model.SGGLDB db = Funs.DB; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 根据主键获取事故类型 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <param name="accidentTypeId"></param> | 
					
						
							|  |  |  |  |         /// <returns></returns> | 
					
						
							|  |  |  |  |         public static Model.T_d_EmployInOutRecord GetEmployInOutRecordById(string id) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             return Funs.DB.T_d_EmployInOutRecord.FirstOrDefault(e => e.NewID == id); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         #region 根据出入记录 写入考勤记录 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         ///  根据出入记录 写入考勤记录 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							| 
									
										
										
										
											2022-06-16 17:34:24 +08:00
										 |  |  |  |         public static void InsertEmployInOutRecord(Model.t_d_facerecordItem drecord,Model.SitePerson_Person getPerson) | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2025-02-26 09:09:47 +08:00
										 |  |  |  |             if (drecord.DateTimeRecord.HasValue && !string.IsNullOrEmpty(getPerson.PersonName)) | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |             { | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                 using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                 { | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                     Model.T_d_EmployInOutRecord newInOutRecord = new Model.T_d_EmployInOutRecord | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                     { | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                         NewID = SQLHelper.GetNewID(), | 
					
						
							|  |  |  |  |                         ProjectId = drecord.ProjectId, | 
					
						
							|  |  |  |  |                         InstallationName = ProjectService.GetProjectNameByProjectId(drecord.ProjectId), | 
					
						
							|  |  |  |  |                         RecordDate = drecord.DateTimeRecord.Value.Date, | 
					
						
							|  |  |  |  |                         IDCardNo = drecord.IDCardNo, | 
					
						
							|  |  |  |  |                     }; | 
					
						
							| 
									
										
										
										
											2022-06-16 17:34:24 +08:00
										 |  |  |  |                     ////获取人员                  | 
					
						
							|  |  |  |  |                     if (getPerson != null) | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                     { | 
					
						
							| 
									
										
										
										
											2022-06-16 17:34:24 +08:00
										 |  |  |  |                         newInOutRecord.UnitId = getPerson.UnitId; | 
					
						
							|  |  |  |  |                         newInOutRecord.UnitName = UnitService.GetUnitNameByUnitId(getPerson.UnitId); | 
					
						
							|  |  |  |  |                         newInOutRecord.DepartmentID = getPerson.TeamGroupId; | 
					
						
							|  |  |  |  |                         newInOutRecord.DepartName = TeamGroupService.GetTeamGroupNameByTeamGroupId(getPerson.TeamGroupId); | 
					
						
							|  |  |  |  |                         newInOutRecord.EmployNO = getPerson.CardNo; | 
					
						
							|  |  |  |  |                         newInOutRecord.EmployName = getPerson.PersonName; | 
					
						
							|  |  |  |  |                         newInOutRecord.Nation = getPerson.Nation; | 
					
						
							|  |  |  |  |                         newInOutRecord.NationName = BasicDataService.GetDictNameByDictCode(getPerson.Nation); | 
					
						
							|  |  |  |  |                         newInOutRecord.PostId = getPerson.WorkPostId; | 
					
						
							|  |  |  |  |                         newInOutRecord.PostName = WorkPostService.getWorkPostNameById(getPerson.WorkPostId); | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                     } | 
					
						
							|  |  |  |  |                     else | 
					
						
							|  |  |  |  |                     { | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                         newInOutRecord.EmployName = drecord.EmployName; | 
					
						
							|  |  |  |  |                         newInOutRecord.UnitId = null; | 
					
						
							|  |  |  |  |                         newInOutRecord.PostId = null; | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                     #region 上下班时间 | 
					
						
							|  |  |  |  |                     ///上午上班 8 | 
					
						
							|  |  |  |  |                     DateTime TWorkIn1 = drecord.DateTimeRecord.Value.Date.AddHours(8); | 
					
						
							|  |  |  |  |                     ///上午下班 12:30 | 
					
						
							|  |  |  |  |                     DateTime TOffDuty1 = drecord.DateTimeRecord.Value.Date.AddHours(12).AddMinutes(30); | 
					
						
							|  |  |  |  |                     ///下午上班 1:30 | 
					
						
							|  |  |  |  |                     DateTime TWorkIn2 = drecord.DateTimeRecord.Value.Date.AddHours(13).AddMinutes(30); | 
					
						
							|  |  |  |  |                     ///下午下班 7 | 
					
						
							|  |  |  |  |                     DateTime TOffDuty2 = drecord.DateTimeRecord.Value.Date.AddHours(19); | 
					
						
							|  |  |  |  |                     if (drecord.InOrOut == "进门") | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                     { | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                         ///上午上班 | 
					
						
							|  |  |  |  |                         if (drecord.DateTimeRecord < TOffDuty1) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             newInOutRecord.WorkIn1 = drecord.DateTimeRecord; | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                         else if (drecord.DateTimeRecord < TOffDuty2) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             newInOutRecord.WorkIn2 = drecord.DateTimeRecord; | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                         else | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             newInOutRecord.WorkIn3 = drecord.DateTimeRecord; | 
					
						
							|  |  |  |  |                         } | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                     } | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                     else | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                     { | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                         ///上午下班 | 
					
						
							|  |  |  |  |                         if (drecord.DateTimeRecord < TWorkIn2) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             newInOutRecord.OffDuty1 = drecord.DateTimeRecord; | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                         else if (drecord.DateTimeRecord < TOffDuty2.AddHours(1)) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             newInOutRecord.OffDuty2 = drecord.DateTimeRecord; | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                         else | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             newInOutRecord.OffDuty3 = drecord.DateTimeRecord; | 
					
						
							|  |  |  |  |                         } | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                     } | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                     #endregion | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                     bool isInsert = false; | 
					
						
							|  |  |  |  |                     var getInOutRecord = db.T_d_EmployInOutRecord.FirstOrDefault(x => x.ProjectId == drecord.ProjectId && x.IDCardNo == drecord.IDCardNo && x.RecordDate == drecord.DateTimeRecord.Value.Date); | 
					
						
							|  |  |  |  |                     if (getInOutRecord == null) | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                     { | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                         isInsert = true; | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                     } | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                     if (isInsert) | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                     { | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                         newInOutRecord.ManHours = 4; | 
					
						
							|  |  |  |  |                         newInOutRecord.ManOverHours = 0; | 
					
						
							|  |  |  |  |                         db.T_d_EmployInOutRecord.InsertOnSubmit(newInOutRecord); | 
					
						
							|  |  |  |  |                         db.SubmitChanges(); | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                     } | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                     else | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                     { | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                         #region 计算人工时 | 
					
						
							|  |  |  |  |                         if (newInOutRecord.WorkIn1.HasValue && (!getInOutRecord.WorkIn1.HasValue || getInOutRecord.WorkIn1 > newInOutRecord.WorkIn1)) | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                         { | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                             getInOutRecord.WorkIn1 = newInOutRecord.WorkIn1; | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                         } | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                         if (newInOutRecord.WorkIn2.HasValue && (!getInOutRecord.WorkIn2.HasValue || getInOutRecord.WorkIn2 > newInOutRecord.WorkIn2)) | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                         { | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                             getInOutRecord.WorkIn2 = newInOutRecord.WorkIn2; | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                         } | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                         if (newInOutRecord.WorkIn3.HasValue && (!getInOutRecord.WorkIn3.HasValue || getInOutRecord.WorkIn3 > newInOutRecord.WorkIn3)) | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                         { | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                             getInOutRecord.WorkIn3 = newInOutRecord.WorkIn3; | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                         if (newInOutRecord.OffDuty1.HasValue && (!getInOutRecord.OffDuty1.HasValue || getInOutRecord.OffDuty1 < newInOutRecord.OffDuty1)) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             getInOutRecord.OffDuty1 = newInOutRecord.OffDuty1; | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                         if (newInOutRecord.OffDuty2.HasValue && (!getInOutRecord.OffDuty2.HasValue || getInOutRecord.OffDuty2 < newInOutRecord.OffDuty2)) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             getInOutRecord.OffDuty2 = newInOutRecord.OffDuty2; | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                         if (newInOutRecord.OffDuty3.HasValue && (!getInOutRecord.OffDuty3.HasValue || getInOutRecord.OffDuty3 < newInOutRecord.OffDuty3)) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             getInOutRecord.OffDuty3 = newInOutRecord.OffDuty3; | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                         int m1 = 0; | 
					
						
							|  |  |  |  |                         if (getInOutRecord.WorkIn1.HasValue || getInOutRecord.OffDuty1.HasValue) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             m1 = 240; | 
					
						
							| 
									
										
										
										
											2022-04-09 10:14:04 +08:00
										 |  |  |  |                             if (getInOutRecord.WorkIn1.HasValue && getInOutRecord.OffDuty1.HasValue && getInOutRecord.OffDuty1> getInOutRecord.WorkIn1) | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                             { | 
					
						
							|  |  |  |  |                                 m1 = Convert.ToInt32((getInOutRecord.OffDuty1 - getInOutRecord.WorkIn1).Value.TotalMinutes); | 
					
						
							| 
									
										
										
										
											2022-04-09 10:14:04 +08:00
										 |  |  |  |                                 if (m1 < 0) | 
					
						
							|  |  |  |  |                                 { | 
					
						
							|  |  |  |  |                                     m1 = 0; | 
					
						
							|  |  |  |  |                                 } | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                             } | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                         int m2 = 0; | 
					
						
							|  |  |  |  |                         if (getInOutRecord.WorkIn2.HasValue || getInOutRecord.OffDuty2.HasValue) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             m2 = 240; | 
					
						
							| 
									
										
										
										
											2022-04-09 10:14:04 +08:00
										 |  |  |  |                             if (getInOutRecord.WorkIn2.HasValue && getInOutRecord.OffDuty2.HasValue && getInOutRecord.OffDuty2 > getInOutRecord.WorkIn2) | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                             { | 
					
						
							|  |  |  |  |                                 m2 = Convert.ToInt32((getInOutRecord.OffDuty2 - getInOutRecord.WorkIn2).Value.TotalMinutes); | 
					
						
							| 
									
										
										
										
											2022-04-09 10:14:04 +08:00
										 |  |  |  |                                 if (m2 < 0) | 
					
						
							|  |  |  |  |                                 { | 
					
						
							|  |  |  |  |                                     m2 =0; | 
					
						
							|  |  |  |  |                                 } | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                             } | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                         int m3 = 0; | 
					
						
							|  |  |  |  |                         if (getInOutRecord.WorkIn3.HasValue || getInOutRecord.OffDuty3.HasValue) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             m3 = 240; | 
					
						
							| 
									
										
										
										
											2022-04-09 10:14:04 +08:00
										 |  |  |  |                             if (getInOutRecord.WorkIn3.HasValue && getInOutRecord.OffDuty3.HasValue && getInOutRecord.OffDuty3 > getInOutRecord.WorkIn3)  | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                             { | 
					
						
							|  |  |  |  |                                 m3 = Convert.ToInt32((getInOutRecord.OffDuty3 - getInOutRecord.WorkIn3).Value.TotalMinutes); | 
					
						
							| 
									
										
										
										
											2022-04-09 10:14:04 +08:00
										 |  |  |  |                                 if (m3 < 0) | 
					
						
							|  |  |  |  |                                 { | 
					
						
							|  |  |  |  |                                     m3 =0; | 
					
						
							|  |  |  |  |                                 } | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                             } | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                         #endregion | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                         getInOutRecord.ManHours = Convert.ToInt32(Math.Ceiling((m1 + m2 + m3) * 1.0 / 60)); | 
					
						
							|  |  |  |  |                         getInOutRecord.ManOverHours = Convert.ToInt32(Math.Ceiling(m3 * 1.0 / 60)); | 
					
						
							|  |  |  |  |                         db.SubmitChanges(); | 
					
						
							|  |  |  |  |                     } | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |         #endregion | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         #region 获取单位信息 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         ///  获取单位信息 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <returns></returns>             | 
					
						
							|  |  |  |  |         public static Model.T_d_department GetSupDep(string projectId, int? departmentID, int ParentID) | 
					
						
							|  |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |             using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |             { | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                 var getDep =db.T_d_department.FirstOrDefault(x => x.ProjectId == projectId && x.DepartmentID == departmentID); | 
					
						
							|  |  |  |  |                 if (getDep != null) | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                 { | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                     if (getDep.ParentID == ParentID) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         return getDep; | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                     else | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         return GetSupDep(projectId, getDep.ParentID, ParentID); | 
					
						
							|  |  |  |  |                     } | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                 } | 
					
						
							|  |  |  |  |                 else | 
					
						
							|  |  |  |  |                 { | 
					
						
							| 
									
										
										
										
											2022-03-20 22:46:04 +08:00
										 |  |  |  |                     return null; | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |         #endregion | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | } |