From d67cb0c9792e23be7ccf655675cb32ac1a236b7b Mon Sep 17 00:00:00 2001
From: username@email.com <yzy2002yzy@163.com>
Date: 星期五, 25 十一月 2022 09:49:22 +0800
Subject: [PATCH] 在人事管理页面增加查看员工考勤记录功能

---
 zhengcaioa/zhengcaioa/Controllers/AdmManagement/SigninController.cs |  609 +++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 505 insertions(+), 104 deletions(-)

diff --git a/zhengcaioa/zhengcaioa/Controllers/AdmManagement/SigninController.cs b/zhengcaioa/zhengcaioa/Controllers/AdmManagement/SigninController.cs
index bedb534..61c2aed 100644
--- a/zhengcaioa/zhengcaioa/Controllers/AdmManagement/SigninController.cs
+++ b/zhengcaioa/zhengcaioa/Controllers/AdmManagement/SigninController.cs
@@ -11,6 +11,7 @@
 using Microsoft.AspNetCore.Http;
 using Newtonsoft.Json.Linq;
 using System.Transactions;
+using System.Runtime.InteropServices;
 
 namespace zhengcaioa.Controllers.AdmManagement
 {
@@ -21,15 +22,25 @@
         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<SigninController> logger, IAdmSigninService signinService, ISysAttachmentService sysAttachmentService
-            , IAdmAttendanceRuleService attendanceRuleService, ILiaotianService liaotianService)
+            , 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 鑰冨嫟绛惧埌鎵撳崱
@@ -85,12 +96,88 @@
         /// <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 + "   锛孧AC:" + 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>
         /// 鍙栧緱浠婂ぉ绛惧埌淇℃伅
@@ -117,9 +204,64 @@
             search.userId = curentuser.Id;
             return JsonConvert.SerializeObject(_signinService.SearchByPaging(search));
         }
+
+
+
+        /// <summary>
+        /// 鎴戠殑鑰冨嫟璁板綍
+        /// </summary>
+        /// <returns></returns>
+        [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<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>
+        /// <returns></returns>
+
+        [CheckLogin]
+        public string GetSigninListAll(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="", DateTime? StratTimeName = null, DateTime? EndTimeName = null)
+        public IActionResult AskLeave(string id="", string StratTimeName = "", string EndTimeName = "")
         {
 
             var curentuser = JsonConvert.DeserializeObject<PltUser>(HttpContext.Session.GetString("User"));
@@ -138,25 +280,47 @@
             else
             {
                 admAskLeaveDTO.CreaterName = curentuser.UserName;
-                admAskLeaveDTO.Tittle = "璇峰亣鐢宠锛�" + 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;
             }
-
-
-
-            if (StratTimeName.HasValue)
-            {
-                admAskLeaveDTO.StratTimeName = StratTimeName.Value.AddHours(double.Parse(admAttendanceRuleDTO.WorkingStart.Split('.')[0])).AddMinutes(double.Parse(admAttendanceRuleDTO.WorkingStart.Split('.')[1])).ToString("yyyy-MM-dd HH:mm");
-            }
-
-            if (EndTimeName.HasValue)
-            {
-                admAskLeaveDTO.EndTimeName = EndTimeName.Value.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;
 
@@ -174,6 +338,51 @@
 
             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();
         }
 
@@ -185,61 +394,101 @@
             var curentuser = JsonConvert.DeserializeObject<PltUser>(HttpContext.Session.GetString("User"));
             ViewData["curentuser"] = curentuser;
             admAsk.RecStatus = "A";
-            //鏈寕瀹℃壒娴侊紝鎻愪氦鐩存帴閫氳繃
-            admAsk.ShenpiStatus = "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 = new ResultEntity();
             resultEntity.Result = false;
-            using (TransactionScope scope = new TransactionScope())
+
+            if(admAsk.Step == "鎻愪氦")
             {
-                resultEntity = _signinService.SaveAskLeave(admAsk);
-                if (resultEntity.Result == false)
+                //璇峰亣鏃堕棿涓嶈兘閲嶅彔
+              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);
                 }
 
-                string[] Filepaths = admAsk.Filepath;
-
-                if (Filepaths != null && Filepaths.Length > 0)
+            //璇峰亣瓒呰繃涓夊ぉ锛屽繀椤绘彁鍓嶄笁澶╀互涓婅鍋囷紒
+                if (admAsk.LaveDay.Value >= 3 && admAsk.StratTime.Value.Date < DateTime.Now.Date.AddDays(3))
                 {
-                    for (int i = 0; i < Filepaths.Length; i++)
+                    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)
                     {
-                        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);
-                            }
-                        }
-
+                        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);
              
@@ -278,6 +527,8 @@
             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('.');
@@ -340,7 +591,7 @@
                     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;
