| | |
| | | using System; |
| | | using AutoMapper; |
| | | using MailKit.Search; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | |
| | | using WIDESEA_Common.CommonEnum; |
| | | using WIDESEA_Common.OrderEnum; |
| | | using WIDESEA_Core; |
| | | using WIDESEA_Core.BaseRepository; |
| | | using WIDESEA_Core.BaseServices; |
| | | using WIDESEA_Core.Helper; |
| | | using WIDESEA_DTO; |
| | | using WIDESEA_DTO.Basic; |
| | | using WIDESEA_DTO.ERP; |
| | | using WIDESEA_External.ERPService; |
| | | using WIDESEA_External.Model; |
| | | using WIDESEA_IBasicRepository; |
| | |
| | | { |
| | | public class ReceiveOrderService : ServiceBase<Dt_ReceiveOrder, IReceiveOrderRepository>, IReceiveOrderService |
| | | { |
| | | private readonly IUnitOfWorkManage _unitOfWorkManage; |
| | | private readonly IMapper _mapper; |
| | | private readonly ICheckOrderRepository _checkOrderRepository; |
| | | private readonly IInboundRepository _inboundRepository; |
| | | private readonly IBasicRepository _basicRepository; |
| | | private readonly IInvokeERPService _invokeERPService; |
| | | |
| | | public ReceiveOrderService(IReceiveOrderRepository BaseDal, ICheckOrderRepository checkOrderRepository, IInboundRepository inboundRepository, IBasicRepository basicRepository, IInvokeERPService invokeERPService) : base(BaseDal) |
| | | public ReceiveOrderService(IReceiveOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IMapper mapper, ICheckOrderRepository checkOrderRepository, IInboundRepository inboundRepository, IBasicRepository basicRepository, IInvokeERPService invokeERPService) : base(BaseDal) |
| | | { |
| | | _mapper = mapper; |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _checkOrderRepository = checkOrderRepository; |
| | | _inboundRepository = inboundRepository; |
| | | _basicRepository = basicRepository; |
| | |
| | | |
| | | return base.AddData(saveModel); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ¶è´§å®æå¹¶åä¼ ERP |
| | | /// </summary> |
| | | /// <param name="orderId"></param> |
| | | /// <returns></returns> |
| | | public WebResponseContent FeedbackReceiveOrder(int orderId) |
| | | { |
| | | try |
| | |
| | | if (receiveOrder == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°æ¶è´§å"); |
| | | } |
| | | if (receiveOrder.ReceiveOrderStatus == ReceiveOrderStatusEnum.Completed.ObjToInt()) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æ¶è´§å已宿"); |
| | | } |
| | | if (receiveOrder.Details == null || receiveOrder.Details.Count == 0) |
| | | { |
| | |
| | | PriceInTax = 0, |
| | | PurchaseOrderCode = item.PurchaseOrderNo, |
| | | PurchaseOrderSerno = item.PurchaseOrderDetailRowNo, |
| | | QtyReceived = item.ReceivedQuantity, |
| | | QtyRecieved = item.ReceivedQuantity.ObjToInt(), |
| | | Serno = item.RowNo, |
| | | Supplotno = "", |
| | | Taxrate = "" |
| | | Taxrate = "", |
| | | |
| | | }; |
| | | recevieOrderDetails.Add(recevieOrderDetail); |
| | | } |
| | |
| | | ERPReceiveModel receiveModel = new ERPReceiveModel() |
| | | { |
| | | Code = receiveOrder.ReceiveOrderNo, |
| | | CompanyId = "", |
| | | DeliveryCode = receiveOrder.DeliveryCode, |
| | | CustomerId = receiveOrder.CustomerId, |
| | | CreatorId = receiveOrder.CustomerId, |
| | | EndDate = receiveOrder.CreateDate, |
| | | ReceiveDate = receiveOrder.CreateDate, |
| | | PlantsId = "", |
| | | CreatorId = receiveOrder.Creater, |
| | | EntDate = receiveOrder.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | ReceiveDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | SuppliersId = receiveOrder.SuppliersId, |
| | | Type = "PO", |
| | | Type = Enum.GetName(typeof(ReceiveOrderTypeEnum), receiveOrder.ReceiveOrderType) ?? throw new Exception($"éè´åç±»åé误"), |
| | | UniqueTag = receiveOrder.ReceiveOrderId.ToString(), |
| | | WarehouseCode = warehouse.WarehouseCode, |
| | | Way = 1, |
| | | Details = recevieOrderDetails |
| | | }; |
| | | |
| | | string response = _invokeERPService.InvokeMatReceiveApi(receiveModel); |
| | | |
| | | |
| | | //æ´æ°æ¶è´§åä¿¡æ¯ |
| | | receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Completed.ObjToInt(); |
| | | receiveOrder.UploadStatus = WhetherEnum.True.ObjToInt(); |
| | | BaseDal.UpdateData(receiveOrder); |
| | | //å建å
¥åºå |
| | | CreateInboundOrder(orderId); |
| | | //æ¶è´§æ¨éè³ERP æµè¯æ³¨é |
| | | _invokeERPService.InvokeMatReceiveApi(receiveModel); |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | catch (Exception ex) |
| | |
| | | } |
| | | } |
| | | |
| | | public WebResponseContent GetReceiveOrders(SaveModel saveModel) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | int pageNo = saveModel.MainData["pageNo"].ObjToInt(); |
| | | int warehouseId = saveModel.MainData["warehouseId"].ObjToInt(); |
| | | string orderNo = saveModel.MainData["orderNo"].ToString(); |
| | | List<Dt_ReceiveOrder> dt_ReceiveOrders = new List<Dt_ReceiveOrder>(); |
| | | if (string.IsNullOrEmpty(orderNo)) |
| | | { |
| | | dt_ReceiveOrders = Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderStatus < ReceiveOrderStatusEnum.Completed.ObjToInt() && x.WarehouseId == warehouseId).ToPageList(pageNo, 5); |
| | | } |
| | | else |
| | | { |
| | | dt_ReceiveOrders = Db.Queryable<Dt_ReceiveOrder>().Where(x => (x.ReceiveOrderNo.Contains(orderNo) || x.SuppliersId.Contains(orderNo)) && x.ReceiveOrderStatus < ReceiveOrderStatusEnum.Completed.ObjToInt() && x.WarehouseId == warehouseId).ToPageList(pageNo, 5); |
| | | } |
| | | |
| | | content.OK(data: dt_ReceiveOrders); |
| | | } |
| | | catch (Exception) |
| | | { |
| | | |
| | | throw; |
| | | } |
| | | return content; |
| | | } |
| | | /// <summary> |
| | | /// å建å
¥åºå |
| | | /// </summary> |
| | | /// <param name="receiveOrderId">æ¶è´§åç¼å·</param> |
| | | /// <returns></returns> |
| | | public WebResponseContent CreateInboundOrder(int receiveOrderId) |
| | | { |
| | | try |
| | |
| | | { |
| | | return WebResponseContent.Instance.Error($"该æ¶è´§åæªå®æ"); |
| | | } |
| | | #region 注é |
| | | //List<Dt_CheckOrder> checkOrders = _checkOrderRepository.QueryData(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo); |
| | | //if (checkOrders.FirstOrDefault(x => x.CheckOrderStatus == CheckOrderStatusEnum.NotCheck.ObjToInt()) != null) |
| | | //{ |
| | | // return WebResponseContent.Instance.Error($"该æ¶è´§åæªè´¨æ£å®æ"); |
| | | //} |
| | | |
| | | List<Dt_CheckOrder> 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($"该æ¶è´§åè´¨æ£ç»æå®¡æ¹æªå®æ"); |
| | | } |
| | | //if (checkOrders.FirstOrDefault(x => x.AuditStatus != AuditStatusEnum.Agree.ObjToInt()) != null) |
| | | //{ |
| | | // return WebResponseContent.Instance.Error($"该æ¶è´§åè´¨æ£ç»æå®¡æ¹æªå®æ"); |
| | | //} |
| | | #endregion |
| | | |
| | | Dt_InboundOrder inboundOrder = new Dt_InboundOrder() |
| | | { |
| | |
| | | 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(); |
| | | } |
| | | #region 注é |
| | | //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(); |
| | | //} |
| | | #endregion |
| | | Dt_InboundOrderDetail detail = new Dt_InboundOrderDetail() |
| | | { |
| | | MaterielCode = item.MaterielCode, |
| | |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | public WebResponseContent ReceiveAllOrder(int purchaseOrderId, string lotNo) |
| | | { |
| | | try |
| | | { |
| | | Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().Where(x => x.Id == purchaseOrderId).Includes(x => x.Details).First(); |
| | | if (purchaseOrder == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥éè´å"); |
| | | } |
| | | if (purchaseOrder.Details.Count == 0) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°éè´åæç»ä¿¡æ¯"); |
| | | } |
| | | if (purchaseOrder.PurchaseOrderStatus == PurchaseOrderStatusEnum.Received.ObjToInt()) |
| | | { |
| | | return WebResponseContent.Instance.Error($"å·²æ¶è´§å®æ"); |
| | | } |
| | | if (purchaseOrder.Details.FirstOrDefault(x => x.PurchaseDetailStatus == PurchaseOrderStatusEnum.NotReceived.ObjToInt()) == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"å·²æ¶è´§å®æ"); |
| | | } |
| | | List<Dt_CheckOrder> checkOrders = new List<Dt_CheckOrder>(); |
| | | List<Dt_MaterielInfo> materielInfos = new List<Dt_MaterielInfo>(); |
| | | List<Dt_ReceiveOrderDetail> receiveOrderDetails = new List<Dt_ReceiveOrderDetail>(); |
| | | Dt_ReceiveOrder receiveOrder = BaseDal.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.SuppliersId == purchaseOrder.SupplierCode && x.ReceiveOrderStatus != ReceiveOrderStatusEnum.Completed.ObjToInt()).Includes(x => x.Details).First(); |
| | | if (receiveOrder == null) |
| | | { |
| | | int rowNo = 0; |
| | | foreach (var item in purchaseOrder.Details) |
| | | { |
| | | Dt_MaterielInfo? materielInfo = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterielCode); |
| | | if (materielInfo == null) |
| | | { |
| | | materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == item.MaterielCode); |
| | | if (materielInfo == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥ç©æçä¿¡æ¯"); |
| | | } |
| | | materielInfos.Add(materielInfo); |
| | | } |
| | | Dt_ReceiveOrderDetail receiveOrderDetail = new Dt_ReceiveOrderDetail() |
| | | { |
| | | PurchaseOrderNo = purchaseOrder.PurchaseOrderNo, |
| | | ReceivedQuantity = item.PurchaseDetailQuantity, |
| | | MaterielCode = item.MaterielCode, |
| | | LotNo = lotNo, |
| | | PurchaseOrderDetailRowNo = item.RowNo, |
| | | IfInspection = materielInfo.IsCheck.ObjToInt(), |
| | | CurrCode = "", |
| | | PriceInTax = 0, |
| | | TaxRate = "", |
| | | RowNo = rowNo + 1, |
| | | Unit = item.Unit |
| | | }; |
| | | rowNo += 1; |
| | | receiveOrderDetails.Add(receiveOrderDetail); |
| | | #region 注é |
| | | //if (materielInfo.IsCheck == WhetherEnum.True) |
| | | //{ |
| | | // Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail); |
| | | // checkOrder.CheckOrderNo = "TestCheckNo21";//æµè¯ |
| | | // checkOrder.ReceiveOrderNo = ""; |
| | | // checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity; |
| | | // checkOrder.ScrappedQuantity = 0; |
| | | // checkOrder.ReturnQuantity = 0; |
| | | // checkOrder.DefectedQuantity = 0; |
| | | // checkOrder.ReceiveDetailRowNo = rowNo; |
| | | // checkOrder.UploadStatus = CheckUploadEnum.UploadNo.ObjToInt(); |
| | | // checkOrders.Add(checkOrder); |
| | | //} |
| | | #endregion |
| | | } |
| | | receiveOrder = new Dt_ReceiveOrder() |
| | | { |
| | | ReceiveOrderStatus = ReceiveOrderStatusEnum.Receiving.ObjToInt(), |
| | | CustomerId = "", |
| | | DeliveryCode = "/", |
| | | ReceiveDate = DateTime.Now, |
| | | ReceiveOrderType = ReceiveOrderTypeEnum.PO.ObjToInt(), |
| | | SuppliersId = purchaseOrder.SupplierCode, |
| | | WarehouseId = purchaseOrder.Details.FirstOrDefault()?.WarehouseId ?? 0, |
| | | UploadStatus = WhetherEnum.False.ObjToInt(), |
| | | Details = receiveOrderDetails |
| | | }; |
| | | } |
| | | else |
| | | { |
| | | int rowNo = receiveOrder.Details.Count > 0 ? receiveOrder.Details.Max(x => x.RowNo) : 0; |
| | | |
| | | foreach (var item in purchaseOrder.Details) |
| | | { |
| | | Dt_MaterielInfo? materielInfo = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterielCode); |
| | | if (materielInfo == null) |
| | | { |
| | | materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == item.MaterielCode); |
| | | if (materielInfo == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥ç©æçä¿¡æ¯"); |
| | | } |
| | | materielInfos.Add(materielInfo); |
| | | } |
| | | Dt_ReceiveOrderDetail receiveOrderDetail = new Dt_ReceiveOrderDetail() |
| | | { |
| | | PurchaseOrderNo = purchaseOrder.PurchaseOrderNo, |
| | | ReceivedQuantity = item.PurchaseDetailQuantity, |
| | | MaterielCode = item.MaterielCode, |
| | | LotNo = lotNo, |
| | | ReceiveOrderId = receiveOrder.ReceiveOrderId, |
| | | PurchaseOrderDetailRowNo = item.RowNo, |
| | | IfInspection = materielInfo.IsCheck.ObjToInt(), |
| | | CurrCode = "", |
| | | PriceInTax = 0, |
| | | TaxRate = "", |
| | | RowNo = rowNo + 1, |
| | | Unit = item.Unit, |
| | | |
| | | }; |
| | | rowNo += 1; |
| | | receiveOrderDetails.Add(receiveOrderDetail); |
| | | |
| | | //if (materielInfo.IsCheck == WhetherEnum.True) |
| | | //{ |
| | | // Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail); |
| | | // checkOrder.CheckOrderNo = "Test-CheckNo1";//æµè¯ |
| | | // checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity; |
| | | // checkOrder.ScrappedQuantity = 0; |
| | | // checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo; |
| | | // checkOrder.ReturnQuantity = 0; |
| | | // checkOrder.DefectedQuantity = 0; |
| | | // checkOrder.ReceiveDetailRowNo = rowNo; |
| | | // checkOrder.UploadStatus = CheckUploadEnum.UploadNo.ObjToInt(); |
| | | // checkOrders.Add(checkOrder); |
| | | //} |
| | | } |
| | | } |
| | | |
| | | purchaseOrder.Details.ForEach(x => x.PurchaseDetailStatus = PurchaseOrderStatusEnum.Received.ObjToInt()); |
| | | purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Received.ObjToInt(); |
| | | |
| | | _unitOfWorkManage.BeginTran(); |
| | | if (receiveOrder.ReceiveOrderId > 0) |
| | | { |
| | | Db.Insertable(receiveOrderDetails).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | Db.InsertNav(receiveOrder).Include(x => x.Details).ExecuteCommand(); |
| | | checkOrders.ForEach(x => x.ReceiveOrderNo = receiveOrder.ReceiveOrderNo); |
| | | } |
| | | //if (checkOrders.Count > 0) |
| | | //{ |
| | | // _checkOrderRepository.AddData(checkOrders); |
| | | //} |
| | | _inboundRepository.PurchaseOrderRepository.UpdateData(purchaseOrder); |
| | | _inboundRepository.PurchaseOrderDetailRepository.UpdateData(purchaseOrder.Details); |
| | | _unitOfWorkManage.CommitTran(); |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | | } |
| | | } |