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<SigninController> _logger;
|
private readonly IAdmSigninService _signinService;
|
private readonly ISysAttachmentService _sysAttachmentService;
|
private readonly IAdmAttendanceRuleService _attendanceRuleService;
|
[CheckLogin]
|
public SigninController(ILogger<SigninController> logger, IAdmSigninService signinService, ISysAttachmentService sysAttachmentService
|
, IAdmAttendanceRuleService attendanceRuleService)
|
{
|
_logger = logger;
|
_signinService = signinService;
|
_sysAttachmentService = sysAttachmentService;
|
_attendanceRuleService = attendanceRuleService;
|
}
|
|
#region 考勤签到打卡
|
/// <summary>
|
/// 上下班签到
|
/// </summary>
|
/// <returns></returns>
|
[CheckLogin]
|
public IActionResult Index()
|
{
|
return View();
|
}
|
|
/// <summary>
|
/// 我的考勤记录
|
/// </summary>
|
/// <returns></returns>
|
[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<ActionEntity> actionlist = new List<ActionEntity>();
|
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();
|
}
|
|
/// <summary>
|
/// 保存签到信息
|
/// </summary>
|
/// <param name="id">记录ID</param>
|
/// <param name="signinType">10早上上班 11早上下班 20下午上班 21下午下班 30加班上班 31加班下班</param>
|
/// <returns></returns>
|
[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<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>
|
/// 取得今天签到信息
|
/// </summary>
|
/// <returns></returns>
|
[CheckLogin]
|
public string GetTodaySignin()
|
{
|
var curentuser = JsonConvert.DeserializeObject<PltUser>(HttpContext.Session.GetString("User"));
|
return JsonConvert.SerializeObject(_signinService.GetTodaySignin(curentuser.Id)); //.ReturnID;
|
}
|
|
|
|
/// <summary>
|
/// 取得考勤记录
|
/// </summary>
|
/// <returns></returns>
|
|
[CheckLogin]
|
public string GetSigninList(AdmSignInDTOSearch search)
|
{
|
var curentuser = JsonConvert.DeserializeObject<PltUser>(HttpContext.Session.GetString("User"));
|
search.userId = curentuser.Id;
|
return JsonConvert.SerializeObject(_signinService.SearchByPaging(search));
|
}
|
#endregion
|
#region 请假与销假
|
public IActionResult AskLeave(string signinId)
|
{
|
ViewBag.SigninId = signinId;
|
AdmAskLeaveDTO admAskLeaveDTO = _signinService.GetAskLeave(signinId);
|
if (admAskLeaveDTO.StratTime.Equals(DateTime.MinValue))
|
{
|
admAskLeaveDTO.StratTime = DateTime.Now;
|
}
|
if (admAskLeaveDTO.EndTime.Equals(DateTime.MinValue))
|
{
|
admAskLeaveDTO.EndTime = DateTime.Now;
|
}
|
ViewData.Model = admAskLeaveDTO;
|
return View();
|
}
|
|
|
[CheckLogin]
|
[HttpPost]
|
public string SaveAskLeave(AdmAskLeaveDTO admAsk)
|
{
|
var curentuser = JsonConvert.DeserializeObject<PltUser>(HttpContext.Session.GetString("User"));
|
ViewData["curentuser"] = curentuser;
|
admAsk.RecStatus = "A";
|
if (String.IsNullOrEmpty(admAsk.Id))
|
{
|
admAsk.Creater = curentuser.Id;
|
admAsk.Createtime = DateTime.Now;
|
}
|
else
|
{
|
admAsk.Modifier = curentuser.Id;
|
admAsk.Modifytime = DateTime.Now;
|
}
|
|
ResultEntity resultEntity = _signinService.SaveAskLeave(admAsk);
|
|
return JsonConvert.SerializeObject(resultEntity);
|
|
}
|
public IActionResult AskLeaveOff(string signinId)
|
{
|
ViewBag.SigninId = signinId;
|
AdmAskLeaveOffDTO admAskLeaveOffDTO = _signinService.GetAskLeaveOff(signinId);
|
if (admAskLeaveOffDTO.StratTime.Equals(DateTime.MinValue))
|
{
|
admAskLeaveOffDTO.StratTime = DateTime.Now;
|
}
|
if (admAskLeaveOffDTO.EndTime.Equals(DateTime.MinValue))
|
{
|
admAskLeaveOffDTO.EndTime = DateTime.Now;
|
}
|
ResultDataEntity<SysAttachmentDTO> results = new ResultDataEntity<SysAttachmentDTO>();
|
if (!string.IsNullOrEmpty(signinId))
|
{
|
SysAttachmentDTOSearch searchEntity = new SysAttachmentDTOSearch();
|
searchEntity.page = 1;
|
searchEntity.rows = 1000;
|
searchEntity.AttObj = "AskLeaveOff";
|
searchEntity.AttObjid = signinId;
|
results = _sysAttachmentService.SearchByPaging(searchEntity);
|
}
|
ViewBag.attachment = results;
|
|
|
|
ViewData.Model = admAskLeaveOffDTO;
|
return View();
|
}
|
|
public string SaveAskLeaveOff(AdmAskLeaveOffDTO leaveOff)
|
{
|
var curentuser = JsonConvert.DeserializeObject<PltUser>(HttpContext.Session.GetString("User"));
|
ViewData["curentuser"] = curentuser;
|
leaveOff.RecStatus = "A";
|
if (String.IsNullOrEmpty(leaveOff.Id))
|
{
|
leaveOff.Creater = curentuser.Id;
|
leaveOff.Createtime = DateTime.Now;
|
}
|
leaveOff.Modifier = curentuser.Id;
|
leaveOff.Modifytime = DateTime.Now;
|
|
ResultEntity resultEntity = _signinService.SaveAskLeaveOff(leaveOff);
|
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.SigninId;
|
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);
|
}
|
|
}
|
|
|
}
|
|
|
|
|
|
return JsonConvert.SerializeObject(resultEntity);
|
}
|
#endregion
|
|
|
#region 考勤规则
|
public IActionResult AttendanceRule()
|
{
|
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";
|
resultEntity.Result = false;
|
var curentuser = JsonConvert.DeserializeObject<PltUser>(HttpContext.Session.GetString("User"));
|
ViewData["curentuser"] = curentuser;
|
using (TransactionScope scope = new TransactionScope())
|
{
|
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 = dto.holiday_s[i];
|
admAttendanceRulesDtlDTO.ValueEnd = 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 = dto.rest_s[i];
|
admAttendanceRulesDtlDTO.ValueEnd = 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);
|
}
|
|
|
}
|
scope.Complete();
|
}
|
|
|
// var ss = leaveOff;
|
return JsonConvert.SerializeObject(resultEntity);
|
}
|
#endregion
|
}
|
}
|