From 364616de1a73644335f715c50e53030849ff3628 Mon Sep 17 00:00:00 2001 From: zhangli <1109134334@qq.com> Date: Tue, 28 Dec 2021 14:23:30 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E8=B0=83=E6=95=B4=E7=A7=BB=E5=8A=A8?= =?UTF-8?q?=E7=AB=AF=E8=80=83=E5=8B=A4=E6=89=93=E5=8D=A1=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../www/images/2.png | Bin 0 -> 13475 bytes .../{ADRClockIn => }/ADRRecord/ADRRecord.css | 0 .../{ADRClockIn => }/ADRRecord/ADRRecord.html | 0 .../{ADRClockIn => }/ADRRecord/ADRRecord.js | 36 +++++------------- .../AttendanceCard/AttendanceCard.css | 0 .../AttendanceCard/AttendanceCard.html | 4 +- .../AttendanceCard/AttendanceCard.js | 0 .../Learun.Application.WebApi.csproj | 1 + 8 files changed, 13 insertions(+), 28 deletions(-) create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/images/2.png rename Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/{ADRClockIn => }/ADRRecord/ADRRecord.css (100%) rename Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/{ADRClockIn => }/ADRRecord/ADRRecord.html (100%) rename Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/{ADRClockIn => }/ADRRecord/ADRRecord.js (74%) rename Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/{ADRClockIn => }/AttendanceCard/AttendanceCard.css (100%) rename Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/{ADRClockIn => }/AttendanceCard/AttendanceCard.html (75%) rename Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/{ADRClockIn => }/AttendanceCard/AttendanceCard.js (100%) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/images/2.png b/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/images/2.png new file mode 100644 index 0000000000000000000000000000000000000000..efccc99b6eefe687b4548bf25ea4b3c61d18c1b8 GIT binary patch literal 13475 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 KtbJ?p<^KTgnKa-4 literal 0 HcmV?d00001 diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/ADRClockIn/ADRRecord/ADRRecord.css b/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/ADRRecord/ADRRecord.css similarity index 100% rename from Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/ADRClockIn/ADRRecord/ADRRecord.css rename to Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/ADRRecord/ADRRecord.css diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/ADRClockIn/ADRRecord/ADRRecord.html b/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/ADRRecord/ADRRecord.html similarity index 100% rename from Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/ADRClockIn/ADRRecord/ADRRecord.html rename to Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/ADRRecord/ADRRecord.html diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/ADRClockIn/ADRRecord/ADRRecord.js b/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/ADRRecord/ADRRecord.js similarity index 74% rename from Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/ADRClockIn/ADRRecord/ADRRecord.js rename to Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/ADRRecord/ADRRecord.js index d22e65ca4..9cfca1cde 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/ADRClockIn/ADRRecord/ADRRecord.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/ADRRecord/ADRRecord.js @@ -19,14 +19,14 @@ return page.rowRender(_index, _item, _$item, $page); }, click: function (item, $item, $et) {// 列表行点击事件 - if ($et.hasClass('lr-btn-danger')) { - page.btnClick(item, $item, $page); - } - else { - page.rowClick(item, $item, $page); - } - }, - btns: page.rowBtns }); + // if ($et.hasClass('lr-btn-danger')) { + // page.btnClick(item, $item, $page); + // } + // else { + // page.rowClick(item, $item, $page); + // } + } + }); }, lclass: 'lr-list', @@ -112,24 +112,8 @@ _$item.append($('

考勤类型:

').dataFormatter({ value: type })); _$item.append($('

打卡结果:

').dataFormatter({ value: status })); return ''; - }, - rowClick: function (item, $item, $page) {// 列表行点击触发方法 - learun.nav.go({ path: 'LR_Desktop/1/form', title: '详情', type: 'right', param: { keyValue: item.ID } }); - }, - btnClick: function (item, $item, $page) {// 左滑按钮点击事件 - learun.layer.confirm('确定要删除该笔数据吗?', function (_index) { - if (_index === '1') { - learun.layer.loading(true, '正在删除该笔数据'); - learun.httppost(config.webapi + 'learun/LR_Desktop/1/delete', item.ID , (data) => { - if (data) {// 删除数据成功 - page.grid.reload(); - } - learun.layer.loading(false); - }); - } - }, 'Learun智慧校园提示', ['取消', '确定']); - }, - rowBtns: ['删除'] // 列表行左滑按钮 + } + }; return page; })(); diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/ADRClockIn/AttendanceCard/AttendanceCard.css b/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/AttendanceCard/AttendanceCard.css similarity index 100% rename from Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/ADRClockIn/AttendanceCard/AttendanceCard.css rename to Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/AttendanceCard/AttendanceCard.css diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/ADRClockIn/AttendanceCard/AttendanceCard.html b/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/AttendanceCard/AttendanceCard.html similarity index 75% rename from Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/ADRClockIn/AttendanceCard/AttendanceCard.html rename to Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/AttendanceCard/AttendanceCard.html index b30e7f7ee..ef5980269 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/ADRClockIn/AttendanceCard/AttendanceCard.html +++ b/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/AttendanceCard/AttendanceCard.html @@ -7,11 +7,11 @@ 打卡 --> - + \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/ADRClockIn/AttendanceCard/AttendanceCard.js b/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/AttendanceCard/AttendanceCard.js similarity index 100% rename from Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/ADRClockIn/AttendanceCard/AttendanceCard.js rename to Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/AttendanceCard/AttendanceCard.js diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj index 856889ee0..ea00b9f15 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj @@ -167,6 +167,7 @@ + Web.config From a0b5d9a161f136e4a8d9ddbd7d1fab5e11564da5 Mon Sep 17 00:00:00 2001 From: zhangli <1109134334@qq.com> Date: Fri, 31 Dec 2021 12:05:21 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E8=80=83=E5=8B=A4=E7=AE=A1=E7=90=86=20=20?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E6=98=AF=E5=90=A6=E5=8F=AF=E4=BB=A5=E6=89=93?= =?UTF-8?q?=E5=8D=A1API=EF=BC=8C=E8=80=83=E5=8B=A4=E8=A7=84=E5=88=99?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + .../www/pages/ADRRecord/ADRRecord.js | 10 +- .../pages/AttendanceCard/AttendanceCard.html | 2 +- .../pages/AttendanceCard/AttendanceCard.js | 39 +- .../Views/ADR_Restriction/Form.cshtml | 8 +- .../Views/ADR_Restriction/Index.js | 8 +- .../XmlConfig/system.config | 2 +- .../Learun.Application.WebApi.csproj | 1 + .../Modules/AttendanceApi.cs | 21 +- .../ADR_Record/ADR_RecordEntity.cs | 2 +- .../ADR_Restriction/ADR_RestrictionBLL.cs | 19 + .../ADR_Restriction/ADR_RestrictionIBLL.cs | 2 + .../ADR_Restriction/ADR_RestrictionService.cs | 722 +++++++++++++----- 13 files changed, 626 insertions(+), 212 deletions(-) diff --git a/.gitignore b/.gitignore index 8a18751f3..cee9adda7 100644 --- a/.gitignore +++ b/.gitignore @@ -79,3 +79,5 @@ Learun.Framework.Ultimate V7/LearunApp-2.2.0/config.js /Learun.Framework.Ultimate V7/Learun.Application.Mobile/platforms/android/assets/www /Learun.Framework.Ultimate V7/Learun.Application.Mobile/www.7z /Learun.Framework.Ultimate V7/Learun.Application.WebApi/bin.7z +/Learun.Framework.Ultimate V7/Learun.Application.Web/Properties/PublishProfiles +/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Properties/PublishProfiles diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/ADRRecord/ADRRecord.js b/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/ADRRecord/ADRRecord.js index 9cfca1cde..5a48d3dfe 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/ADRRecord/ADRRecord.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/ADRRecord/ADRRecord.js @@ -84,6 +84,12 @@ }else if(ADType=='6') { type='结束加班'; + }else if(ADType=='7') + { + type='中午上班'; + }else if(ADType=='8') + { + type='中午下班'; } var ClockStatus=_item.ClockStatus; var status=''; @@ -106,11 +112,11 @@ { status='缺勤'; } - //_$item.append($('

姓名:

').dataFormatter({ value: _item.UserName })); - //_$item.append($('

账号:

').dataFormatter({ value: _item.UserNo })); + //var name=_item.UserName+'('+_item.UserNo+')' _$item.append($('

打卡时间:

').dataFormatter({ value: _item.ClockTime })); _$item.append($('

考勤类型:

').dataFormatter({ value: type })); _$item.append($('

打卡结果:

').dataFormatter({ value: status })); + //_$item.append($('

用户:

').dataFormatter({ value: name })); return ''; } diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/AttendanceCard/AttendanceCard.html b/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/AttendanceCard/AttendanceCard.html index ef5980269..fba1ada80 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/AttendanceCard/AttendanceCard.html +++ b/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/AttendanceCard/AttendanceCard.html @@ -7,7 +7,7 @@ 打卡 --> - + - @*
+
上午签到有效时间*
-*
-
*@ +
下班时间*
- @*
+
下午签退有效时间*
-*
-
*@ +
打卡次数*
diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/PersonnelManagement/Views/ADR_Restriction/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/PersonnelManagement/Views/ADR_Restriction/Index.js index 0fee97a93..2ba26bc5d 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/PersonnelManagement/Views/ADR_Restriction/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/PersonnelManagement/Views/ADR_Restriction/Index.js @@ -80,11 +80,11 @@ var bootstrap = function ($, learun) { url: top.$.rootUrl + '/PersonnelManagement/ADR_Restriction/GetPageList', headData: [ { label: "上班时间", name: "WorkTime", width: 100, align: "left" }, - //{ label: "签到开始时间", name: "SignInStartTime", width: 100, align: "left" }, - //{ label: "签到结束时间", name: "SignInEndTime", width: 100, align: "left" }, + { label: "签到开始时间", name: "SignInStartTime", width: 100, align: "left" }, + { label: "签到结束时间", name: "SignInEndTime", width: 100, align: "left" }, { label: "下班时间", name: "CloseTime", width: 100, align: "left" }, - //{ label: "签退开始时间", name: "SignOutStartTime", width: 100, align: "left" }, - //{ label: "签退结束时间", name: "SignOutEndTime", width: 100, align: "left" }, + { label: "签退开始时间", name: "SignOutStartTime", width: 100, align: "left" }, + { label: "签退结束时间", name: "SignOutEndTime", width: 100, align: "left" }, { label: "打卡次数", name: "ClockTime", width: 100, align: "left" }, { label: "中午签退时间", name: "NoonCloseTime", width: 100, align: "left" }, { label: "中午签退开始时间", name: "SignOutStartTime2", width: 150, align: "left" }, diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/system.config b/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/system.config index d3635507f..9592e4aee 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/system.config +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/system.config @@ -160,7 +160,7 @@ - + diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj index ea00b9f15..a5634307c 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj @@ -168,6 +168,7 @@ + Web.config diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/AttendanceApi.cs b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/AttendanceApi.cs index 1c71e104d..5fb68930c 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/AttendanceApi.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/AttendanceApi.cs @@ -17,12 +17,31 @@ namespace Learun.Application.WebApi.Modules public AttendanceApi() : base("/learun/adms/attendance") { - Get["/getrecordpagelist"] = GetRecordPageList; + //判断当前时间是否可以打卡 + Get["/IsAttendance"] = IsAttendance; + //打卡 Post["/clockin"] = ClockIn; + //获取考勤打卡记录 + Get["/getrecordpagelist"] = GetRecordPageList; } private ADR_RestrictionIBLL adr_RestrictionBLL = new ADR_RestrictionBLL(); private ADR_RecordIBLL adr_RecordBLL = new ADR_RecordBLL(); + /// + /// 判断当前时间是否可以打卡 + /// + /// + /// + public Response IsAttendance(dynamic _) + { + var res = adr_RestrictionBLL.IsAttendance(); + var jsondata = + new + { + data = res + }; + return Success(jsondata); + } /// /// 打卡 /// diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/LogisticsManagement/ADR_Record/ADR_RecordEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/LogisticsManagement/ADR_Record/ADR_RecordEntity.cs index dc6529489..6992f7c6c 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/LogisticsManagement/ADR_Record/ADR_RecordEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/LogisticsManagement/ADR_Record/ADR_RecordEntity.cs @@ -35,7 +35,7 @@ namespace Learun.Application.TwoDevelopment.LogisticsManagement [Column("DEPARTMENT")] public string Department { get; set; } /// - /// 考勤类型 0-未定义,1-上班,2-下班,3-开始休息,4-结束休息,5-开始加班,6-结束加班 + /// 考勤类型 0-未定义,1-上班,2-下班,3-开始休息,4-结束休息,5-开始加班,6-结束加班,7-中午上班,8-中午下班 /// [Column("ADTYPE")] public string ADType { get; set; } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/PersonnelManagement/ADR_Restriction/ADR_RestrictionBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/PersonnelManagement/ADR_Restriction/ADR_RestrictionBLL.cs index 976464f97..5ffc24efd 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/PersonnelManagement/ADR_Restriction/ADR_RestrictionBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/PersonnelManagement/ADR_Restriction/ADR_RestrictionBLL.cs @@ -166,6 +166,25 @@ namespace Learun.Application.TwoDevelopment.PersonnelManagement } } + public bool IsAttendance() + { + try + { + return aDR_RestrictionService.IsAttendance(); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + public ADR_RestrictionEntity GetADR_RestrictionEntityEnabled() { try diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/PersonnelManagement/ADR_Restriction/ADR_RestrictionIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/PersonnelManagement/ADR_Restriction/ADR_RestrictionIBLL.cs index 244d0cb51..28516e9e2 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/PersonnelManagement/ADR_Restriction/ADR_RestrictionIBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/PersonnelManagement/ADR_Restriction/ADR_RestrictionIBLL.cs @@ -54,6 +54,8 @@ namespace Learun.Application.TwoDevelopment.PersonnelManagement /// /// bool ClockIn(); + + bool IsAttendance(); #endregion ADR_RestrictionEntity GetADR_RestrictionEntityEnabled(); diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/PersonnelManagement/ADR_Restriction/ADR_RestrictionService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/PersonnelManagement/ADR_Restriction/ADR_RestrictionService.cs index 69006e1ff..18a80042d 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/PersonnelManagement/ADR_Restriction/ADR_RestrictionService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/PersonnelManagement/ADR_Restriction/ADR_RestrictionService.cs @@ -213,17 +213,19 @@ namespace Learun.Application.TwoDevelopment.PersonnelManagement //当前服务器日期 var datenow = DateTime.Now.ToString("yyyy-MM-dd"); + var datetimenow = DateTime.Now; + //当前时间年月日时分秒 - string strTimeYear = (DateTime.Now.Year).ToString(); - string strTimeMonth = (DateTime.Now.Month).ToString("d2"); - string strTimeDay = (DateTime.Now.Day).ToString("d2"); - string strTimeHour = (DateTime.Now.Hour).ToString("d2"); - string strTimeMinute = (DateTime.Now.Minute).ToString("d2"); - string strTimeSecond = (DateTime.Now.Second).ToString("d2"); + string strTimeYear = (datetimenow.Year).ToString(); + string strTimeMonth = (datetimenow.Month).ToString("d2"); + string strTimeDay = (datetimenow.Day).ToString("d2"); + string strTimeHour = (datetimenow.Hour).ToString("d2"); + string strTimeMinute = (datetimenow.Minute).ToString("d2"); + string strTimeSecond = (datetimenow.Second).ToString("d2"); string strTime = strTimeYear + "-" + strTimeMonth + "-" + strTimeDay + " " + strTimeHour + ":" + strTimeMinute + ":" + strTimeSecond; - //设备事件时间 + //设备事件时间(在这里,=当前时间) DateTime devicetime = Convert.ToDateTime(strTime); //掉线补传数据时间判断 //设备时间小于当前时间,判断为补传历史时间数据 @@ -233,77 +235,75 @@ namespace Learun.Application.TwoDevelopment.PersonnelManagement //} //上班时间 DateTime workDateTime = Convert.ToDateTime(datenow + " " + attendancerulEntity.WorkTime); + //上班考勤时间段 + DateTime signInStartTime = Convert.ToDateTime(datenow + " " + attendancerulEntity.SignInStartTime); + DateTime signInEndTime = Convert.ToDateTime(datenow + " " + attendancerulEntity.SignInEndTime); + //下班时间 DateTime offworkDateTime = Convert.ToDateTime(datenow + " " + attendancerulEntity.CloseTime); + //下班考勤时间段 + DateTime signOutStartTime = Convert.ToDateTime(datenow + " " + attendancerulEntity.SignOutStartTime); + DateTime signOutEndTime = Convert.ToDateTime(datenow + " " + attendancerulEntity.SignOutEndTime); - var datetimenow = DateTime.Now; + //2021.12.30 上下班设置时间段打卡 #region 二次打卡 //判断打卡次数 if (attendancerulEntity.ClockTime == "二次打卡") { - //迟到判断 - if (devicetime <= workDateTime)//正常 + //上下班正常打卡 + if (devicetime >= signInStartTime && devicetime <= signInEndTime) { ADType = "1";//上班 ClockStatus = "1";//正常 } - else//迟到 + else if (devicetime >= signOutStartTime && devicetime <= signOutEndTime) { - //签到与签退判断 - if (devicetime >= offworkDateTime)//如果签到时间大于下班时间则为签退状态 - { - ADType = "2";//下班 - ClockStatus = "1";//正常 - } - else//小于下班时间 - { - //首先判断是上班还是下班 - //该用户当日有签到记录视为下班签退 - var attendancerecord = this.BaseRepository("CollegeMIS").FindList( - "select * from ADR_Record where ADYear='" + strTimeYear + "' and ADMonth='" + - strTimeMonth + "' and ADDay='" + strTimeDay + "' and UserNo='" + EmpNo + - "' and ADType='1'").ToList(); + ADType = "2";//下班 + ClockStatus = "1";//正常 + } + else if (devicetime <= signOutStartTime)//小于下班时间 + { + //首先判断是上班还是下班 + //该用户当日有签到记录视为下班签退 + var attendancerecord = this.BaseRepository("CollegeMIS").FindList( + "select * from ADR_Record where ADYear='" + strTimeYear + "' and ADMonth='" + + strTimeMonth + "' and ADDay='" + strTimeDay + "' and UserNo='" + EmpNo + + "' and ADType='1'").ToList(); - if (attendancerecord.Count() > 0)//如果存在上班考勤记录 + if (attendancerecord.Count() > 0)//如果存在上班考勤记录 + { + //判断为下班早退 + if (attendancerulEntity.LeaveOverTime.HasValue && attendancerulEntity.LeaveOverTime != 0)//如果允许早退,获取范围 { - //判断为下班早退 - if (attendancerulEntity.LeaveOverTime.HasValue && attendancerulEntity.LeaveOverTime != 0)//如果允许早退,获取范围 + //最早签退时间 + DateTime offworkDateTimeFree = offworkDateTime.AddMinutes(-Convert.ToDouble(attendancerulEntity.LeaveOverTime)); + if (devicetime >= offworkDateTimeFree)//在允许早退范围内记为正常 { - //最早签退时间 - DateTime offworkDateTimeFree = offworkDateTime.AddMinutes(-Convert.ToDouble(attendancerulEntity.LeaveOverTime)); - if (devicetime >= offworkDateTimeFree)//在允许早退范围内记为正常 - { - ADType = "2";//下班 - ClockStatus = "1";//正常 - } - else//超出早退范围视为早退 - { - ADType = "2";//下班 - ClockStatus = "3";//早退 - } + ADType = "2";//下班 + ClockStatus = "1";//正常 } - else//不允许早退直接视为早退 + else//超出早退范围视为早退 { ADType = "2";//下班 ClockStatus = "3";//早退 } } - else//判断为上班迟到 + else//不允许早退直接视为早退 { - if (attendancerulEntity.LateOvertime.HasValue && attendancerulEntity.LateOvertime != 0)//如果允许迟到,获取范围 + ADType = "2";//下班 + ClockStatus = "3";//早退 + } + } + else//判断为上班迟到 + { + if (attendancerulEntity.LateOvertime.HasValue && attendancerulEntity.LateOvertime != 0)//如果允许迟到,获取范围 + { + //最晚签到时间 + DateTime workDateTimeFree = workDateTime.AddMinutes(Convert.ToDouble(attendancerulEntity.LateOvertime)); + if (devicetime <= workDateTimeFree)//在允许迟到范围内记为正常 { - //最晚签到时间 - DateTime workDateTimeFree = workDateTime.AddMinutes(Convert.ToDouble(attendancerulEntity.LateOvertime)); - if (devicetime <= workDateTimeFree)//在允许迟到范围内记为正常 - { - ADType = "1";//上班 - ClockStatus = "1";//正常 - } - else - { - ADType = "1";//上班 - ClockStatus = "2";//迟到 - } + ADType = "1";//上班 + ClockStatus = "1";//正常 } else { @@ -311,9 +311,91 @@ namespace Learun.Application.TwoDevelopment.PersonnelManagement ClockStatus = "2";//迟到 } } + else + { + ADType = "1";//上班 + ClockStatus = "2";//迟到 + } } - } + + #region old 上下班无打卡时间段 + + //if (devicetime <= workDateTime)//正常 + //{ + // ADType = "1";//上班 + // ClockStatus = "1";//正常 + //} + //else//迟到 + //{ + // //签到与签退判断 + // if (devicetime >= offworkDateTime)//如果签到时间大于下班时间则为签退状态 + // { + // ADType = "2";//下班 + // ClockStatus = "1";//正常 + // } + // else//小于下班时间 + // { + // //首先判断是上班还是下班 + // //该用户当日有签到记录视为下班签退 + // var attendancerecord = this.BaseRepository("CollegeMIS").FindList( + // "select * from ADR_Record where ADYear='" + strTimeYear + "' and ADMonth='" + + // strTimeMonth + "' and ADDay='" + strTimeDay + "' and UserNo='" + EmpNo + + // "' and ADType='1'").ToList(); + + // if (attendancerecord.Count() > 0)//如果存在上班考勤记录 + // { + // //判断为下班早退 + // if (attendancerulEntity.LeaveOverTime.HasValue && attendancerulEntity.LeaveOverTime != 0)//如果允许早退,获取范围 + // { + // //最早签退时间 + // DateTime offworkDateTimeFree = offworkDateTime.AddMinutes(-Convert.ToDouble(attendancerulEntity.LeaveOverTime)); + // if (devicetime >= offworkDateTimeFree)//在允许早退范围内记为正常 + // { + // ADType = "2";//下班 + // ClockStatus = "1";//正常 + // } + // else//超出早退范围视为早退 + // { + // ADType = "2";//下班 + // ClockStatus = "3";//早退 + // } + // } + // else//不允许早退直接视为早退 + // { + // ADType = "2";//下班 + // ClockStatus = "3";//早退 + // } + // } + // else//判断为上班迟到 + // { + // if (attendancerulEntity.LateOvertime.HasValue && attendancerulEntity.LateOvertime != 0)//如果允许迟到,获取范围 + // { + // //最晚签到时间 + // DateTime workDateTimeFree = workDateTime.AddMinutes(Convert.ToDouble(attendancerulEntity.LateOvertime)); + // if (devicetime <= workDateTimeFree)//在允许迟到范围内记为正常 + // { + // ADType = "1";//上班 + // ClockStatus = "1";//正常 + // } + // else + // { + // ADType = "1";//上班 + // ClockStatus = "2";//迟到 + // } + // } + // else + // { + // ADType = "1";//上班 + // ClockStatus = "2";//迟到 + // } + // } + // } + + //} + + #endregion + ADR_RecordEntity adrRecordEntity = new ADR_RecordEntity(); adrRecordEntity.Create(); adrRecordEntity.UserName = userinfo.realName; @@ -571,162 +653,297 @@ namespace Learun.Application.TwoDevelopment.PersonnelManagement } else//不在中午考勤时间段判断迟到早退 { - //迟到判断 - if (devicetime <= workDateTime)//正常 + //上下班正常打卡 + if (devicetime >= signInStartTime && devicetime <= signInEndTime) { ADType = "1";//上班 ClockStatus = "1";//正常 } - else//迟到 + else if (devicetime >= signOutStartTime && devicetime <= signOutEndTime) { - //签到与签退判断 - if (devicetime >= offworkDateTime)//如果签到时间大于下班时间则为签退状态 - { - ADType = "2";//下班 - ClockStatus = "1";//正常 - } - //迟到状态 - else + ADType = "2";//下班 + ClockStatus = "1";//正常 + } + else + { + //该用户当日有签到记录视为下班签退 + var attendancerecord = this.BaseRepository("CollegeMIS").FindList("select * from ADR_Record where ADYear='" + strTimeYear + "' and ADMonth='" + strTimeMonth + "' and ADDay='" + strTimeDay + "' and UserNo='" + EmpNo + "'"); + //首先判断上午考勤还是下午考勤 + //如果小于中午下班时间 + if (devicetime < offworkDateTimelunch) { - //首先判断是否中午时间段 - if (devicetime > offworkDateTimelunch && devicetime < workDateTimelunch) + //迟到 + //无上班记录视为迟到 + if (attendancerecord.Count(m => m.ADType == "1") == 0) { - //无效打卡 - ////记录日志 - //ADR_DeviceLogEntity adrDeviceLogEntity = new ADR_DeviceLogEntity(); - //adrDeviceLogEntity.Create(); - //if (deviceEntity != null && !string.IsNullOrEmpty(deviceEntity.Id)) - //{ - // adrDeviceLogEntity.DeviceId = deviceEntity.Id; - // stringAlarm += ",设备IP:" + deviceEntity.IpAddress + "不在考勤时间范围内,打卡无效"; - //} - - //adrDeviceLogEntity.LogData = stringAlarm; - //adrDeviceLogEntity.LogType = "1"; - //connmis.Execute("insert into ADR_DeviceLog(LogId,DeviceId, LogType, LogData, F_CreateDate, F_CreateUserId, F_CreateUserName) values(" + - // "'" + adrDeviceLogEntity.LogId + "','" + adrDeviceLogEntity.DeviceId + "','" + adrDeviceLogEntity.LogType + "'," + - // "'" + adrDeviceLogEntity.LogData + "','" + adrDeviceLogEntity.F_CreateDate + "','system','自动化服务')"); - return true; + //上班迟到 + //获取迟到范围 + if (attendancerulEntity.LateOvertime.HasValue && attendancerulEntity.LateOvertime != 0) + { + DateTime workDateTimeFree = workDateTime.AddMinutes(Convert.ToDouble(attendancerulEntity.LateOvertime)); + if (devicetime <= workDateTimeFree)//在允许迟到范围内记为正常 + { + ADType = "1";//上班 + ClockStatus = "1";//正常 + } + else + { + ADType = "1";//上班 + ClockStatus = "2";//迟到 + } + } + else + { + ADType = "1";//上班 + ClockStatus = "2";//迟到 + } } + //早退 + //有签到记录视为早退 else { - //该用户当日有签到记录视为下班签退 - var attendancerecord = this.BaseRepository("CollegeMIS").FindList("select * from ADR_Record where ADYear='" + strTimeYear + "' and ADMonth='" + strTimeMonth + "' and ADDay='" + strTimeDay + "' and UserNo='" + EmpNo + "'"); - //首先判断上午考勤还是下午考勤 - //如果小于中午下班时间 - if (devicetime < offworkDateTimelunch) + //获取早退范围 + if (attendancerulEntity.LeaveOverTime.HasValue && attendancerulEntity.LeaveOverTime != 0) { - //迟到 - //无上班记录视为迟到 - if (attendancerecord.Count(m => m.ADType == "1") == 0) + //最早签退时间 + DateTime offworkDateTimeFree = offworkDateTime.AddMinutes(-Convert.ToDouble(attendancerulEntity.LeaveOverTime)); + if (devicetime >= offworkDateTimeFree)//在允许早退范围内记为正常 { - //上班迟到 - //获取迟到范围 - if (attendancerulEntity.LateOvertime.HasValue && attendancerulEntity.LateOvertime != 0) - { - DateTime workDateTimeFree = workDateTime.AddMinutes(Convert.ToDouble(attendancerulEntity.LateOvertime)); - if (devicetime <= workDateTimeFree)//在允许迟到范围内记为正常 - { - ADType = "1";//上班 - ClockStatus = "1";//正常 - } - else - { - ADType = "1";//上班 - ClockStatus = "2";//迟到 - } - } - else - { - ADType = "1";//上班 - ClockStatus = "2";//迟到 - } + ADType = "8";//中午下班 + ClockStatus = "1";//正常 } - //早退 - //有签到记录视为早退 - else + else//超出早退范围视为早退 { - //获取早退范围 - if (attendancerulEntity.LeaveOverTime.HasValue && attendancerulEntity.LeaveOverTime != 0) - { - //最早签退时间 - DateTime offworkDateTimeFree = offworkDateTime.AddMinutes(-Convert.ToDouble(attendancerulEntity.LeaveOverTime)); - if (devicetime >= offworkDateTimeFree)//在允许早退范围内记为正常 - { - ADType = "8";//中午下班 - ClockStatus = "1";//正常 - } - else//超出早退范围视为早退 - { - ADType = "8";//中午下班 - ClockStatus = "3";//早退 - } - } - else - { - ADType = "8";//中午下班 - ClockStatus = "3";//早退 - } + ADType = "8";//中午下班 + ClockStatus = "3";//早退 + } + } + else + { + ADType = "8";//中午下班 + ClockStatus = "3";//早退 + } + } + } + else if (devicetime > workDateTimelunch)//如果大于中午上班时间,且上级if判断小于下班时间 + //判断为下午上班打卡迟到或早退 + { + //如果存在中午签到记录 + //判断为下班早退 + if (attendancerecord.Count(m => m.ADType == "7") > 0) + { + //早退判断 + //获取早退范围 + if (attendancerulEntity.LeaveOverTime.HasValue && attendancerulEntity.LeaveOverTime != 0) + { + DateTime offworkDateTimeFree = offworkDateTime.AddMinutes(-Convert.ToDouble(attendancerulEntity.LeaveOverTime)); + if (devicetime >= offworkDateTimeFree)//在允许早退范围内记为正常 + { + ADType = "2";//下班 + ClockStatus = "1";//正常 } + else//超出早退范围视为早退 + { + ADType = "2";//下班 + ClockStatus = "3";//早退 + } + } + else + { + ADType = "2";//下班 + ClockStatus = "3";//早退 } - else if (devicetime > workDateTimelunch)//如果大于中午上班时间,且上级if判断小于下班时间 - //判断为下午上班打卡迟到或早退 + } + else + { + //获取迟到范围 + if (attendancerulEntity.LateOvertime.HasValue && attendancerulEntity.LateOvertime != 0) { - //如果存在中午签到记录 - //判断为下班早退 - if (attendancerecord.Count(m => m.ADType == "7") > 0) + //最晚签到时间 + DateTime workDateTimeFree = workDateTimelunch.AddMinutes(Convert.ToDouble(attendancerulEntity.LateOvertime)); + if (devicetime <= workDateTimeFree)//在允许迟到范围内记为正常 { - //早退判断 - //获取早退范围 - if (attendancerulEntity.LeaveOverTime.HasValue && attendancerulEntity.LeaveOverTime != 0) - { - DateTime offworkDateTimeFree = offworkDateTime.AddMinutes(-Convert.ToDouble(attendancerulEntity.LeaveOverTime)); - if (devicetime >= offworkDateTimeFree)//在允许早退范围内记为正常 - { - ADType = "2";//下班 - ClockStatus = "1";//正常 - } - else//超出早退范围视为早退 - { - ADType = "2";//下班 - ClockStatus = "3";//早退 - } - } - else - { - ADType = "2";//下班 - ClockStatus = "3";//早退 - } + ADType = "7";//中午上班 + ClockStatus = "1";//正常 } else { - //获取迟到范围 - if (attendancerulEntity.LateOvertime.HasValue && attendancerulEntity.LateOvertime != 0) - { - //最晚签到时间 - DateTime workDateTimeFree = workDateTimelunch.AddMinutes(Convert.ToDouble(attendancerulEntity.LateOvertime)); - if (devicetime <= workDateTimeFree)//在允许迟到范围内记为正常 - { - ADType = "7";//中午上班 - ClockStatus = "1";//正常 - } - else - { - ADType = "7";//中午上班 - ClockStatus = "2";//迟到 - } - } - else - { - ADType = "7";//中午上班 - ClockStatus = "2";//迟到 - } + ADType = "7";//中午上班 + ClockStatus = "2";//迟到 } } + else + { + ADType = "7";//中午上班 + ClockStatus = "2";//迟到 + } } } } + + #region old + ////迟到判断 + //if (devicetime <= workDateTime)//正常 + //{ + // ADType = "1";//上班 + // ClockStatus = "1";//正常 + //} + //else//迟到 + //{ + // //签到与签退判断 + // if (devicetime >= offworkDateTime)//如果签到时间大于下班时间则为签退状态 + // { + // ADType = "2";//下班 + // ClockStatus = "1";//正常 + // } + // //迟到状态 + // else + // { + // //首先判断是否中午时间段 + // if (devicetime > offworkDateTimelunch && devicetime < workDateTimelunch) + // { + // //无效打卡 + // ////记录日志 + // //ADR_DeviceLogEntity adrDeviceLogEntity = new ADR_DeviceLogEntity(); + // //adrDeviceLogEntity.Create(); + // //if (deviceEntity != null && !string.IsNullOrEmpty(deviceEntity.Id)) + // //{ + // // adrDeviceLogEntity.DeviceId = deviceEntity.Id; + // // stringAlarm += ",设备IP:" + deviceEntity.IpAddress + "不在考勤时间范围内,打卡无效"; + // //} + + // //adrDeviceLogEntity.LogData = stringAlarm; + // //adrDeviceLogEntity.LogType = "1"; + // //connmis.Execute("insert into ADR_DeviceLog(LogId,DeviceId, LogType, LogData, F_CreateDate, F_CreateUserId, F_CreateUserName) values(" + + // // "'" + adrDeviceLogEntity.LogId + "','" + adrDeviceLogEntity.DeviceId + "','" + adrDeviceLogEntity.LogType + "'," + + // // "'" + adrDeviceLogEntity.LogData + "','" + adrDeviceLogEntity.F_CreateDate + "','system','自动化服务')"); + // return true; + // } + // else + // { + // //该用户当日有签到记录视为下班签退 + // var attendancerecord = this.BaseRepository("CollegeMIS").FindList("select * from ADR_Record where ADYear='" + strTimeYear + "' and ADMonth='" + strTimeMonth + "' and ADDay='" + strTimeDay + "' and UserNo='" + EmpNo + "'"); + // //首先判断上午考勤还是下午考勤 + // //如果小于中午下班时间 + // if (devicetime < offworkDateTimelunch) + // { + // //迟到 + // //无上班记录视为迟到 + // if (attendancerecord.Count(m => m.ADType == "1") == 0) + // { + // //上班迟到 + // //获取迟到范围 + // if (attendancerulEntity.LateOvertime.HasValue && attendancerulEntity.LateOvertime != 0) + // { + // DateTime workDateTimeFree = workDateTime.AddMinutes(Convert.ToDouble(attendancerulEntity.LateOvertime)); + // if (devicetime <= workDateTimeFree)//在允许迟到范围内记为正常 + // { + // ADType = "1";//上班 + // ClockStatus = "1";//正常 + // } + // else + // { + // ADType = "1";//上班 + // ClockStatus = "2";//迟到 + // } + // } + // else + // { + // ADType = "1";//上班 + // ClockStatus = "2";//迟到 + // } + // } + // //早退 + // //有签到记录视为早退 + // else + // { + // //获取早退范围 + // if (attendancerulEntity.LeaveOverTime.HasValue && attendancerulEntity.LeaveOverTime != 0) + // { + // //最早签退时间 + // DateTime offworkDateTimeFree = offworkDateTime.AddMinutes(-Convert.ToDouble(attendancerulEntity.LeaveOverTime)); + // if (devicetime >= offworkDateTimeFree)//在允许早退范围内记为正常 + // { + // ADType = "8";//中午下班 + // ClockStatus = "1";//正常 + // } + // else//超出早退范围视为早退 + // { + // ADType = "8";//中午下班 + // ClockStatus = "3";//早退 + // } + // } + // else + // { + // ADType = "8";//中午下班 + // ClockStatus = "3";//早退 + // } + + // } + // } + // else if (devicetime > workDateTimelunch)//如果大于中午上班时间,且上级if判断小于下班时间 + // //判断为下午上班打卡迟到或早退 + // { + // //如果存在中午签到记录 + // //判断为下班早退 + // if (attendancerecord.Count(m => m.ADType == "7") > 0) + // { + // //早退判断 + // //获取早退范围 + // if (attendancerulEntity.LeaveOverTime.HasValue && attendancerulEntity.LeaveOverTime != 0) + // { + // DateTime offworkDateTimeFree = offworkDateTime.AddMinutes(-Convert.ToDouble(attendancerulEntity.LeaveOverTime)); + // if (devicetime >= offworkDateTimeFree)//在允许早退范围内记为正常 + // { + // ADType = "2";//下班 + // ClockStatus = "1";//正常 + // } + // else//超出早退范围视为早退 + // { + // ADType = "2";//下班 + // ClockStatus = "3";//早退 + // } + // } + // else + // { + // ADType = "2";//下班 + // ClockStatus = "3";//早退 + // } + // } + // else + // { + // //获取迟到范围 + // if (attendancerulEntity.LateOvertime.HasValue && attendancerulEntity.LateOvertime != 0) + // { + // //最晚签到时间 + // DateTime workDateTimeFree = workDateTimelunch.AddMinutes(Convert.ToDouble(attendancerulEntity.LateOvertime)); + // if (devicetime <= workDateTimeFree)//在允许迟到范围内记为正常 + // { + // ADType = "7";//中午上班 + // ClockStatus = "1";//正常 + // } + // else + // { + // ADType = "7";//中午上班 + // ClockStatus = "2";//迟到 + // } + // } + // else + // { + // ADType = "7";//中午上班 + // ClockStatus = "2";//迟到 + // } + // } + // } + // } + // } + //} + + #endregion + + + ADR_RecordEntity adrRecordEntity = new ADR_RecordEntity(); adrRecordEntity.Create(); adrRecordEntity.UserNo = EmpNo; @@ -830,6 +1047,141 @@ namespace Learun.Application.TwoDevelopment.PersonnelManagement } } + /// + /// 判断当前时间是否可以打卡 + /// + /// + public bool IsAttendance() + { + try + { + //当前服务器日期 + var datenow = DateTime.Now.ToString("yyyy-MM-dd"); + + var datetimenow = DateTime.Now; + var EmpNo = LoginUserInfo.Get().account; + + //首先获取考勤规则 + var attendancerulEntity = this.BaseRepository("CollegeMIS").FindEntity(m => m.REnable == true); + //上班时间 + DateTime workDateTime = Convert.ToDateTime(datenow + " " + attendancerulEntity.WorkTime); + //上班考勤时间段 + DateTime signInStartTime = Convert.ToDateTime(datenow + " " + attendancerulEntity.SignInStartTime); + DateTime signInEndTime = Convert.ToDateTime(datenow + " " + attendancerulEntity.SignInEndTime); + + //下班时间 + DateTime offworkDateTime = Convert.ToDateTime(datenow + " " + attendancerulEntity.CloseTime); + //下班考勤时间段 + DateTime signOutStartTime = Convert.ToDateTime(datenow + " " + attendancerulEntity.SignOutStartTime); + DateTime signOutEndTime = Convert.ToDateTime(datenow + " " + attendancerulEntity.SignOutEndTime); + + //小于上班考勤开始时间或大于下班考勤结束时间,不允许打卡 + if (datetimenow < signInStartTime || datetimenow > signOutEndTime) + { + return false; + } + string strTimeYear = (datetimenow.Year).ToString(); + string strTimeMonth = (datetimenow.Month).ToString("d2"); + string strTimeDay = (datetimenow.Day).ToString("d2"); + //该用户当日有签到记录视为下班签退 + var attendancerecordList = this.BaseRepository("CollegeMIS").FindList( + "select * from ADR_Record where ADYear='" + strTimeYear + "' and ADMonth='" + + strTimeMonth + "' and ADDay='" + strTimeDay + "' and UserNo='" + EmpNo + "'").ToList(); + + //下班最早签退时间 + DateTime offworkDateTimeFree = signOutStartTime; + if (attendancerulEntity.LeaveOverTime.HasValue && attendancerulEntity.LeaveOverTime != 0 + ) //如果允许早退,获取范围 + { + offworkDateTimeFree = + offworkDateTime.AddMinutes(-Convert.ToDouble(attendancerulEntity.LeaveOverTime)); + } + if (attendancerulEntity.ClockTime == "二次打卡") + { + //上班 + if (datetimenow > signInStartTime && datetimenow < offworkDateTimeFree && attendancerecordList.Count(x => x.ADType == "1") > 0) + { + return false; + } + //下班 + else if (datetimenow > offworkDateTimeFree && datetimenow < signOutEndTime && attendancerecordList.Count(x => x.ADType == "2") > 0) + { + return false; + } + } + else//四次打卡 + { + //中午下班时间 + DateTime offworkDateTimelunch = Convert.ToDateTime(datenow + " " + attendancerulEntity.NoonCloseTime); + //中午上班时间 + DateTime workDateTimelunch = Convert.ToDateTime(datenow + " " + attendancerulEntity.NoonWorkTime); + //中午下班考勤时间段 + DateTime offworkstartlunch = Convert.ToDateTime(datenow + " " + attendancerulEntity.SignOutStartTime2); + DateTime offworkendlunch = Convert.ToDateTime(datenow + " " + attendancerulEntity.SignOutEndTime2); + //中午上班考勤时间段 + DateTime workstartlunch = Convert.ToDateTime(datenow + " " + attendancerulEntity.SignInStartTime2); + DateTime workendlunch = Convert.ToDateTime(datenow + " " + attendancerulEntity.SignInEndTime2); + + //中午最早签退时间,默认中午下班开始时间。 + DateTime offworkDateTimelunchFree = offworkstartlunch; + ////下班最早签退时间 + //DateTime offworkDateTimeFree = offworkDateTime; + if (attendancerulEntity.LeaveOverTime.HasValue && attendancerulEntity.LeaveOverTime != 0 + ) //如果允许早退,获取范围 + { + offworkDateTimelunchFree = + offworkDateTimelunch.AddMinutes(-Convert.ToDouble(attendancerulEntity.LeaveOverTime)); + //offworkDateTimeFree = + // offworkDateTime.AddMinutes(-Convert.ToDouble(attendancerulEntity.LeaveOverTime)); + } + //中午最晚签到时间 + DateTime workDateTimelunchFree = workendlunch; + //获取迟到范围 + if (attendancerulEntity.LateOvertime.HasValue && attendancerulEntity.LateOvertime != 0) + { + workDateTimelunchFree = workDateTimelunch.AddMinutes(Convert.ToDouble(attendancerulEntity.LateOvertime)); + } + + //上班 大于上班开始时间 ,小于中午最早签退时间 + if (datetimenow > signInStartTime && datetimenow < offworkDateTimelunchFree && attendancerecordList.Count(x => x.ADType == "1") > 0) + { + return false; + } + //中午下班 大于中午最早签退时间,小于 中午下班结束时间 + else if (datetimenow > offworkDateTimelunchFree && datetimenow < offworkendlunch && attendancerecordList.Count(x => x.ADType == "8") > 0) + { + return false; + } + //中午上班 大于中午上班开始时间,小于下班最早签退时间 + else if (datetimenow > workstartlunch && datetimenow < offworkDateTimeFree && + attendancerecordList.Count(x => x.ADType == "7") > 0) + { + return false; + } + //下班 大于下班最早签退时间,小于 下班结束时间 + else if (datetimenow > offworkDateTimeFree && datetimenow < signOutEndTime && attendancerecordList.Count(x => x.ADType == "2") > 0) + { + return false; + } + + } + + + return true; + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + #endregion public ADR_RestrictionEntity GetADR_RestrictionEntityEnabled() From 6532a736c51454fcb454279dc14feb49bb03ba48 Mon Sep 17 00:00:00 2001 From: zhangli <1109134334@qq.com> Date: Wed, 5 Jan 2022 09:25:18 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E8=80=83=E5=8B=A4=E6=89=93=E5=8D=A1?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../www/images/dkred.png | Bin 0 -> 18542 bytes .../pages/AttendanceCard/AttendanceCard.html | 2 +- .../pages/AttendanceCard/AttendanceCard.js | 2 +- .../SystemModule/Module/ModuleBLL.cs | 6 ++-- .../ADR_Restriction/ADR_RestrictionService.cs | 28 ++++++++---------- 5 files changed, 17 insertions(+), 21 deletions(-) create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/images/dkred.png diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/images/dkred.png b/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/images/dkred.png new file mode 100644 index 0000000000000000000000000000000000000000..a2dc327d0efda64aedfe6e2e2176a5a59ad9f7ee GIT binary patch literal 18542 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 literal 0 HcmV?d00001 diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/AttendanceCard/AttendanceCard.html b/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/AttendanceCard/AttendanceCard.html index fba1ada80..1cfbce9e4 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/AttendanceCard/AttendanceCard.html +++ b/Learun.Framework.Ultimate V7/Learun.Application.Mobile/www/pages/AttendanceCard/AttendanceCard.html @@ -7,7 +7,7 @@ 打卡
--> - +