using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.CommonEnum; using WIDESEA_Common.OrderEnum; using WIDESEA_Core; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Helper; using WIDESEA_ICheckRepository; using WIDESEA_IInboundRepository; using WIDESEA_IInboundService; using WIDESEA_Model.Models; namespace WIDESEA_InboundService { public class ReceiveOrderService : ServiceBase, IReceiveOrderService { private readonly ICheckOrderRepository _checkOrderRepository; private readonly IInboundRepository _inboundRepository; public ReceiveOrderService(IReceiveOrderRepository BaseDal, ICheckOrderRepository checkOrderRepository, IInboundRepository inboundRepository) : base(BaseDal) { _checkOrderRepository = checkOrderRepository; _inboundRepository = inboundRepository; } public override WebResponseContent AddData(SaveModel saveModel) { if (saveModel.MainData.ContainsKey(nameof(Dt_ReceiveOrder.ReceiveOrderStatus).FirstLetterToLower())) { saveModel.MainData[nameof(Dt_ReceiveOrder.ReceiveOrderStatus).FirstLetterToLower()] = ReceiveOrderStatusEnum.NotStarted.ObjToInt(); } else { saveModel.MainData.Add(nameof(Dt_ReceiveOrder.ReceiveOrderStatus).FirstLetterToLower(), ReceiveOrderStatusEnum.NotStarted.ObjToInt()); } if (saveModel.MainData.ContainsKey(nameof(Dt_ReceiveOrder.UploadStatus).FirstLetterToLower())) { saveModel.MainData[nameof(Dt_ReceiveOrder.UploadStatus).FirstLetterToLower()] = WhetherEnum.False.ObjToInt(); } else { saveModel.MainData.Add(nameof(Dt_ReceiveOrder.UploadStatus).FirstLetterToLower(), WhetherEnum.False.ObjToInt()); } if (saveModel.MainData.ContainsKey(nameof(Dt_ReceiveOrder.ReceiveDate).FirstLetterToLower())) { saveModel.MainData[nameof(Dt_ReceiveOrder.ReceiveDate).FirstLetterToLower()] = DateTime.Now; } else { saveModel.MainData.Add(nameof(Dt_ReceiveOrder.ReceiveDate).FirstLetterToLower(), DateTime.Now); } if (saveModel.MainData.TryGetValue(nameof(Dt_ReceiveOrder.SuppliersId).FirstLetterToLower(), out object? suppliersId) && suppliersId != null && !string.IsNullOrEmpty(suppliersId.ToString())) { Dt_ReceiveOrder receiveOrder = BaseDal.QueryFirst(x => x.SuppliersId == suppliersId.ToString() && x.WarehouseId == Convert.ToInt32(saveModel.MainData[nameof(Dt_ReceiveOrder.WarehouseId).FirstLetterToLower()])); if (receiveOrder != null && receiveOrder.ReceiveOrderStatus != ReceiveOrderStatusEnum.Completed.ObjToInt()) { return WebResponseContent.Instance.Error("该供应商有未完成的收货单"); } } return base.AddData(saveModel); } public WebResponseContent CreateInboundOrder(int receiveOrderId) { try { Dt_ReceiveOrder receiveOrder = Db.Queryable().Where(x => x.ReceiveOrderId == receiveOrderId).Includes(x => x.Details).First(); if (receiveOrder == null) { return WebResponseContent.Instance.Error($"未找到该收货单信息"); } if (receiveOrder.Details == null || receiveOrder.Details.Count() <= 0) { return WebResponseContent.Instance.Error($"未找到该收货单明细信息"); } if (receiveOrder.ReceiveOrderStatus != ReceiveOrderStatusEnum.Completed.ObjToInt()) { return WebResponseContent.Instance.Error($"该收货单未完成"); } List checkOrders = _checkOrderRepository.QueryData(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo); if (checkOrders.FirstOrDefault(x => x.CheckOrderStatus == CheckOrderStatusEnum.NotCheck.ObjToInt()) != null) { return WebResponseContent.Instance.Error($"该收货单未质检完成"); } if (checkOrders.FirstOrDefault(x => x.AuditStatus != AuditStatusEnum.Agree.ObjToInt()) != null) { return WebResponseContent.Instance.Error($"该收货单质检结果审批未完成"); } Dt_InboundOrder inboundOrder = new Dt_InboundOrder() { UpperOrderNo = receiveOrder.ReceiveOrderNo, CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(), OrderStatus = InOrderStatusEnum.未开始.ObjToInt(), OrderType = InOrderTypeEnum.Purchase.ObjToInt(), WarehouseId = receiveOrder.WarehouseId, SupplierId = receiveOrder.SuppliersId, Details = new List() }; foreach (var item in receiveOrder.Details) { float quantity = item.ReceivedQuantity; if (item.IfInspection == WhetherEnum.True.ObjToInt()) { Dt_CheckOrder? checkOrder = checkOrders.FirstOrDefault(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo && x.ReceiveDetailRowNo == item.RowNo); if (checkOrder == null) { return WebResponseContent.Instance.Error($"质检单数据错误"); } quantity = checkOrder.QualifiedQuantity.GetValueOrDefault() + checkOrder.DefectedQuantity.GetValueOrDefault(); } Dt_InboundOrderDetail detail = new Dt_InboundOrderDetail() { MaterielCode = item.MaterielCode, OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(), OrderQuantity = quantity, OverInQuantity = 0, ReceiptQuantity = 0, RowNo = item.RowNo, Unit = item.Unit }; inboundOrder.Details.Add(detail); } _inboundRepository.InboundOrderRepository.Db.InsertNav(inboundOrder).Include(x => x.Details).ExecuteCommand(); return WebResponseContent.Instance.OK(); } catch (Exception ex) { return WebResponseContent.Instance.Error(ex.Message); } } } }