using System; using System.Collections.Generic; using System.Text; using zhengcaioa.Models; using IServices; using AutoMapper; using DTO; using System.Linq; namespace Services { public class AdmSigninService : IAdmSigninService { private readonly zhengcaioaContext _context; private readonly IMapper _mapper; public AdmSigninService(zhengcaioaContext context, IMapper mapper) { _context = context; _mapper = mapper; } #region 考勤打卡 public ResultEntity save(string id, int signinType) { ResultEntity resultEntity = new ResultEntity(); try { AdmSignIn signIn = _context.AdmSignIns.Where(e => e.Id == id).FirstOrDefault(); if (string.IsNullOrEmpty(signIn.Id)) { signIn.Id = Guid.NewGuid().ToString(); _context.AdmSignIns.Add(signIn); } else { switch (signinType) { case 10: if (signIn.MorningIn.HasValue) { resultEntity.Result = false; resultEntity.Message = "已经打上午上班,请不要重复打卡"; return resultEntity; } signIn.MorningIn = DateTime.Now; break; case 11: signIn.MorningOut = DateTime.Now; break; case 20: if (signIn.AfternoonIn.HasValue) { resultEntity.Result = false; resultEntity.Message = "已经打下午上班卡,请不要重复打卡"; return resultEntity; } signIn.AfternoonIn = DateTime.Now; break; case 21: signIn.AfternoonOut = DateTime.Now; break; case 30: if (signIn.AfternoonIn.HasValue) { resultEntity.Result = false; resultEntity.Message = "已经打加班卡,请不要重复打卡"; return resultEntity; } signIn.OvertimeIn = DateTime.Now; break; case 31: signIn.OvertimeOut = DateTime.Now; break; } } _context.SaveChanges(); resultEntity.ReturnID = signIn.Id; resultEntity.Result = true; } catch (Exception ex) { resultEntity.Result = false; resultEntity.Message = "保存失败,请联系管理员"; ex.Message.ToString(); } return resultEntity; } public AdmSignInDTO Get(string id) { AdmSignIn entity = _context.AdmSignIns.Find(id); if (entity.RecStatus != "A") { entity = new AdmSignIn(); } AdmSignInDTO signin = _mapper.Map(entity); return signin; } public AdmSignInDTO GetByUserAndDate(string userid, DateTime sgninDate) { AdmSignIn entity = _context.AdmSignIns.Where(x=>x.RecStatus == "A" && x.UserId == userid && x.SgninDate == sgninDate).FirstOrDefault(); AdmSignInDTO signin = null; if (entity != null) { signin = _mapper.Map(entity); } return signin; } public AdmSignInDTO GetTodaySignin(string userId) { ResultEntity resultEntity = new ResultEntity(); AdmSignInDTO signin = null; try { AdmSignIn entity = _context.AdmSignIns.Where(e => e.UserId == userId && e.SgninDate.Date == DateTime.Now.Date).FirstOrDefault(); if (entity == null || entity.RecStatus != "A") { entity = new AdmSignIn(); } if (string.IsNullOrEmpty(entity.Id)) { entity.Id = Guid.NewGuid().ToString(); entity.UserId = userId; entity.Creater = userId; entity.Modifier = userId; entity.RecStatus = "A"; entity.Createtime = DateTime.Now; entity.Modifytime = DateTime.Now; entity.SgninDate = DateTime.Now.Date;//Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd")); _context.AdmSignIns.Add(entity); _context.SaveChanges(); } signin = _mapper.Map(entity); resultEntity.ReturnID = entity.Id; resultEntity.Result = true; } catch (Exception ex) { resultEntity.Result = false; resultEntity.Message = "保存失败,请联系管理员"; ex.Message.ToString(); } return signin; } public ResultDataEntity SearchByPaging(AdmSignInDTOSearch searchEntity) { //生成单月的考勤记录 int days = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month); DateTime today; var monthlist = _context.AdmSignIns.Where(e => e.UserId == searchEntity.userId && e.SgninDate.Date == DateTime.Now.Date && e.RecStatus == "A").ToList(); if (monthlist.Count < days) { for (int i = 1; i <= days; i++) { today = Convert.ToDateTime(string.Format("{0}-{1}-{2}", DateTime.Now.Year, DateTime.Now.Month, i.ToString().PadLeft(2, '0'))); monthlist = _context.AdmSignIns.Where(e => e.UserId == searchEntity.userId && e.RecStatus == "A" && e.SgninDate.Date == today.Date).ToList(); if (monthlist.Count == 0) { AdmSignInDTO signinDTO = new AdmSignInDTO(); AdmSignIn signIn = _mapper.Map(signinDTO); if (string.IsNullOrEmpty(signIn.Id)) { signIn.Id = Guid.NewGuid().ToString(); signIn.UserId = searchEntity.userId; signIn.Creater = searchEntity.userId; signIn.Modifier = searchEntity.userId; signIn.RecStatus = "A"; signIn.Createtime = DateTime.Now; signIn.Modifytime = DateTime.Now; signIn.SgninDate = today.Date; _context.AdmSignIns.Add(signIn); _context.SaveChanges(); } } } } ResultDataEntity data = new ResultDataEntity(); List list = new List(); //筛选 var query = _context.AdmSignIns .Where(b => b.RecStatus == "A" && b.UserId == searchEntity.userId) .ToList(); if (searchEntity.Year > 0) { DateTime startDate = DateTime.Now; DateTime endDate = DateTime.Now; if (searchEntity.Month == 0) //全部 { startDate = Convert.ToDateTime(string.Format("{0}-1-1", searchEntity.Year)); endDate = Convert.ToDateTime(string.Format("{0}-12-31", searchEntity.Year)); } else //选择月份 { startDate = Convert.ToDateTime(string.Format("{0}-{1}-1", searchEntity.Year, searchEntity.Month)); endDate = Convert.ToDateTime(string.Format("{0}-{1}-{2}", searchEntity.Year, searchEntity.Month, DateTime.DaysInMonth(searchEntity.Year, searchEntity.Month) )); } query = query.Where(b => b.SgninDate >= startDate && b.SgninDate <= endDate) .ToList(); } var dt = (from a in query join b in _context.PltUsers.Where(e => e.RecStatus == "A") on a.UserId equals b.Id join c in _context.HrDepts.Where(e => e.RecStatus == "A") on b.DeptId equals c.Id orderby a.SgninDate ascending select new SigninListDTO { Id = a.Id, UserId = a.UserId, UserName = b.UserName, DeptName = c.DeptName, SgninDate = a.SgninDate.ToString("yyyy-MM-dd"), Morning = virtity(a.MorningIn, a.MorningOut), Afternoon = virtity(a.AfternoonIn, a.AfternoonOut), Overtime = virtity(a.OvertimeIn, a.OvertimeOut) }).ToList(); //if (searchEntity.totalrows == 0) searchEntity.totalrows = dt.Count(); var signinList = dt.Skip((searchEntity.page - 1) * searchEntity.rows).Take(searchEntity.rows).ToList(); list = _mapper.Map>(signinList); data.LoadData(searchEntity, list); return data; } public ResultEntity ModifyStatus(string id, string userid) { return null; } private static string virtity(DateTime? time1, DateTime? time2) { string t1 = " ", t2 = " "; if (time1 != null) { t1 = Convert.ToDateTime(time1).ToString("HH:mm:ss"); } if (time2 != null) { t2 = Convert.ToDateTime(time2).ToString("HH:mm:ss"); } return t1 + " - " + t2; } #endregion #region 请假与销假 public ResultEntity SaveAskLeave(AdmAskLeaveDTO admAsk) { ResultEntity resultEntity = new ResultEntity(); try { AdmAskLeave ask = _mapper.Map(admAsk); if (string.IsNullOrEmpty(admAsk.Id)) { ask.Id = Guid.NewGuid().ToString(); admAsk.Id = ask.Id; _context.AdmAskLeaves.Add(ask); } else { var entity = _context.AdmAskLeaves.Find(admAsk.Id); entity.SigninId = admAsk.SigninId; entity.StratPoint = admAsk.StratPoint; entity.EndPoint = admAsk.EndPoint; entity.ShenpiStatus = admAsk.ShenpiStatus; entity.CreaterName = admAsk.CreaterName; entity.Tittle = admAsk.Tittle; entity.LaveDay = admAsk.LaveDay; entity.LavehHour = admAsk.LavehHour; entity.Remark = admAsk.Remark; entity.Lavetype = admAsk.Lavetype; entity.StratTime = admAsk.StratTime; entity.EndTime = admAsk.EndTime; entity.Modifier = admAsk.Modifier; entity.Modifytime = DateTime.Now; } _context.SaveChanges(); resultEntity.ReturnID = ask.Id; resultEntity.Result = true; } catch (Exception ex) { resultEntity.Result = false; resultEntity.Message = "保存失败,请联系管理员"; ex.Message.ToString(); } return resultEntity; } public ResultEntity SaveAskLeaveOff(AdmAskLeaveOffDTO leaveOff) { ResultEntity resultEntity = new ResultEntity(); try { AdmAskLeaveOff askLeaveOff = _mapper.Map(leaveOff); if (string.IsNullOrEmpty(leaveOff.Id)) { askLeaveOff.Id = Guid.NewGuid().ToString(); leaveOff.Id = askLeaveOff.Id; _context.AdmAskLeaveOffs.Add(askLeaveOff); } else { var entity = _context.AdmAskLeaveOffs.Find(leaveOff.Id); entity.SigninId = leaveOff.SigninId; entity.StratPoint = leaveOff.StratPoint; entity.EndPoint = leaveOff.EndPoint; entity.ShenpiStatus = leaveOff.ShenpiStatus; entity.CreaterName = leaveOff.CreaterName; entity.Tittle = leaveOff.Tittle; entity.MedicalRecord = leaveOff.MedicalRecord; entity.Remark = leaveOff.Remark; entity.Lavetype = leaveOff.Lavetype; entity.StratTime = leaveOff.StratTime; entity.EndTime = leaveOff.EndTime; entity.Modifier = leaveOff.Modifier; entity.Modifytime = DateTime.Now; } _context.SaveChanges(); resultEntity.ReturnID = askLeaveOff.Id; resultEntity.Result = true; } catch (Exception ex) { resultEntity.Result = false; resultEntity.Message = "保存失败,请联系管理员"; ex.Message.ToString(); } return resultEntity; } public AdmAskLeaveDTO GetAskLeave(string Id) { AdmAskLeave entity = _context.AdmAskLeaves.Where(e => e.RecStatus == "A" && e.Id == Id).FirstOrDefault(); if (entity == null) { entity = new AdmAskLeave(); } AdmAskLeaveDTO leaveDTO = _mapper.Map(entity); return leaveDTO; } public List GetAskLeaveByUserId(string UserId) { List admAskLeaveDTOs = _context.AdmAskLeaves.Where(e => e.RecStatus == "A" && e.ShenpiStatus == "A" && e.Creater == UserId).ToList(); List leaveDTOs = _mapper.Map< List >(admAskLeaveDTOs); return leaveDTOs; } public List GetAskLeaveChongdie(string UserId, DateTime StratTime, DateTime EndTime) { List admAskLeaveDTOs = _context.AdmAskLeaves.Where(e => e.RecStatus == "A" && e.Creater == UserId && (( e.StratTime <= StratTime && e.EndTime > StratTime) || (e.StratTime < EndTime && e.EndTime >= EndTime) )).ToList(); List leaveDTOs = _mapper.Map>(admAskLeaveDTOs); return leaveDTOs; } public List GetAskLeaveOffByUserId(string UserId) { List admAskLeaveOffs = _context.AdmAskLeaveOffs.Where(e => e.RecStatus == "A" && e.ShenpiStatus == "A" && e.Creater == UserId).ToList(); List leaveDTOs = _mapper.Map>(admAskLeaveOffs); return leaveDTOs; } public List GetAskLeaveOffChongdie(string UserId, DateTime StratTime, DateTime EndTime) { List admAskLeaveOffs = _context.AdmAskLeaveOffs.Where(e => e.RecStatus == "A" && e.Creater == UserId && ((e.StratTime <= StratTime && e.EndTime > StratTime) || (e.StratTime < EndTime && e.EndTime >= EndTime))).ToList(); List leaveDTOs = _mapper.Map>(admAskLeaveOffs); return leaveDTOs; } public AdmAskLeaveOffDTO GetAskLeaveOff(string Id) { AdmAskLeaveOff entity = _context.AdmAskLeaveOffs.Where(e => e.RecStatus == "A" && e.Id == Id ).FirstOrDefault(); if (entity == null) { entity = new AdmAskLeaveOff(); } AdmAskLeaveOffDTO leaveOffDTO = _mapper.Map(entity); return leaveOffDTO; } #endregion #region 考勤规则 public ResultEntity SaveAttendanceRlues(string attRlues) { return null; } public string GetAttendanceRlues() { return ""; } #endregion } }