From ed3015095f1b0e88bc579877c678a3fac191381f Mon Sep 17 00:00:00 2001
From: username@email.com <yzy2002yzy@163.com>
Date: 星期一, 28 六月 2021 14:32:26 +0800
Subject: [PATCH] Merge branch 'master' of http://47.108.235.38:8080/r/zhengcaioa

---
 zhengcaioa/zhengcaioa/Controllers/AdmManagement/SigninController.cs |  733 ++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 685 insertions(+), 48 deletions(-)

diff --git a/zhengcaioa/zhengcaioa/Controllers/AdmManagement/SigninController.cs b/zhengcaioa/zhengcaioa/Controllers/AdmManagement/SigninController.cs
index ee4d050..bab1b0c 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
 {
@@ -20,14 +21,16 @@
         private readonly IAdmSigninService _signinService;
         private readonly ISysAttachmentService _sysAttachmentService;
         private readonly IAdmAttendanceRuleService _attendanceRuleService;
+        private readonly ILiaotianService _liaotianService;
         [CheckLogin]
         public SigninController(ILogger<SigninController> logger, IAdmSigninService signinService, ISysAttachmentService sysAttachmentService
-            , IAdmAttendanceRuleService attendanceRuleService)
+            , IAdmAttendanceRuleService attendanceRuleService, ILiaotianService liaotianService)
         {
             _logger = logger;
             _signinService = signinService;
             _sysAttachmentService = sysAttachmentService;
             _attendanceRuleService = attendanceRuleService;
+            _liaotianService = liaotianService;
         }
 
         #region 鑰冨嫟绛惧埌鎵撳崱
@@ -83,12 +86,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,19 +196,82 @@
         }
         #endregion
         #region 璇峰亣涓庨攢鍋�
-         public IActionResult AskLeave(string signinId)
+         public IActionResult AskLeave(string id="", string StratTimeName = "", string EndTimeName = "")
         {
-            ViewBag.SigninId = signinId;
-            AdmAskLeaveDTO admAskLeaveDTO = _signinService.GetAskLeave(signinId);
-            if (admAskLeaveDTO.StratTime.Equals(DateTime.MinValue))
+
+            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.StratTime = DateTime.Now;
+                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");
             }
-            if (admAskLeaveDTO.EndTime.Equals(DateTime.MinValue))
+            else
             {
-                admAskLeaveDTO.EndTime = DateTime.Now;
+                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");
+
             return View();
         }
 
@@ -141,6 +283,8 @@
             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;
@@ -151,39 +295,496 @@
                 admAsk.Modifier = curentuser.Id;
                 admAsk.Modifytime = DateTime.Now;
             }
+            ResultEntity resultEntity = new ResultEntity();
+            resultEntity.Result = false;
+            using (TransactionScope scope = new TransactionScope())
+            {
+                resultEntity = _signinService.SaveAskLeave(admAsk);
+                if (resultEntity.Result == false)
+                {
+                    return JsonConvert.SerializeObject(resultEntity);
+                }
 
-             ResultEntity resultEntity = _signinService.SaveAskLeave(admAsk);
+                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);
+                            }
+                        }
+
+                    }
+
+
+                }
+                scope.Complete();
+            }
+               
 
             return JsonConvert.SerializeObject(resultEntity);
              
         }
-        public IActionResult AskLeaveOff(string signinId)
+
+
+        [CheckLogin]
+        [HttpPost]
+        public string Checktime(DateTime StratTime, DateTime EndTime)
         {
-            ViewBag.SigninId = signinId;
-            AdmAskLeaveOffDTO admAskLeaveOffDTO = _signinService.GetAskLeaveOff(signinId);
-            if (admAskLeaveOffDTO.StratTime.Equals(DateTime.MinValue))
+            ResultEntity<AdmAskLeaveDTO> resultEntity = new ResultEntity<AdmAskLeaveDTO>();
+            
+            if (EndTime<= StratTime)
             {
-                admAskLeaveOffDTO.StratTime = DateTime.Now;
+                resultEntity.Result = false;
+                resultEntity.Message = "寮�濮嬫椂闂翠笉鑳藉ぇ浜庣粨鏉熸椂闂�";
+                return JsonConvert.SerializeObject(resultEntity);
             }
-            if (admAskLeaveOffDTO.EndTime.Equals(DateTime.MinValue))
+
+            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();
+
+            //姣忓ぉ鐨勮�冨嫟鏃堕棿鐐�
+            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++)
             {
-                admAskLeaveOffDTO.EndTime = DateTime.Now;
+                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))
+                        {
+                            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))
+                        {
+                            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 <= StratTime.Date && x.ValueEnd >= StratTime.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))
+                        {
+                            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(signinId))
+            if (!string.IsNullOrEmpty(id))
             {
                 SysAttachmentDTOSearch searchEntity = new SysAttachmentDTOSearch();
                 searchEntity.page = 1;
                 searchEntity.rows = 1000;
                 searchEntity.AttObj = "AskLeaveOff";
-                searchEntity.AttObjid = signinId;
+                searchEntity.AttObjid = id;
                 results = _sysAttachmentService.SearchByPaging(searchEntity);
             }
             ViewBag.attachment = results;
 
+            ViewData["Lavetype"] = _liaotianService.GetSYScode("ADM_AskLeaveOff", "Lavetype");
 
-
-            ViewData.Model = admAskLeaveOffDTO;
+            ViewData.Model = askLeaveOffDTO;
             return View();
         }
 
@@ -192,6 +793,8 @@
             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;
@@ -199,34 +802,50 @@
             }
             leaveOff.Modifier = curentuser.Id;
             leaveOff.Modifytime = DateTime.Now;
-
-            ResultEntity resultEntity = _signinService.SaveAskLeaveOff(leaveOff);
-            string[] Filepaths = leaveOff.Filepath;
-
-            if(Filepaths!=null&& Filepaths.Length > 0)
+            ResultEntity resultEntity = new ResultEntity();
+            resultEntity.Result = false;
+            using (TransactionScope scope = new TransactionScope())
             {
-                for(int i=0;i< Filepaths.Length; i++)
+                resultEntity = _signinService.SaveAskLeaveOff(leaveOff);
+                if(resultEntity.Result == false)
                 {
-                    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;
+                    return JsonConvert.SerializeObject(resultEntity);
+                }
+                string[] Filepaths = leaveOff.Filepath;
 
-                        resultEntity = _sysAttachmentService.save(sysAttachmentDTO);
+                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);
+                            }
+                        }
+
                     }
-                  
+
+
                 }
 
-               
+                scope.Complete();
             }
+
+             
 
             
 
@@ -252,11 +871,29 @@
             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))
                 {
@@ -277,8 +914,8 @@
                     {
                         AdmAttendanceRulesDtlDTO admAttendanceRulesDtlDTO = new AdmAttendanceRulesDtlDTO();
                         admAttendanceRulesDtlDTO.Pid = dto.Id;
-                        admAttendanceRulesDtlDTO.ValueStart = dto.holiday_s[i];
-                        admAttendanceRulesDtlDTO.ValueEnd = dto.holiday_e[i];
+                        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;
@@ -295,8 +932,8 @@
                     {
                         AdmAttendanceRulesDtlDTO admAttendanceRulesDtlDTO = new AdmAttendanceRulesDtlDTO();
                         admAttendanceRulesDtlDTO.Pid = dto.Id;
-                        admAttendanceRulesDtlDTO.ValueStart = dto.rest_s[i];
-                        admAttendanceRulesDtlDTO.ValueEnd = dto.rest_e[i];
+                        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;

--
Gitblit v1.9.1