| | |
| | | var itemOutFrom = oItemOut.from; |
| | | var itemOutLists = oItemOut.items; |
| | | |
| | | // 根据AsnNo和MesNo对明细进行分组 |
| | | var groupedItems = itemOutLists |
| | | .GroupBy(item => new { item.AsnNo, item.MesNo, item.SqNo }) |
| | | .ToList(); |
| | | |
| | | bool result = true; |
| | | foreach (var group in groupedItems) |
| | | return UseTransaction(db => |
| | | { |
| | | if (group.Key.AsnNo == null) |
| | | { |
| | | throw new NotImplementedException("AsnNo不能为空"); |
| | | } |
| | | // 根据AsnNo和MesNo对明细进行分组 |
| | | var groupedItems = itemOutLists |
| | | .GroupBy(item => new { item.AsnNo, item.MesNo, item.SqNo }) |
| | | .ToList(); |
| | | |
| | | if (group.Key.MesNo == null) |
| | | var result = 1; |
| | | foreach (var group in groupedItems) |
| | | { |
| | | throw new NotImplementedException("入库单单号不能为空"); |
| | | } |
| | | // if (group.Key.AsnNo == null) |
| | | // { |
| | | // throw new NotImplementedException("AsnNo不能为空"); |
| | | // } |
| | | |
| | | if (group.Key.SqNo == null) |
| | | { |
| | | throw new NotImplementedException("退货申请单行号不能为空"); |
| | | } |
| | | if (group.Key.MesNo == null) |
| | | throw new NotImplementedException("入库单单号不能为空"); |
| | | |
| | | // 创建一个临时的itemOutFrom对象,使用分组的Key作为主要属性 |
| | | var tempItemOutFrom = new ItemOutFrom |
| | | { |
| | | AsnNo = group.Key.AsnNo, |
| | | MesNo = group.Key.MesNo, |
| | | SqNo = group.Key.SqNo, |
| | | // 继承原始itemOutFrom的其他属性 |
| | | RtnNo = itemOutFrom.RtnNo, |
| | | Type = itemOutFrom.Type, |
| | | CreateBy = itemOutFrom.CreateBy, |
| | | FMRMODE = itemOutFrom.FMRMODE, |
| | | DepotId = itemOutFrom.DepotId, |
| | | SupperId = itemOutFrom.SupperId |
| | | }; |
| | | if (group.Key.SqNo == null) |
| | | throw new NotImplementedException("退货申请单行号不能为空"); |
| | | |
| | | // 根据Type执行不同的逻辑 |
| | | switch (tempItemOutFrom.Type) |
| | | { |
| | | case "1": |
| | | // 创建一个临时的itemOutFrom对象,使用分组的Key作为主要属性 |
| | | var tempItemOutFrom = new ItemOutFrom |
| | | { |
| | | var mesInvItemOuts = Db.Queryable<MesInvItemOuts>() |
| | | .Where(s => s.BillTypeId == BILL_TYPE_ID |
| | | && s.TransactionNo == TRANSACTION_NO |
| | | && s.ItemOutNo == tempItemOutFrom.RtnNo |
| | | && s.Sapno == tempItemOutFrom.SqNo |
| | | ) |
| | | .Count(); |
| | | AsnNo = group.Key.AsnNo, |
| | | MesNo = group.Key.MesNo, |
| | | SqNo = group.Key.SqNo, |
| | | // 继承原始itemOutFrom的其他属性 |
| | | RtnNo = itemOutFrom.RtnNo, |
| | | Type = itemOutFrom.Type, |
| | | CreateBy = itemOutFrom.CreateBy, |
| | | FMRMODE = itemOutFrom.FMRMODE, |
| | | DepotId = itemOutFrom.DepotId, |
| | | SupperId = itemOutFrom.SupperId |
| | | }; |
| | | |
| | | if (mesInvItemOuts > 0) |
| | | // 根据Type执行不同的逻辑 |
| | | switch (tempItemOutFrom.Type) |
| | | { |
| | | case "1": |
| | | { |
| | | throw new NotImplementedException( |
| | | tempItemOutFrom.RtnNo + |
| | | "的退料申请单已经存在"); |
| | | } |
| | | var mesInvItemOuts = Db.Queryable<MesInvItemOuts>() |
| | | .Where(s => s.BillTypeId == BILL_TYPE_ID |
| | | && s.TransactionNo == TRANSACTION_NO |
| | | && s.ItemOutNo == tempItemOutFrom.RtnNo |
| | | && s.Sapno == tempItemOutFrom.SqNo |
| | | ) |
| | | .Count(); |
| | | |
| | | // 为当前分组保存数据 |
| | | var groupResult = Save(tempItemOutFrom, group.ToList()); |
| | | if (!groupResult) |
| | | { |
| | | result = false; |
| | | } |
| | | if (mesInvItemOuts > 0) |
| | | throw new NotImplementedException( |
| | | tempItemOutFrom.RtnNo + |
| | | "的退料申请单已经存在"); |
| | | |
| | | break; |
| | | // 为当前分组保存数据 |
| | | var groupResult = Save(tempItemOutFrom, group.ToList()); |
| | | if (!groupResult) result = 0; |
| | | |
| | | break; |
| | | } |
| | | case "4": |
| | | var removeResult = Remove(tempItemOutFrom); |
| | | if (!removeResult) result = 0; |
| | | |
| | | break; |
| | | default: |
| | | result = 0; |
| | | break; |
| | | } |
| | | case "4": |
| | | var removeResult = Remove(tempItemOutFrom); |
| | | if (!removeResult) |
| | | { |
| | | result = false; |
| | | } |
| | | |
| | | break; |
| | | default: |
| | | result = false; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | return result; |
| | | return result; |
| | | }) > 0; |
| | | } |
| | | |
| | | private bool Save(ItemOutFrom from, List<ItemOutList> items) |
| | |
| | | var mesInvItemIns = Db.Queryable<MesInvItemIns>() |
| | | .Where(s => s.BillTypeId == 100 |
| | | && s.TransctionNo == "101" |
| | | && s.Id == Convert.ToInt32(from.MesNo) |
| | | && s.BillNo == from.MesNo |
| | | ).First(); |
| | | |
| | | if (mesInvItemIns == null) |
| | | { |
| | | throw new NotImplementedException("采购入库不存在"); |
| | | } |
| | | if (mesInvItemIns == null) throw new NotImplementedException("采购入库不存在"); |
| | | |
| | | var mesDepots = Db.Queryable<MesDepots>() |
| | | .Where(s => s.DepotId == Decimal.Parse(from.DepotId)).First(); |
| | | .Where(s => s.DepotId == decimal.Parse(from.DepotId)).First(); |
| | | |
| | | var mesLinkU9 = Db.Queryable<MesLinkU9>() |
| | | .Where(s => s.TableType == "MES_SUPPLIER" |
| | | && s.U9Id == from.SupperId).First(); |
| | | |
| | | if (mesLinkU9 == null) |
| | | { |
| | | throw new NotImplementedException("供应商ID不存在或未同步于U9"); |
| | | } |
| | | |
| | | var mesSupplier = Db.Queryable<MesSupplier>() |
| | | .Where(s => s.Id == Decimal.Parse(mesLinkU9.MesId)) |
| | | .Where(s => s.Id == decimal.Parse(mesLinkU9.MesId)) |
| | | .First(); |
| | | |
| | | if (mesDepots == null) |
| | | { |
| | | throw new NotImplementedException("[" + from.DepotId + |
| | | "]仓库不存在,请同步给MES"); |
| | | } |
| | | |
| | | if (mesSupplier == null) |
| | | { |
| | | throw new NotImplementedException("[" + from.SupperId + |
| | | "]供应商不存在,请同步给MES"); |
| | | } |
| | | |
| | | var nextSequenceValue = |
| | | Db.Ado.SqlQuery<decimal>("SELECT SEQ_OUT_ID.NEXTVAL FROM DUAL") |
| | |
| | | WorkNo = from.AsnNo, |
| | | Fmrmode = from.FMRMODE, |
| | | Sapno = from.SqNo, |
| | | Organizeid = "1002503270000079", |
| | | Organizeid = "1002503270000079" |
| | | }; |
| | | |
| | | // 创建采购退料单记录 |
| | |
| | | { |
| | | // 检查必要字段是否为空 |
| | | if (string.IsNullOrEmpty(itemOutList.SrcDocNo)) |
| | | { |
| | | throw new NotImplementedException("采购订单号不能为空"); |
| | | } |
| | | |
| | | if (string.IsNullOrEmpty(itemOutList.SrcDocLineNo)) |
| | | { |
| | | throw new NotImplementedException("采购订单行号不能为空"); |
| | | } |
| | | |
| | | if (string.IsNullOrEmpty(itemOutList.AsnLineNo)) |
| | | { |
| | | throw new NotImplementedException("ASN行号不能为空"); |
| | | } |
| | | //if (string.IsNullOrEmpty(itemOutList.AsnLineNo)) |
| | | //{ |
| | | // throw new NotImplementedException("ASN行号不能为空"); |
| | | //} |
| | | |
| | | if (string.IsNullOrEmpty(itemOutList.itemId)) |
| | | { |
| | | throw new NotImplementedException("物料ID不能为空"); |
| | | } |
| | | |
| | | var mesRohInData = Db.Queryable<MesRohInData>() |
| | | .Where(s => s.BillNo == itemOutList.SrcDocNo |
| | |
| | | .First(); |
| | | |
| | | if (mesRohInData == null) |
| | | { |
| | | throw new NotImplementedException("采购订单不存在"); |
| | | } |
| | | |
| | | var deliveryDetail = Db.Queryable<DeliveryDetail>() |
| | | .Where(a => a.Zzasn == from.AsnNo |
| | | && Int32.Parse(a.ZzitemId) == |
| | | Int32.Parse(itemOutList.AsnLineNo)) |
| | | .Count(); |
| | | // var deliveryDetail = Db.Queryable<DeliveryDetail>() |
| | | // .Where(a => a.Zzasn == from.AsnNo |
| | | // && Int32.Parse(a.ZzitemId) == |
| | | // Int32.Parse(itemOutList.AsnLineNo)) |
| | | // .Count(); |
| | | |
| | | if (deliveryDetail <= 0) |
| | | { |
| | | throw new NotImplementedException("[" + from.AsnNo + "]的明细行[" + |
| | | itemOutList.AsnLineNo + |
| | | "]不存在"); |
| | | } |
| | | // if (deliveryDetail <= 0) |
| | | // { |
| | | // throw new NotImplementedException("[" + from.AsnNo + "]的明细行[" + |
| | | // itemOutList.AsnLineNo + |
| | | // "]不存在"); |
| | | // } |
| | | |
| | | var itemIdLinkU9 = Db.Queryable<MesLinkU9>() |
| | | .Where(s => s.TableType == "MES_ITEMS" |
| | | && s.U9Id == itemOutList.itemId).First(); |
| | | |
| | | if (mesLinkU9 == null) |
| | | { |
| | | throw new NotImplementedException("供应商ID不存在或未同步于U9"); |
| | | } |
| | | |
| | | var mesItems = Db.Queryable<MesItems>() |
| | | .Where(s => s.Id == Decimal.Parse(itemIdLinkU9.MesId)) |
| | | .Where(s => s.Id == decimal.Parse(itemIdLinkU9.MesId)) |
| | | .First(); |
| | | |
| | | if (mesItems == null) |
| | | { |
| | | throw new NotImplementedException("[" + itemOutList.itemId + |
| | | "]物料不存在,请同步给MES"); |
| | | } |
| | | |
| | | var mesInvItemInCItems = Db.Queryable<MesInvItemInCItems>() |
| | | .Where(s => s.ItemInId == mesInvItemIns.Id |
| | | && s.ItemNo == mesItems.ItemNo |
| | | && s.Ebeln == itemOutList.SrcDocNo |
| | | && s.EbelnLineNo == |
| | | Decimal.Parse(itemOutList.SrcDocLineNo) |
| | | decimal.Parse(itemOutList.SrcDocLineNo) |
| | | && s.SuppNo == mesSupplier.SuppNo |
| | | && Convert.ToInt32(s.ZzitemId) == |
| | | Convert.ToInt32(itemOutList.AsnLineNo)).First(); |
| | | // && Convert.ToInt32(s.ZzitemId) == Convert.ToInt32(itemOutList.AsnLineNo) |
| | | ).First(); |
| | | |
| | | if (mesInvItemInCItems == null) |
| | | { |
| | | throw new NotImplementedException("没有对应的入库明细"); |
| | | } |
| | | |
| | | |
| | | // 确保CbillNo不为空 |
| | | if (string.IsNullOrEmpty(mesInvItemIns.CbillNo)) |
| | | { |
| | | throw new NotImplementedException("入库单关联的采购单号不能为空"); |
| | | } |
| | | |
| | | mesInvItemOutItems.Add(new MesInvItemOutItems |
| | | { |
| | | ItemOutId = nextSequenceValue, |
| | | ItemNo = mesItems.ItemNo, |
| | | Quantity = Decimal.Parse(itemOutList.qty), |
| | | Quantity = decimal.Parse(itemOutList.qty), |
| | | CreateBy = "PL017", |
| | | CreateDate = DateTime.Now, |
| | | Factory = "1000", |
| | |
| | | DepotCode = mesDepots.DepotCode, |
| | | WorkNo = itemOutList.SrcDocNo, // 确保WorkNo有值 |
| | | WorkLine = |
| | | Decimal.Parse(itemOutList.SrcDocLineNo), // 确保WorkLine有值 |
| | | EbelnK3id = Decimal.Parse(mesRohInData.ErpId), |
| | | LineK3id = Decimal.Parse(mesRohInData.EbelnK3id), |
| | | decimal.Parse(itemOutList.SrcDocLineNo), // 确保WorkLine有值 |
| | | EbelnK3id = decimal.Parse(mesRohInData.ErpId), |
| | | LineK3id = decimal.Parse(mesRohInData.EbelnK3id), |
| | | FType = 0, |
| | | Status = 0, |
| | | PbillNo = mesInvItemIns.CbillNo, // 确保PbillNo有值 |
| | |
| | | RkLine = mesInvItemInCItems.Id, // 确保RkLine有值 |
| | | RkQty = mesInvItemInCItems.Quantity, |
| | | TlQty = 0, |
| | | ItemId = Decimal.Parse(itemIdLinkU9.MesId), // 确保ItemId有值 |
| | | ItemId = decimal.Parse(itemIdLinkU9.MesId), // 确保ItemId有值 |
| | | SqNo = itemOutList.SqNo, // 确保ItemId有值 |
| | | ZzitemId = itemOutList.AsnLineNo, // 确保ItemId有值 |
| | | ZzitemId = itemOutList.AsnLineNo // 确保ItemId有值 |
| | | // Unit = item.Unit, |
| | | }); |
| | | } |
| | | |
| | | var outItemCommand = Db.Insertable(mesInvItemOutItems) |
| | | .PageSize(1).IgnoreColumnsNull().ExecuteCommand(); |
| | | if (outItemCommand <= 0) |
| | | { |
| | | throw new Exception("创建采购退料单子表失败"); |
| | | } |
| | | if (outItemCommand <= 0) throw new Exception("创建采购退料单子表失败"); |
| | | |
| | | // 插入采购退料单记录 |
| | | var insertResult = Db.Insertable(mesInvItemOuts).IgnoreColumns(true) |
| | | .ExecuteCommand(); |
| | | if (insertResult <= 0) |
| | | { |
| | | throw new Exception("创建采购退料单失败"); |
| | | } |
| | | if (insertResult <= 0) throw new Exception("创建采购退料单失败"); |
| | | |
| | | return outItemCommand + insertResult >= 2; |
| | | } |
| | |
| | | && s.ItemOutNo == from.RtnNo).ToList(); |
| | | |
| | | if (mesInvItemOuts == null || mesInvItemOuts.Count == 0) |
| | | { |
| | | throw new NotImplementedException("找不到对应的采购退料单: " + from.RtnNo); |
| | | } |
| | | |
| | | // 检查是否有已审核的单据,如果存在已审核(Status=1)则不允许删除 |
| | | if (mesInvItemOuts.Any(item => item.Status == 1)) |
| | | { |
| | | throw new NotImplementedException("存在已审核的采购退料单,不允许删除"); |
| | | } |
| | | |
| | | // 删除所有相关单据 |
| | | foreach (var itemOut in mesInvItemOuts) |
| | |
| | | .ToList(); |
| | | |
| | | if (mesInvItemOutItems == null || mesInvItemOutItems.Count == 0) |
| | | { |
| | | throw new NotImplementedException( |
| | | $"找不到采购退料单[{itemOut.ItemOutNo}]对应的明细"); |
| | | } |
| | | |
| | | // 删除采购退料单明细 |
| | | var deleteItemsResult = Db.Deleteable<MesInvItemOutItems>() |
| | |
| | | .ExecuteCommand(); |
| | | |
| | | if (deleteItemsResult <= 0) |
| | | { |
| | | throw new Exception($"删除采购退料单[{itemOut.ItemOutNo}]明细失败"); |
| | | } |
| | | |
| | | // 删除采购退料单 |
| | | var deleteResult = Db.Deleteable<MesInvItemOuts>() |
| | |
| | | .ExecuteCommand(); |
| | | |
| | | if (deleteResult <= 0) |
| | | { |
| | | throw new Exception($"删除采购退料单[{itemOut.ItemOutNo}]失败"); |
| | | } |
| | | } |
| | | |
| | | return true; |