Beispiel #1
0
 /// <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);
     }
 }
Beispiel #2
0
        /// <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);
        }