using SqlSugar; using System; using System.Collections.Generic; using MES.Service.DB; using MES.Service.Modes; using MES.Service.Dto.webApi; using System.Data; namespace MES.Service.service { public class MesReturnwareManager : Repository { private readonly MesReturnwareDetailsManager ReturnwareDetailsManager = new(); //当前类已经继承了 Repository 增、删、查、改的方法 //这里面写的代码不会给覆盖,如果要重新生成请删除 MesReturnwareManager.cs public bool SaveList(List ReturnWare) { var result = ReturnWare.Select(Save).ToList(); return result.All(b => b); } public bool Save(ErpReturn ReturnWare) { var ReturnWares = ReturnWare.ErpReturnWares; var mesReturnWares = MapErptoMesReturnware(ReturnWares); var ErpReturnWareDetails = MapErptoMesReturnwareDetails(ReturnWare.ErpReturnWareDetailss); return UseTransaction(db => { switch (ReturnWares.Type) { case "3": return UpdateData(db, mesReturnWares, ErpReturnWareDetails) ? 1 : 0; case "2": case "4": return SaveOrUpdateData(db, mesReturnWares, ErpReturnWareDetails) ? 1 : 0; default: throw new NotImplementedException( $"type没有{ReturnWares.Type}这个类型"); } }) > 0; } private bool SaveOrUpdateData(SqlSugarScope db, MesReturnware mesReturnware, List mesReturnwareDetails) { if (mesReturnware.ReturnNo != null && mesReturnware.ReturnType != null) { db.Deleteable() .Where(it => it.ReturnNo == mesReturnware.ReturnNo && it.ReturnType == mesReturnware.ReturnType) .ExecuteCommand(); }; if (mesReturnwareDetails.Count > 0) { // var mesWomcab = mesWomcabs.Select(s => new { CAB001 = s.Cab001, CAB002 = s.Cab002, CAB003 = s.Cab003 }).ToList(); var mesReturnwareDetail = mesReturnwareDetails.Select(s => new { ReturnwareNo = s.ReturnNo, ReturnwareType = s.ReturnType }).ToList(); /*db.Deleteable() .Where(it => mesWomcab .Any(p => p.CAB001 == it.Cab001 && p.CAB002 == it.Cab002 && p.CAB003 == it.Cab003)) .ExecuteCommand();*/ db.Deleteable() .Where(it => mesReturnwareDetail .Any(p => p.ReturnwareNo == it.ReturnNo && p.ReturnwareType == it.ReturnType)) .ExecuteCommand(); }; // var orUpdate = db.Insertable(mesOutware).ExecuteCommand(); //var baOrUpdate = db.Insertable(mesOutwareDetails).ExecuteCommand(); var orUpdate = base.Insert(mesReturnware); var baOrUpdate = ReturnwareDetailsManager.InsertRange(mesReturnwareDetails); if (orUpdate && baOrUpdate) { // 保存成功后,调用存储过程生成检验单 GenerateInspectionOrder(db, mesReturnware, mesReturnwareDetails); return true; } throw new NotImplementedException("插入或更新失败"); } private bool UpdateData(SqlSugarScope db, MesReturnware mesReturnware, List mesReturnwareDetails) { //根据单别和单号进行删除 var update = db.Deleteable() .Where(it => it.ReturnNo == mesReturnware.ReturnNo && it.ReturnType == mesReturnware.ReturnType) .ExecuteCommand() > 0; //var mesWomcab = mesWomcabs.Select(s => new { CAB001 = s.Cab001, CAB002 = s.Cab002, CAB003 = s.Cab003 }).ToList(); var mesReturnwareDetail = mesReturnwareDetails.Select(s => new { ReturnwareNo = s.ReturnNo, ReturnwareType = s.ReturnType }).ToList(); //var insertOrUpdate = db.Deleteable().Where(it => mesWomcab.Any(p => p.CAB001 == it.Cab001 && p.CAB002 == it.Cab002 && p.CAB003 == it.Cab003)).ExecuteCommand() > 0; var insertOrUpdate = db.Deleteable().Where(it => mesReturnwareDetail.Any(p => p.ReturnwareNo == it.ReturnNo && p.ReturnwareType == it.ReturnType)).ExecuteCommand() > 0; if (update && insertOrUpdate) { // 更新成功后,调用存储过程生成检验单 GenerateInspectionOrder(db, mesReturnware, mesReturnwareDetails); return true; } throw new NotImplementedException("更新失败"); } private MesReturnware MapErptoMesReturnware(ErpReturnWare dto) { var entity = new MesReturnware { ReturnType = dto.ReturnType, ReturnNo = dto.ReturnNo, CustNo = dto.CustNo, BillDate = dto.BillDate, BusinessBy = dto.BusinessBy, WorkshopCenterCode = dto.WorkCode, Remarks = dto.Remarks, CreateBy = dto.CreateBy, CreateDate = dto.CreateDate, Type = dto.Type, Over=dto.Over ?? 0 }; return entity; } private List MapErptoMesReturnwareDetails(List dtoList) { var returnwareList = new List(); foreach (var dto in dtoList) { var ReturnwareDetails = new MesReturnwareDetails { ItemNo = dto.ItemNo, ItemName = dto.ItemName, ItemModel = dto.ItemModel, Quantity = dto.Quantity, Type = dto.Type, DepotCode = dto.DepotCode, ReturnType = dto.ReturnType, ReturnNo = dto.ReturnNo, ReturnOrder = dto.ReturnOrder, OrderType = dto.OrderType, OrderNumber = dto.OrderNumber, OrderNo = dto.OrderNo, ActualQuantity = dto.ActQuantity, CustItemNo = dto.CustItemNo, CustItemName = dto.CustItemName, CustItemModel = dto.CustItemModel, Remarks=dto.Remarks }; returnwareList.Add(ReturnwareDetails); } return returnwareList; } public bool Delete(YFDelete data) { return UseTransaction(db => { // 先删除退货通知单明细 var detailsDeleted = db.Deleteable() .Where(it => it.ReturnNo == data.FBillNo && it.ReturnType == data.FBillTypeID) .ExecuteCommand() > 0; // 再删除退货通知单主表 var mainDeleted = db.Deleteable() .Where(it => it.ReturnNo == data.FBillNo && it.ReturnType == data.FBillTypeID) .ExecuteCommand() > 0; if (detailsDeleted && mainDeleted) { // 删除成功后,调用存储过程删除对应的检验单 DeleteInspectionOrder(db, data.FBillTypeID, data.FBillNo); return 1; } throw new NotImplementedException("删除失败"); }) > 0; } /// /// 调用存储过程生成检验单 /// /// 退货通知单主表 /// 退货通知单明细表 private void GenerateInspectionOrder(SqlSugarScope db, MesReturnware mesReturnware, List mesReturnwareDetails) { try { // 定义输入参数 var inputParam1 = new SugarParameter("P_RETURN_TYPE", mesReturnware.ReturnType ?? ""); var inputParam2 = new SugarParameter("P_RETURN_NO", mesReturnware.ReturnNo ?? ""); // 定义输出参数 var outParam1 = new SugarParameter("P_RESULT", null, true); var outParam2 = new SugarParameter("P_MESSAGE", null, true); // 使用 SqlSugar 执行存储过程 db.Ado.ExecuteCommand("BEGIN SP_GEN_RETURN_INSP(:P_RETURN_TYPE,:P_RETURN_NO,:P_RESULT,:P_MESSAGE); END;", inputParam1, inputParam2, outParam1, outParam2); // 获取输出参数的值 int result = int.Parse((string)outParam1.Value); string message = outParam2.Value == DBNull.Value ? string.Empty : (string)outParam2.Value; if (result != 1) { // 记录警告日志,但不影响退货通知单的保存 Console.WriteLine($"生成检验单警告: {message}"); } else { Console.WriteLine($"生成检验单成功: {message}"); } } catch (Exception ex) { // 记录错误日志,但不影响退货通知单的保存 Console.WriteLine($"生成检验单时发生错误: {ex.Message}"); } } /// /// 调用存储过程删除检验单 /// /// 数据库连接 /// 退货单别 /// 退货单号 private void DeleteInspectionOrder(SqlSugarScope db, string returnType, string returnNo) { try { // 定义输入参数 var inputParam1 = new SugarParameter("P_RETURN_TYPE", returnType ?? ""); var inputParam2 = new SugarParameter("P_RETURN_NO", returnNo ?? ""); // 定义输出参数 var outParam1 = new SugarParameter("P_RESULT", null, true); var outParam2 = new SugarParameter("P_MESSAGE", null, true); // 使用 SqlSugar 执行存储过程 db.Ado.ExecuteCommand("BEGIN SP_DEL_RETURN_INSP(:P_RETURN_TYPE,:P_RETURN_NO,:P_RESULT,:P_MESSAGE); END;", inputParam1, inputParam2, outParam1, outParam2); // 获取输出参数的值 int result = int.Parse((string)outParam1.Value); string message = outParam2.Value == DBNull.Value ? string.Empty : (string)outParam2.Value; if (result != 1) { // 记录警告日志,但不影响退货通知单的删除 Console.WriteLine($"删除检验单警告: {message}"); } else { Console.WriteLine($"删除检验单成功: {message}"); } } catch (Exception ex) { // 记录错误日志,但不影响退货通知单的删除 Console.WriteLine($"删除检验单时发生错误: {ex.Message}"); } } } }