| Controllers/EquipmentInspectionController.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Entites/DbModels/MesEquipmentInspection.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Entites/DbModels/MesEquipmentInspectionDetail.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Entites/Dto/EquipmentInspectionDto.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Services/EquipmentInspectionManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Controllers/EquipmentInspectionController.cs
@@ -11,18 +11,24 @@ [Route("api/[controller]")] public class EquipmentInspectionController : ControllerBase { private readonly EquipmentInspectionManager _manager = new(); /// <summary> /// æ¥è¯¢è®¾å¤ç¹æ£è®°å½ /// </summary> /// <param name="query">æ¥è¯¢åæ°ï¼machineNoådate</param> /// <returns>ç¹æ£è®°å½æ°æ®</returns> [HttpPost("Query")] public ResponseResult Query(OrderMachineDto query) public ResponseResult Query(EquipmentInspectionQueryDto query) { try { dynamic resultInfos = new ExpandoObject(); var result = _manager.QueryInspectionRecord(query); return new ResponseResult { status = 0, message = "OK", data = resultInfos message = "æ¥è¯¢æå", data = result }; } catch (Exception ex) @@ -31,18 +37,22 @@ } } //GetWomdaasByEngineeringNo /// <summary> /// ä¿å设å¤ç¹æ£è®°å½ /// </summary> /// <param name="saveDto">ä¿ååæ°ï¼machineNoãdateãdailyChecksãmonthlyChecks</param> /// <returns>ä¿åç»æ</returns> [HttpPost("Save")] public ResponseResult Save(OrderMachineDto query) public ResponseResult Save(EquipmentInspectionSaveDto saveDto) { try { dynamic resultInfos = new ExpandoObject(); var result = _manager.SaveInspectionRecord(saveDto); return new ResponseResult { status = 0, message = "OK", data = resultInfos message = "ä¿åæå", data = result }; } catch (Exception ex) Entites/DbModels/MesEquipmentInspection.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,118 @@ using SqlSugar; namespace PadApplication.Entites.DbModels; /// <summary> /// 设å¤ç¹æ£ä¸»è¡¨ /// </summary> [SugarTable("MES_EquipmentInspection")] public class MesEquipmentInspection { /// <summary> /// ç¹æ£è®°å½IDï¼èªå¢ä¸»é® /// </summary> [SugarColumn(ColumnName = "InspectionId", IsPrimaryKey = true, IsIdentity = true)] public long InspectionId { get; set; } /// <summary> /// æºå°ç¼å·ï¼å¦ï¼01, 02, 03ï¼ /// </summary> [SugarColumn(ColumnName = "MachineNo")] public string MachineNo { get; set; } /// <summary> /// ç¹æ£å¹´ä»½ï¼å¦ï¼2025ï¼ /// </summary> [SugarColumn(ColumnName = "InspectionYear")] public int InspectionYear { get; set; } /// <summary> /// ç¹æ£æä»½ï¼1-12ï¼ /// </summary> [SugarColumn(ColumnName = "InspectionMonth")] public int InspectionMonth { get; set; } /// <summary> /// ç¹æ£å¹´æï¼åä½åæ®µï¼æ ¼å¼ï¼yyyy-MMï¼å¦ï¼2025-11ï¼ /// </summary> [SugarColumn(ColumnName = "InspectionDate")] public string InspectionDate { get; set; } /// <summary> /// åå»ºäººè´¦å· /// </summary> [SugarColumn(ColumnName = "CreatedBy")] public string? CreatedBy { get; set; } /// <summary> /// å建人å§å /// </summary> [SugarColumn(ColumnName = "CreatedByName")] public string? CreatedByName { get; set; } /// <summary> /// å建æ¶é´ /// </summary> [SugarColumn(ColumnName = "CreatedTime")] public DateTime CreatedTime { get; set; } /// <summary> /// æåä¿®æ¹äººè´¦å· /// </summary> [SugarColumn(ColumnName = "UpdatedBy")] public string? UpdatedBy { get; set; } /// <summary> /// æåä¿®æ¹äººå§å /// </summary> [SugarColumn(ColumnName = "UpdatedByName")] public string? UpdatedByName { get; set; } /// <summary> /// æåä¿®æ¹æ¶é´ /// </summary> [SugarColumn(ColumnName = "UpdatedTime")] public DateTime? UpdatedTime { get; set; } /// <summary> /// æ¥å¸¸ç¹æ£å®æçï¼%ï¼ /// </summary> [SugarColumn(ColumnName = "DailyCompletionRate")] public decimal? DailyCompletionRate { get; set; } /// <summary> /// æåº¦ç¹æ£å®æçï¼%ï¼ /// </summary> [SugarColumn(ColumnName = "MonthlyCompletionRate")] public decimal? MonthlyCompletionRate { get; set; } /// <summary> /// æ»ç¹æ£æ¬¡æ° /// </summary> [SugarColumn(ColumnName = "TotalCheckCount")] public int? TotalCheckCount { get; set; } /// <summary> /// å·²å®æç¹æ£æ¬¡æ° /// </summary> [SugarColumn(ColumnName = "CompletedCheckCount")] public int? CompletedCheckCount { get; set; } /// <summary> /// ç¶æï¼0=è稿ï¼1=å·²æäº¤ï¼2=å·²å®¡æ ¸ /// </summary> [SugarColumn(ColumnName = "Status")] public int Status { get; set; } /// <summary> /// æ¯å¦å·²å é¤ï¼0=å¦ï¼1=æ¯ /// </summary> [SugarColumn(ColumnName = "IsDeleted")] public bool IsDeleted { get; set; } /// <summary> /// 夿³¨ /// </summary> [SugarColumn(ColumnName = "Remark")] public string? Remark { get; set; } } Entites/DbModels/MesEquipmentInspectionDetail.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,130 @@ using SqlSugar; namespace PadApplication.Entites.DbModels; /// <summary> /// 设å¤ç¹æ£æç»è¡¨ /// </summary> [SugarTable("MES_EquipmentInspectionDetail")] public class MesEquipmentInspectionDetail { /// <summary> /// æç»IDï¼èªå¢ä¸»é® /// </summary> [SugarColumn(ColumnName = "DetailId", IsPrimaryKey = true, IsIdentity = true)] public long DetailId { get; set; } /// <summary> /// ç¹æ£è®°å½IDï¼å ³è主表 /// </summary> [SugarColumn(ColumnName = "InspectionId")] public long InspectionId { get; set; } /// <summary> /// ç¹æ£ç±»åï¼daily=æ¥å¸¸ç¹æ£ï¼monthly=æåº¦ç¹æ£ /// </summary> [SugarColumn(ColumnName = "ItemType")] public string ItemType { get; set; } /// <summary> /// ç¹æ£é¡¹ç®ç´¢å¼ï¼0-5为æ¥å¸¸ï¼0-1为æåº¦ï¼ /// </summary> [SugarColumn(ColumnName = "ItemIndex")] public int ItemIndex { get; set; } /// <summary> /// ç¹æ£é¡¹ç®åç§°ï¼åä½å段ï¼ä¾¿äºæ¥è¯¢ï¼ /// </summary> [SugarColumn(ColumnName = "ItemName")] public string ItemName { get; set; } /// <summary> /// æå æ¥æï¼1-31ï¼ /// </summary> [SugarColumn(ColumnName = "DayOfMonth")] public int DayOfMonth { get; set; } /// <summary> /// æ¯å¦å®æç¹æ£ï¼0=æªå®æï¼1=已宿 /// </summary> [SugarColumn(ColumnName = "IsChecked")] public bool IsChecked { get; set; } /// <summary> /// ç¹æ£äººè´¦å· /// </summary> [SugarColumn(ColumnName = "CheckedBy")] public string? CheckedBy { get; set; } /// <summary> /// ç¹æ£äººå§å /// </summary> [SugarColumn(ColumnName = "CheckedByName")] public string? CheckedByName { get; set; } /// <summary> /// ç¹æ£æ¶é´ /// </summary> [SugarColumn(ColumnName = "CheckedTime")] public DateTime? CheckedTime { get; set; } /// <summary> /// ç¹æ£ç»æï¼æ£å¸¸ãå¼å¸¸ç /// </summary> [SugarColumn(ColumnName = "CheckResult")] public string? CheckResult { get; set; } /// <summary> /// å¼å¸¸å¤æ³¨ /// </summary> [SugarColumn(ColumnName = "AbnormalRemark")] public string? AbnormalRemark { get; set; } /// <summary> /// ç¹æ£å¾çURLå表ï¼JSONæ ¼å¼ï¼ /// </summary> [SugarColumn(ColumnName = "ImageUrls")] public string? ImageUrls { get; set; } /// <summary> /// æ¯å¦å·²å®¡æ ¸ï¼0=å¦ï¼1=æ¯ /// </summary> [SugarColumn(ColumnName = "IsReviewed")] public bool IsReviewed { get; set; } /// <summary> /// å®¡æ ¸äººè´¦å· /// </summary> [SugarColumn(ColumnName = "ReviewedBy")] public string? ReviewedBy { get; set; } /// <summary> /// å®¡æ ¸äººå§å /// </summary> [SugarColumn(ColumnName = "ReviewedByName")] public string? ReviewedByName { get; set; } /// <summary> /// å®¡æ ¸æ¶é´ /// </summary> [SugarColumn(ColumnName = "ReviewedTime")] public DateTime? ReviewedTime { get; set; } /// <summary> /// å®¡æ ¸å¤æ³¨ /// </summary> [SugarColumn(ColumnName = "ReviewRemark")] public string? ReviewRemark { get; set; } /// <summary> /// å建æ¶é´ /// </summary> [SugarColumn(ColumnName = "CreatedTime")] public DateTime CreatedTime { get; set; } /// <summary> /// ä¿®æ¹æ¶é´ /// </summary> [SugarColumn(ColumnName = "UpdatedTime")] public DateTime? UpdatedTime { get; set; } } Entites/Dto/EquipmentInspectionDto.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,110 @@ namespace PadApplication.Entites.Dto; /// <summary> /// 设å¤ç¹æ£æ¥è¯¢è¯·æ±DTO /// </summary> public class EquipmentInspectionQueryDto { /// <summary> /// æºå°ç¼å·ï¼å¿ å¡«ï¼ /// </summary> public string MachineNo { get; set; } /// <summary> /// å¹´ææ ¼å¼ "yyyy-MM"ï¼å¿ å¡«ï¼ /// </summary> public string Date { get; set; } } /// <summary> /// 设å¤ç¹æ£ä¿å请æ±DTO /// </summary> public class EquipmentInspectionSaveDto { /// <summary> /// æºå°ç¼å·ï¼å¿ å¡«ï¼ /// </summary> public string MachineNo { get; set; } /// <summary> /// å¹´ææ ¼å¼ "yyyy-MM"ï¼å¿ å¡«ï¼ /// </summary> public string Date { get; set; } /// <summary> /// æ¥å¸¸ç¹æ£æ°æ®ï¼6项Ã31å¤©ï¼ /// </summary> public bool[][] DailyChecks { get; set; } /// <summary> /// æåº¦ç¹æ£æ°æ®ï¼2项Ã31å¤©ï¼ /// </summary> public bool[][] MonthlyChecks { get; set; } /// <summary> /// æä½åè´¦å·ï¼å¯éï¼ä»ç»å½ä¼è¯è·åï¼ /// </summary> public string? Operator { get; set; } /// <summary> /// æä½åå§åï¼å¯éï¼ /// </summary> public string? OperatorName { get; set; } } /// <summary> /// 设å¤ç¹æ£æ¥è¯¢ååºDTO /// </summary> public class EquipmentInspectionResponseDto { /// <summary> /// æºå°ç¼å· /// </summary> public string MachineNo { get; set; } /// <summary> /// å¹´æ /// </summary> public string Date { get; set; } /// <summary> /// æ¥å¸¸ç¹æ£æ°æ®ï¼6项Ã31å¤©ï¼ /// </summary> public bool[][] DailyChecks { get; set; } /// <summary> /// æåº¦ç¹æ£æ°æ®ï¼2项Ã31å¤©ï¼ /// </summary> public bool[][] MonthlyChecks { get; set; } /// <summary> /// æåæ´æ°æ¶é´ /// </summary> public string? LastUpdateTime { get; set; } /// <summary> /// æåæä½å /// </summary> public string? Operator { get; set; } } /// <summary> /// 设å¤ç¹æ£ä¿åååºDTO /// </summary> public class EquipmentInspectionSaveResponseDto { /// <summary> /// æ¯å¦ä¿åæå /// </summary> public bool Success { get; set; } /// <summary> /// ç¹æ£è®°å½IDï¼å¯éï¼ /// </summary> public string? RecordId { get; set; } /// <summary> /// ä¿åæ¶é´ï¼å¯éï¼ /// </summary> public string? SavedTime { get; set; } } Services/EquipmentInspectionManager.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,293 @@ using PadApplication.DB; using PadApplication.Entites.DbModels; using PadApplication.Entites.Dto; using SqlSugar; namespace PadApplication.Services; /// <summary> /// 设å¤ç¹æ£ç®¡çæå¡ç±» /// è´è´£å¤ç设å¤ç¹æ£è®°å½çæ¥è¯¢åä¿åæä½ /// </summary> public class EquipmentInspectionManager : Repository<MesEquipmentInspection> { // æ¥å¸¸ç¹æ£é¡¹ç®é ç½®ï¼åºå®é¡ºåºï¼ private readonly string[] _dailyInspectionItems = [ "æºè¯æ¯å¦æ¸ æ´", "设å¤å¼å ³", "æ¹åè¿è¡", "æ¸ çæ¸ æ´æè°è¯æ¯å¦æå¼å¸¸", "å·¥èºåæ°", "æºæ²¹è¿è¡æ¯å¦æå¼å¸¸" ]; // æåº¦ç¹æ£é¡¹ç®é ç½®ï¼åºå®é¡ºåºï¼ private readonly string[] _monthlyInspectionItems = [ "çµè¡¨æ²¹é¢æ¯å¦æ£å¸¸æ¯å¦ææ¸æ¼", "ä¸åæ¥å¤´å¤æ¥å¹¶å æ²¹" ]; /// <summary> /// æ¥è¯¢è®¾å¤ç¹æ£è®°å½ /// </summary> /// <param name="query">æ¥è¯¢åæ°</param> /// <returns>ç¹æ£è®°å½ååºDTO</returns> public EquipmentInspectionResponseDto QueryInspectionRecord(EquipmentInspectionQueryDto query) { // åæ°éªè¯ if (string.IsNullOrWhiteSpace(query.MachineNo)) throw new Exception("æºå°ç¼å·ä¸è½ä¸ºç©º"); if (string.IsNullOrWhiteSpace(query.Date)) throw new Exception("æ¥æä¸è½ä¸ºç©º"); // è§£æå¹´æ if (!DateTime.TryParseExact(query.Date, "yyyy-MM", null, System.Globalization.DateTimeStyles.None, out var date)) throw new Exception("æ¥ææ ¼å¼ä¸æ£ç¡®ï¼åºä¸º yyyy-MM"); var year = date.Year; var month = date.Month; // æ¥è¯¢ä¸»è¡¨è®°å½ var inspection = Db.Queryable<MesEquipmentInspection>() .Where(x => x.MachineNo == query.MachineNo && x.InspectionYear == year && x.InspectionMonth == month && !x.IsDeleted) .First(); // åå§åè¿åæ°æ®ï¼å ¨é¨ä¸ºfalseï¼ var dailyChecks = InitializeBoolArray(6, 31); var monthlyChecks = InitializeBoolArray(2, 31); string? lastUpdateTime = null; string? operatorName = null; // 妿åå¨è®°å½ï¼æ¥è¯¢æç»æ°æ® if (inspection != null) { var details = Db.Queryable<MesEquipmentInspectionDetail>() .Where(x => x.InspectionId == inspection.InspectionId) .ToList(); // å¡«å æ¥å¸¸ç¹æ£æ°æ® foreach (var detail in details.Where(d => d.ItemType == "daily")) { if (detail.ItemIndex >= 0 && detail.ItemIndex < 6 && detail.DayOfMonth >= 1 && detail.DayOfMonth <= 31) { dailyChecks[detail.ItemIndex][detail.DayOfMonth - 1] = detail.IsChecked; } } // å¡«å æåº¦ç¹æ£æ°æ® foreach (var detail in details.Where(d => d.ItemType == "monthly")) { if (detail.ItemIndex >= 0 && detail.ItemIndex < 2 && detail.DayOfMonth >= 1 && detail.DayOfMonth <= 31) { monthlyChecks[detail.ItemIndex][detail.DayOfMonth - 1] = detail.IsChecked; } } lastUpdateTime = inspection.UpdatedTime?.ToString("yyyy-MM-dd HH:mm:ss") ?? inspection.CreatedTime.ToString("yyyy-MM-dd HH:mm:ss"); operatorName = inspection.UpdatedByName ?? inspection.CreatedByName; } return new EquipmentInspectionResponseDto { MachineNo = query.MachineNo, Date = query.Date, DailyChecks = dailyChecks, MonthlyChecks = monthlyChecks, LastUpdateTime = lastUpdateTime, Operator = operatorName }; } /// <summary> /// ä¿å设å¤ç¹æ£è®°å½ /// </summary> /// <param name="saveDto">ä¿ååæ°</param> /// <returns>ä¿åç»æååºDTO</returns> public EquipmentInspectionSaveResponseDto SaveInspectionRecord(EquipmentInspectionSaveDto saveDto) { // åæ°éªè¯ ValidateSaveData(saveDto); // è§£æå¹´æ var date = DateTime.ParseExact(saveDto.Date, "yyyy-MM", null); var year = date.Year; var month = date.Month; var savedTime = DateTime.Now; long inspectionId; // 使ç¨äºå¡ä¿åæ°æ® UseTransaction(db => { // æ¥è¯¢æ¯å¦å·²åå¨è®°å½ var existingInspection = db.Queryable<MesEquipmentInspection>() .Where(x => x.MachineNo == saveDto.MachineNo && x.InspectionYear == year && x.InspectionMonth == month && !x.IsDeleted) .First(); if (existingInspection != null) { // æ´æ°ç°æè®°å½ inspectionId = existingInspection.InspectionId; db.Updateable<MesEquipmentInspection>() .SetColumns(x => x.UpdatedBy == saveDto.Operator) .SetColumns(x => x.UpdatedByName == saveDto.OperatorName) .SetColumns(x => x.UpdatedTime == savedTime) .Where(x => x.InspectionId == inspectionId) .ExecuteCommand(); // å 餿§çæç»è®°å½ db.Deleteable<MesEquipmentInspectionDetail>() .Where(x => x.InspectionId == inspectionId) .ExecuteCommand(); } else { // å建æ°è®°å½ var newInspection = new MesEquipmentInspection { MachineNo = saveDto.MachineNo, InspectionYear = year, InspectionMonth = month, InspectionDate = saveDto.Date, CreatedBy = saveDto.Operator, CreatedByName = saveDto.OperatorName, CreatedTime = savedTime, Status = 0, IsDeleted = false }; inspectionId = db.Insertable(newInspection) .ExecuteReturnBigIdentity(); } // æå ¥æç»è®°å½ var details = new List<MesEquipmentInspectionDetail>(); // æ·»å æ¥å¸¸ç¹æ£æç» for (int itemIndex = 0; itemIndex < 6; itemIndex++) { for (int day = 1; day <= 31; day++) { var isChecked = saveDto.DailyChecks[itemIndex][day - 1]; details.Add(new MesEquipmentInspectionDetail { InspectionId = inspectionId, ItemType = "daily", ItemIndex = itemIndex, ItemName = _dailyInspectionItems[itemIndex], DayOfMonth = day, IsChecked = isChecked, CheckedBy = isChecked ? saveDto.Operator : null, CheckedByName = isChecked ? saveDto.OperatorName : null, CheckedTime = isChecked ? savedTime : null, CreatedTime = savedTime, IsReviewed = false }); } } // æ·»å æåº¦ç¹æ£æç» for (int itemIndex = 0; itemIndex < 2; itemIndex++) { for (int day = 1; day <= 31; day++) { var isChecked = saveDto.MonthlyChecks[itemIndex][day - 1]; details.Add(new MesEquipmentInspectionDetail { InspectionId = inspectionId, ItemType = "monthly", ItemIndex = itemIndex, ItemName = _monthlyInspectionItems[itemIndex], DayOfMonth = day, IsChecked = isChecked, CheckedBy = isChecked ? saveDto.Operator : null, CheckedByName = isChecked ? saveDto.OperatorName : null, CheckedTime = isChecked ? savedTime : null, CreatedTime = savedTime, IsReviewed = false }); } } // æ¹éæå ¥æç»è®°å½ var insertCount = db.Insertable(details).ExecuteCommand(); if (insertCount <= 0) throw new Exception("ä¿åç¹æ£æç»å¤±è´¥"); return insertCount; }); return new EquipmentInspectionSaveResponseDto { Success = true, RecordId = $"EI{saveDto.Date.Replace("-", "")}{saveDto.MachineNo}", SavedTime = savedTime.ToString("yyyy-MM-dd HH:mm:ss") }; } /// <summary> /// éªè¯ä¿åæ°æ®çæææ§ /// </summary> private void ValidateSaveData(EquipmentInspectionSaveDto saveDto) { if (string.IsNullOrWhiteSpace(saveDto.MachineNo)) throw new Exception("åæ°éè¯¯ï¼æºå°ç¼å·ä¸è½ä¸ºç©º"); if (string.IsNullOrWhiteSpace(saveDto.Date)) throw new Exception("åæ°éè¯¯ï¼æ¥æä¸è½ä¸ºç©º"); if (!DateTime.TryParseExact(saveDto.Date, "yyyy-MM", null, System.Globalization.DateTimeStyles.None, out _)) throw new Exception("åæ°éè¯¯ï¼æ¥ææ ¼å¼ä¸æ£ç¡®ï¼åºä¸º yyyy-MM"); // éªè¯æ¥å¸¸ç¹æ£æ°æ® if (saveDto.DailyChecks == null || saveDto.DailyChecks.Length != 6) throw new Exception("æ°æ®éªè¯å¤±è´¥ï¼dailyChecks å¿ é¡»æ¯ 6 è¡çäºç»´æ°ç»"); for (int i = 0; i < 6; i++) { if (saveDto.DailyChecks[i] == null || saveDto.DailyChecks[i].Length != 31) throw new Exception($"æ°æ®éªè¯å¤±è´¥ï¼dailyChecks[{i}] å¿ é¡»å å« 31 个å ç´ "); } // éªè¯æåº¦ç¹æ£æ°æ® if (saveDto.MonthlyChecks == null || saveDto.MonthlyChecks.Length != 2) throw new Exception("æ°æ®éªè¯å¤±è´¥ï¼monthlyChecks å¿ é¡»æ¯ 2 è¡çäºç»´æ°ç»"); for (int i = 0; i < 2; i++) { if (saveDto.MonthlyChecks[i] == null || saveDto.MonthlyChecks[i].Length != 31) throw new Exception($"æ°æ®éªè¯å¤±è´¥ï¼monthlyChecks[{i}] å¿ é¡»å å« 31 个å ç´ "); } } /// <summary> /// åå§åå¸å°äºç»´æ°ç» /// </summary> private bool[][] InitializeBoolArray(int rows, int cols) { var array = new bool[rows][]; for (int i = 0; i < rows; i++) { array[i] = new bool[cols]; } return array; } }