using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using DTO; using Microsoft.Extensions.Logging; using IServices; using Newtonsoft.Json; using zhengcaioa.Models; using Microsoft.AspNetCore.Http; using Newtonsoft.Json.Linq; using System.Transactions; using System.Runtime.InteropServices; namespace zhengcaioa.Controllers.AdmManagement { public class SigninController : Controller { private readonly ILogger _logger; private readonly IAdmSigninService _signinService; private readonly ISysAttachmentService _sysAttachmentService; private readonly IAdmAttendanceRuleService _attendanceRuleService; private readonly ILiaotianService _liaotianService; private readonly IWfRunProcessService _wfRunProcessService; private readonly IWfHistoryService _wfHistoryService; private readonly IWfNeeddeelService _wfNeeddeelService; private readonly IPltPageService _pltPageService; [CheckLogin] public SigninController(ILogger logger, IAdmSigninService signinService, ISysAttachmentService sysAttachmentService , IAdmAttendanceRuleService attendanceRuleService, ILiaotianService liaotianService, IWfRunProcessService wfRunProcessService , IWfHistoryService wfHistoryService, IWfNeeddeelService wfNeeddeelService , IPltPageService pltPageService) { _logger = logger; _signinService = signinService; _sysAttachmentService = sysAttachmentService; _attendanceRuleService = attendanceRuleService; _liaotianService = liaotianService; _wfRunProcessService = wfRunProcessService; _wfHistoryService = wfHistoryService; _wfNeeddeelService = wfNeeddeelService; _pltPageService = pltPageService; } #region 考勤签到打卡 /// /// 上下班签到 /// /// [CheckLogin] public IActionResult Index() { return View(); } /// /// 我的考勤记录 /// /// [CheckLogin] public IActionResult Signin() { JArray jar = new JArray(); for (var i = 1; i <= 12; i++) { var jo = string.Format("\"code\":{0}, \"label\":\"{1}月\" ", i, i); jar.Add(JObject.Parse("{" + jo + "}")); } ViewBag.month = jar; JArray Year = new JArray(); for (var i = -1; i < 2; i++) { var jo = string.Format("\"code\":{0}, \"label\":\"{0}年\" ", DateTime.Now.Year + i); Year.Add(JObject.Parse("{" + jo + "}")); } ViewBag.year = Year; List actionlist = new List(); ActionEntity actionEntity = new ActionEntity(); actionEntity.OpenType = 0; actionEntity.ActionUrl = ""; actionEntity.ActionFun = "Search"; actionEntity.PageIco = "fa fa-search"; actionEntity.ActionName = "查询"; actionlist.Add(actionEntity); ViewData["ActionInfo"] = actionlist; return View(); } /// /// 保存签到信息 /// /// 记录ID /// 10早上上班 11早上下班 20下午上班 21下午下班 30加班上班 31加班下班 /// [CheckLogin] public string Save(string id,int signinType,string mac) { ResultEntity resultEntity = new ResultEntity(); resultEntity.Result = false; try { if (string.IsNullOrEmpty(mac)) { resultEntity = _signinService.save(id, signinType); } else { var curentuser = JsonConvert.DeserializeObject(HttpContext.Session.GetString("User")); if(curentuser.IpMac == mac) { //var mac = GetClientMAC(GetClientIP()); } else { resultEntity.Message = "打卡电脑检查不匹配。"; } } } catch(Exception er) { } return JsonConvert.SerializeObject(resultEntity); } [DllImport("Iphlpapi.dll")] private static extern int SendARP(Int32 dest, Int32 host, ref Int64 mac, ref Int32 length); [DllImport("Ws2_32.dll")] private static extern Int32 inet_addr(string ip); private string GetClientIP() { HttpContextAccessor context = new HttpContextAccessor(); var ip = context.HttpContext?.Connection.RemoteIpAddress.ToString(); var mac = GetClientMAC(ip); var str = "IP:" + ip + " ,MAC:" + mac; return str; } private string GetClientMAC(string ip) { string mac_dest = string.Empty; try { Int32 ldest = inet_addr(ip); //目的地的ip Int32 lhost = inet_addr(""); //服务器的ip Int64 macinfo = new Int64(); Int32 len = 6; int res = SendARP(ldest, 0, ref macinfo, ref len); string mac_src = macinfo.ToString("X"); while (mac_src.Length < 12) { mac_src = mac_src.Insert(0, "0"); } for (int i = 0; i < 11; i++) { if (0 == (i % 2)) { if (i == 10) { mac_dest = mac_dest.Insert(0, mac_src.Substring(i, 2)); } else { mac_dest = "-" + mac_dest.Insert(0, mac_src.Substring(i, 2)); } } } } catch (Exception ex) { throw ex; } return mac_dest; } /// /// 取得今天签到信息 /// /// [CheckLogin] public string GetTodaySignin() { var curentuser = JsonConvert.DeserializeObject(HttpContext.Session.GetString("User")); return JsonConvert.SerializeObject(_signinService.GetTodaySignin(curentuser.Id)); //.ReturnID; } /// /// 取得考勤记录 /// /// [CheckLogin] public string GetSigninList(AdmSignInDTOSearch search) { var curentuser = JsonConvert.DeserializeObject(HttpContext.Session.GetString("User")); search.userId = curentuser.Id; return JsonConvert.SerializeObject(_signinService.SearchByPaging(search)); } /// /// 我的考勤记录 /// /// [CheckLogin] public IActionResult SigninAll(string id) { JArray jar = new JArray(); for (var i = 1; i <= 12; i++) { var jo = string.Format("\"code\":{0}, \"label\":\"{1}月\" ", i, i); jar.Add(JObject.Parse("{" + jo + "}")); } ViewBag.month = jar; JArray Year = new JArray(); for (var i = -1; i < 2; i++) { var jo = string.Format("\"code\":{0}, \"label\":\"{0}年\" ", DateTime.Now.Year + i); Year.Add(JObject.Parse("{" + jo + "}")); } ViewBag.year = Year; ViewBag.userid = id; List actionlist = new List(); ActionEntity actionEntity = new ActionEntity(); actionEntity.OpenType = 0; actionEntity.ActionUrl = ""; actionEntity.ActionFun = "Search"; actionEntity.PageIco = "fa fa-search"; actionEntity.ActionName = "查询"; actionlist.Add(actionEntity); ViewData["ActionInfo"] = actionlist; return View(); } /// /// 取得考勤记录 /// /// [CheckLogin] public string GetSigninListAll(AdmSignInDTOSearch search) { //var curentuser = JsonConvert.DeserializeObject(HttpContext.Session.GetString("User")); //search.userId = curentuser.Id; return JsonConvert.SerializeObject(_signinService.SearchByPaging(search)); } #endregion #region 请假与销假 public IActionResult AskLeave(string id="", string StratTimeName = "", string EndTimeName = "") { var curentuser = JsonConvert.DeserializeObject(HttpContext.Session.GetString("User")); ViewData["curentuser"] = curentuser; AdmAttendanceRuleDTO admAttendanceRuleDTO = _attendanceRuleService.Get(""); AdmAskLeaveDTO admAskLeaveDTO = new AdmAskLeaveDTO(); if (!string.IsNullOrEmpty(id)) { admAskLeaveDTO = _signinService.GetAskLeave(id); admAskLeaveDTO.StratTimeName = admAskLeaveDTO.StratTime.Value.ToString("yyyy-MM-dd HH:mm"); admAskLeaveDTO.EndTimeName = admAskLeaveDTO.EndTime.Value.ToString("yyyy-MM-dd HH:mm"); } else { admAskLeaveDTO.CreaterName = curentuser.UserName; admAskLeaveDTO.Tittle = "请假申请(" + curentuser.UserName + ")"; if (!string.IsNullOrWhiteSpace(StratTimeName)) { DateTime StratTimeName1; if (DateTime.TryParse(StratTimeName, out StratTimeName1)) { admAskLeaveDTO.StratTimeName = StratTimeName1.AddHours(double.Parse(admAttendanceRuleDTO.WorkingStart.Split('.')[0])).AddMinutes(double.Parse(admAttendanceRuleDTO.WorkingStart.Split('.')[1])).ToString("yyyy-MM-dd HH:mm"); } } else { admAskLeaveDTO.StratTimeName = DateTime.Now.Date.AddHours(double.Parse(admAttendanceRuleDTO.WorkingStart.Split('.')[0])).AddMinutes(double.Parse(admAttendanceRuleDTO.WorkingStart.Split('.')[1])).ToString("yyyy-MM-dd HH:mm"); } if (!string.IsNullOrWhiteSpace(EndTimeName)) { DateTime EndTimeName1; if (DateTime.TryParse(EndTimeName, out EndTimeName1)) { admAskLeaveDTO.EndTimeName = EndTimeName1.AddHours(double.Parse(admAttendanceRuleDTO.OffworkEnd.Split('.')[0])).AddMinutes(double.Parse(admAttendanceRuleDTO.OffworkEnd.Split('.')[1])).ToString("yyyy-MM-dd HH:mm"); } } else { admAskLeaveDTO.EndTimeName = DateTime.Now.Date.AddHours(double.Parse(admAttendanceRuleDTO.OffworkEnd.Split('.')[0])).AddMinutes(double.Parse(admAttendanceRuleDTO.OffworkEnd.Split('.')[1])).ToString("yyyy-MM-dd HH:mm"); } AdmAskLeaveDTO admAsk = jisianChecktime(DateTime.Parse(admAskLeaveDTO.StratTimeName), DateTime.Parse(admAskLeaveDTO.EndTimeName)); admAskLeaveDTO.LaveDay = admAsk.LaveDay; admAskLeaveDTO.LavehHour = admAsk.LavehHour; } ViewData.Model = admAskLeaveDTO; ResultDataEntity results = new ResultDataEntity(); if (!string.IsNullOrEmpty(id)) { SysAttachmentDTOSearch searchEntity = new SysAttachmentDTOSearch(); searchEntity.page = 1; searchEntity.rows = 1000; searchEntity.AttObj = "AskLeave"; searchEntity.AttObjid = id; results = _sysAttachmentService.SearchByPaging(searchEntity); } ViewBag.attachment = results; ViewData["Lavetype"] = _liaotianService.GetSYScode("ADM_AskLeave", "Lavetype"); string shifoubiaoji = "A"; string sifoudangqian = "A"; string dangqianbuzhou = "提交"; var lishiyijian = new List(); //流程相关 if (!string.IsNullOrEmpty(id)) { var wfRunProcessDTO = _wfRunProcessService.GetList(id,"01").FirstOrDefault(); if (wfRunProcessDTO == null) { shifoubiaoji = "D"; sifoudangqian = "D"; } else { dangqianbuzhou = wfRunProcessDTO.Step; //查询审批进度 lishiyijian = _wfHistoryService.GetListshenpi(wfRunProcessDTO.Id); if(wfRunProcessDTO.Step != "提交") { shifoubiaoji = "D"; } //查询待办 var chaxundaiban = _wfNeeddeelService.GetListTracking(wfRunProcessDTO.Id, wfRunProcessDTO.Step).Where(x=>x.DeelUserId == curentuser.Id).ToList(); if(chaxundaiban!=null && chaxundaiban.Count > 0) { sifoudangqian = "A"; } else { sifoudangqian = "D"; } } } ViewBag.shifoubiaoji = shifoubiaoji; ViewBag.sifoudangqian = sifoudangqian; ViewBag.lishiyijian = lishiyijian; ViewBag.dangqianbuzhou = dangqianbuzhou; return View(); } [CheckLogin] [HttpPost] public string SaveAskLeave(AdmAskLeaveDTO admAsk) { var curentuser = JsonConvert.DeserializeObject(HttpContext.Session.GetString("User")); ViewData["curentuser"] = curentuser; admAsk.RecStatus = "A"; ResultEntity resultEntity = new ResultEntity(); resultEntity.Result = false; if(admAsk.Step == "提交") { //请假时间不能重叠 var qingjia = _signinService.GetAskLeaveChongdie(curentuser.Id, admAsk.StratTime.Value, admAsk.EndTime.Value); if (qingjia.Count > 0) { resultEntity.Result = false; resultEntity.Message = "该时间段已经有请假!"; return JsonConvert.SerializeObject(resultEntity); } //请假超过三天,必须提前三天以上请假! if (admAsk.LaveDay.Value >= 3 && admAsk.StratTime.Value.Date < DateTime.Now.Date.AddDays(3)) { resultEntity.Result = false; resultEntity.Message = "请假超过三天,必须提前三天以上请假!"; return JsonConvert.SerializeObject(resultEntity); } //请假超过七天,必须提前七天以上请假! if (admAsk.LaveDay.Value >= 7 && admAsk.StratTime.Value.Date < DateTime.Now.Date.AddDays(7)) { resultEntity.Result = false; resultEntity.Message = "请假超过七天,必须提前七天以上请假!"; return JsonConvert.SerializeObject(resultEntity); } } if (String.IsNullOrEmpty(admAsk.Id)) { admAsk.Creater = curentuser.Id; admAsk.Createtime = DateTime.Now; } else { admAsk.Modifier = curentuser.Id; admAsk.Modifytime = DateTime.Now; } using (TransactionScope scope = new TransactionScope()) { if (admAsk.Step == "提交") { resultEntity = _signinService.SaveAskLeave(admAsk); if (resultEntity.Result == false) { return JsonConvert.SerializeObject(resultEntity); } string[] Filepaths = admAsk.Filepath; if (Filepaths != null && Filepaths.Length > 0) { for (int i = 0; i < Filepaths.Length; i++) { if (string.IsNullOrEmpty(admAsk.attachmentid[i])) { SysAttachmentDTO sysAttachmentDTO = new SysAttachmentDTO(); //sysAttachmentDTO.Id = sysAttachmentDTO.AttObj = "AskLeave"; sysAttachmentDTO.AttObjid = admAsk.Id; sysAttachmentDTO.Filefullname = admAsk.Filefullname[i]; sysAttachmentDTO.Filepath = admAsk.Filepath[i]; sysAttachmentDTO.Creater = curentuser.Id; sysAttachmentDTO.Modifier = curentuser.Id; sysAttachmentDTO.Createtime = DateTime.Now; sysAttachmentDTO.Modifytime = sysAttachmentDTO.Createtime; resultEntity = _sysAttachmentService.save(sysAttachmentDTO); if (resultEntity.Result == false) { return JsonConvert.SerializeObject(resultEntity); } } } } } //发起流程相关 resultEntity = _wfRunProcessService.WfAskLeave(admAsk.Id, admAsk.Step, admAsk.Tongguojujue, curentuser.Id, admAsk.Content, admAsk.Tittle, "v1"); scope.Complete(); } return JsonConvert.SerializeObject(resultEntity); } [CheckLogin] [HttpPost] public string Checktime(DateTime StratTime, DateTime EndTime) { ResultEntity resultEntity = new ResultEntity(); if (EndTime<= StratTime) { resultEntity.Result = false; resultEntity.Message = "开始时间不能大于结束时间"; return JsonConvert.SerializeObject(resultEntity); } AdmAskLeaveDTO admAsk = jisianChecktime( StratTime, EndTime); resultEntity.Result = true; resultEntity.DataInfo = admAsk; return JsonConvert.SerializeObject(resultEntity); } public AdmAskLeaveDTO jisianChecktime(DateTime StratTime, DateTime EndTime) { //string dateDiff = null; AdmAttendanceRuleDTO admAttendanceRuleDTO = _attendanceRuleService.Get(""); var admAttendanceRulesDtlDTOs = _attendanceRuleService.GetDtlList(""); var jiejiari = admAttendanceRulesDtlDTOs.Where(x=>x.Name== "jiejiari").ToList(); var tiaoxiuri = admAttendanceRulesDtlDTOs.Where(x => x.Name == "tiaoxiuri").ToList(); var jiabanri = admAttendanceRulesDtlDTOs.Where(x => x.Name == "jiabanri").ToList(); //每天的考勤时间点 string[] WorkingStart = admAttendanceRuleDTO.WorkingStart.Split('.'); int WorkingStarthour = int.Parse(WorkingStart[0]); int WorkingStartmin = int.Parse(WorkingStart[1]); string[] WorkingEnd = admAttendanceRuleDTO.WorkingEnd.Split('.'); int WorkingEndhour = int.Parse(WorkingEnd[0]); int WorkingEndmin = int.Parse(WorkingEnd[1]); string[] OffworkStart = admAttendanceRuleDTO.OffworkStart.Split('.'); int OffworkStarthour = int.Parse(OffworkStart[0]); int OffworkStartmin = int.Parse(OffworkStart[1]); string[] OffworkEnd = admAttendanceRuleDTO.OffworkEnd.Split('.'); int OffworkEndhour = int.Parse(OffworkEnd[0]); int OffworkEndmin = int.Parse(OffworkEnd[1]); //请假开始时间上班时间 DateTime StratTimeWorkingStart = StratTime.Date.AddHours(WorkingStarthour).AddMinutes(WorkingStartmin); DateTime StratTimeWorkingEnd = StratTime.Date.AddHours(WorkingEndhour).AddMinutes(WorkingEndmin); DateTime StratTimeOffworkStart = StratTime.Date.AddHours(OffworkStarthour).AddMinutes(OffworkStartmin); DateTime StratTimeOffworkEnd = StratTime.Date.AddHours(OffworkEndhour).AddMinutes(OffworkEndmin); //请假结束时间上班时间 DateTime EndTimeWorkingStart = EndTime.Date.AddHours(WorkingStarthour).AddMinutes(WorkingStartmin); DateTime EndTimeWorkingEnd = EndTime.Date.AddHours(WorkingEndhour).AddMinutes(WorkingEndmin); DateTime EndTimeOffworkStart = EndTime.Date.AddHours(OffworkStarthour).AddMinutes(OffworkStartmin); DateTime EndTimeOffworkEnd = EndTime.Date.AddHours(OffworkEndhour).AddMinutes(OffworkEndmin); //上班时间 TimeSpan shangwu = StratTimeWorkingEnd.Subtract(StratTimeWorkingStart); TimeSpan xiawu = StratTimeOffworkEnd.Subtract(StratTimeOffworkStart); int shangbanshijian = shangwu.Hours * 60 + shangwu.Minutes + xiawu.Hours * 60 + xiawu.Minutes; int LavehTime = 0; TimeSpan ts = EndTime.Subtract(StratTime); for(int i=0;i<= ts.Days;i++) { if (i == 0) { //是否上班日期 if ((int)StratTime.Date.DayOfWeek >= admAttendanceRuleDTO.WeekStart && (int)StratTime.Date.DayOfWeek <= admAttendanceRuleDTO.WeekEnd) { //是否节假日 if (jiejiari.Exists(x => x.ValueStart <= StratTime.Date && x.ValueEnd >= StratTime.Date)) { LavehTime += 0; } else { if (StratTime <= StratTimeWorkingStart) { LavehTime += shangbanshijian; } else if (StratTime <= StratTimeWorkingEnd) { TimeSpan shangwu1 = StratTimeWorkingEnd.Subtract(StratTime); TimeSpan xiawu1 = StratTimeOffworkEnd.Subtract(StratTimeOffworkStart); LavehTime += shangwu1.Hours * 60 + shangwu1.Minutes + xiawu1.Hours * 60 + xiawu1.Minutes; } else if (StratTime <= StratTimeOffworkStart) { TimeSpan xiawu1 = StratTimeOffworkEnd.Subtract(StratTimeOffworkStart); LavehTime += xiawu1.Hours * 60 + xiawu1.Minutes; } else if (StratTime <= StratTimeOffworkEnd) { TimeSpan xiawu1 = StratTimeOffworkEnd.Subtract(StratTime); LavehTime += xiawu1.Hours * 60 + xiawu1.Minutes; } } } else { //是否调休日 调休日需要上班 if (tiaoxiuri.Exists(x => x.ValueStart <= StratTime.Date && x.ValueEnd >= StratTime.Date) || jiabanri.Exists(x => x.ValueStart <= StratTime.Date && x.ValueEnd >= StratTime.Date)) { if (StratTime <= StratTimeWorkingStart) { LavehTime += shangbanshijian; } else if (StratTime <= StratTimeWorkingEnd) { TimeSpan shangwu1 = StratTimeWorkingEnd.Subtract(StratTime); TimeSpan xiawu1 = StratTimeOffworkEnd.Subtract(StratTimeOffworkStart); LavehTime += shangwu1.Hours * 60 + shangwu1.Minutes + xiawu1.Hours * 60 + xiawu1.Minutes; } else if (StratTime <= StratTimeOffworkStart) { TimeSpan xiawu1 = StratTimeOffworkEnd.Subtract(StratTimeOffworkStart); LavehTime += xiawu1.Hours * 60 + xiawu1.Minutes; } else if (StratTime <= StratTimeOffworkEnd) { TimeSpan xiawu1 = StratTimeOffworkEnd.Subtract(StratTime); LavehTime += xiawu1.Hours * 60 + xiawu1.Minutes; } } else { LavehTime += 0; } } } if(i == ts.Days) { //是否上班日期 if ((int)EndTime.Date.DayOfWeek >= admAttendanceRuleDTO.WeekStart && (int)EndTime.Date.DayOfWeek <= admAttendanceRuleDTO.WeekEnd) { //是否节假日 if (jiejiari.Exists(x => x.ValueStart <= EndTime.Date && x.ValueEnd >= EndTime.Date)) { LavehTime += 0; } else { if ( EndTime >= EndTimeOffworkEnd) { LavehTime += shangbanshijian; } else if (EndTime >= EndTimeOffworkStart) { TimeSpan shangwu1 = EndTimeWorkingEnd.Subtract(EndTimeWorkingStart); TimeSpan xiawu1 = EndTime.Subtract(EndTimeOffworkStart); LavehTime += shangwu1.Hours * 60 + shangwu1.Minutes + xiawu1.Hours * 60 + xiawu1.Minutes; } else if (EndTime >= EndTimeWorkingEnd) { TimeSpan xiawu1 = EndTimeWorkingEnd.Subtract(EndTimeWorkingStart); LavehTime += xiawu1.Hours * 60 + xiawu1.Minutes; } else if (EndTime >= EndTimeWorkingStart) { TimeSpan xiawu1 = EndTime.Subtract(EndTimeWorkingStart); LavehTime += xiawu1.Hours * 60 + xiawu1.Minutes; } } } else { //是否调休日 调休日需要上班 if (tiaoxiuri.Exists(x => x.ValueStart <= EndTime.Date && x.ValueEnd >= EndTime.Date) || jiabanri.Exists(x => x.ValueStart <= EndTime.Date && x.ValueEnd >= EndTime.Date)) { if (EndTime >= EndTimeOffworkEnd) { LavehTime += shangbanshijian; } else if (EndTime >= EndTimeOffworkStart) { TimeSpan shangwu1 = EndTimeWorkingEnd.Subtract(EndTimeWorkingStart); TimeSpan xiawu1 = EndTime.Subtract(EndTimeOffworkStart); LavehTime += shangwu1.Hours * 60 + shangwu1.Minutes + xiawu1.Hours * 60 + xiawu1.Minutes; } else if (EndTime >= EndTimeWorkingEnd) { TimeSpan xiawu1 = EndTimeWorkingEnd.Subtract(EndTimeWorkingStart); LavehTime += xiawu1.Hours * 60 + xiawu1.Minutes; } else if (EndTime >= EndTimeWorkingStart) { TimeSpan xiawu1 = EndTime.Subtract(EndTimeWorkingStart); LavehTime += xiawu1.Hours * 60 + xiawu1.Minutes; } } else { LavehTime += 0; } } } if(i != 0 && i != ts.Days) { DateTime dateTimenow = StratTime.AddDays(i).Date; //是否上班日期 if ((int)dateTimenow.Date.DayOfWeek >= admAttendanceRuleDTO.WeekStart && (int)dateTimenow.Date.DayOfWeek <= admAttendanceRuleDTO.WeekEnd) { //是否假期 假期不上班 if (jiejiari.Exists(x => x.ValueStart <= dateTimenow.Date && x.ValueEnd >= dateTimenow.Date)) { LavehTime += 0; } else { LavehTime += shangbanshijian; } } else { //是否调休日 调休日需要上班 if (tiaoxiuri.Exists(x => x.ValueStart <= dateTimenow.Date && x.ValueEnd >= dateTimenow.Date) || jiabanri.Exists(x => x.ValueStart <= dateTimenow.Date && x.ValueEnd >= dateTimenow.Date)) { LavehTime += shangbanshijian; } else { LavehTime += 0; } } } if(ts.Days == 0) { //是否上班日期 if ((int)StratTime.Date.DayOfWeek >= admAttendanceRuleDTO.WeekStart && (int)StratTime.Date.DayOfWeek <= admAttendanceRuleDTO.WeekEnd) { //是否节假日 if (jiejiari.Exists(x => x.ValueStart <= StratTime.Date && x.ValueEnd >= StratTime.Date)) { LavehTime -= 0; } else { LavehTime -= shangbanshijian; } } else { //是否调休日 调休日需要上班 if (tiaoxiuri.Exists(x => x.ValueStart <= StratTime.Date && x.ValueEnd >= StratTime.Date) || jiabanri.Exists(x => x.ValueStart <= StratTime.Date && x.ValueEnd >= StratTime.Date)) { LavehTime -= shangbanshijian; } else { LavehTime -= 0; } } } } //dateDiff = ts.Days.ToString() + "天" // + ts.Hours.ToString() + "小时" // + ts.Minutes.ToString() + "分钟" // + ts.Seconds.ToString() + "秒"; //string ssss = (EndTime - StratTime).ToString(); AdmAskLeaveDTO admAsk = new AdmAskLeaveDTO(); admAsk.LaveDay = (int)(LavehTime/shangbanshijian); int lefthour = (int)(LavehTime % shangbanshijian); admAsk.LavehHour = lefthour / 60; if (lefthour % 60>0) { admAsk.LavehHour += 1; } return admAsk; } public IActionResult AskLeaveOff(string id = "", string StratTimeName = "", string EndTimeName = "") { var curentuser = JsonConvert.DeserializeObject(HttpContext.Session.GetString("User")); ViewData["curentuser"] = curentuser; AdmAttendanceRuleDTO admAttendanceRuleDTO = _attendanceRuleService.Get(""); AdmAskLeaveOffDTO askLeaveOffDTO = new AdmAskLeaveOffDTO(); if (!string.IsNullOrEmpty(id)) { askLeaveOffDTO = _signinService.GetAskLeaveOff(id); askLeaveOffDTO.StratTimeName =askLeaveOffDTO.StratTime.Value.ToString("yyyy-MM-dd HH:mm") ; askLeaveOffDTO.EndTimeName = askLeaveOffDTO.EndTime.Value.ToString("yyyy-MM-dd HH:mm"); } else { askLeaveOffDTO.CreaterName = curentuser.UserName; askLeaveOffDTO.Tittle = "销假申请(" + curentuser.UserName +")"; if (!string.IsNullOrWhiteSpace(StratTimeName)) { DateTime StratTimeName1; if (DateTime.TryParse(StratTimeName, out StratTimeName1)) { askLeaveOffDTO.StratTimeName = StratTimeName1.AddHours(double.Parse(admAttendanceRuleDTO.WorkingStart.Split('.')[0])).AddMinutes(double.Parse(admAttendanceRuleDTO.WorkingStart.Split('.')[1])).ToString("yyyy-MM-dd HH:mm"); } } else { askLeaveOffDTO.StratTimeName = DateTime.Now.Date.AddHours(double.Parse(admAttendanceRuleDTO.WorkingStart.Split('.')[0])).AddMinutes(double.Parse(admAttendanceRuleDTO.WorkingStart.Split('.')[1])).ToString("yyyy-MM-dd HH:mm"); } if (!string.IsNullOrWhiteSpace(EndTimeName)) { DateTime EndTimeName1; if (DateTime.TryParse(EndTimeName, out EndTimeName1)) { askLeaveOffDTO.EndTimeName = EndTimeName1.AddHours(double.Parse(admAttendanceRuleDTO.OffworkEnd.Split('.')[0])).AddMinutes(double.Parse(admAttendanceRuleDTO.OffworkEnd.Split('.')[1])).ToString("yyyy-MM-dd HH:mm"); } } else { askLeaveOffDTO.EndTimeName = DateTime.Now.Date.AddHours(double.Parse(admAttendanceRuleDTO.OffworkEnd.Split('.')[0])).AddMinutes(double.Parse(admAttendanceRuleDTO.OffworkEnd.Split('.')[1])).ToString("yyyy-MM-dd HH:mm"); } } ResultDataEntity results = new ResultDataEntity(); if (!string.IsNullOrEmpty(id)) { SysAttachmentDTOSearch searchEntity = new SysAttachmentDTOSearch(); searchEntity.page = 1; searchEntity.rows = 1000; searchEntity.AttObj = "AskLeaveOff"; searchEntity.AttObjid = id; results = _sysAttachmentService.SearchByPaging(searchEntity); } ViewBag.attachment = results; ViewData["Lavetype"] = _liaotianService.GetSYScode("ADM_AskLeaveOff", "Lavetype"); ViewData.Model = askLeaveOffDTO; string shifoubiaoji = "A"; string sifoudangqian = "A"; string dangqianbuzhou = "提交"; var lishiyijian = new List(); //流程相关 if (!string.IsNullOrEmpty(id)) { var wfRunProcessDTO = _wfRunProcessService.GetList(id, "02").FirstOrDefault(); if (wfRunProcessDTO == null) { shifoubiaoji = "D"; sifoudangqian = "D"; } else { dangqianbuzhou = wfRunProcessDTO.Step; //查询审批进度 lishiyijian = _wfHistoryService.GetListshenpi(wfRunProcessDTO.Id); if (wfRunProcessDTO.Step != "提交") { shifoubiaoji = "D"; } //查询待办 var chaxundaiban = _wfNeeddeelService.GetListTracking(wfRunProcessDTO.Id, wfRunProcessDTO.Step).Where(x => x.DeelUserId == curentuser.Id).ToList(); if (chaxundaiban != null && chaxundaiban.Count > 0) { sifoudangqian = "A"; } else { sifoudangqian = "D"; } } } ViewBag.shifoubiaoji = shifoubiaoji; ViewBag.sifoudangqian = sifoudangqian; ViewBag.lishiyijian = lishiyijian; ViewBag.dangqianbuzhou = dangqianbuzhou; return View(); } public string SaveAskLeaveOff(AdmAskLeaveOffDTO leaveOff) { var curentuser = JsonConvert.DeserializeObject(HttpContext.Session.GetString("User")); ViewData["curentuser"] = curentuser; leaveOff.RecStatus = "A"; ////未挂审批流,提交直接通过 //leaveOff.ShenpiStatus = "A"; if (String.IsNullOrEmpty(leaveOff.Id)) { leaveOff.Creater = curentuser.Id; leaveOff.Createtime = DateTime.Now; } leaveOff.Modifier = curentuser.Id; leaveOff.Modifytime = DateTime.Now; ResultEntity resultEntity = new ResultEntity(); resultEntity.Result = false; if (leaveOff.Step == "提交") { //请假时间不能重叠 var qingjia = _signinService.GetAskLeaveOffChongdie(curentuser.Id, leaveOff.StratTime.Value, leaveOff.EndTime.Value); if (qingjia.Count > 0) { resultEntity.Result = false; resultEntity.Message = "该时间段已经有销假!"; return JsonConvert.SerializeObject(resultEntity); } //销假必须三天以内 if (leaveOff.StratTime.Value.Date < DateTime.Now.Date.AddDays(-3)) { resultEntity.Result = false; resultEntity.Message = "请在72小时内进行销假处理,超过72小时无法提交"; return JsonConvert.SerializeObject(resultEntity); } } using (TransactionScope scope = new TransactionScope()) { if (leaveOff.Step == "提交") { resultEntity = _signinService.SaveAskLeaveOff(leaveOff); if (resultEntity.Result == false) { return JsonConvert.SerializeObject(resultEntity); } string[] Filepaths = leaveOff.Filepath; if (Filepaths != null && Filepaths.Length > 0) { for (int i = 0; i < Filepaths.Length; i++) { if (string.IsNullOrEmpty(leaveOff.attachmentid[i])) { SysAttachmentDTO sysAttachmentDTO = new SysAttachmentDTO(); //sysAttachmentDTO.Id = sysAttachmentDTO.AttObj = "AskLeaveOff"; sysAttachmentDTO.AttObjid = leaveOff.Id; sysAttachmentDTO.Filefullname = leaveOff.Filefullname[i]; sysAttachmentDTO.Filepath = leaveOff.Filepath[i]; sysAttachmentDTO.Creater = curentuser.Id; sysAttachmentDTO.Modifier = curentuser.Id; sysAttachmentDTO.Createtime = DateTime.Now; sysAttachmentDTO.Modifytime = sysAttachmentDTO.Createtime; resultEntity = _sysAttachmentService.save(sysAttachmentDTO); if (resultEntity.Result == false) { return JsonConvert.SerializeObject(resultEntity); } } } } } resultEntity = _wfRunProcessService.WfAskLeaveOff(leaveOff.Id, leaveOff.Step, leaveOff.Tongguojujue, curentuser.Id, leaveOff.Content, leaveOff.Tittle, "v1"); scope.Complete(); } return JsonConvert.SerializeObject(resultEntity); } #endregion #region 考勤规则 public IActionResult AttendanceRule() { var curentuser = JsonConvert.DeserializeObject(HttpContext.Session.GetString("User")); ViewData["curentuser"] = curentuser; var pageEntities = _pltPageService.GetUserPage(curentuser.Id, "/Signin/AttendanceRule/"); var pageEntities2 = pageEntities.Where(x => x.PageMethod == "02").ToList(); ViewData["ActionInfo2"] = pageEntities2; AdmAttendanceRuleDTO admAttendanceRuleDTO = _attendanceRuleService.Get(""); admAttendanceRuleDTO.admAttendanceRulesDtlDTOs = _attendanceRuleService.GetDtlList(""); ViewData.Model = admAttendanceRuleDTO; return View(); } public string SaveAttendanceRule(AdmAttendanceRuleDTO dto) { ResultEntity resultEntity = new ResultEntity(); dto.Holiday = "1"; dto.Rest = "1"; if (dto.WorkingStart.IndexOf(".") < 0) { dto.WorkingStart += ".00"; } if (dto.WorkingEnd.IndexOf(".") < 0) { dto.WorkingEnd += ".00"; } if (dto.OffworkStart.IndexOf(".") < 0) { dto.OffworkStart += ".00"; } if (dto.OffworkEnd.IndexOf(".") < 0) { dto.OffworkEnd += ".00"; } resultEntity.Result = false; var curentuser = JsonConvert.DeserializeObject(HttpContext.Session.GetString("User")); ViewData["curentuser"] = curentuser; using (TransactionScope scope = new TransactionScope()) { dto.FullAttendance = 0; dto.AbsenteeismPayment2 = 0; dto.RecStatus = "A"; if (String.IsNullOrEmpty(dto.Id)) { dto.Creater = curentuser.Id; dto.Createtime = DateTime.Now; } dto.Modifier = curentuser.Id; dto.Modifytime = DateTime.Now; resultEntity = _attendanceRuleService.save(dto); _attendanceRuleService.RemoveDtlList(dto.Id); for (int i = 0; i < dto.holiday_s.Length; i++) { if(!String.IsNullOrEmpty(dto.holiday_s[i]) && !String.IsNullOrEmpty(dto.holiday_e[i])) { AdmAttendanceRulesDtlDTO admAttendanceRulesDtlDTO = new AdmAttendanceRulesDtlDTO(); admAttendanceRulesDtlDTO.Pid = dto.Id; admAttendanceRulesDtlDTO.ValueStart = DateTime.Parse(dto.holiday_s[i]); admAttendanceRulesDtlDTO.ValueEnd = DateTime.Parse(dto.holiday_e[i]); admAttendanceRulesDtlDTO.Name = "jiejiari"; admAttendanceRulesDtlDTO.RecStatus = "A"; admAttendanceRulesDtlDTO.Creater = curentuser.Id; admAttendanceRulesDtlDTO.Createtime = DateTime.Now; admAttendanceRulesDtlDTO.Modifier = admAttendanceRulesDtlDTO.Creater; admAttendanceRulesDtlDTO.Modifytime = admAttendanceRulesDtlDTO.Createtime; resultEntity = _attendanceRuleService.saveDtl(admAttendanceRulesDtlDTO); } } for (int i = 0; i < dto.rest_s.Length; i++) { if (!String.IsNullOrEmpty(dto.rest_s[i]) && !String.IsNullOrEmpty(dto.rest_e[i])) { AdmAttendanceRulesDtlDTO admAttendanceRulesDtlDTO = new AdmAttendanceRulesDtlDTO(); admAttendanceRulesDtlDTO.Pid = dto.Id; admAttendanceRulesDtlDTO.ValueStart = DateTime.Parse( dto.rest_s[i]); admAttendanceRulesDtlDTO.ValueEnd = DateTime.Parse(dto.rest_e[i]); admAttendanceRulesDtlDTO.Name = "tiaoxiuri"; admAttendanceRulesDtlDTO.RecStatus = "A"; admAttendanceRulesDtlDTO.Creater = curentuser.Id; admAttendanceRulesDtlDTO.Createtime = DateTime.Now; admAttendanceRulesDtlDTO.Modifier = admAttendanceRulesDtlDTO.Creater; admAttendanceRulesDtlDTO.Modifytime = admAttendanceRulesDtlDTO.Createtime; resultEntity = _attendanceRuleService.saveDtl(admAttendanceRulesDtlDTO); } } for (int i = 0; i < dto.jiaban_s.Length; i++) { if (!String.IsNullOrEmpty(dto.jiaban_s[i]) && !String.IsNullOrEmpty(dto.jiaban_e[i])) { AdmAttendanceRulesDtlDTO admAttendanceRulesDtlDTO = new AdmAttendanceRulesDtlDTO(); admAttendanceRulesDtlDTO.Pid = dto.Id; admAttendanceRulesDtlDTO.ValueStart = DateTime.Parse(dto.jiaban_s[i]); admAttendanceRulesDtlDTO.ValueEnd = DateTime.Parse(dto.jiaban_e[i]); admAttendanceRulesDtlDTO.Name = "jiabanri"; admAttendanceRulesDtlDTO.RecStatus = "A"; admAttendanceRulesDtlDTO.Creater = curentuser.Id; admAttendanceRulesDtlDTO.Createtime = DateTime.Now; admAttendanceRulesDtlDTO.Modifier = admAttendanceRulesDtlDTO.Creater; admAttendanceRulesDtlDTO.Modifytime = admAttendanceRulesDtlDTO.Createtime; resultEntity = _attendanceRuleService.saveDtl(admAttendanceRulesDtlDTO); } } scope.Complete(); } // var ss = leaveOff; return JsonConvert.SerializeObject(resultEntity); } #endregion } }