|
|
|
@ -1,4 +1,6 @@ |
|
|
|
|
namespace Tiobon.Core.Services; |
|
|
|
|
using MongoDB.Driver.Linq; |
|
|
|
|
|
|
|
|
|
namespace Tiobon.Core.Services; |
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
/// 开班管理 (服务) |
|
|
|
@ -488,8 +490,13 @@ WHERE B.OpenClassId = '{Id}'"; |
|
|
|
|
public async Task<ServiceResult<Ghre_OpenClassSchedule1>> QuerySchedule(long Id) |
|
|
|
|
{ |
|
|
|
|
var data = new Ghre_OpenClassSchedule1(); |
|
|
|
|
data.AttendType = await Db.Queryable<Ghre_Config>().Where(x => x.ConfigCode == "Open_Class_Schedule_Attend_Type").Select(x => x.ConfigValue).FirstAsync() ?? "CheckIn"; |
|
|
|
|
var min = await Db.Queryable<Ghre_Config>().Where(x => x.ConfigCode == "Open_Class_Schedule_Valid_Attend_Min").Select(x => x.ConfigValue).FirstAsync() ?? "15"; |
|
|
|
|
|
|
|
|
|
var entity = await base.QueryById(Id); |
|
|
|
|
|
|
|
|
|
var attends = await Db.Queryable<Ghre_OpenClassAttend>().Where(x => x.OpenClassId == Id && x.StaffId == App.User.StaffId).ToListAsync(); |
|
|
|
|
|
|
|
|
|
if (entity.LinkType == "CourseScene") |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
@ -505,7 +512,13 @@ WHERE B.OpenClassId = '{Id}'"; |
|
|
|
|
FROM Ghre_OpenClassSchedule A LEFT JOIN Ghre_Course B ON A.CourseId = B.Id |
|
|
|
|
WHERE A.OpenClassId = '{Id}' AND A.IsEnable = 1";
|
|
|
|
|
data.Details = await Db.Ado.SqlQueryAsync<Ghre_OpenClassScheduleDeatil>(sql); |
|
|
|
|
|
|
|
|
|
data.Details.ForEach(x => |
|
|
|
|
{ |
|
|
|
|
x.StartTime = x.StartTime; |
|
|
|
|
x.EndTime = x.EndTime; |
|
|
|
|
x.StartTime1 = x.StartTime.Value.AddMinutes(-min.ObjToInt()); |
|
|
|
|
x.EndTime1 = x.EndTime.Value.AddMinutes(min.ObjToInt()); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
@ -514,26 +527,123 @@ WHERE A.OpenClassId = '{Id}' AND A.IsEnable = 1"; |
|
|
|
|
Address = entity.Address, |
|
|
|
|
StartTime = entity.StartTime, |
|
|
|
|
EndTime = entity.EndTime, |
|
|
|
|
StartTime1 = entity.StartTime.Value.AddMinutes(-min.ObjToInt()), |
|
|
|
|
EndTime1 = entity.EndTime.Value.AddMinutes(min.ObjToInt()), |
|
|
|
|
CourseId = entity.LinkId, |
|
|
|
|
}; |
|
|
|
|
detail.CourseName = await Db.Queryable<Ghre_Course>().Where(x => x.Id == entity.LinkId).Select(x => x.CourseName).FirstAsync(); |
|
|
|
|
|
|
|
|
|
data.Details.Add(detail); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var dt = DateTime.Now; |
|
|
|
|
data.Details.ForEach(d => |
|
|
|
|
{ |
|
|
|
|
d.Time = DateTimeHelper.ConvertToMiniuteString(d.StartTime) + " ~ " + DateTimeHelper.ConvertToMiniuteString(d.EndTime); |
|
|
|
|
|
|
|
|
|
if (d.StartTime1 <= dt && dt <= d.EndTime1) |
|
|
|
|
d.Status = "Current"; |
|
|
|
|
if (d.StartTime1 > dt) |
|
|
|
|
d.Status = "WaitStart"; |
|
|
|
|
|
|
|
|
|
#region 处理签到签退时间 |
|
|
|
|
|
|
|
|
|
if (data.SceneName.IsNotEmptyOrNull()) |
|
|
|
|
{ |
|
|
|
|
d.CheckInTime = attends.Where(x => x.ScheduleId == d.Id && x.Reverse1 == "CheckIn").Select(x => x.AttendTime).FirstOrDefault(); |
|
|
|
|
d.CheckOutTime = attends.Where(x => x.ScheduleId == d.Id && x.Reverse1 == "CheckOut").Select(x => x.AttendTime).FirstOrDefault(); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
d.CheckInTime = attends.Where(x => x.Reverse1 == "CheckIn").Select(x => x.AttendTime).FirstOrDefault(); |
|
|
|
|
d.CheckOutTime = attends.Where(x => x.Reverse1 == "CheckOut").Select(x => x.AttendTime).FirstOrDefault(); |
|
|
|
|
} |
|
|
|
|
#endregion |
|
|
|
|
|
|
|
|
|
if (d.Status != "Current") |
|
|
|
|
{ |
|
|
|
|
if (d.CheckInTime != null) |
|
|
|
|
d.Status = "Attend"; |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
//entitys.ForEach(it => |
|
|
|
|
//{ |
|
|
|
|
// it.IsPassLabel = it.IsPass == true ? "合格" : "不合格"; |
|
|
|
|
// it.FinallyIsPassLabel = it.FinallyIsPass == true ? "合格" : "不合格"; |
|
|
|
|
//}); |
|
|
|
|
var current = data.Details.Where(x => x.Status == "Current").FirstOrDefault(); |
|
|
|
|
if (current != null) |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
data.IsCheckIn = true; |
|
|
|
|
data.IsCheckOut = false; |
|
|
|
|
|
|
|
|
|
if (current.CheckInTime != null) |
|
|
|
|
{ |
|
|
|
|
data.IsCheckIn = false; |
|
|
|
|
data.Status = "HasCheckIn"; |
|
|
|
|
var start = current.EndTime.Value.AddMinutes(-min.ObjToInt() * 2); |
|
|
|
|
if (dt >= start && dt <= current.EndTime) |
|
|
|
|
data.IsCheckOut = true; |
|
|
|
|
} |
|
|
|
|
if (current.CheckOutTime != null) |
|
|
|
|
{ |
|
|
|
|
data.IsCheckOut = false; |
|
|
|
|
data.Status = "HasCheckOut"; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return ServiceResult<Ghre_OpenClassSchedule1>.OprateSuccess("查询成功!", data); |
|
|
|
|
} |
|
|
|
|
#endregion |
|
|
|
|
|
|
|
|
|
#region 签到 |
|
|
|
|
/// <summary> |
|
|
|
|
/// 签到 |
|
|
|
|
/// </summary> |
|
|
|
|
/// <param name="Id">开班ID</param> |
|
|
|
|
/// <returns></returns> |
|
|
|
|
public async Task<ServiceResult> Attend(long Id, string type) |
|
|
|
|
{ |
|
|
|
|
var entity = await base.QueryById(Id); |
|
|
|
|
|
|
|
|
|
if (entity is null) |
|
|
|
|
return ServiceResult.OprateSuccess("无效的开班ID!"); |
|
|
|
|
|
|
|
|
|
long? scheduleId = null; |
|
|
|
|
var dt = DateTime.Now; |
|
|
|
|
var min = await Db.Queryable<Ghre_Config>().Where(x => x.ConfigCode == "Open_Class_Schedule_Valid_Attend_Min").Select(x => x.ConfigValue).FirstAsync() ?? "15"; |
|
|
|
|
|
|
|
|
|
if (entity.LinkType == "CourseScene") |
|
|
|
|
{ |
|
|
|
|
var schedules = await Db.Queryable<Ghre_OpenClassSchedule>().Where(x => x.OpenClassId == entity.Id).ToListAsync(); |
|
|
|
|
schedules.ForEach(x => |
|
|
|
|
{ |
|
|
|
|
x.StartTime = x.StartTime.Value.AddMinutes(-min.ObjToInt()); |
|
|
|
|
x.EndTime = x.EndTime.Value.AddMinutes(min.ObjToInt()); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
scheduleId = schedules.Where(x => x.StartTime <= dt && x.EndTime >= dt).FirstOrDefault()?.Id; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!await Db.Queryable<Ghre_OpenClassAttend>() |
|
|
|
|
.Where(x => x.OpenClassId == Id && x.StaffId == App.User.StaffId && x.ScheduleId == scheduleId && x.Reverse1 == type) |
|
|
|
|
.AnyAsync()) |
|
|
|
|
{ |
|
|
|
|
var staff = new Ghre_OpenClassAttend() |
|
|
|
|
{ |
|
|
|
|
StaffId = App.User.StaffId, |
|
|
|
|
OpenClassId = Id, |
|
|
|
|
AttendTime = DateTime.Now, |
|
|
|
|
ScheduleId = scheduleId, |
|
|
|
|
Reverse1 = type |
|
|
|
|
}; |
|
|
|
|
await Db.Insertable(staff).ExecuteReturnSnowflakeIdAsync(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return ServiceResult.OprateSuccess("签到成功!"); |
|
|
|
|
} |
|
|
|
|
#endregion |
|
|
|
|
} |