|
|
@@ -1190,7 +1190,7 @@ namespace Learun.Application.TwoDevelopment.PersonnelManagement |
|
|
|
//更新最晚下班时间 |
|
|
|
adrresult.AttendanceType = 1; |
|
|
|
adrresult.AttendanceTypeString = "正常打卡"; |
|
|
|
var userWorkTime= attendancerecordList.Where(m => m.ADType == "1").OrderByDescending(m => m.ADTime).FirstOrDefault()?.ADTime.Value; |
|
|
|
var userWorkTime = attendancerecordList.Where(m => m.ADType == "1").OrderByDescending(m => m.ADTime).FirstOrDefault()?.ADTime.Value; |
|
|
|
var userCloseTime = attendancerecordList.Where(m => m.ADType == "2").OrderByDescending(m => m.ADTime).FirstOrDefault()?.ADTime.Value; |
|
|
|
adrresult.UserWorkTime = userWorkTime != null ? userWorkTime.ToString() : ""; |
|
|
|
adrresult.UserCloseTime = userCloseTime != null ? userCloseTime.ToString() : ""; |
|
|
@@ -1775,5 +1775,238 @@ namespace Learun.Application.TwoDevelopment.PersonnelManagement |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary> |
|
|
|
/// 教师上下课打卡:判断当前打卡状态 |
|
|
|
/// </summary> |
|
|
|
/// <returns></returns> |
|
|
|
public ADR_RestrictionEntity IsAttendanceTeacher() |
|
|
|
{ |
|
|
|
try |
|
|
|
{ |
|
|
|
var adrresult = new ADR_RestrictionEntity(); |
|
|
|
var userinfo = LoginUserInfo.Get(); |
|
|
|
var empInfo = BaseRepository("CollegeMIS").FindEntity<EmpInfoEntity>(m => m.EmpNo == userinfo.account); |
|
|
|
//当前服务器日期 |
|
|
|
var datenow = DateTime.Now.ToString("yyyy-MM-dd"); |
|
|
|
DateTime datenowdatetime = Convert.ToDateTime(datenow); |
|
|
|
var datetimenow = DateTime.Now; |
|
|
|
//首先获取考勤规则 |
|
|
|
ADR_RestrictionEntity attendancerulEntity = null; |
|
|
|
if (empInfo != null) |
|
|
|
{ |
|
|
|
attendancerulEntity = this.BaseRepository("CollegeMIS") |
|
|
|
.FindEntity<ADR_RestrictionEntity>(m => m.REnable == true && m.AType == 2); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
adrresult.AttendanceType = 5; |
|
|
|
adrresult.AttendanceTypeString = "非教师用户不能签到"; |
|
|
|
return adrresult; |
|
|
|
} |
|
|
|
//考勤范围 |
|
|
|
adrresult.GPSLon = attendancerulEntity.GPSLon; |
|
|
|
adrresult.GPSLat = attendancerulEntity.GPSLat; |
|
|
|
adrresult.GPSRange = attendancerulEntity.GPSRange; |
|
|
|
adrresult.GPSAddr = attendancerulEntity.GPSAddr; |
|
|
|
//获取课表信息 |
|
|
|
//当前学年学期信息 |
|
|
|
var say = Common.GetSemesterAndYear(); |
|
|
|
//当天课程 |
|
|
|
//todo:待完善问题:必修课和选修课时间可能会交叉,不是必修在前,选修在后,则需要必修选修一起根据上课节次升序排序; |
|
|
|
//todo:学生打卡也存在待完善问题; |
|
|
|
//必修课 |
|
|
|
var lessons = BaseRepository("CollegeMIS").FindList<ArrangeLessonTermEntity>(m => m.AcademicYearNo == say.AcademicYearShort && m.Semester == say.Semester |
|
|
|
&& m.EmpNo == empInfo.EmpNo && m.LessonDate.Value == datenowdatetime).OrderBy(x => Convert.ToInt32(x.LessonTime.Substring(1))); |
|
|
|
//当前打卡课程判断 |
|
|
|
foreach (var arrangeLessonTermEntity in lessons) |
|
|
|
{ |
|
|
|
TimeSpan start = TimeSpan.Parse(arrangeLessonTermEntity.StartTime); |
|
|
|
TimeSpan end = TimeSpan.Parse(arrangeLessonTermEntity.EndTime); |
|
|
|
int StuAttendanceEarliestMinute = !string.IsNullOrEmpty(Util.Config.GetValue("StuAttendanceEarliestMinute")) ? Convert.ToInt32(Util.Config.GetValue("StuAttendanceEarliestMinute")) : 0; |
|
|
|
//当前时间小于等于上课时间,且大于开课前指定分钟 |
|
|
|
if (datetimenow.TimeOfDay <= start && datetimenow.TimeOfDay >= start.Add(-TimeSpan.FromMinutes(StuAttendanceEarliestMinute))) |
|
|
|
{ |
|
|
|
//todo:返回结果集增加班级信息 |
|
|
|
adrresult.AttendanceType = 1; |
|
|
|
adrresult.AttendanceTypeString = "正常签到"; |
|
|
|
adrresult.LessonName = arrangeLessonTermEntity.LessonName; |
|
|
|
adrresult.StartTime = arrangeLessonTermEntity.StartTime; |
|
|
|
adrresult.EndTime = arrangeLessonTermEntity.EndTime; |
|
|
|
adrresult.EmpName = arrangeLessonTermEntity.EmpName; |
|
|
|
adrresult.Classroom = BaseRepository("CollegeMIS").FindEntity<ClassroomInfoEntity>(m => m.ClassroomNo == arrangeLessonTermEntity.ClassroomNo)?.ClassroomName; |
|
|
|
adrresult.LessonSortNo = "1"; |
|
|
|
adrresult.ALTId = arrangeLessonTermEntity.ALTId; |
|
|
|
//签到记录 |
|
|
|
//todo:应该查找上课记录;无则进入正常上课打卡,有则提示已打过卡; |
|
|
|
var attendanceEntity = BaseRepository("CollegeMIS").FindEntity<Teach_attendanceEntity>(m => m.ALTId == arrangeLessonTermEntity.ALTId && m.EmpNo == arrangeLessonTermEntity.EmpNo); |
|
|
|
if (attendanceEntity != null) |
|
|
|
{ |
|
|
|
adrresult.UserWorkTime = attendanceEntity.ClockTime.ToString(); |
|
|
|
} |
|
|
|
return adrresult; |
|
|
|
} |
|
|
|
//迟到打卡 |
|
|
|
if (datetimenow.TimeOfDay > start && datetimenow.TimeOfDay <= end) |
|
|
|
{ |
|
|
|
adrresult.AttendanceType = 2; |
|
|
|
adrresult.AttendanceTypeString = "迟到"; |
|
|
|
adrresult.LessonName = arrangeLessonTermEntity.LessonName; |
|
|
|
adrresult.StartTime = arrangeLessonTermEntity.StartTime; |
|
|
|
adrresult.EndTime = arrangeLessonTermEntity.EndTime; |
|
|
|
adrresult.EmpName = arrangeLessonTermEntity.EmpName; |
|
|
|
adrresult.Classroom = BaseRepository("CollegeMIS").FindEntity<ClassroomInfoEntity>(m => m.ClassroomNo == arrangeLessonTermEntity.ClassroomNo)?.ClassroomName; |
|
|
|
adrresult.LessonSortNo = "1"; |
|
|
|
adrresult.ALTId = arrangeLessonTermEntity.ALTId; |
|
|
|
//签到记录 |
|
|
|
//todo:应该查找上课记录;无则进入迟到打卡,有则开始查找下课记录(无则进入早退打卡,有则提示已打过卡;); |
|
|
|
var attendanceEntity = BaseRepository("CollegeMIS").FindEntity<Teach_attendanceEntity>(m => m.ALTId == arrangeLessonTermEntity.ALTId && m.EmpNo == arrangeLessonTermEntity.EmpNo); |
|
|
|
if (attendanceEntity != null) |
|
|
|
{ |
|
|
|
adrresult.UserWorkTime = attendanceEntity.ClockTime.ToString(); |
|
|
|
} |
|
|
|
return adrresult; |
|
|
|
} |
|
|
|
//下课打卡 |
|
|
|
//todo:当前时间大于下课时间,则查找下课记录;有则进入下一个循环,无则进入下课打卡; |
|
|
|
//存在问题:上了一天课都没打卡,时间到了晚上,可以从第一门课开始,每门课都可以一直打下课打卡; |
|
|
|
} |
|
|
|
//选修课 |
|
|
|
var lessonelective = BaseRepository("CollegeMIS").FindList<ArrangeLessonTermOfElectiveEntity>($@"select a.* |
|
|
|
from ArrangeLessonTermOfElective a |
|
|
|
where a.EmpNo='{empInfo.EmpNo}' |
|
|
|
and a.AcademicYearNo='{say.AcademicYearShort}' and a.Semester='{say.Semester}' |
|
|
|
and a.LessonDate ='{datenow}' |
|
|
|
and a.CheckMark='1' ").OrderBy(x => Convert.ToInt32(x.LessonSection.Substring(1))); |
|
|
|
//当前打卡课程判断 |
|
|
|
foreach (var arrangeLessonTermEntity in lessonelective) |
|
|
|
{ |
|
|
|
if (arrangeLessonTermEntity.LessonTime.Contains("-")) |
|
|
|
{ |
|
|
|
var lessontime = arrangeLessonTermEntity.LessonTime.Split('-'); |
|
|
|
TimeSpan start = TimeSpan.Parse(lessontime[0]); |
|
|
|
TimeSpan end = TimeSpan.Parse(lessontime[1]); |
|
|
|
int StuAttendanceEarliestMinute = !string.IsNullOrEmpty(Util.Config.GetValue("StuAttendanceEarliestMinute")) ? Convert.ToInt32(Util.Config.GetValue("StuAttendanceEarliestMinute")) : 0; |
|
|
|
//当前时间小于等于上课时间,且大于开课前指定分钟 |
|
|
|
if (datetimenow.TimeOfDay <= start && datetimenow.TimeOfDay >= start.Add(-TimeSpan.FromMinutes(StuAttendanceEarliestMinute))) |
|
|
|
{ |
|
|
|
adrresult.AttendanceType = 1; |
|
|
|
adrresult.AttendanceTypeString = "正常签到"; |
|
|
|
adrresult.LessonName = arrangeLessonTermEntity.LessonName; |
|
|
|
adrresult.StartTime = lessontime[0]; |
|
|
|
adrresult.EndTime = lessontime[1]; |
|
|
|
adrresult.EmpName = arrangeLessonTermEntity.EmpName; |
|
|
|
adrresult.Classroom = BaseRepository("CollegeMIS").FindEntity<ClassroomInfoEntity>(m => m.ClassroomNo == arrangeLessonTermEntity.ClassRoomNo)?.ClassroomName; |
|
|
|
adrresult.LessonSortNo = "2"; |
|
|
|
adrresult.ALTOEId = arrangeLessonTermEntity.Id; |
|
|
|
//签到记录 |
|
|
|
var attendanceEntity = BaseRepository("CollegeMIS").FindEntity<Teach_attendanceEntity>(m => m.ALTOEId == arrangeLessonTermEntity.Id && m.EmpNo == arrangeLessonTermEntity.EmpNo); |
|
|
|
if (attendanceEntity != null) |
|
|
|
{ |
|
|
|
adrresult.UserWorkTime = attendanceEntity.ClockTime.ToString(); |
|
|
|
} |
|
|
|
return adrresult; |
|
|
|
} |
|
|
|
//迟到打卡 |
|
|
|
if (datetimenow.TimeOfDay > start && datetimenow.TimeOfDay <= end) |
|
|
|
{ |
|
|
|
adrresult.AttendanceType = 2; |
|
|
|
adrresult.AttendanceTypeString = "迟到"; |
|
|
|
adrresult.LessonName = arrangeLessonTermEntity.LessonName; |
|
|
|
adrresult.StartTime = lessontime[0]; |
|
|
|
adrresult.EndTime = lessontime[1]; |
|
|
|
adrresult.EmpName = arrangeLessonTermEntity.EmpName; |
|
|
|
adrresult.Classroom = BaseRepository("CollegeMIS").FindEntity<ClassroomInfoEntity>(m => m.ClassroomNo == arrangeLessonTermEntity.ClassRoomNo)?.ClassroomName; |
|
|
|
adrresult.LessonSortNo = "2"; |
|
|
|
adrresult.ALTOEId = arrangeLessonTermEntity.Id; |
|
|
|
//签到记录 |
|
|
|
var attendanceEntity = BaseRepository("CollegeMIS").FindEntity<Teach_attendanceEntity>(m => m.ALTOEId == arrangeLessonTermEntity.Id && m.EmpNo == arrangeLessonTermEntity.EmpNo); |
|
|
|
{ |
|
|
|
adrresult.UserWorkTime = attendanceEntity.ClockTime.ToString(); |
|
|
|
} |
|
|
|
return adrresult; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
adrresult.AttendanceType = 5; |
|
|
|
adrresult.AttendanceTypeString = "不在考勤时间范围"; |
|
|
|
return adrresult; |
|
|
|
} |
|
|
|
catch (Exception ex) |
|
|
|
{ |
|
|
|
if (ex is ExceptionEx) |
|
|
|
{ |
|
|
|
throw; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
throw ExceptionEx.ThrowServiceException(ex); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary> |
|
|
|
/// 教师上下课打卡 |
|
|
|
/// </summary> |
|
|
|
/// <param name="aLon"></param> |
|
|
|
/// <param name="aLat"></param> |
|
|
|
/// <param name="aIsOut"></param> |
|
|
|
/// <param name="aRemark"></param> |
|
|
|
/// <param name="adPhoto"></param> |
|
|
|
/// <param name="clockPlace"></param> |
|
|
|
/// <param name="lessonSortNo"></param> |
|
|
|
/// <param name="altId"></param> |
|
|
|
/// <param name="alToeId"></param> |
|
|
|
/// <returns></returns> |
|
|
|
public bool ClockInTeacher(decimal aLon, decimal aLat, bool aIsOut, string aRemark, string adPhoto, string clockPlace, string lessonSortNo, string altId, string alToeId) |
|
|
|
{ |
|
|
|
try |
|
|
|
{ |
|
|
|
var userinfo = LoginUserInfo.Get(); |
|
|
|
var empinfo = BaseRepository("CollegeMIS").FindEntity<EmpInfoEntity>(m => m.EmpNo == userinfo.account); |
|
|
|
if (empinfo == null) |
|
|
|
{ |
|
|
|
return false; |
|
|
|
} |
|
|
|
//教学考勤 |
|
|
|
Teach_attendanceEntity teach_AttendanceEntity = new Teach_attendanceEntity(); |
|
|
|
teach_AttendanceEntity.Create(); |
|
|
|
teach_AttendanceEntity.EmpNo = empinfo.EmpNo; |
|
|
|
teach_AttendanceEntity.EmpName = empinfo.EmpName; |
|
|
|
teach_AttendanceEntity.LessonSortNo = lessonSortNo; |
|
|
|
teach_AttendanceEntity.ClockPlace = clockPlace; |
|
|
|
teach_AttendanceEntity.ADPhoto = adPhoto; |
|
|
|
teach_AttendanceEntity.ALon = aLon; |
|
|
|
teach_AttendanceEntity.ALat = aLat; |
|
|
|
teach_AttendanceEntity.AIsOut = aIsOut; |
|
|
|
teach_AttendanceEntity.ARemark = aRemark; |
|
|
|
if (lessonSortNo == "1") |
|
|
|
{ |
|
|
|
teach_AttendanceEntity.ALTId = altId; |
|
|
|
//todo:待赋值ADType、ADTime、ClockTime、ClockStatus、 |
|
|
|
//todo:判断正常签到、迟到打卡、早退打卡、下课打卡、 |
|
|
|
} |
|
|
|
if (lessonSortNo == "2") |
|
|
|
{ |
|
|
|
teach_AttendanceEntity.ALTOEId = alToeId; |
|
|
|
//todo:待开发ADType、ADTime、ClockTime、ClockStatus |
|
|
|
|
|
|
|
} |
|
|
|
base.BaseRepository("CollegeMIS").Insert(teach_AttendanceEntity); |
|
|
|
return true; |
|
|
|
} |
|
|
|
catch (Exception ex) |
|
|
|
{ |
|
|
|
if (ex is ExceptionEx) |
|
|
|
{ |
|
|
|
throw; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
throw ExceptionEx.ThrowServiceException(ex); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |