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;
|
private readonly ILiaotianService _liaotianService;
|
private readonly IWfRunProcessService _wfRunProcessService;
|
private readonly IWfHistoryService _wfHistoryService;
|
private readonly IWfNeeddeelService _wfNeeddeelService;
|
[CheckLogin]
|
public SigninController(ILogger<SigninController> logger, IAdmSigninService signinService, ISysAttachmentService sysAttachmentService
|
, IAdmAttendanceRuleService attendanceRuleService, ILiaotianService liaotianService, IWfRunProcessService wfRunProcessService
|
, IWfHistoryService wfHistoryService, IWfNeeddeelService wfNeeddeelService)
|
{
|
_logger = logger;
|
_signinService = signinService;
|
_sysAttachmentService = sysAttachmentService;
|
_attendanceRuleService = attendanceRuleService;
|
_liaotianService = liaotianService;
|
_wfRunProcessService = wfRunProcessService;
|
_wfHistoryService = wfHistoryService;
|
_wfNeeddeelService = wfNeeddeelService;
|
}
|
|
#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 id="", string StratTimeName = "", string EndTimeName = "")
|
{
|
|
var curentuser = JsonConvert.DeserializeObject<PltUser>(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<SysAttachmentDTO> results = new ResultDataEntity<SysAttachmentDTO>();
|
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<WfHistoryDTO>();
|
//流程相关
|
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<PltUser>(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<AdmAskLeaveDTO> resultEntity = new ResultEntity<AdmAskLeaveDTO>();
|
|
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<PltUser>(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<SysAttachmentDTO> results = new ResultDataEntity<SysAttachmentDTO>();
|
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<WfHistoryDTO>();
|
//流程相关
|
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<PltUser>(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()
|
{
|
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<PltUser>(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
|
}
|
}
|