@@ -389,7 +640,8 @@
                     {
 
                         //鏄惁璋冧紤鏃�  璋冧紤鏃ラ渶瑕佷笂鐝�
-                        if (tiaoxiuri.Exists(x => x.ValueStart <= StratTime.Date && x.ValueStart >= StratTime.Date))
+                        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)
                             {
@@ -435,7 +687,7 @@
                     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;
@@ -485,7 +737,8 @@
                     {
 
                         //鏄惁璋冧紤鏃�  璋冧紤鏃ラ渶瑕佷笂鐝�
-                        if (tiaoxiuri.Exists(x => x.ValueStart <= EndTime.Date && x.ValueStart >= EndTime.Date))
+                        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)
                             {
@@ -534,7 +787,7 @@
                     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;
                         }
@@ -547,7 +800,8 @@
                     {
 
                         //鏄惁璋冧紤鏃�  璋冧紤鏃ラ渶瑕佷笂鐝�
-                        if (tiaoxiuri.Exists(x => x.ValueStart <= StratTime.Date && x.ValueStart >= StratTime.Date))
+                        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;
                         }
@@ -560,8 +814,33 @@
 
 
                 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)
+                            || jiabanri.Exists(x => x.ValueStart <= StratTime.Date && x.ValueEnd >= StratTime.Date))
+                        {
+                            LavehTime -= shangbanshijian;
+                        }
+                        else
+                        {
+                            LavehTime -= 0;
+                        }
+                    }
+                          
                 }
                
             }
@@ -592,7 +871,7 @@
             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;
@@ -611,22 +890,43 @@
             {
                 askLeaveOffDTO.CreaterName = curentuser.UserName;
                 askLeaveOffDTO.Tittle = "閿�鍋囩敵璇凤紙" + curentuser.UserName +"锛�";
-            }
+           
 
 
 
 
 
-            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");
 
-            if (EndTimeName.HasValue)
+                }
+
+            }
+            else
             {
-                askLeaveOffDTO.EndTimeName = EndTimeName.Value.AddHours(double.Parse(admAttendanceRuleDTO.OffworkEnd.Split('.')[0])).AddMinutes(double.Parse(admAttendanceRuleDTO.OffworkEnd.Split('.')[1])).ToString("yyyy-MM-dd HH:mm");
+                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))
             {
@@ -642,6 +942,53 @@
             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();
         }
 
@@ -650,8 +997,8 @@
             var curentuser = JsonConvert.DeserializeObject<PltUser>(HttpContext.Session.GetString("User"));
             ViewData["curentuser"] = curentuser;
             leaveOff.RecStatus = "A";
-            //鏈寕瀹℃壒娴侊紝鎻愪氦鐩存帴閫氳繃
-            leaveOff.ShenpiStatus = "A";
+            ////鏈寕瀹℃壒娴侊紝鎻愪氦鐩存帴閫氳繃
+            //leaveOff.ShenpiStatus = "A";
             if (String.IsNullOrEmpty(leaveOff.Id))
             {
                 leaveOff.Creater = curentuser.Id;
@@ -661,43 +1008,68 @@
             leaveOff.Modifytime = DateTime.Now;
             ResultEntity resultEntity = new ResultEntity();
             resultEntity.Result = false;
-            using (TransactionScope scope = new TransactionScope())
+
+            if (leaveOff.Step == "鎻愪氦")
             {
-                resultEntity = _signinService.SaveAskLeaveOff(leaveOff);
-                if(resultEntity.Result == false)
+                //璇峰亣鏃堕棿涓嶈兘閲嶅彔
+                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);
                 }
-                string[] Filepaths = leaveOff.Filepath;
 
-                if (Filepaths != null && Filepaths.Length > 0)
+                //閿�鍋囧繀椤讳笁澶╀互鍐�
+                if (leaveOff.StratTime.Value.Date < DateTime.Now.Date.AddDays(-3))
                 {
-                    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.Result = false;
+                    resultEntity.Message = "璇峰湪72灏忔椂鍐呰繘琛岄攢鍋囧鐞嗭紝瓒呰繃72灏忔椂鏃犳硶鎻愪氦";
+                    return JsonConvert.SerializeObject(resultEntity);
+                }
+            }
 
-                            resultEntity = _sysAttachmentService.save(sysAttachmentDTO);
-                            if (resultEntity.Result == false)
+            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]))
                             {
-                                return JsonConvert.SerializeObject(resultEntity);
+                                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();
             }
@@ -716,6 +1088,12 @@
         #region 鑰冨嫟瑙勫垯
         public IActionResult AttendanceRule()
         {
+            var curentuser = JsonConvert.DeserializeObject<PltUser>(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("");
 
@@ -749,6 +1127,8 @@
             ViewData["curentuser"] = curentuser;
             using (TransactionScope scope = new TransactionScope())
             {
+                dto.FullAttendance = 0;
+                dto.AbsenteeismPayment2 = 0;
                 dto.RecStatus = "A";
                 if (String.IsNullOrEmpty(dto.Id))
                 {
@@ -800,6 +1180,27 @@
 
                        
                 }
+
+                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();
             }
                

--
Gitblit v1.9.1