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<MesReturnware>
|
{
|
|
|
private readonly MesReturnwareDetailsManager ReturnwareDetailsManager = new();
|
//当前类已经继承了 Repository 增、删、查、改的方法
|
|
//这里面写的代码不会给覆盖,如果要重新生成请删除 MesReturnwareManager.cs
|
|
|
public bool SaveList(List<ErpReturn> 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> mesReturnwareDetails)
|
{
|
|
|
if (mesReturnware.ReturnNo != null && mesReturnware.ReturnType != null)
|
{
|
|
db.Deleteable<MesReturnware>()
|
.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<Womcab>()
|
.Where(it => mesWomcab
|
.Any(p => p.CAB001 == it.Cab001
|
&& p.CAB002 == it.Cab002
|
&& p.CAB003 == it.Cab003))
|
.ExecuteCommand();*/
|
db.Deleteable<MesReturnwareDetails>()
|
.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> mesReturnwareDetails)
|
{
|
//根据单别和单号进行删除
|
var update = db.Deleteable<MesReturnware>()
|
.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<Womcab>().Where(it => mesWomcab.Any(p => p.CAB001 == it.Cab001 && p.CAB002 == it.Cab002 && p.CAB003 == it.Cab003)).ExecuteCommand() > 0;
|
var insertOrUpdate = db.Deleteable<MesReturnwareDetails>().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<MesReturnwareDetails> MapErptoMesReturnwareDetails(List<ErpReturnWareDetails> dtoList)
|
{
|
var returnwareList = new List<MesReturnwareDetails>();
|
|
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<MesReturnwareDetails>()
|
.Where(it => it.ReturnNo == data.FBillNo &&
|
it.ReturnType == data.FBillTypeID)
|
.ExecuteCommand() > 0;
|
|
// 再删除退货通知单主表
|
var mainDeleted = db.Deleteable<MesReturnware>()
|
.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;
|
}
|
|
/// <summary>
|
/// 调用存储过程生成检验单
|
/// </summary>
|
/// <param name="mesReturnware">退货通知单主表</param>
|
/// <param name="mesReturnwareDetails">退货通知单明细表</param>
|
private void GenerateInspectionOrder(SqlSugarScope db, MesReturnware mesReturnware, List<MesReturnwareDetails> 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}");
|
}
|
}
|
|
/// <summary>
|
/// 调用存储过程删除检验单
|
/// </summary>
|
/// <param name="db">数据库连接</param>
|
/// <param name="returnType">退货单别</param>
|
/// <param name="returnNo">退货单号</param>
|
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}");
|
}
|
}
|
|
|
}
|
}
|