瀏覽代碼

Merge branch '黑龙江艺术高中职' of 123.57.209.16:bjquanjiang/DigitalScholl into 黑龙江艺术高中职

黑艺新账号
liangkun 1 年之前
父節點
當前提交
377b47ecd9
共有 5 個檔案被更改,包括 411 行新增13 行删除
  1. +40
    -2
      Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/AttendanceApi.cs
  2. +60
    -10
      Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/TeachAttendance/TeachAttendanceEntity.cs
  3. +56
    -0
      Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/PersonnelManagement/ADR_Restriction/ADR_RestrictionBLL.cs
  4. +21
    -0
      Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/PersonnelManagement/ADR_Restriction/ADR_RestrictionIBLL.cs
  5. +234
    -1
      Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/PersonnelManagement/ADR_Restriction/ADR_RestrictionService.cs

+ 40
- 2
Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/AttendanceApi.cs 查看文件

@@ -19,7 +19,7 @@ namespace Learun.Application.WebApi.Modules
{
//判断当前时间是否可以打卡
Get["/IsAttendance"] = IsAttendance;
//打卡
//上下班打卡
Post["/clockin"] = ClockIn;
//获取考勤打卡记录
Get["/getrecordpagelist"] = GetRecordPageList;
@@ -29,6 +29,11 @@ namespace Learun.Application.WebApi.Modules
Post["/clockinStudent"] = ClockInStudent;
//打卡记录
Get["/GetTeacherRecord"] = GetTeacherRecord;

//教师上下课打卡:判断当前打卡状态
//Get["IsAttendanceTeacher"] = IsAttendanceTeacher;
//教师上下课打卡
//Post["/clockinTeacher"] = ClockInTeacher;
}
private ADR_RestrictionIBLL adr_RestrictionBLL = new ADR_RestrictionBLL();
private ADR_RecordIBLL adr_RecordBLL = new ADR_RecordBLL();
@@ -91,7 +96,7 @@ namespace Learun.Application.WebApi.Modules
}

/// <summary>
/// 打卡
/// 上下班打卡
/// </summary>
/// <param name="_"></param>
/// <returns></returns>
@@ -103,6 +108,11 @@ namespace Learun.Application.WebApi.Modules

return Success("打卡成功");
}
/// <summary>
/// 学生打卡
/// </summary>
/// <param name="_"></param>
/// <returns></returns>
public Response ClockInStudent(dynamic _)
{
Attendance parameter = this.GetReqData<Attendance>();
@@ -129,5 +139,33 @@ namespace Learun.Application.WebApi.Modules
};
return Success(jsonData);
}

/// <summary>
/// 教师上下课打卡:判断当前打卡状态
/// </summary>
/// <param name="_"></param>
/// <returns></returns>
public Response IsAttendanceTeacher(dynamic _)
{
var res = adr_RestrictionBLL.IsAttendanceTeacher();
var jsondata =
new
{
data = res
};
return Success(jsondata);
}
/// <summary>
/// 教师上下课打卡
/// </summary>
/// <param name="_"></param>
/// <returns></returns>
public Response ClockInTeacher(dynamic _)
{
Attendance parameter = this.GetReqData<Attendance>();
adr_RestrictionBLL.ClockInTeacher(parameter.ALon, parameter.ALat, parameter.AIsOut, parameter.ARemark, parameter.ADPhoto, parameter.ClockPlace, parameter.LessonSortNo, parameter.ALTId, parameter.ALTOEId);

return Success("打卡成功");
}
}
}

+ 60
- 10
Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/TeachAttendance/TeachAttendanceEntity.cs 查看文件

