/// <summary> /// 添加船员 /// </summary> /// <param name="protoModel"></param> /// <returns>0:成功 1:失败 2:数据重复</returns> public static int CrewAdd(ref CrewInfo protoModel) { using (var _context = new MyContext()) { var shipId = "";// _context.Ship.FirstOrDefault().Id; if (protoModel != null) { string name = protoModel.name; var dbemp = _context.Crew.FirstOrDefault(c => c.Name == name); if (dbemp != null) { return(2); } int uid = Convert.ToInt32(protoModel.uid); dbemp = _context.Crew.FirstOrDefault(c => c.Id == uid); if (dbemp == null) { SmartWeb.Models.Crew employee = new SmartWeb.Models.Crew() { Id = uid, Job = protoModel.job, Name = protoModel.name }; _context.Crew.Add(employee); _context.SaveChanges(); protoModel.uid = employee.Id.ToString(); AddCrewPicture(protoModel.pictures, employee.Id); } return(0); } return(1); } }
/// <summary> /// 添加考勤信息 /// </summary> /// <param name="alarmInfo"></param> /// <param name="context"></param> /// <param name="shipId"></param> /// <param name="identity"></param> /// <param name="cid"></param> /// <param name="picture"></param> private static bool AddAttendance(Models.AlarmInfo alarmInfo, string shipId, string cid, string cname) { bool flag = false;//是否向陆地端推送 if (alarmInfo.uid != "") { int uid = 0; string identity = Guid.NewGuid().ToString(); SmartWeb.Models.Crew crew = new SmartWeb.Models.Crew(); using (var context = new MyContext()) { #region 考勤信息入库 if (ManagerHelp.IsShipPort) { if (alarmInfo.uid == "0") { if (alarmInfo.alarmposition != null && alarmInfo.alarmposition.Count > 0) { uid = alarmInfo.alarmposition[0].w; } } else { //得到船员ID try { uid = Convert.ToInt32(alarmInfo.uid); } catch (Exception) { byte[] array = new byte[1]; array = System.Text.Encoding.ASCII.GetBytes(alarmInfo.uid); uid = array[0]; } } //查询传入的船员ID是否存在 crew = context.Crew.FirstOrDefault(c => c.Id == uid); if (crew == null) { return(flag); } alarmInfo.uid = uid + ":" + crew.Name + ":" + crew.Job; //重复打卡只取最后一次 int behavior = alarmInfo.type == ProtoBuffer.Models.AlarmInfo.Type.ATTENDANCE_IN ? 0 : 1; var attes = context.Attendance.Where(c => c.CameraId == cid && c.CrewId == uid && c.Behavior == behavior).OrderByDescending(c => c.CreateTime).Take(1).ToList(); if (attes.Count() > 0) { DateTime dtNow = DateTime.Now; var atte = attes[0]; //5分钟内重复打卡不记入数据库 if ((dtNow - atte.CreateTime).Minutes >= 5) { AttendanceAdd(alarmInfo, shipId, cid, cname); flag = true; } } else { AttendanceAdd(alarmInfo, shipId, cid, cname); flag = true; } } else if (alarmInfo.uid != "0") { AttendanceAdd(alarmInfo, shipId, cid, cname); flag = true; } #endregion } if (ManagerHelp.IsShipPort) { #region 将考勤数据存入内存中 if (alarmInfo.type == Models.AlarmInfo.Type.ATTENDANCE_IN && (!ManagerHelp.atWorks.Where(c => c.Uid == uid).Any())) { ManagerHelp.atWorks.Add(new AtWork() { Uid = uid, Line = 1 }); if (ManagerHelp.atWorks.Count > 0) { ManagerHelp.LiveTime = ""; } } else if (alarmInfo.type == Models.AlarmInfo.Type.ATTENDANCE_OUT && ManagerHelp.atWorks.Where(c => c.Uid == uid).Any()) { var atwork = ManagerHelp.atWorks.FirstOrDefault(c => c.Uid == uid); ManagerHelp.atWorks.Remove(atwork); } if (ManagerHelp.atWorks.Count == 0) { ManagerHelp.LiveTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } #endregion #region 发送考勤给IPad if (crew != null && flag) { try { ProtoBDManager.AddReceiveLog("IpadStart", "记录日志开始", "连接地址:" + ManagerHelp.PublisherIP); PublisherService service = new PublisherService(); //考勤类型 int Behavior = (alarmInfo.type == Models.AlarmInfo.Type.ATTENDANCE_IN) ? 0 : 1; //考勤时间 string SignInTime = alarmInfo.time; //考勤人员 string EmployeeName = string.IsNullOrEmpty(crew.Name) ? crew.Id.ToString() : crew.Name; //考勤图片 string PhotosBuffer = Convert.ToBase64String(alarmInfo.picture); string data = Behavior + "," + SignInTime + "," + EmployeeName + "," + PhotosBuffer; service.Send(data); ProtoBDManager.AddReceiveLog("IpadEnd", "记录日志结束"); } catch (Exception ex) { ProtoBDManager.AddReceiveLog("Ipad", "记录日志异常", "错误:" + ex.Message); } } #endregion } } return(flag); }