| | |
| | | using Microsoft.AspNetCore.Http; |
| | | using Newtonsoft.Json.Linq; |
| | | using System.Transactions; |
| | | using System.Runtime.InteropServices; |
| | | |
| | | namespace zhengcaioa.Controllers.AdmManagement |
| | | { |
| | |
| | | /// <param name="signinType">10早上上班 11早上下班 20下午上班 21下午下班 30加班上班 31加班下班</param> |
| | | /// <returns></returns> |
| | | [CheckLogin] |
| | | public string Save(string id,int signinType) |
| | | { |
| | | ResultEntity resultEntity = _signinService.save(id, signinType); |
| | | 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<PltUser>(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; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 取得今天签到信息 |
| | |
| | | } |
| | | #endregion |
| | | #region 请假与销假 |
| | | public IActionResult AskLeave(string id="", DateTime? StratTimeName = null, DateTime? EndTimeName = null) |
| | | public IActionResult AskLeave(string id="", string StratTimeName = "", string EndTimeName = "") |
| | | { |
| | | |
| | | var curentuser = JsonConvert.DeserializeObject<PltUser>(HttpContext.Session.GetString("User")); |
| | |
| | | |
| | | |
| | | |
| | | if (StratTimeName.HasValue) |
| | | if (!string.IsNullOrWhiteSpace(StratTimeName)) |
| | | { |
| | | admAskLeaveDTO.StratTimeName = StratTimeName.Value.AddHours(double.Parse(admAttendanceRuleDTO.WorkingStart.Split('.')[0])).AddMinutes(double.Parse(admAttendanceRuleDTO.WorkingStart.Split('.')[1])).ToString("yyyy-MM-dd HH:mm"); |
| | | 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 (EndTimeName.HasValue) |
| | | if (!string.IsNullOrWhiteSpace(EndTimeName)) |
| | | { |
| | | admAskLeaveDTO.EndTimeName = EndTimeName.Value.AddHours(double.Parse(admAttendanceRuleDTO.OffworkEnd.Split('.')[0])).AddMinutes(double.Parse(admAttendanceRuleDTO.OffworkEnd.Split('.')[1])).ToString("yyyy-MM-dd HH:mm"); |
| | | 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)); |
| | |
| | | if ((int)StratTime.Date.DayOfWeek >= admAttendanceRuleDTO.WeekStart && (int)StratTime.Date.DayOfWeek <= admAttendanceRuleDTO.WeekEnd) |
| | | { |
| | | //是否节假日 |
| | | if (jiejiari.Exists(x => x.ValueStart <= StratTime.Date && x.ValueStart >= StratTime.Date)) |
| | | if (jiejiari.Exists(x => x.ValueStart <= StratTime.Date && x.ValueEnd >= StratTime.Date)) |
| | | { |
| | | |
| | | LavehTime += 0; |
| | |
| | | { |
| | | |
| | | //是否调休日 调休日需要上班 |
| | | if (tiaoxiuri.Exists(x => x.ValueStart <= StratTime.Date && x.ValueStart >= StratTime.Date)) |
| | | if (tiaoxiuri.Exists(x => x.ValueStart <= StratTime.Date && x.ValueEnd >= StratTime.Date)) |
| | | { |
| | | if (StratTime <= StratTimeWorkingStart) |
| | | { |
| | |
| | | if ((int)EndTime.Date.DayOfWeek >= admAttendanceRuleDTO.WeekStart && (int)EndTime.Date.DayOfWeek <= admAttendanceRuleDTO.WeekEnd) |
| | | { |
| | | //是否节假日 |
| | | if (jiejiari.Exists(x => x.ValueStart <= EndTime.Date && x.ValueStart >= EndTime.Date)) |
| | | if (jiejiari.Exists(x => x.ValueStart <= EndTime.Date && x.ValueEnd >= EndTime.Date)) |
| | | { |
| | | |
| | | LavehTime += 0; |
| | |
| | | { |
| | | |
| | | //是否调休日 调休日需要上班 |
| | | if (tiaoxiuri.Exists(x => x.ValueStart <= EndTime.Date && x.ValueStart >= EndTime.Date)) |
| | | if (tiaoxiuri.Exists(x => x.ValueStart <= EndTime.Date && x.ValueEnd >= EndTime.Date)) |
| | | { |
| | | if (EndTime >= EndTimeOffworkEnd) |
| | | { |
| | |
| | | if ((int)dateTimenow.Date.DayOfWeek >= admAttendanceRuleDTO.WeekStart && (int)dateTimenow.Date.DayOfWeek <= admAttendanceRuleDTO.WeekEnd) |
| | | { |
| | | //是否假期 假期不上班 |
| | | if (jiejiari.Exists(x => x.ValueStart <= dateTimenow.Date && x.ValueStart >= dateTimenow.Date)) |
| | | if (jiejiari.Exists(x => x.ValueStart <= dateTimenow.Date && x.ValueEnd >= dateTimenow.Date)) |
| | | { |
| | | LavehTime += 0; |
| | | } |
| | |
| | | { |
| | | |
| | | //是否调休日 调休日需要上班 |
| | | if (tiaoxiuri.Exists(x => x.ValueStart <= StratTime.Date && x.ValueStart >= StratTime.Date)) |
| | | if (tiaoxiuri.Exists(x => x.ValueStart <= StratTime.Date && x.ValueEnd >= StratTime.Date)) |
| | | { |
| | | LavehTime += shangbanshijian; |
| | | } |
| | |
| | | |
| | | |
| | | if(ts.Days == 0) |
| | | { |
| | | LavehTime -= shangbanshijian; |
| | | { //是否上班日期 |
| | | 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)) |
| | | { |
| | | LavehTime -= shangbanshijian; |
| | | } |
| | | else |
| | | { |
| | | LavehTime -= 0; |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | |
| | | return admAsk; |
| | | } |
| | | |
| | | public IActionResult AskLeaveOff(string id = "", DateTime? StratTimeName = null, DateTime? EndTimeName = null) |
| | | public IActionResult AskLeaveOff(string id = "", string StratTimeName = "", string EndTimeName = "") |
| | | { |
| | | var curentuser = JsonConvert.DeserializeObject<PltUser>(HttpContext.Session.GetString("User")); |
| | | ViewData["curentuser"] = curentuser; |
| | |
| | | |
| | | |
| | | |
| | | if (StratTimeName.HasValue) |
| | | if (!string.IsNullOrWhiteSpace(StratTimeName)) |
| | | { |
| | | askLeaveOffDTO.StratTimeName = StratTimeName.Value.AddHours(double.Parse(admAttendanceRuleDTO.WorkingStart.Split('.')[0])).AddMinutes(double.Parse(admAttendanceRuleDTO.WorkingStart.Split('.')[1])).ToString("yyyy-MM-dd HH:mm"); |
| | | 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 (EndTimeName.HasValue) |
| | | if (!string.IsNullOrWhiteSpace(EndTimeName)) |
| | | { |
| | | askLeaveOffDTO.EndTimeName = EndTimeName.Value.AddHours(double.Parse(admAttendanceRuleDTO.OffworkEnd.Split('.')[0])).AddMinutes(double.Parse(admAttendanceRuleDTO.OffworkEnd.Split('.')[1])).ToString("yyyy-MM-dd HH:mm"); |
| | | 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<SysAttachmentDTO> results = new ResultDataEntity<SysAttachmentDTO>(); |
| | |
| | | ViewData["curentuser"] = curentuser; |
| | | using (TransactionScope scope = new TransactionScope()) |
| | | { |
| | | dto.FullAttendance = 0; |
| | | dto.AbsenteeismPayment2 = 0; |
| | | dto.RecStatus = "A"; |
| | | if (String.IsNullOrEmpty(dto.Id)) |
| | | { |