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<AdmSignInDTO>(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<AdmSignInDTO>(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<AdmSignInDTO>(entity);
|
resultEntity.ReturnID = entity.Id;
|
resultEntity.Result = true;
|
}
|
catch (Exception ex)
|
{
|
resultEntity.Result = false;
|
resultEntity.Message = "保存失败,请联系管理员";
|
ex.Message.ToString();
|
}
|
|
return signin;
|
}
|
public ResultDataEntity<SigninListDTO> 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<AdmSignIn>(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<SigninListDTO> data = new ResultDataEntity<SigninListDTO>();
|
List<SigninListDTO> list = new List<SigninListDTO>();
|
//筛选
|
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<List<SigninListDTO>>(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<AdmAskLeave>(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<AdmAskLeaveOff>(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<AdmAskLeaveDTO>(entity);
|
return leaveDTO;
|
|
}
|
|
public List<AdmAskLeaveDTO> GetAskLeaveByUserId(string UserId)
|
{
|
List<AdmAskLeave> admAskLeaveDTOs = _context.AdmAskLeaves.Where(e => e.RecStatus == "A" && e.ShenpiStatus == "A" && e.Creater == UserId).ToList();
|
|
List<AdmAskLeaveDTO> leaveDTOs = _mapper.Map< List <AdmAskLeaveDTO> >(admAskLeaveDTOs);
|
return leaveDTOs;
|
|
}
|
|
public List<AdmAskLeaveDTO> GetAskLeaveChongdie(string UserId, DateTime StratTime, DateTime EndTime)
|
{
|
List<AdmAskLeave> 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<AdmAskLeaveDTO> leaveDTOs = _mapper.Map<List<AdmAskLeaveDTO>>(admAskLeaveDTOs);
|
return leaveDTOs;
|
|
}
|
|
public List<AdmAskLeaveOffDTO> GetAskLeaveOffByUserId(string UserId)
|
{
|
List<AdmAskLeaveOff> admAskLeaveOffs = _context.AdmAskLeaveOffs.Where(e => e.RecStatus == "A" && e.ShenpiStatus == "A" && e.Creater == UserId).ToList();
|
|
List<AdmAskLeaveOffDTO> leaveDTOs = _mapper.Map<List<AdmAskLeaveOffDTO>>(admAskLeaveOffs);
|
return leaveDTOs;
|
|
}
|
|
public List<AdmAskLeaveOffDTO> GetAskLeaveOffChongdie(string UserId, DateTime StratTime, DateTime EndTime)
|
{
|
List<AdmAskLeaveOff> 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<AdmAskLeaveOffDTO> leaveDTOs = _mapper.Map<List<AdmAskLeaveOffDTO>>(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<AdmAskLeaveOffDTO>(entity);
|
return leaveOffDTO;
|
|
}
|
#endregion
|
|
#region 考勤规则
|
|
public ResultEntity SaveAttendanceRlues(string attRlues)
|
{
|
return null;
|
}
|
public string GetAttendanceRlues()
|
{
|
return "";
|
}
|
|
#endregion
|
|
}
|
|
}
|