| | |
| | | using MES.Service.Modes; |
| | | using MES.Service.util; |
| | | using SqlSugar; |
| | | using System.Data; |
| | | |
| | | namespace MES.Service.service.QC; |
| | | |
| | |
| | | return commit; |
| | | }); |
| | | |
| | | // 注释掉自动提交逻辑,改为手动提交 |
| | | // var isNull = db.Queryable<QsItemOqcItem>() |
| | | // .Where(s => s.Pid == detail.Gid && s.IsPass == null).Count(); |
| | | // |
| | | // if (isNull > 0) return 1; |
| | | // |
| | | // |
| | | // //获取检验单的检验项目的个数 |
| | | // var sum = db.Queryable<QsItemOqcItem>() |
| | | // .Where(s => s.Pid == detail.Gid).Count(); |
| | | // |
| | | // if (sum == 0) return 1; |
| | | // |
| | | // //获取检验单下的合格的检验项目个数 |
| | | // var icount = db.Queryable<QsItemOqcItem>() |
| | | // .Where(s => s.Pid == detail.Gid && s.IsPass == 1).Count(); |
| | | // |
| | | // var FcheckResu = "不合格"; |
| | | // |
| | | // //实际个数等于理论个数时对检验单进行判定 |
| | | // if (sum == icount) |
| | | // //合格的检验结果等于总检验数视为合格 |
| | | // FcheckResu = "合格"; |
| | | // |
| | | // SqlSugarHelper.UseTransactionWithOracle(db => |
| | | // { |
| | | // return db.Updateable<QsItemOqcReq>() |
| | | // .SetColumns(s => s.FcheckResu == FcheckResu) |
| | | // .SetColumns(s => s.FcheckDate == DateTime.Now) |
| | | // .SetColumns(s => s.FcheckBy == detail.CreateBy) |
| | | // .SetColumns(s => s.LastupdateBy == detail.CreateBy) |
| | | // .SetColumns(s => s.LastupdateDate == DateTime.Now) |
| | | // .Where(s => s.Id == detail.Gid) |
| | | // .ExecuteCommand(); |
| | | // }); |
| | | // |
| | | // if (FcheckResu.Equals("不合格")) |
| | | // //自动生成入库检异常对策 |
| | | // saveDetect02(detail.Gid, detail.CreateBy); |
| | | |
| | | return useTransactionWithOracle; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 手动提交入库检结果 |
| | | /// </summary> |
| | | /// <param name="gid">入库检主表ID</param> |
| | | /// <param name="userNo">操作人</param> |
| | | /// <returns>提交结果</returns> |
| | | public int SubmitRKJResult(decimal? gid, string userNo) |
| | | { |
| | | var db = SqlSugarHelper.GetInstance(); |
| | | |
| | | // 检查是否所有检验项目都已完成 |
| | | var isNull = db.Queryable<QsItemOqcItem>() |
| | | .Where(s => s.Pid == detail.Gid && s.IsPass == null).Count(); |
| | | .Where(s => s.Pid == gid && s.IsPass == null).Count(); |
| | | |
| | | if (isNull > 0) return 1; |
| | | if (isNull > 0) |
| | | { |
| | | throw new Exception("还有检验项目未完成,无法提交"); |
| | | } |
| | | |
| | | |
| | | //获取检验单的检验项目的个数 |
| | | // 获取检验单的检验项目的个数 |
| | | var sum = db.Queryable<QsItemOqcItem>() |
| | | .Where(s => s.Pid == detail.Gid).Count(); |
| | | .Where(s => s.Pid == gid).Count(); |
| | | |
| | | if (sum == 0) return 1; |
| | | if (sum == 0) |
| | | { |
| | | throw new Exception("没有检验项目,无法提交"); |
| | | } |
| | | |
| | | //获取检验单下的合格的检验项目个数 |
| | | // 获取检验单下的合格的检验项目个数 |
| | | var icount = db.Queryable<QsItemOqcItem>() |
| | | .Where(s => s.Pid == detail.Gid && s.IsPass == 1).Count(); |
| | | .Where(s => s.Pid == gid && s.IsPass == 1).Count(); |
| | | |
| | | var FcheckResu = "不合格"; |
| | | |
| | | //实际个数等于理论个数时对检验单进行判定 |
| | | // 实际个数等于理论个数时对检验单进行判定 |
| | | if (sum == icount) |
| | | //合格的检验结果等于总检验数视为合格 |
| | | // 合格的检验结果等于总检验数视为合格 |
| | | FcheckResu = "合格"; |
| | | |
| | | SqlSugarHelper.UseTransactionWithOracle(db => |
| | | Console.WriteLine($"检验结果判定: 总项目数={sum}, 合格项目数={icount}, 判定结果={FcheckResu}"); |
| | | |
| | | var result = SqlSugarHelper.UseTransactionWithOracle(db => |
| | | { |
| | | return db.Updateable<QsItemOqcReq>() |
| | | var updateResult = db.Updateable<QsItemOqcReq>() |
| | | .SetColumns(s => s.FcheckResu == FcheckResu) |
| | | .SetColumns(s => s.FcheckDate == DateTime.Now) |
| | | .SetColumns(s => s.FcheckBy == detail.CreateBy) |
| | | .SetColumns(s => s.LastupdateBy == detail.CreateBy) |
| | | .SetColumns(s => s.FcheckBy == userNo) |
| | | .SetColumns(s => s.LastupdateBy == userNo) |
| | | .SetColumns(s => s.LastupdateDate == DateTime.Now) |
| | | .Where(s => s.Id == detail.Gid) |
| | | .Where(s => s.Id == gid) |
| | | .ExecuteCommand(); |
| | | |
| | | // 如果不合格,在事务内调用存储过程生成异常处置单 |
| | | if (FcheckResu.Equals("不合格")) |
| | | { |
| | | CallRKJUnqualifiedStoredProcedureInTransaction(db, gid, userNo); |
| | | } |
| | | |
| | | return updateResult; |
| | | }); |
| | | |
| | | if (FcheckResu.Equals("不合格")) |
| | | //自动生成入库检异常对策 |
| | | saveDetect02(detail.Gid, detail.CreateBy); |
| | | return result; |
| | | } |
| | | |
| | | return useTransactionWithOracle; |
| | | /// <summary> |
| | | /// 调用入库检不合格存储过程(事务内调用) |
| | | /// </summary> |
| | | /// <param name="db">数据库连接</param> |
| | | /// <param name="gid">入库检主表ID</param> |
| | | /// <param name="userNo">操作人</param> |
| | | private void CallRKJUnqualifiedStoredProcedureInTransaction(ISqlSugarClient db, decimal? gid, string userNo) |
| | | { |
| | | try |
| | | { |
| | | Console.WriteLine($"开始调用入库检不合格存储过程,gid: {gid}, userNo: {userNo}"); |
| | | |
| | | // 获取入库检单信息 |
| | | var rkjInfo = db.Queryable<QsItemOqcReq>() |
| | | .Where(s => s.Id == gid) |
| | | .First(); |
| | | |
| | | if (rkjInfo == null) |
| | | { |
| | | Console.WriteLine($"未找到入库检单信息,gid: {gid}"); |
| | | return; |
| | | } |
| | | |
| | | Console.WriteLine($"找到入库检单信息,ReleaseNo: {rkjInfo.ReleaseNo}"); |
| | | |
| | | // 定义输出参数 |
| | | 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_Gid", gid, System.Data.DbType.Decimal, ParameterDirection.Input), |
| | | new("p_Release_No", rkjInfo.ReleaseNo, System.Data.DbType.String, ParameterDirection.Input), |
| | | new("p_User", userNo, System.Data.DbType.String, ParameterDirection.Input), |
| | | outputResult, |
| | | outputMessage |
| | | }; |
| | | |
| | | Console.WriteLine($"准备执行存储过程,参数: gid={gid}, releaseNo={rkjInfo.ReleaseNo}, userNo={userNo}"); |
| | | |
| | | // 执行存储过程 |
| | | db.Ado.ExecuteCommand( |
| | | "BEGIN PRC_MES_RKJ_UNQUALIFIED(:p_Gid, :p_Release_No, :p_User, :o_Result, :o_Msg); END;", |
| | | parameters.ToArray()); |
| | | |
| | | // 获取输出参数的值 |
| | | var resultValue = outputResult.Value?.ToString(); |
| | | var messageValue = outputMessage.Value?.ToString(); |
| | | |
| | | Console.WriteLine($"存储过程执行完成,结果: {resultValue}, 消息: {messageValue}"); |
| | | |
| | | if ("1".Equals(resultValue)) |
| | | { |
| | | throw new Exception($"入库检异常处置单生成失败: {messageValue}"); |
| | | } |
| | | |
| | | Console.WriteLine("入库检异常处置单生成成功"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Console.WriteLine($"入库检异常处置单生成失败: {ex.Message}"); |
| | | // 在事务内,如果存储过程调用失败,应该抛出异常以回滚事务 |
| | | throw new Exception($"入库检异常处置单生成失败: {ex.Message}"); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 调用入库检不合格存储过程(事务外调用,用于兼容) |
| | | /// </summary> |
| | | /// <param name="gid">入库检主表ID</param> |
| | | /// <param name="userNo">操作人</param> |
| | | private void CallRKJUnqualifiedStoredProcedure(decimal? gid, string userNo) |
| | | { |
| | | try |
| | | { |
| | | var db = SqlSugarHelper.GetInstance(); |
| | | |
| | | // 获取入库检单信息 |
| | | var rkjInfo = db.Queryable<QsItemOqcReq>() |
| | | .Where(s => s.Id == gid) |
| | | .First(); |
| | | |
| | | if (rkjInfo == null) return; |
| | | |
| | | // 定义输出参数 |
| | | 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_Gid", gid, System.Data.DbType.Decimal, ParameterDirection.Input), |
| | | new("p_Release_No", rkjInfo.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_RKJ_UNQUALIFIED(:p_Gid, :p_Release_No, :p_User, :o_Result, :o_Msg); END;", |
| | | parameters.ToArray()); |
| | | |
| | | // 获取输出参数的值 |
| | | var resultValue = outputResult.Value?.ToString(); |
| | | var messageValue = outputMessage.Value?.ToString(); |
| | | |
| | | if ("1".Equals(resultValue)) |
| | | { |
| | | throw new Exception($"入库检异常处置单生成失败: {messageValue}"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | // 记录日志但不影响主流程 |
| | | Console.WriteLine($"入库检异常处置单生成失败: {ex.Message}"); |
| | | // 可以根据需要决定是否抛出异常 |
| | | // throw new Exception($"入库检异常处置单生成失败: {ex.Message}"); |
| | | } |
| | | } |
| | | |
| | | public int saveDetect02(decimal? gid, string? createBy) |