@@ -20,30 +20,80 @@ namespace Learun.Application.TwoDevelopment.EducationalAdministration
[Column("ID")]
public string ID { get; set; }
/// <summary>
/// 打卡时间
/// 教师编号
/// </summary>
[Column("EMPNO")]
public string EmpNo { get; set; }
/// <summary>
/// 教师姓名
/// </summary>
[Column("EMPNAME")]
public string EmpName { get; set; }
/// <summary>
/// 必修课表主键
/// </summary>
[Column("ALTID")]
public string ALTId { get; set; }
/// <summary>
/// 选修课表主键
/// </summary>
[Column("ALTOEID")]
public string ALTOEId { get; set; }
/// <summary>
/// 课程标识:1必修,2选修
/// </summary>
[Column("ALTOEID")]
public string LessonSortNo { get; set; }
/// <summary>
/// 考勤类型 0-未定义,1-上课,2-下课,
/// </summary>
[Column("ADTYPE")]
public string ADType { get; set; }
/// <summary>
/// 考勤时间(服务器时间)
/// </summary>
[Column("ADTIME")]
public DateTime? ADTime { get; set; }
/// <summary>
/// 打卡时间(考勤机时间)
/// </summary>
[Column("CLOCKTIME")]
public DateTime? ClockTime { get; set; }
/// <summary>
/// 打卡地点
/// 打卡结果 1正常,2迟到,3早退,6缺勤
/// </summary>
[Column("CLOCKSTATUS")]
public string ClockStatus { get; set; }
/// <summary>
/// 打卡地点
/// </summary>
[Column("CLOCKPLACE")]
public string ClockPlace { get; set; }
/// <summary>
/// 教师编号
/// 考勤照片
/// </summary>
[Column("EMPNO")]
public string EmpNo { get; set; }
[Column("ADPHOTO")]
public string ADPhoto { get; set; }
/// <summary>
/// 教师姓名
/// 经度
/// </summary>
[Column("EMPNAME")]
public string EmpName { get; set; }
[Column("ALON")]
public decimal ALon { get; set; }
/// <summary>
/// 纬度
/// </summary>
[Column("ALAT")]
public decimal ALat { get; set; }
/// <summary>
/// 是否外勤
/// </summary>
[Column("AISOUT")]
public bool AIsOut { get; set; }
/// <summary>
/// 备注
/// </summary>
[Column("REMARK")]
public string Remark { get; set; }
[Column("AREMARK")]
public string ARemark { get; set; }
#endregion

#region 扩展操作


+ 56
- 0
Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/PersonnelManagement/ADR_Restriction/ADR_RestrictionBLL.cs 查看文件

@@ -282,6 +282,62 @@ namespace Learun.Application.TwoDevelopment.PersonnelManagement
}
}

/// <summary>
/// 教师上下课打卡:判断当前打卡状态
/// </summary>
/// <returns></returns>
public ADR_RestrictionEntity IsAttendanceTeacher()
{
try
{
return aDR_RestrictionService.IsAttendanceTeacher();
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowBusinessException(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
{
return aDR_RestrictionService.ClockInTeacher(ALon, ALat, AIsOut, ARemark, ADPhoto, ClockPlace, LessonSortNo, ALTId, AlTOEId);
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowBusinessException(ex);
}
}
}

#endregion

}


+ 21
- 0
Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/PersonnelManagement/ADR_Restriction/ADR_RestrictionIBLL.cs 查看文件

@@ -63,5 +63,26 @@ namespace Learun.Application.TwoDevelopment.PersonnelManagement
void SaveFormDay(string keyValue, List<ADR_RestrictionDayEntity> entity);
ADR_RestrictionEntity IsAttendanceStudent();
bool ClockInStudent(decimal ALon, decimal ALat, bool AIsOut, string ARemark, string ADPhoto, string ClockPlace, string LessonSortNo, string ALTId, string AlTOEId);
/// <summary>
/// 教师上下课打卡:判断当前打卡状态
/// </summary>
/// <returns></returns>
ADR_RestrictionEntity IsAttendanceTeacher();

/// <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>
bool ClockInTeacher(decimal ALon, decimal ALat, bool AIsOut, string ARemark, string ADPhoto, string ClockPlace, string LessonSortNo, string ALTId, string AlTOEId);

}
}

+ 234
- 1
Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/PersonnelManagement/ADR_Restriction/ADR_RestrictionService.cs 查看文件

@@ -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);
}
}
}

}
}

Loading…
取消
儲存