namespace Yw.DAL.PostgreSql { /// /// RepairRequestForm /// public partial class RepairRequestForm : BaseTraceDAL, IRepairRequestForm { /// /// /// public override ConnectionConfig ConnectionConfig { get { return ConfigHelper.PostgreSqlConnectionConfig; } } /// /// 获取最近列表 /// public List GetLastList(int Number = 1) { using (var db = new SqlSugarClient(ConnectionConfig)) { return db.Queryable() .OrderBy(x => x.CreateTime, OrderByType.Desc) .Take(Number).ToList(); } } /// /// 获取所有待受理的数据 /// public List GetPendingList() { using (var db = new SqlSugarClient(ConnectionConfig)) { return db.Queryable() .Where(x => x.FormStatus == (int)eRequestStatus.Pending).ToList(); } } /// /// 获取待受理的数量 /// public int GetPendingCount() { using (var db = new SqlSugarClient(ConnectionConfig)) { return db.Queryable() .Where(x => x.FormStatus == (int)eRequestStatus.Pending).Count(); } } /// /// 通过 FormStatus 获取 /// public List GetByFormStatus(int FormStatus) { using (var db = new SqlSugarClient(ConnectionConfig)) { return db.Queryable() .Where(x => x.FormStatus == FormStatus).ToList(); } } /// /// 通过 FormStatus 获取数量 /// public int GetCountByFormStatus(int FormStatus) { using (var db = new SqlSugarClient(ConnectionConfig)) { return db.Queryable() .Where(x => x.FormStatus == FormStatus).Count(); } } /// /// 通过 EquipmentID 获取 /// public List GetByEquipmentID(long EquipmentID) { using (var db = new SqlSugarClient(ConnectionConfig)) { return db.Queryable() .Where(x => x.EquipmentID == EquipmentID) .OrderBy(x => x.CreateTime, OrderByType.Desc).ToList(); } } /// /// 通过 EquipmentIds 获取 /// public List GetByEquipmentIds(List EquipmentIds) { if (EquipmentIds == null || EquipmentIds.Count < 1) { return default; } using (var db = new SqlSugarClient(ConnectionConfig)) { return db.Queryable() .Where(x => EquipmentIds.Contains(x.EquipmentID)) .OrderBy(x => x.CreateTime, OrderByType.Desc).ToList(); } } /// /// 获取某日的数量 /// public int GetCountOfDay(DateTime Day) { using (var db = new SqlSugarClient(ConnectionConfig)) { return db.Queryable() .Where(x => x.CreateTime >= Day.Date && x.CreateTime < Day.Date.AddDays(1)).Count(); } } /// /// 更新 FormStatus /// public bool UpdateFormStatus(long ID, int FormStatus) { using (SqlSugarClient db = new SqlSugarClient(ConnectionConfig)) { return db.Updateable() .SetColumns(x => x.FormStatus == FormStatus) .SetColumns(x => x.UpdateUserID == UserRegister.UserID) .SetColumns(x => x.UpdateTime == DateTime.Now) .SetColumns(x => x.UpdateUserName == UserRegister.UserName) .Where(x => x.ID == ID) .ExecuteCommandHasChange(); } } /// /// 插入一条 /// public override long Insert(Entity.RepairRequestForm entity) { if (string.IsNullOrEmpty(entity.FormNo)) { var count = GetCountOfDay(entity.CreateTime) + 1; entity.FormNo = $"R{entity.CreateTime.ToString("yyyyMMdd")}{count.ToString("000000")}"; } entity.CreateUserID = UserRegister.UserID; entity.CreateUserName = UserRegister.UserName; entity.CreateTime = DateTime.Now; using (var db = new SqlSugarClient(ConnectionConfig)) { try { db.BeginTran(); var formId = db.Insertable(entity).ExecuteReturnSnowflakeId(); if (formId < 1) { db.RollbackTran(); return default; } var entity4Log = new Entity.RepairRequestLog(); entity4Log.FormID = formId; entity4Log.OperateType = (int)eRequestOperation.Create; entity4Log.OperateContent = "创建"; entity4Log.OperateTime = entity.CreateTime; entity4Log.OperateUserID = entity.CreateUserID; entity4Log.OperateUserName = entity.CreateUserName; entity4Log.OperateNote = "创建"; var logId = db.Insertable(entity4Log).ExecuteReturnSnowflakeId(); if (logId < 1) { db.RollbackTran(); return default; } db.CommitTran(); return formId; } catch { db.RollbackTran(); throw; } } } /// /// 插入 /// public long Insert(Entity.RepairRequestForm entity, List entity4FileList) { if (string.IsNullOrEmpty(entity.FormNo)) { var count = GetCountOfDay(entity.CreateTime) + 1; entity.FormNo = $"R{entity.CreateTime.ToString("yyyyMMdd")}{count.ToString("000000")}"; } entity.CreateUserID = UserRegister.UserID; entity.CreateUserName = UserRegister.UserName; entity.CreateTime = DateTime.Now; using (var db = new SqlSugarClient(ConnectionConfig)) { try { db.BeginTran(); var formId = db.Insertable(entity).ExecuteReturnSnowflakeId(); if (formId < 1) { db.RollbackTran(); return default; } var entity4Log = new Entity.RepairRequestLog(); entity4Log.FormID = formId; entity4Log.OperateType = (int)eRequestOperation.Create; entity4Log.OperateContent = "创建"; entity4Log.OperateTime = entity.CreateTime; entity4Log.OperateUserID = entity.CreateUserID; entity4Log.OperateUserName = entity.CreateUserName; entity4Log.OperateNote = "创建"; var logId = db.Insertable(entity4Log).ExecuteReturnSnowflakeId(); if (logId < 1) { db.RollbackTran(); return default; } if (entity4FileList != null && entity4FileList.Count > 0) { entity4FileList.ForEach(x => x.FormID = formId); var fileIds = db.Insertable(entity4FileList).ExecuteReturnSnowflakeIdList(); if (fileIds == null || fileIds.Count != entity4FileList.Count) { db.RollbackTran(); return default; } } db.CommitTran(); return formId; } catch { db.RollbackTran(); throw; } } } /// /// 驳回 /// public bool Reject(long ID, string Reason) { using (SqlSugarClient db = new SqlSugarClient(ConnectionConfig)) { try { var dtNow = DateTime.Now; db.BeginTran(); var bol = db.Updateable() .SetColumns(x => x.FormStatus == (int)eRequestStatus.Rejected) .SetColumns(x => x.UpdateUserID == UserRegister.UserID) .SetColumns(x => x.UpdateTime == dtNow) .SetColumns(x => x.UpdateUserName == UserRegister.UserName) .Where(x => x.ID == ID) .ExecuteCommandHasChange(); if (!bol) { db.RollbackTran(); return false; } var entity4Log = new Entity.RepairRequestLog(); entity4Log.FormID = ID; entity4Log.OperateType = (int)eRequestOperation.Reject; entity4Log.OperateContent = "驳回"; entity4Log.OperateTime = dtNow; entity4Log.OperateUserID = UserRegister.UserID; entity4Log.OperateUserName = UserRegister.UserName; entity4Log.OperateNote = Reason; var logId = db.Insertable(entity4Log).ExecuteReturnSnowflakeId(); if (logId < 1) { db.RollbackTran(); return false; } db.CommitTran(); return true; } catch { db.RollbackTran(); throw; } } } /// /// 受理 /// public bool Accept(long ID, string Note) { using (SqlSugarClient db = new SqlSugarClient(ConnectionConfig)) { try { var dtNow = DateTime.Now; db.BeginTran(); var entity = db.Queryable().Where(x => x.ID == ID).First(); if (entity == null) { db.RollbackTran(); return false; } if (entity.FormStatus != (int)eRequestStatus.Pending) { db.RollbackTran(); return false; } #region 更新报修单 var bol = db.Updateable() .SetColumns(x => x.FormStatus == (int)eRequestStatus.Accepted) .SetColumns(x => x.UpdateUserID == UserRegister.UserID) .SetColumns(x => x.UpdateTime == dtNow) .SetColumns(x => x.UpdateUserName == UserRegister.UserName) .Where(x => x.ID == ID) .ExecuteCommandHasChange(); if (!bol) { db.RollbackTran(); return false; } #endregion #region 生成报修日志 var entity4Log = new Entity.RepairRequestLog(); entity4Log.FormID = ID; entity4Log.OperateType = (int)eRequestOperation.Accept; entity4Log.OperateContent = "受理"; entity4Log.OperateTime = dtNow; entity4Log.OperateUserID = UserRegister.UserID; entity4Log.OperateUserName = UserRegister.UserName; entity4Log.OperateNote = Note; var logId = db.Insertable(entity4Log).ExecuteReturnSnowflakeId(); if (logId < 1) { db.RollbackTran(); return false; } #endregion #region 生成维修单 var taskCount = db.Queryable() .Where(x => x.CreateTime >= dtNow.Date && x.CreateTime < dtNow.Date.AddDays(1)).Count(); var entity4Task = new Entity.RepairTaskForm(); entity4Task.EquipmentID = entity.EquipmentID; entity4Task.RequestID = entity.ID; entity4Task.FormNo = $"T{dtNow.ToString("yyyyMMdd")}{taskCount.ToString("000000")}"; entity4Task.FormName = entity.FormName; entity4Task.FormStatus = (int)eTaskStatus.Accepted; entity4Task.Faq = entity.Faq; entity4Task.Question = entity.Question; entity4Task.Urgency = entity.Urgency; entity4Task.Address = entity.Address; entity4Task.Location = entity.Location; entity4Task.CreateUserID = UserRegister.UserID; entity4Task.CreateTime = dtNow; entity4Task.CreateUserName = UserRegister.UserName; var taskId = db.Insertable(entity4Task).ExecuteReturnSnowflakeId(); if (taskId < 1) { db.RollbackTran(); return false; } #endregion #region 生成维修单日志 var entity4TaskLog = new Entity.RepairTaskLog(); entity4TaskLog.FormID = taskId; entity4TaskLog.OperateType = (int)eTaskOperation.Accept; entity4TaskLog.OperateContent = "受理"; entity4TaskLog.OperateTime = dtNow; entity4TaskLog.OperateUserID = UserRegister.UserID; entity4TaskLog.OperateUserName = UserRegister.UserName; entity4TaskLog.OperateNote = Note; var taskLogId = db.Insertable(entity4TaskLog).ExecuteReturnSnowflakeId(); if (taskLogId < 1) { db.RollbackTran(); return false; } #endregion #region 生成维修文件 var requestFileList = db.Queryable().Where(x => x.FormID == ID).ToList(); if (requestFileList != null && requestFileList.Count > 0) { var entity4LogFileList = new List(); foreach (var requestFile in requestFileList) { var entity4LogFile = new Entity.RepairTaskLogFile(); entity4LogFile.FormID = taskId; entity4LogFile.LogID = taskLogId; entity4LogFile.FileName = requestFile.FileName; entity4LogFile.FileSuffix = requestFile.FileSuffix; entity4LogFile.StorageHouse = requestFile.StorageHouse; entity4LogFile.StorageCode = requestFile.StorageCode; entity4LogFile.SortCode = requestFile.SortCode; entity4LogFile.Description = requestFile.Description; entity4LogFileList.Add(entity4LogFile); } var logFileIdList = db.Insertable(entity4LogFileList).ExecuteReturnSnowflakeIdList(); if (logFileIdList == null || logFileIdList.Count != entity4LogFileList.Count) { db.RollbackTran(); return false; } } #endregion db.CommitTran(); return true; } catch { db.RollbackTran(); throw; } } } /// /// 获取我的模糊分页列表 /// public List GetMyFluzzyPageList ( long CreateUserID, int? FormStatus, int? Urgency, DateTime? StartTime, DateTime? EndTime, int PageIndex, int PageSize, ref int Total ) { if (PageIndex < 1) PageIndex = 1; if (PageSize < 1) PageSize = 1; var exp = Expressionable.Create(); exp.And(x => x.CreateUserID == CreateUserID); exp.AndIF(FormStatus.HasValue, x => x.FormStatus == FormStatus.Value); exp.AndIF(Urgency.HasValue, x => x.Urgency == Urgency.Value); exp.AndIF(StartTime.HasValue, x => x.CreateTime >= StartTime.Value); exp.AndIF(EndTime.HasValue, x => x.CreateTime <= EndTime.Value); using (var db = new SqlSugarClient(ConnectionConfig)) { return db.Queryable() .Where(exp.ToExpression()) .OrderBy(x => x.CreateTime, OrderByType.Desc) .ToPageList(PageIndex, PageSize, ref Total); ; } } /// /// 获取模糊分页列表 /// public List GetFluzzyPageList ( List EquipmentIds, long? CreateUserID, int? FormStatus, int? Urgency, string FormNo, DateTime? StartTime, DateTime? EndTime, int PageIndex, int PageSize, ref int Total ) { if (PageIndex < 1) PageIndex = 1; if (PageSize < 1) PageSize = 1; var exp = Expressionable.Create(); exp.AndIF(EquipmentIds != null && EquipmentIds.Count > 0, x => EquipmentIds.Contains(x.EquipmentID)); exp.AndIF(CreateUserID.HasValue, x => x.CreateUserID == CreateUserID); exp.AndIF(FormStatus.HasValue, x => x.FormStatus == FormStatus.Value); exp.AndIF(Urgency.HasValue, x => x.Urgency == Urgency.Value); exp.AndIF(!string.IsNullOrEmpty(FormNo), x => x.FormNo.Contains(FormNo)); exp.AndIF(StartTime.HasValue, x => x.CreateTime >= StartTime.Value); exp.AndIF(EndTime.HasValue, x => x.CreateTime <= EndTime.Value); using (var db = new SqlSugarClient(ConnectionConfig)) { return db.Queryable() .Where(exp.ToExpression()) .OrderBy(x => x.CreateTime, OrderByType.Desc) .ToPageList(PageIndex, PageSize, ref Total); ; } } /// /// 获取待派单分页列表 /// public List> GetJustAccepedPageList ( List EquipmentIds, long? CreateUserID, int? Urgency, string FormNo, DateTime? StartTime, DateTime? EndTime, int PageIndex, int PageSize, ref int Total ) { if (PageIndex < 1) PageIndex = 1; if (PageSize < 1) PageSize = 1; var exp = Expressionable.Create(); exp.AndIF(EquipmentIds != null && EquipmentIds.Count > 0, (x, y) => EquipmentIds.Contains(x.EquipmentID)); exp.AndIF(CreateUserID.HasValue, (x, y) => x.CreateUserID == CreateUserID); exp.And((x, y) => x.FormStatus == (int)eRequestStatus.Accepted); exp.AndIF(Urgency.HasValue, (x, y) => x.Urgency == Urgency.Value); exp.AndIF(!string.IsNullOrEmpty(FormNo), (x, y) => x.FormNo.Contains(FormNo)); exp.AndIF(StartTime.HasValue, (x, y) => x.CreateTime >= StartTime.Value); exp.AndIF(EndTime.HasValue, (x, y) => x.CreateTime <= EndTime.Value); exp.And((x, y) => y.FormStatus == (int)eTaskStatus.Accepted); using (var db = new SqlSugarClient(ConnectionConfig)) { var list = db.Queryable() .InnerJoin((x, y) => y.RequestID != null && x.ID == y.RequestID.Value) .Where(exp.ToExpression()) .OrderBy(x => x.CreateTime, OrderByType.Desc) .Select((x, y) => new { x, y }) .ToPageList(PageIndex, PageSize, ref Total); return list?.Select(x => new Tuple(x.x, x.y)).ToList(); } } } }