From fba48d2d676cd9b6d493163aef9d87f6e5090aee Mon Sep 17 00:00:00 2001
From: 如洲 陈 <1278080563@qq.com>
Date: 星期五, 12 九月 2025 19:02:00 +0800
Subject: [PATCH] 出库检和退货检验
---
MES.Service/service/QC/THJService.cs | 824 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 824 insertions(+), 0 deletions(-)
diff --git a/MES.Service/service/QC/THJService.cs b/MES.Service/service/QC/THJService.cs
new file mode 100644
index 0000000..f837801
--- /dev/null
+++ b/MES.Service/service/QC/THJService.cs
@@ -0,0 +1,824 @@
+using System;
+using System.Collections.Generic;
+using System.Dynamic;
+using System.Linq;
+using MES.Service.DB;
+using MES.Service.Dto.service;
+using MES.Service.Modes;
+using MES.Service.util;
+using SqlSugar;
+using System.Data;
+
+namespace MES.Service.service.QC;
+
+public class THJService
+{
+ private static readonly OracleSQLHelper SQLHelper = new();
+ private readonly BaseService _baseService = new();
+
+ /// <summary>
+ /// 鐢熸垚鏈�鏂扮殑妫�楠屽崟鍙�
+ /// </summary>
+ public string getMaxReleaseNo()
+ {
+ var db = SqlSugarHelper.GetInstance();
+ var date = DateTime.Now.ToString("yyyy-MM-dd");
+
+ // 浣跨敤鏈嬩箰鐨勫嚱鏁伴粯璁よ幏鍙栧崟鎹�
+ var sql = "select getbillcode1('1000','1000','THJYD') from dual";
+ var maxBillNo = db.Ado.SqlQuerySingle<string>(sql);
+
+ // 濡傛灉涓虹┖鐩存帴杩斿洖榛樿鍊�
+ return maxBillNo ?? "THJ" + DateTime.Now.ToString("yyMMdd") + "0001";
+ }
+
+ /// <summary>
+ /// 鍒嗛〉鏌ヨ妫�楠屽崟鍒楄〃
+ /// </summary>
+ public List<THJPageResult> getPage(THJPageResult queryObj)
+ {
+ var db = SqlSugarHelper.GetInstance();
+
+ // 鍩轰簬妫�楠屽崟鍙锋煡璇紝鍏宠仈閫�璐ф槑缁嗚幏鍙栭��璐у崟淇℃伅
+ var sql = @"
+ SELECT
+ a.ID as Id,
+ a.RELEASE_NO as ReleaseNo,
+ a.CREATE_DATE as CreateDate,
+ a.CREATE_BY as CreateBy,
+ a.ITEM_NO as ItemNo,
+ a.SL as Sl,
+ a.FCHECK_BY as StatusUser,
+ a.FCHECK_RESU as Result,
+ COALESCE(m.ITEM_NAME, '') as ItemName,
+ COALESCE(m.ITEM_MODEL, '') as ItemModel,
+ a.SL as WorkQty,
+ COALESCE(rd.RETURN_TYPE, '') as ReturnType,
+ COALESCE(rd.RETURN_NO, '') as ReturnNo,
+ COALESCE(rw.BILL_DATE, a.CREATE_DATE) as BillDate,
+ COALESCE(c.CUST_NAME, '') as CustomerName,
+ COALESCE(rd.REMARKS, '') as ReturnReason,
+ COALESCE(a.BHGYY, '') as Remarks
+ FROM QS_QA_ITEM_THJ a
+ LEFT JOIN MES_ITEMS m ON a.ITEM_NO = m.ITEM_NO
+ LEFT JOIN MES_RETURNWARE_DETAILS rd ON a.ITEM_NO = rd.ITEM_NO
+ AND a.BILL_NO = rd.RETURN_TYPE || '-' || rd.RETURN_NO
+ LEFT JOIN MES_RETURNWARE rw ON rd.RETURN_TYPE = rw.RETURN_TYPE
+ AND rd.RETURN_NO = rw.RETURN_NO
+ LEFT JOIN MES_CUSTOMER c ON rw.CUST_NO = c.CUST_NO
+ WHERE 1=1";
+
+ var parameters = new List<SugarParameter>();
+
+ // 鏍规嵁ID绛涢��
+ if (queryObj.Id.HasValue && queryObj.Id > 0)
+ {
+ sql += " AND a.ID = :Id";
+ parameters.Add(new SugarParameter(":Id", queryObj.Id.Value));
+ }
+
+ // 鏍规嵁鐘舵�佺瓫閫�
+ if (!string.IsNullOrEmpty(queryObj.Result))
+ {
+ if (queryObj.Result == "鏈畬鎴�")
+ {
+ sql += " AND a.FCHECK_RESU IS NULL";
+ }
+ else if (queryObj.Result == "宸插畬鎴�")
+ {
+ sql += " AND a.FCHECK_RESU IS NOT NULL";
+ }
+ }
+
+ // 鏍规嵁妫�楠屼汉绛涢��
+ //if (!string.IsNullOrEmpty(queryObj.StatusUser))
+ //{
+ // sql += " AND a.FCHECK_BY = :StatusUser";
+ // parameters.Add(new SugarParameter(":StatusUser", queryObj.StatusUser));
+ //}
+
+ // 鏍规嵁鐗╂枡缂栫爜绛涢��
+ if (!string.IsNullOrEmpty(queryObj.ItemNo))
+ {
+ sql += " AND a.ITEM_NO = :ItemNo";
+ parameters.Add(new SugarParameter(":ItemNo", queryObj.ItemNo));
+ }
+
+ // 鏍规嵁妫�楠屽崟鍙风瓫閫�
+ if (!string.IsNullOrEmpty(queryObj.ReleaseNo))
+ {
+ sql += " AND a.RELEASE_NO = :ReleaseNo";
+ parameters.Add(new SugarParameter(":ReleaseNo", queryObj.ReleaseNo));
+ }
+
+ // 鏍规嵁鍒涘缓鏃ユ湡绛涢��
+ if (queryObj.CreateDate.HasValue)
+ {
+ sql += " AND TRUNC(a.CREATE_DATE) = TRUNC(:CreateDate)";
+ parameters.Add(new SugarParameter(":CreateDate", queryObj.CreateDate.Value));
+ }
+
+ // 鎺掑簭
+ sql += " ORDER BY a.CREATE_DATE DESC";
+
+ // 鍒嗛〉鏌ヨ
+ var pageList = db.Ado.SqlQuery<THJPageResult>(sql, parameters.ToArray());
+
+
+ if (pageList != null)
+ {
+ pageList = pageList.Skip((queryObj.PageIndex - 1) * queryObj.Limit)
+ .Take(queryObj.Limit)
+ .ToList();
+ }
+
+ return pageList ?? new List<THJPageResult>();
+ }
+
+ /// <summary>
+ /// 鑾峰彇妫�楠岄」鐩垪琛�
+ /// </summary>
+ public List<QsQaItemThj01> getQSItems(decimal? pid, decimal? id)
+ {
+ var db = SqlSugarHelper.GetInstance();
+
+
+ var qsQaItemThj01s = db.Queryable<QsQaItemThj01>()
+ .Where(a => a.Pid == pid)
+ .ToList();
+
+
+ var array = qsQaItemThj01s.Select(s => s.Id).ToArray();
+ var qsQaItemDetails = db.Queryable<QsQaItemThj02>()
+ .Where(s => array.Contains(s.Pid))
+ .GroupBy(s => s.Pid)
+ .Select(s => new
+ {
+ s.Pid,
+ itemCount = SqlFunc.AggregateCount(s.Id)
+ }).ToList();
+
+ qsQaItemThj01s.ForEach(s =>
+ {
+ var find = qsQaItemDetails.Find(a => s.Id == a.Pid);
+ if (find == null)
+ {
+ s.isCheck = 0;
+ s.result = "鏈畬鎴�";
+ }
+ else
+ {
+ s.isCheck = find.itemCount;
+ // 淇绫诲瀷杞崲闂锛氬皢decimal?杞崲涓篿nt杩涜姣旇緝
+ var levelNum = s.LevelNum.HasValue ? (int)s.LevelNum.Value : 0;
+ if (find.itemCount == levelNum && s.IsPass == 1)
+ s.result = "鍚堟牸";
+ else if (find.itemCount == levelNum && s.IsPass == 0)
+ s.result = "涓嶅悎鏍�";
+ else
+ s.result = "鏈畬鎴�";
+ }
+
+ // 杩囨护鍑哄浘鐗噄d涓嶄负绌虹殑鏁版嵁杞负base64
+ if (s.Picture is { Length: > 0 })
+ s.imageData = Convert.ToBase64String(s.Picture);
+ });
+
+ // 鎺掑簭锛屾湭瀹屾垚鐨勬帓鍦ㄥ墠闈�
+ qsQaItemThj01s = qsQaItemThj01s.OrderBy(s => s.isCheck).ToList();
+
+ return qsQaItemThj01s;
+ }
+
+ /// <summary>
+ /// 鏍规嵁ID鑾峰彇妫�楠岄」鐩鎯�
+ /// </summary>
+ public ExpandoObject getThjDetail02ById(decimal id)
+ {
+ try
+ {
+ var db = SqlSugarHelper.GetInstance();
+
+ // 鑾峰彇妫�楠岄」鐩富琛ㄤ俊鎭�
+ var qsQaItemThj01 = db.Queryable<QsQaItemThj01>()
+ .Where(s => s.Id == id)
+ .First();
+
+ if (qsQaItemThj01 == null)
+ {
+ throw new Exception($"妫�楠岄」鐩笉瀛樺湪锛孖D: {id}");
+ }
+
+
+ if (qsQaItemThj01.IsPass == 0)
+ qsQaItemThj01.result = "涓嶅悎鏍�";
+ else if (qsQaItemThj01.IsPass == 1)
+ qsQaItemThj01.result = "鍚堟牸";
+ else
+ qsQaItemThj01.result = "鏈畬鎴�";
+
+ // 鑾峰彇涓昏〃淇℃伅锛堟楠屽崟淇℃伅锛�
+ var mainInfo = db.Queryable<QsQaItemThj>()
+ .Where(s => s.Id == qsQaItemThj01.Pid)
+ .First();
+
+ // 妫�鏌ヤ富琛ㄤ俊鎭槸鍚︽纭幏鍙�
+ if (mainInfo == null)
+ {
+ throw new Exception($"涓昏〃淇℃伅涓嶅瓨鍦紝Pid: {qsQaItemThj01.Pid}");
+ }
+
+ // 鐩存帴浠庣墿鏂欒〃鑾峰彇鐗╂枡鍚嶇О
+ var itemInfo = db.Queryable<MesItems>()
+ .Where(i => i.ItemNo == mainInfo.ItemNo)
+ .Select(i => new { i.ItemName })
+ .First();
+
+ // 閫�璐у崟鍙峰氨鏄攢鍞��璐ф楠屽崟鐨刡ill_no
+ string returnOrderNo = mainInfo.BillNo;
+ string itemName = null;
+ decimal? returnQty = mainInfo.Sl;
+ string returnReason = mainInfo.Remarks;
+
+ // 鑾峰彇鐗╂枡鍚嶇О
+ if (itemInfo != null)
+ {
+ itemName = itemInfo.ItemName;
+ }
+
+ // 澶勭悊鍥剧墖鏁版嵁锛岄伩鍏岼SON搴忓垪鍖栭棶棰�
+ string imageData = null;
+ if (qsQaItemThj01.Picture is { Length: > 0 })
+ {
+ try
+ {
+ imageData = Convert.ToBase64String(qsQaItemThj01.Picture);
+ }
+ catch (Exception)
+ {
+ imageData = null;
+ }
+ }
+
+ // 鍒涘缓鎵╁睍鐨刬temThj01瀵硅薄锛屽寘鍚墍鏈夐渶瑕佺殑瀛楁锛岀‘淇濇墍鏈夊瓧娈甸兘鏄彲搴忓垪鍖栫殑
+ var extendedItemThj01 = new
+ {
+ // 鍘熸湁瀛楁 - 纭繚鎵�鏈夊瓧娈甸兘鏄彲搴忓垪鍖栫殑绫诲瀷
+ Id = qsQaItemThj01.Id,
+ Pid = qsQaItemThj01.Pid,
+ ProjName = qsQaItemThj01.ProjName ?? "",
+ ItemMod = qsQaItemThj01.ItemMod ?? "",
+ InspectionMethod = qsQaItemThj01.InspectionMethod ?? "",
+ UsingInstruments = qsQaItemThj01.UsingInstruments ?? "",
+ LevelNum = qsQaItemThj01.LevelNum,
+ MaxValue = qsQaItemThj01.MaxValue,
+ StandardValue = qsQaItemThj01.StandardValue,
+ MinValue = qsQaItemThj01.MinValue,
+ Notes = qsQaItemThj01.Notes ?? "",
+ FcheckLevel = qsQaItemThj01.FcheckLevel ?? "",
+ FacLevel = qsQaItemThj01.FacLevel ?? "",
+ QsCode = qsQaItemThj01.QsCode ?? "",
+ QsName = qsQaItemThj01.QsName ?? "",
+ IsPass = qsQaItemThj01.IsPass,
+ Remarks = qsQaItemThj01.Remarks ?? "",
+ result = qsQaItemThj01.result ?? "",
+
+ // 涓昏〃瀛楁
+ releaseNo = mainInfo.ReleaseNo ?? "",
+ itemNo = mainInfo.ItemNo ?? "",
+ billNo = mainInfo.BillNo ?? "",
+ // 娣诲姞涓嶅悎鏍兼弿杩板瓧娈碉紝鏄犲皠鍒颁富琛ㄧ殑BHGYY瀛楁
+ bhgyy = mainInfo.Bhgyy ?? "",
+
+ // 閫�璐ф槑缁嗗瓧娈�
+ returnOrderNo = returnOrderNo ?? "",
+ itemName = itemName ?? "",
+ returnQty = returnQty,
+ returnReason = returnReason ?? "",
+
+ // 鍏朵粬闇�瑕佺殑瀛楁
+ qualityStandard = qsQaItemThj01.QsName ?? "",
+
+ // 鍥剧墖鏁版嵁锛堣浆鎹负base64瀛楃涓诧紝閬垮厤搴忓垪鍖栭棶棰橈級
+ imageData = imageData ?? ""
+ };
+
+ // 鑾峰彇妫�楠岄」鐩槑缁嗭紝纭繚杩斿洖鐨勬暟鎹槸鍙簭鍒楀寲鐨�
+ var qsQaItemThj02s = db.Queryable<QsQaItemThj02>()
+ .Where(s => s.Pid == id)
+ .OrderBy(s => s.Id)
+ .Select(s => new
+ {
+ Id = s.Id,
+ Pid = s.Pid,
+ Gid = s.Gid,
+ FcheckResu = s.FcheckResu ?? "",
+ Fstand = s.Fstand ?? "",
+ CreateDate = s.CreateDate,
+ CreateBy = s.CreateBy ?? "",
+ UpdateDate = s.UpdateDate,
+ UpdateBy = s.UpdateBy ?? "",
+ Remarks = s.Remarks ?? ""
+ })
+ .ToList();
+
+ var result = new ExpandoObject();
+ ((IDictionary<string, object>)result)["itemThj01"] = extendedItemThj01;
+ ((IDictionary<string, object>)result)["itemThj02s"] = qsQaItemThj02s;
+
+ return result;
+ }
+ catch (Exception ex)
+ {
+ throw;
+ }
+ }
+
+ /// <summary>
+ /// 瀹夊叏鑾峰彇鍔ㄦ�佸璞″睘鎬у��
+ /// </summary>
+ private object GetDynamicValue(dynamic obj, string propertyName)
+ {
+ try
+ {
+ if (obj == null) return null;
+
+ var dict = (IDictionary<string, object>)obj;
+ return dict.ContainsKey(propertyName) ? dict[propertyName] : null;
+ }
+ catch
+ {
+ return null;
+ }
+ }
+
+ /// <summary>
+ /// 鑾峰彇閫�璐у崟鍒楄〃
+ /// </summary>
+ public List<dynamic> getReturnOrders()
+ {
+ var db = SqlSugarHelper.GetInstance();
+ var sql = @"
+ SELECT DISTINCT
+ rd.RETURN_TYPE || '-' || rd.RETURN_NO as returnOrderNo,
+ I.ITEM_NAME as itemName,
+ rd.QUANTITY as returnQty,
+ rd.REMARKS as returnReason
+ FROM MES_RETURNWARE_DETAILS rd
+ LEFT JOIN MES_ITEMS I ON I.ITEM_NO = rd.ITEM_NO
+ WHERE rd.RETURN_TYPE IS NOT NULL
+ AND rd.RETURN_NO IS NOT NULL
+ ORDER BY rd.RETURN_TYPE, rd.RETURN_NO";
+ var result = db.Ado.SqlQuery<dynamic>(sql);
+ return result;
+ }
+
+ /// <summary>
+ /// 鑾峰彇閫�璐ф槑缁嗕俊鎭�
+ /// </summary>
+ public List<dynamic> getReturnwareInfo(string returnType, string returnNo)
+ {
+ var db = SqlSugarHelper.GetInstance();
+ var sql = @"
+ SELECT
+ rd.RETURN_TYPE || '-' || rd.RETURN_NO as returnOrderNo,
+ I.ITEM_NAME as itemName,
+ rd.QUANTITY as returnQty,
+ rd.REMARKS as returnReason,
+ rd.ITEM_NO as itemNo
+ FROM MES_RETURNWARE_DETAILS rd
+ LEFT JOIN MES_ITEMS I ON I.ITEM_NO = rd.ITEM_NO
+ WHERE rd.RETURN_TYPE = :returnType
+ AND rd.RETURN_NO = :returnNo";
+
+ var result = db.Ado.SqlQuery<dynamic>(sql,
+ new SugarParameter(":returnType", returnType),
+ new SugarParameter(":returnNo", returnNo));
+
+ return result;
+ }
+
+ /// <summary>
+ /// 鑾峰彇閫�璐ф槑缁� - 鍩轰簬妫�楠屽崟鐨凚ILL_NO绮剧‘鍖归厤
+ /// </summary>
+ public List<dynamic> getReturnDetails(string pid)
+ {
+ var db = SqlSugarHelper.GetInstance();
+ var sql = @"
+ SELECT
+ rd.RETURN_TYPE as returntype,
+ rd.RETURN_NO as returnno,
+ rd.QUANTITY as quantity,
+ rd.REMARKS as remarks,
+ rd.ITEM_NO as itemno,
+ I.ITEM_NAME as itemname
+ FROM MES_RETURNWARE_DETAILS rd
+ LEFT JOIN MES_ITEMS I ON I.ITEM_NO = rd.ITEM_NO
+ LEFT JOIN QS_QA_ITEM_THJ q ON q.ITEM_NO = rd.ITEM_NO
+ AND q.BILL_NO = rd.RETURN_TYPE || '-' || rd.RETURN_NO
+ WHERE q.ID = :pid";
+
+ var result = db.Ado.SqlQuery<dynamic>(sql,
+ new SugarParameter(":pid", Convert.ToDecimal(pid)));
+
+ return result;
+ }
+
+ /// <summary>
+ /// 璁剧疆妫�楠岄」鐩� - 璋冪敤瀛樺偍杩囩▼
+ /// </summary>
+ public List<QsQaItemThj01> setInspectItem(string gid, string updateBy = "绯荤粺")
+ {
+ var db = SqlSugarHelper.GetInstance();
+
+
+ // 楠岃瘉gid鍙傛暟
+ if (string.IsNullOrEmpty(gid) || !decimal.TryParse(gid, out decimal gidDecimal))
+ {
+ throw new Exception("妫�楠屽崟ID鏍煎紡涓嶆纭�");
+ }
+
+
+ try
+ {
+ // 鍏堟鏌ユ楠屽崟鏄惁瀛樺湪
+ var thjExists = db.Queryable<QsQaItemThj>()
+ .Where(s => s.Id == gidDecimal)
+ .Any();
+
+
+ if (!thjExists)
+ {
+ throw new Exception($"妫�楠屽崟ID {gidDecimal} 涓嶅瓨鍦�");
+ }
+
+ // 瀹氫箟杈撳嚭鍙傛暟
+ var outputResult = new SugarParameter("c_result", null, System.Data.DbType.Int32, ParameterDirection.Output, 4000);
+ var outputMessage = new SugarParameter("c_msg", null, System.Data.DbType.String, ParameterDirection.Output, 4000);
+
+ // 瀹氫箟杈撳叆鍙傛暟 - 瀛樺偍杩囩▼鏈熸湜NUMBER绫诲瀷
+ var parameters = new List<SugarParameter>
+ {
+ new("p_gid", gidDecimal, System.Data.DbType.Decimal, ParameterDirection.Input),
+ new("p_user", updateBy, System.Data.DbType.String, ParameterDirection.Input),
+ outputResult,
+ outputMessage
+ };
+
+
+ // 璋冪敤瀛樺偍杩囩▼
+ db.Ado.ExecuteCommand(
+ "BEGIN PROC_ADD_INSPECT_ITEMS(:p_gid, :p_user, :c_result, :c_msg); END;",
+ parameters.ToArray());
+
+ // 鑾峰彇杈撳嚭鍙傛暟鐨勫��
+ var resultValue = outputResult.Value;
+ var messageValue = outputMessage.Value?.ToString();
+
+
+ // 妫�鏌ュ瓨鍌ㄨ繃绋嬫墽琛岀粨鏋� - 鏀寔澶氱鏁板�肩被鍨嬫瘮杈�
+ bool isError = false;
+ if (resultValue != null)
+ {
+ if (resultValue is int intVal && intVal == 1)
+ isError = true;
+ else if (resultValue is decimal decimalVal && decimalVal == 1)
+ isError = true;
+ else if (resultValue is double doubleVal && doubleVal == 1.0)
+ isError = true;
+ else if (resultValue.ToString() == "1")
+ isError = true;
+ }
+
+ if (isError)
+ {
+ // 瀛樺偍杩囩▼鎵ц澶辫触锛屾姏鍑哄紓甯�
+ throw new Exception(messageValue ?? "鑾峰彇妫�楠岄」鐩け璐�");
+ }
+
+ // 瀛樺偍杩囩▼鎵ц鎴愬姛锛岃幏鍙栫敓鎴愮殑妫�楠岄」鐩�
+ var items = db.Queryable<QsQaItemThj01>()
+ .Where(s => s.Pid == gidDecimal)
+ .ToList();
+
+
+ // 涓烘瘡涓」鐩缃粯璁ゅ��
+ items.ForEach(item =>
+ {
+ item.result = "鏈娴�";
+ item.isCheck = 0;
+ });
+
+ return items;
+ }
+ catch (Exception ex)
+ {
+ // 濡傛灉瀛樺偍杩囩▼璋冪敤澶辫触锛屾姏鍑哄紓甯�
+ throw new Exception($"鑾峰彇妫�楠岄」鐩け璐�: {ex.Message}");
+ }
+ }
+
+ /// <summary>
+ /// 淇濆瓨妫�楠岄」鐩�
+ /// </summary>
+ public int saveItem(THJDto thjDto)
+ {
+ return SqlSugarHelper.UseTransactionWithOracle(db =>
+ {
+ var commit = 0;
+
+ // 淇濆瓨涓昏〃
+ thjDto.from.CreateBy = thjDto.userNo;
+ thjDto.from.CreateDate = DateTime.Now;
+
+ var pid = db.Insertable(thjDto.from).ExecuteReturnIdentity();
+ thjDto.from.Id = pid;
+ thjDto.gid = pid;
+
+ // 淇濆瓨妫�楠岄」鐩�
+ if (thjDto.items != null && thjDto.items.Count > 0)
+ {
+ foreach (var item in thjDto.items) item.Pid = pid;
+ commit += db.Insertable(thjDto.items).ExecuteCommand();
+ }
+
+ return commit;
+ });
+ }
+
+ /// <summary>
+ /// 璁剧疆妫�楠岄」鐩鎯�
+ /// </summary>
+ public int SetQSItemDetail(decimal pid, decimal gid, string fstand, string fcheckResu, string updateBy, int count)
+ {
+ return SqlSugarHelper.UseTransactionWithOracle(db =>
+ {
+ List<QsQaItemThj02> result = new();
+ for (var i = 0; i < count; i++)
+ {
+ var item = new QsQaItemThj02();
+ item.Pid = pid;
+ item.Gid = gid;
+ item.Fstand = fstand;
+ item.FcheckResu = fcheckResu;
+ item.CreateBy = updateBy;
+ item.CreateDate = DateTime.Now;
+ item.Factory = "1000";
+ item.Company = "1000";
+ result.Add(item);
+ }
+
+ var insertResult = db.Insertable(result).ExecuteCommand();
+
+ // 鎻掑叆妫�楠岀粨鏋滃悗锛岃嚜鍔ㄦ洿鏂版楠岄」鐩殑IsPass鐘舵��
+ autoUpdateInspectionStatus(pid, db);
+
+ return insertResult;
+ });
+ }
+
+ /// <summary>
+ /// 鑷姩鏇存柊妫�楠岄」鐩姸鎬�
+ /// </summary>
+ private void autoUpdateInspectionStatus(decimal pid, ISqlSugarClient db)
+ {
+ // 鑾峰彇妫�楠岄」鐩俊鎭�
+ var qsQaItemThj01 = db.Queryable<QsQaItemThj01>()
+ .Where(s => s.Id == pid)
+ .First();
+
+ if (qsQaItemThj01 == null) return;
+
+ // 鏌ヨ杩欎釜妫�楠岄」鐩笅鐨勬楠岀粨鏋滄�绘暟
+ var totalCount = db.Queryable<QsQaItemThj02>()
+ .Where(s => s.Pid == pid)
+ .Count();
+
+ // 鏌ヨ鍚堟牸鏁伴噺
+ var passCount = db.Queryable<QsQaItemThj02>()
+ .Where(s => s.Pid == pid && s.Fstand == "鈭�")
+ .Count();
+
+ // 鑾峰彇搴旇妫�楠岀殑鏁伴噺
+ var levelNum = qsQaItemThj01.LevelNum.HasValue ? (int)qsQaItemThj01.LevelNum.Value : 1;
+
+ int isPass = 0; // 榛樿涓嶅悎鏍�
+
+ // 濡傛灉妫�楠屾暟閲忚揪鍒拌姹備笖鍏ㄩ儴鍚堟牸锛屽垯璁剧疆涓哄悎鏍�
+ if (totalCount >= levelNum && passCount == totalCount)
+ {
+ isPass = 1; // 鍚堟牸
+ }
+ // 濡傛灉妫�楠屾暟閲忚揪鍒拌姹備絾鏈変笉鍚堟牸鐨勶紝鍒欒缃负涓嶅悎鏍�
+ else if (totalCount >= levelNum && passCount < totalCount)
+ {
+ isPass = 0; // 涓嶅悎鏍�
+ }
+ // 濡傛灉妫�楠屾暟閲忔湭杈惧埌瑕佹眰锛屼繚鎸佸師鐘舵�侊紙涓嶆洿鏂癐sPass瀛楁锛�
+
+ // 鍙湁褰撴楠屾暟閲忚揪鍒拌姹傛椂鎵嶆洿鏂癐sPass瀛楁
+ if (totalCount >= levelNum)
+ {
+ db.Updateable<QsQaItemThj01>()
+ .SetColumns(s => s.IsPass == isPass)
+ .Where(s => s.Id == pid)
+ .ExecuteCommand();
+ }
+ }
+
+ /// <summary>
+ /// 鏇存柊妫�楠岄」鐩鎯�
+ /// </summary>
+ public int UpdateQSItemDetail(decimal id, decimal pid, decimal gid, string fstand, string fcheckResu, string updateBy)
+ {
+ return SqlSugarHelper.UseTransactionWithOracle(db =>
+ {
+ // 鏇存柊妫�楠岀粨鏋滆褰�
+ var updateResult = db.Updateable<QsQaItemThj02>()
+ .SetColumns(s => s.UpdateBy == updateBy)
+ .SetColumns(s => s.UpdateDate == DateTime.Now)
+ .SetColumnsIF(StringUtil.IsNotNullOrEmpty(fstand),
+ s => s.Fstand == fstand)
+ .SetColumnsIF(StringUtil.IsNotNullOrEmpty(fcheckResu),
+ s => s.FcheckResu == fcheckResu)
+ .Where(s => s.Id == id)
+ .ExecuteCommand();
+
+ // 鏇存柊妫�楠岀粨鏋滃悗锛岄噸鏂拌绠楁楠岄」鐩姸鎬�
+ autoUpdateInspectionStatus(pid, db);
+
+ return updateResult;
+ });
+ }
+
+ /// <summary>
+ /// 淇濆瓨妫�楠岄」鐩娉�
+ /// </summary>
+ public int saveRemarksPid(decimal pid, string remarks)
+ {
+ return SqlSugarHelper.UseTransactionWithOracle(db =>
+ {
+ return db.Updateable<QsQaItemThj01>()
+ .SetColumns(it => it.Remarks == remarks)
+ .Where(it => it.Id == pid)
+ .ExecuteCommand();
+ });
+ }
+
+ /// <summary>
+ /// 淇濆瓨妫�楠屽崟澶囨敞锛堜笉鍚堟牸鎻忚堪锛�
+ /// </summary>
+ public int saveRemarksGid(decimal gid, string remarks)
+ {
+ return SqlSugarHelper.UseTransactionWithOracle(db =>
+ {
+ return db.Updateable<QsQaItemThj>()
+ .SetColumns(it => it.Bhgyy == remarks)
+ .Where(it => it.Id == gid)
+ .ExecuteCommand();
+ });
+ }
+
+ /// <summary>
+ /// 淇濆瓨妫�楠岀粨鏋�
+ /// </summary>
+ public int saveInspectItem(string gid, string items, string userNo)
+ {
+ return SqlSugarHelper.UseTransactionWithOracle(db =>
+ {
+ var result = 0;
+ var gidDecimal = Convert.ToDecimal(gid);
+
+ // 杩欓噷鍙互鏍规嵁闇�瑕佽В鏋恑tems鍙傛暟骞舵洿鏂版楠岀粨鏋�
+ // 鐢变簬鍓嶇浼犻�掔殑鏄瓧绗︿覆锛岃繖閲岀畝鍖栧鐞�
+ result += db.Updateable<QsQaItemThj>()
+ .SetColumns(s => s.LastupdateBy == userNo)
+ .SetColumns(s => s.LastupdateDate == DateTime.Now)
+ .Where(s => s.Id == gidDecimal)
+ .ExecuteCommand();
+
+ return result;
+ });
+ }
+
+ /// <summary>
+ /// 淇濆瓨閫�璐ф槑缁�
+ /// </summary>
+ public List<dynamic> SaveReturnDetails(string returnDetails)
+ {
+ // 杩欓噷鍙互鏍规嵁闇�瑕佸鐞嗛��璐ф槑缁嗘暟鎹�
+ // 鐢变簬鍓嶇浼犻�掔殑鏄瓧绗︿覆锛岃繖閲岃繑鍥炵┖鍒楄〃
+ return new List<dynamic>();
+ }
+
+ /// <summary>
+ /// 鎻愪氦妫�楠岀粨鏋�
+ /// </summary>
+ public bool SubmitTHJResult(decimal gid, string userNo)
+ {
+ var result = SqlSugarHelper.UseTransactionWithOracle(db =>
+ {
+ // 1. 楠岃瘉妫�楠屽崟鏄惁瀛樺湪
+ var inspectionOrder = db.Queryable<QsQaItemThj>()
+ .Where(s => s.Id == gid)
+ .First();
+
+ if (inspectionOrder == null)
+ {
+ throw new Exception($"妫�楠屽崟涓嶅瓨鍦紝ID: {gid}");
+ }
+
+ // 2. 妫�鏌ユ槸鍚﹀凡缁忔彁浜よ繃
+ if (inspectionOrder.FcheckResu == "宸插畬鎴�")
+ {
+ throw new Exception("璇ユ楠屽崟宸茬粡鎻愪氦锛屾棤娉曢噸澶嶆彁浜�");
+ }
+
+ // 3. 楠岃瘉鎵�鏈夋楠岄」鐩槸鍚﹂兘宸插畬鎴�
+ var uncompletedItems = db.Queryable<QsQaItemThj01>()
+ .Where(s => s.Pid == gid)
+ .Where(s => s.IsPass == null || s.IsPass == -1) // 鍋囪-1琛ㄧず鏈畬鎴�
+ .Count();
+
+ if (uncompletedItems > 0)
+ {
+ throw new Exception("瀛樺湪鏈畬鎴愮殑妫�楠岄」鐩紝璇峰畬鎴愭墍鏈夋楠屽悗鍐嶆彁浜�");
+ }
+
+ // 4. 鏇存柊妫�楠屽崟鐘舵��
+ var updateResult = db.Updateable<QsQaItemThj>()
+ .SetColumns(s => s.FcheckResu == "宸插畬鎴�")
+ .SetColumns(s => s.FcheckBy == userNo)
+ .SetColumns(s => s.FcheckDate == DateTime.Now)
+ .SetColumns(s => s.LastupdateBy == userNo)
+ .SetColumns(s => s.LastupdateDate == DateTime.Now)
+ .Where(s => s.Id == gid)
+ .ExecuteCommand();
+
+ if (updateResult <= 0)
+ {
+ throw new Exception("鏇存柊妫�楠屽崟鐘舵�佸け璐�");
+ }
+
+ // 5. 璁板綍鎻愪氦鏃ュ織锛堝彲閫夛級
+ // 杩欓噷鍙互娣诲姞鏃ュ織璁板綍鎴栧叾浠栦笟鍔¢�昏緫
+
+ return updateResult;
+ });
+
+ return result > 0;
+ }
+
+ /// <summary>
+ /// 閫氳繃瀛樺偍杩囩▼鎻愪氦妫�楠岀粨鏋�
+ /// </summary>
+ public (bool success, string message) SubmitTHJResultByProcedure(string releaseNo, string userNo)
+ {
+ try
+ {
+ var db = SqlSugarHelper.GetInstance();
+
+ // 瀹氫箟杈撳嚭鍙傛暟
+ var outputResult = new SugarParameter("O_RESULT", null, System.Data.DbType.Int32, ParameterDirection.Output, 4000);
+ var outputMessage = new SugarParameter("O_MSG", null, System.Data.DbType.String, ParameterDirection.Output, 4000);
+
+ // 瀹氫箟杈撳叆鍙傛暟
+ var parameters = new List<SugarParameter>
+ {
+ new("P_RELEASE_NO", releaseNo, System.Data.DbType.String, ParameterDirection.Input),
+ new("P_USER", userNo, System.Data.DbType.String, ParameterDirection.Input),
+ outputResult,
+ outputMessage
+ };
+
+ // 璋冪敤瀛樺偍杩囩▼
+ db.Ado.ExecuteCommand(
+ "BEGIN PRC_MES_THJ_QA_SUBMIT82(:P_RELEASE_NO, :P_USER, :O_RESULT, :O_MSG); END;",
+ parameters.ToArray());
+
+ // 鑾峰彇杈撳嚭鍙傛暟鐨勫��
+ var resultValue = outputResult.Value;
+ var messageValue = outputMessage.Value?.ToString();
+
+ // 妫�鏌ュ瓨鍌ㄨ繃绋嬫墽琛岀粨鏋�
+ bool isSuccess = false;
+ if (resultValue != null)
+ {
+ if (resultValue is int intVal && intVal == 0)
+ isSuccess = true;
+ else if (resultValue is decimal decimalVal && decimalVal == 0)
+ isSuccess = true;
+ else if (resultValue is double doubleVal && doubleVal == 0.0)
+ isSuccess = true;
+ else if (resultValue.ToString() == "0")
+ isSuccess = true;
+ }
+
+ return (isSuccess, messageValue ?? "鏈煡閿欒");
+ }
+ catch (Exception ex)
+ {
+ return (false, $"璋冪敤瀛樺偍杩囩▼澶辫触: {ex.Message}");
+ }
+ }
+}
\ No newline at end of file
--
Gitblit v1.9.3