| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using Masuit.Tools; |
| | | using MES.Service.DB; |
| | | using MES.Service.Dto.service; |
| | | using MES.Service.util; |
| | | using SqlSugar; |
| | | |
| | | namespace MES.Service.service.QC; |
| | | |
| | | /// <summary> |
| | | /// 产线æäº¤æå¡ |
| | | /// </summary> |
| | | public class ProductionLineService |
| | | { |
| | | private readonly BaseService _baseService = new(); |
| | | |
| | | /// <summary> |
| | | /// è·å产线æäº¤é¡µé¢æ°æ®ï¼æªæäº¤/å·²æäº¤ï¼ |
| | | /// </summary> |
| | | /// <param name="queryObj">æ¥è¯¢åæ°</param> |
| | | /// <returns></returns> |
| | | public (List<ProductionLinePageResult> item, int TotalCount) GetProductionLinePage(ProductionLineQueryDto queryObj) |
| | | { |
| | | var db = SqlSugarHelper.GetInstance(); |
| | | |
| | | if (queryObj.Status == 0) |
| | | { |
| | | // æªæäº¤é¡µé¢æ¥è¯¢ |
| | | return GetUnsubmittedData(queryObj, db); |
| | | } |
| | | else |
| | | { |
| | | // å·²æäº¤é¡µé¢æ¥è¯¢ |
| | | return GetSubmittedData(queryObj, db); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è·åæªæäº¤æ°æ®ï¼ä»å·¥å表æ¥è¯¢ï¼å
å«ä¸åæ ¼ç馿£åï¼ |
| | | /// </summary> |
| | | private (List<ProductionLinePageResult> item, int TotalCount) GetUnsubmittedData(ProductionLineQueryDto queryObj, SqlSugarClient db) |
| | | { |
| | | var totalCount = 0; |
| | | |
| | | //// ç¬¬ä¸æ¥ï¼æ¥è¯¢å·¥ååºç¡æ°æ® |
| | | //var workOrderSql = @" |
| | | //SELECT |
| | | // A.ID, |
| | | // A.DAA001, |
| | | // A.DAA002 AS ItemNo, |
| | | // A.DAA003, |
| | | // A.DAA004, |
| | | // A.DAA008, |
| | | // A.DAA018, |
| | | // A.DAA019 AS DaA019, |
| | | // A.DAA020 AS Line, |
| | | // A.DAA024, |
| | | // A.PID AS Pbaid, |
| | | // T.PROJECT_CODE AS ProjecT_CODE, |
| | | // u.FNAME AS FName, |
| | | // 0 AS Urgent, |
| | | // 0 AS IsFirst, |
| | | // CAST(NULL AS VARCHAR2(50)) AS BillNo, |
| | | // CAST(NULL AS VARCHAR2(50)) AS Result, |
| | | // CAST(NULL AS VARCHAR2(50)) AS StatusUser, |
| | | // CAST(NULL AS DATE) AS CreateTime, |
| | | // CAST(NULL AS NUMBER) AS InspectionId |
| | | //FROM WOMDAA A |
| | | //LEFT JOIN WOMCAA c ON c.CAA001 = A.DAA021 |
| | | //LEFT JOIN MES_PROJECT T ON C.PROJECT = T.ID |
| | | //LEFT JOIN MES_UNIT u ON TO_CHAR(u.ID) = TO_CHAR(A.DAA005) |
| | | //WHERE A.DAA018 LIKE '%å·²å¼å·¥%' |
| | | // AND A.FSTATUS = 1 |
| | | // AND A.F_TYPE = 0 |
| | | // AND CASE |
| | | // WHEN C.CAA023 = '0' THEN 'å¼ç«' |
| | | // WHEN C.CAA023 = '1' THEN 'å·²æ ¸å' |
| | | // WHEN C.CAA023 = '2' THEN 'å¼å·¥' |
| | | // WHEN C.CAA023 = '3' THEN 'å®å·¥' |
| | | // WHEN C.CAA023 = '4' THEN 'æ ¸åä¸' |
| | | // END LIKE '%å¼å·¥%'"; |
| | | |
| | | // ç¬¬ä¸æ¥ï¼æ¥è¯¢å·¥ååºç¡æ°æ® |
| | | // ç¬¬ä¸æ¥ï¼æ¥è¯¢å·¥ååºç¡æ°æ® |
| | | var workOrderSql = @" |
| | | SELECT |
| | | A.ID, |
| | | A.DAA001, |
| | | item.ITEM_NO AS ItemNo, |
| | | A.DAA003, |
| | | A.DAA004, |
| | | A.DAA008, |
| | | A.DAA018, |
| | | A.DAA019 AS DaA019, |
| | | A.DAA020 AS Line, |
| | | |
| | | A.PID AS Pbaid, |
| | | T.PROJECT_CODE AS ProjecT_CODE, |
| | | u.FNAME AS FName, |
| | | 0 AS Urgent, |
| | | 0 AS IsFirst, |
| | | CAST(NULL AS VARCHAR2(50)) AS BillNo, |
| | | CAST(NULL AS VARCHAR2(50)) AS Result, |
| | | CAST(BE1.FNAME AS VARCHAR2(50)) AS StatusUser, |
| | | CAST(NULL AS DATE) AS CreateTime, |
| | | CAST(NULL AS NUMBER) AS InspectionId |
| | | FROM WOMDAA A |
| | | LEFT JOIN WOMCAA c ON c.CAA001 = A.DAA021 |
| | | LEFT JOIN MES_PROJECT T ON C.PROJECT = T.ID |
| | | LEFT JOIN MES_UNIT u ON TO_CHAR(u.ID) = TO_CHAR(A.DAA005) |
| | | left join MES_ITEMS item on item.ITEM_ID=c.CAA006 |
| | | LEFT JOIN IQC_BEFORE_SJ BE ON BE.ITEM_ID = item.ITEM_ID |
| | | LEFT JOIN IQC_BEFORE_FROM_SJ BE2 ON BE.PID = BE2.ID |
| | | LEFT JOIN SYS_USER BE1 ON BE2.SID = BE1.FID |
| | | WHERE A.DAA018 LIKE '%å·²å¼å·¥%' |
| | | AND A.FSTATUS = 1 |
| | | AND A.F_TYPE = 0 |
| | | AND CASE |
| | | WHEN C.CAA023 = '0' THEN 'å¼ç«' |
| | | WHEN C.CAA023 = '1' THEN 'å·²æ ¸å' |
| | | WHEN C.CAA023 = '2' THEN 'å¼å·¥' |
| | | WHEN C.CAA023 = '3' THEN 'å®å·¥' |
| | | WHEN C.CAA023 = '4' THEN 'æ ¸åä¸' |
| | | END LIKE '%å¼å·¥%'"; |
| | | |
| | | // æ·»å æç´¢æ¡ä»¶ |
| | | if (StringUtil.IsNotNullOrEmpty(queryObj.SearchValue)) |
| | | { |
| | | workOrderSql += " AND (A.DAA001 LIKE :SearchValue OR A.DAA002 LIKE :SearchValue)"; |
| | | } |
| | | |
| | | var workOrders = db.SqlQueryable<ProductionLinePageResult>(workOrderSql) |
| | | .AddParameters(new { SearchValue = $"%{queryObj.SearchValue}%" }) |
| | | .ToList(); |
| | | |
| | | if (!workOrders.Any()) |
| | | { |
| | | return (new List<ProductionLinePageResult>(), 0); |
| | | } |
| | | |
| | | // 转æ¢ä¸ºå符串ç¨äºINæ¥è¯¢ |
| | | var workOrderIdStrings = workOrders |
| | | .Where(w => !string.IsNullOrEmpty(w.ID.ToString())) |
| | | .Select(w => w.ID) |
| | | .ToList(); |
| | | |
| | | if (!workOrderIdStrings.Any()) |
| | | { |
| | | return (new List<ProductionLinePageResult>(), 0); |
| | | } |
| | | |
| | | // ç¬¬äºæ¥ï¼æ¥è¯¢è¿äºå·¥å对åºç馿£å忣éªç»æ |
| | | var inspectionResultSql = $@" |
| | | SELECT |
| | | A.ID, |
| | | A.BILL_NO AS BillNo, |
| | | A.PBAID, |
| | | A.STATUS_USER AS StatusUser, |
| | | A.CREATE_TIME AS CreateTime, |
| | | CASE |
| | | WHEN RES.æ£éªç»æ IS NULL THEN 'æªå®æ' |
| | | ELSE RES.æ£éªç»æ |
| | | END AS Result |
| | | FROM ( |
| | | -- åªåæ¯ä¸ªå·¥å(PBAID)ææ°ä¸æ¡é¦æ£å |
| | | SELECT * |
| | | FROM ( |
| | | SELECT |
| | | R.*, |
| | | ROW_NUMBER() OVER(PARTITION BY R.PBAID ORDER BY R.CREATE_TIME DESC) AS RN |
| | | FROM QS_ITEM_IPI_REQ R |
| | | ) WHERE RN = 1 |
| | | ) A |
| | | LEFT JOIN ( |
| | | SELECT |
| | | PID, |
| | | CASE |
| | | WHEN (COUNT(CASE WHEN PASSED = -1 THEN 1 END) > 0) THEN NULL |
| | | WHEN (COUNT(CASE WHEN PASSED = 1 THEN 1 END) = COUNT(*)) THEN 'åæ ¼' |
| | | ELSE 'ä¸åæ ¼' |
| | | END AS æ£éªç»æ |
| | | FROM ( |
| | | SELECT |
| | | A.PID, |
| | | CASE |
| | | WHEN (A.IS_PASS IS NULL OR B.å®æç¶æ IS NULL) THEN -1 |
| | | WHEN (NVL(A.IS_PASS, -1) = NVL(B.å®æç¶æ, -1) AND A.IS_PASS = 1) THEN 1 |
| | | WHEN (NVL(A.IS_PASS, -1) = NVL(B.å®æç¶æ, -1) AND A.IS_PASS = 0) THEN 0 |
| | | ELSE -1 |
| | | END AS PASSED |
| | | FROM QS_ITEM_IPI_ITEM A |
| | | LEFT JOIN ( |
| | | SELECT |
| | | PID, |
| | | CASE |
| | | WHEN (COUNT(CASE WHEN FSTAND IS NULL THEN 1 END) > 0) THEN NULL |
| | | WHEN (COUNT(CASE WHEN FSTAND = 'â' THEN 1 END) = COUNT(1)) THEN 1 |
| | | ELSE 0 |
| | | END AS å®æç¶æ |
| | | FROM QS_ITEM_IPI_ITEM_DETAIL |
| | | GROUP BY PID |
| | | ) B ON A.ID = B.PID |
| | | ) |
| | | GROUP BY PID |
| | | ) RES ON RES.PID = A.ID |
| | | WHERE A.PBAID IN ({string.Join(",", workOrderIdStrings)})"; |
| | | |
| | | var inspections = db.SqlQueryable<InspectionResultDto>(inspectionResultSql).ToList(); |
| | | |
| | | // ç¬¬ä¸æ¥ï¼åå¹¶æ°æ®å¹¶è¿æ»¤ |
| | | var result = (from wo in workOrders |
| | | join ins in inspections on wo.ID.ToString() equals ins.Pbaid.ToString() into insGroup |
| | | from ins in insGroup.DefaultIfEmpty() |
| | | where ins == null || ins.Result == "ä¸åæ ¼" // æªæäº¤æä¸åæ ¼çæ¾ç¤º |
| | | select new ProductionLinePageResult |
| | | { |
| | | ID = wo.ID, |
| | | DAA001 = wo.DAA001, |
| | | ItemNo = wo.ItemNo, |
| | | DAA003 = wo.DAA003, |
| | | DAA004 = wo.DAA004, |
| | | DAA008 = wo.DAA008, |
| | | DAA018 = wo.DAA018, |
| | | DaA019 = wo.DaA019, |
| | | Line = wo.Line, |
| | | DAA024 = wo.DAA024, |
| | | ProjecT_CODE = wo.ProjecT_CODE, |
| | | FName = wo.FName, |
| | | BillNo = ins?.BillNo, |
| | | Result = ins?.Result, |
| | | StatusUser = wo?.StatusUser, |
| | | CreateTime = ins?.CreateTime, |
| | | InspectionId = ins?.ID, |
| | | Pbaid = wo.Pbaid, |
| | | Urgent = wo.Urgent, |
| | | IsFirst = wo.IsFirst, |
| | | SortOrder = ins?.Result == "ä¸åæ ¼" ? 1 : 0 // ä¸åæ ¼ç½®é¡¶ |
| | | }) |
| | | .OrderByDescending(x => x.SortOrder) |
| | | .ThenByDescending(x => x.DAA024) |
| | | .ToList(); |
| | | |
| | | totalCount = result.Count; |
| | | |
| | | // å页 |
| | | var pagedData = result |
| | | .Skip((queryObj.PageIndex - 1) * queryObj.Limit) |
| | | .Take(queryObj.Limit) |
| | | .ToList(); |
| | | |
| | | return (pagedData, totalCount); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è·åå·²æäº¤æ°æ®ï¼ä»é¦æ£å表æ¥è¯¢ï¼ |
| | | /// </summary> |
| | | private (List<ProductionLinePageResult> item, int TotalCount) GetSubmittedData(ProductionLineQueryDto queryObj, SqlSugarClient db) |
| | | { |
| | | var totalCount = 0; |
| | | |
| | | var sql = @" |
| | | SELECT |
| | | A.ID AS InspectionId, |
| | | A.BILL_NO AS BillNo, |
| | | A.PBAID AS Pbaid, |
| | | DA.DAA001, |
| | | item.ITEM_NO AS ItemNo, |
| | | DA.DAA003, |
| | | DA.DAA004, |
| | | DA.DAA008, |
| | | DA.DAA018, |
| | | DA.DAA019 AS DaA019, |
| | | DA.DAA020 AS Line, |
| | | A.CREATE_TIME AS CreateTime, |
| | | NVL(BE3.FNAME, BE1.FNAME) AS StatusUser, |
| | | A.FSUBMIT, |
| | | A.CREATE_BY, |
| | | 0 AS Urgent, |
| | | 0 AS IsFirst, |
| | | T.PROJECT_CODE AS ProjecT_CODE, |
| | | CASE |
| | | WHEN æ£éªç»æ IS NULL THEN 'æªå®æ' |
| | | ELSE æ£éªç»æ |
| | | END AS Result |
| | | FROM QS_ITEM_IPI_REQ A |
| | | LEFT JOIN WOMDAA DA ON DA.ID = A.PBAID |
| | | LEFT JOIN WOMCAA c ON c.CAA001 = DA.DAA021 |
| | | LEFT JOIN MES_PROJECT T ON C.PROJECT = T.ID |
| | | left join MES_ITEMS item on item.ITEM_ID=c.CAA006 |
| | | --åæ´å |
| | | LEFT JOIN INSPECTOR_CHANGE_SJ_LOG chlog |
| | | ON chlog.INSPECTION_NO = a.BILL_NO AND chlog.IS_VALID = 'Y' |
| | | LEFT JOIN SYS_USER BE3 ON chlog.INSPECTOR = BE3.FCODE |
| | | --åæ´å |
| | | LEFT JOIN IQC_BEFORE_SJ BE ON BE.ITEM_ID = item.ITEM_ID |
| | | LEFT JOIN IQC_BEFORE_FROM_SJ BE2 ON BE.PID = BE2.ID |
| | | LEFT JOIN SYS_USER BE1 ON BE2.SID = BE1.FID |
| | | LEFT JOIN ( |
| | | SELECT |
| | | PID, |
| | | CASE |
| | | WHEN (COUNT(CASE WHEN PASSED = -1 THEN 1 END) > 0) THEN NULL |
| | | WHEN (COUNT(CASE WHEN PASSED = 1 THEN 1 END) = COUNT(*)) THEN 'åæ ¼' |
| | | ELSE 'ä¸åæ ¼' |
| | | END AS æ£éªç»æ |
| | | FROM ( |
| | | SELECT |
| | | A.PID, |
| | | CASE |
| | | WHEN (A.IS_PASS IS NULL OR B.å®æç¶æ IS NULL) THEN -1 |
| | | WHEN (NVL(A.IS_PASS, -1) = NVL(B.å®æç¶æ, -1) AND A.IS_PASS = 1) THEN 1 |
| | | WHEN (NVL(A.IS_PASS, -1) = NVL(B.å®æç¶æ, -1) AND A.IS_PASS = 0) THEN 0 |
| | | ELSE -1 |
| | | END AS PASSED |
| | | FROM QS_ITEM_IPI_ITEM A |
| | | LEFT JOIN ( |
| | | SELECT |
| | | PID, |
| | | CASE |
| | | WHEN (COUNT(CASE WHEN FSTAND IS NULL THEN 1 END) > 0) THEN NULL |
| | | WHEN (COUNT(CASE WHEN FSTAND = 'â' THEN 1 END) = COUNT(1)) THEN 1 |
| | | ELSE 0 |
| | | END AS å®æç¶æ |
| | | FROM QS_ITEM_IPI_ITEM_DETAIL |
| | | GROUP BY PID |
| | | ) B ON A.ID = B.PID |
| | | ) |
| | | GROUP BY PID |
| | | ) RES ON RES.PID = A.ID |
| | | WHERE A.ID IS NOT NULL"; |
| | | |
| | | // æ·»å æç´¢æ¡ä»¶ |
| | | if (StringUtil.IsNotNullOrEmpty(queryObj.SearchValue)) |
| | | { |
| | | sql += " AND (A.BILL_NO LIKE :SearchValue OR DA.DAA001 LIKE :SearchValue OR DA.DAA002 LIKE :SearchValue)"; |
| | | } |
| | | |
| | | sql += " ORDER BY A.CREATE_TIME DESC"; |
| | | |
| | | var data = db.SqlQueryable<ProductionLinePageResult>(sql) |
| | | .AddParameters(new { SearchValue = $"%{queryObj.SearchValue}%" }) |
| | | .ToPageList(queryObj.PageIndex, queryObj.Limit, ref totalCount); |
| | | |
| | | return (data, totalCount); |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// æäº¤æ£éªï¼è°ç¨åå¨è¿ç¨çæé¦æ£åï¼ |
| | | /// </summary> |
| | | /// <param name="workOrderId">å·¥åID</param> |
| | | /// <param name="userNo">ç¨æ·è´¦å·</param> |
| | | /// <returns></returns> |
| | | public (bool success, string message) SubmitInspection(decimal workOrderId, string userNo) |
| | | { |
| | | var db = SqlSugarHelper.GetInstance(); |
| | | |
| | | try |
| | | { |
| | | // å®ä¹åå¨è¿ç¨åæ° |
| | | var pId = new SugarParameter("P_ID", workOrderId); |
| | | var pUser = new SugarParameter("P_USER", userNo); |
| | | var pIsh = new SugarParameter("P_ISH", 0); // 0è¡¨ç¤ºé¦æ£ |
| | | var pFlag = new SugarParameter("P_FLAG", null, true) { Direction = System.Data.ParameterDirection.Output }; |
| | | var pText = new SugarParameter("P_TEXT", null, true) |
| | | { |
| | | Direction = System.Data.ParameterDirection.Output, |
| | | Size = 255 |
| | | }; |
| | | |
| | | // è°ç¨åå¨è¿ç¨ |
| | | db.Ado.UseStoredProcedure().ExecuteCommand( |
| | | "PRC_SJ_GENERATE", |
| | | pId, pUser, pIsh, pFlag, pText |
| | | ); |
| | | |
| | | // è·åè¾åºåæ° |
| | | var flag = pFlag.Value != null ? Convert.ToInt32(pFlag.Value) : 1; |
| | | var text = pText.Value?.ToString() ?? "æªç¥é误"; |
| | | |
| | | if (flag == 0) |
| | | { |
| | | return (true, text); |
| | | } |
| | | else |
| | | { |
| | | return (false, text); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return (false, $"æäº¤æ£éªå¤±è´¥: {ex.Message}"); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | } |