|  |  |  | 
|---|
|  |  |  | using AutoMapper; | 
|---|
|  |  |  | using Castle.Core.Resource; | 
|---|
|  |  |  | using Org.BouncyCastle.Asn1.Cmp; | 
|---|
|  |  |  | using System; | 
|---|
|  |  |  | using System.Collections.Generic; | 
|---|
|  |  |  | using System.Linq; | 
|---|
|  |  |  | using System.Text; | 
|---|
|  |  |  | using System.Threading; | 
|---|
|  |  |  | using System.Threading.Tasks; | 
|---|
|  |  |  | using WIDESEA_Common.OrderEnum; | 
|---|
|  |  |  | using WIDESEA_Common.StockEnum; | 
|---|
|  |  |  | 
|---|
|  |  |  | using WIDESEA_Core.Enums; | 
|---|
|  |  |  | using WIDESEA_Core.Helper; | 
|---|
|  |  |  | using WIDESEA_DTO.ERP; | 
|---|
|  |  |  | using WIDESEA_DTO.Outbound; | 
|---|
|  |  |  | using WIDESEA_External.ERPService; | 
|---|
|  |  |  | using WIDESEA_External.Model; | 
|---|
|  |  |  | using WIDESEA_IBasicRepository; | 
|---|
|  |  |  | 
|---|
|  |  |  | _invokeERPService = invokeERPService; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// æ¥æ¶ERPæååºåºå | 
|---|
|  |  |  | /// æ¥æ¶ERPæååºåºåä¿¡æ¯(订ååºåº/å¯å®åºåº) | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | public WebResponseContent ProductDeliveryOrder(ErpProOutOrderDTO outOrderDTO) | 
|---|
|  |  |  | public async Task<WebResponseContent> ProductDeliveryOrder(ErpProOutOrderDTO outOrderDTO) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return outOrderDTO.Way switch | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 1 => AddDeliveryOrder(outOrderDTO), | 
|---|
|  |  |  | 2 => UpdateDeliveryOrder(outOrderDTO), | 
|---|
|  |  |  | 3 => DeleteDeliveryOrder(outOrderDTO), | 
|---|
|  |  |  | _ => WebResponseContent.Instance.Error($"æä½ç±»åä¸åå¨,Way:{outOrderDTO.Way}"), | 
|---|
|  |  |  | 1 => await Task.FromResult(AddDeliveryOrder(outOrderDTO)), | 
|---|
|  |  |  | 2 => await Task.FromResult(UpdateDeliveryOrder(outOrderDTO)), | 
|---|
|  |  |  | 3 => await Task.FromResult(DeleteDeliveryOrder(outOrderDTO)), | 
|---|
|  |  |  | _ => await Task.FromResult(WebResponseContent.Instance.Error($"æä½ç±»åä¸åå¨,Way:{outOrderDTO.Way}")), | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error(ex.Message); | 
|---|
|  |  |  | return await Task.FromResult(WebResponseContent.Instance.Error(ex.Message)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | 
|---|
|  |  |  | warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA101.ToString()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<Dt_ProOutOrderDetail> proOutOrderDetails = new List<Dt_ProOutOrderDetail>(); | 
|---|
|  |  |  | Dictionary<string,string> keyValuePairs =new Dictionary<string, string>(); | 
|---|
|  |  |  | foreach (var item in outOrderDTO.OrderDetails) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //å¤æå®¢æ·æ¯å¦åå¨ | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error($"客æ·{item.Customer}ä¸åå¨!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | proOutOrderDetails.Add(_mapper.Map<Dt_ProOutOrderDetail>(item)); | 
|---|
|  |  |  | Dt_ProOutOrderDetail proOutOrderDetail = _mapper.Map<Dt_ProOutOrderDetail>(item); | 
|---|
|  |  |  | if (!string.IsNullOrEmpty(item.SaleOrder)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (keyValuePairs!=null && keyValuePairs.ContainsKey(item.SaleOrder)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | proOutOrderDetail.EndCustomer = keyValuePairs[item.SaleOrder]; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | string request = _invokeERPService.InvokeProSaleCustomer(item.SaleOrder); | 
|---|
|  |  |  | ErpSaleCustomResponseContent responseContent=request.DeserializeObject<ErpSaleCustomResponseContent>(); | 
|---|
|  |  |  | if (responseContent.Code!=200) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error($"订å{item.SaleOrder}ç»ç«¯å®¢æ·è·å失败!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //夿ç»ç«¯å®¢æ·æ¯å¦åå¨ | 
|---|
|  |  |  | Dt_CustomerInfo? customerInfoEnd = customerInfos.Where(x => x.Code == responseContent.Data[0].Endcustomer).FirstOrDefault(); | 
|---|
|  |  |  | if (customerInfoEnd == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error($"ç»ç«¯å®¢æ·{responseContent.Data[0].Endcustomer}ä¸åå¨!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | proOutOrderDetail.EndCustomer = responseContent.Data[0].Endcustomer; | 
|---|
|  |  |  | keyValuePairs.Add(item.SaleOrder, responseContent.Data[0].Endcustomer); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | proOutOrderDetail.QtyPcs += proOutOrderDetail.SpareQty; | 
|---|
|  |  |  | proOutOrderDetails.Add(proOutOrderDetail); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Dt_ProOutOrder  proOutOrder= new Dt_ProOutOrder() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | WebResponseContent content = new WebResponseContent(); | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | WebResponseContent content = new WebResponseContent(); | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOutOrderNo == outOrderDTO.OrderNo).Includes(x => x.Details).First(); | 
|---|
|  |  |  | if (proOutOrder==null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error($"æªæ¾å°åºåºå{outOrderDTO.OrderNo}"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (proOutOrder.ProOrderStatus==OutOrderStatusEnum.åºåºå®æ.ObjToInt() || proOutOrder.ProOrderStatus == OutOrderStatusEnum.åºåºä¸.ObjToInt()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error("åºåºåæ§è¡ä¸"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | _unitOfWorkManage.BeginTran(); | 
|---|
|  |  |  | _outboundRepository.ProOutOrderRepository.DeleteData(proOutOrder); | 
|---|
|  |  |  | _outboundRepository.ProOutOrderDetailRepository.DeleteData(proOutOrder.Details); | 
|---|
|  |  |  | _unitOfWorkManage.CommitTran(); | 
|---|
|  |  |  | content.OK("æå"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | _unitOfWorkManage.RollbackTran(); | 
|---|
|  |  |  | content.Error(ex.Message); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return content; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// æååºå¾
åè´§åº(å¹³åº)+忥ERPåºåº(ç»å®äºåºåºååºå) | 
|---|
|  |  |  | /// éå®ææ´¾ | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | public WebResponseContent OutProductPK(string[] OutPKCodes,string ProOutNo) | 
|---|
|  |  |  | public async Task<WebResponseContent> ProductSpecifyVer(ErpProductSpecifyVerDTO erpProductSpecifyVerDTO) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | WebResponseContent content = new WebResponseContent(); | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseCode==erpProductSpecifyVerDTO.WaType); | 
|---|
|  |  |  | if (warehouse == null) | 
|---|
|  |  |  | return await Task.FromResult(content.Error($"æªæ¾å°{erpProductSpecifyVerDTO.WaType}ä»åºä¿¡æ¯")); | 
|---|
|  |  |  | //æ¥è¯¢å¯ææ´¾åºå | 
|---|
|  |  |  | List<Dt_ProStockInfo> proStockInfos = Db.Queryable<Dt_ProStockInfo>().Where(x => x.ProStockAttribute == ProStockAttributeEnum.æå.ObjToInt()) | 
|---|
|  |  |  | .Includes(x => x.proStockInfoDetails) | 
|---|
|  |  |  | .Where(x => x.proStockInfoDetails | 
|---|
|  |  |  | .Any(v => | 
|---|
|  |  |  | v.SaleOrder == erpProductSpecifyVerDTO.OrderNo | 
|---|
|  |  |  | && v.ProductCode == erpProductSpecifyVerDTO.PCode | 
|---|
|  |  |  | && v.ProductVersion == erpProductSpecifyVerDTO.PVer | 
|---|
|  |  |  | && v.LotNumber == erpProductSpecifyVerDTO.PLot | 
|---|
|  |  |  | && v.DateCode == erpProductSpecifyVerDTO.DateCode | 
|---|
|  |  |  | && (v.SpecifyVer==null||v.SpecifyVer=="") | 
|---|
|  |  |  | )) | 
|---|
|  |  |  | .ToList(); | 
|---|
|  |  |  | List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>(); | 
|---|
|  |  |  | List<Dt_ProStockInfoDetail> specifyVerDetails = new List<Dt_ProStockInfoDetail>(); | 
|---|
|  |  |  | if (proStockInfos==null) | 
|---|
|  |  |  | return await Task.FromResult(content.Error("å¯ææ´¾åºåä¸åå¨")); | 
|---|
|  |  |  | proStockInfos = proStockInfos.OrderBy(x => x.proStockInfoDetails.FirstOrDefault()?.DateCode).ThenBy(x => x.CreateDate).ThenBy(x => x.proStockInfoDetails.Sum(x => x.StockPcsQty)).ToList(); | 
|---|
|  |  |  | foreach (var item in proStockInfos) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | proStockInfoDetails.AddRange(item.proStockInfoDetails); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (proStockInfoDetails.Sum(x=>x.StockPcsQty)< erpProductSpecifyVerDTO.QtyPcs) | 
|---|
|  |  |  | return await Task.FromResult(content.Error($"å¯ææ´¾åºåæ°éä¸è¶³,å¯ç¨:{proStockInfoDetails.Sum(x => x.StockPcsQty)}")); | 
|---|
|  |  |  | float overQty = 0; | 
|---|
|  |  |  | foreach (var item in proStockInfoDetails) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | specifyVerDetails.Add(item); | 
|---|
|  |  |  | overQty += item.StockPcsQty; | 
|---|
|  |  |  | //已满足è·åæ°éä¸åæ´æ¹ | 
|---|
|  |  |  | if (overQty>= erpProductSpecifyVerDTO.QtyPcs) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | specifyVerDetails.ForEach(x => | 
|---|
|  |  |  | { | 
|---|
|  |  |  | x.SpecifyVer = erpProductSpecifyVerDTO.Ver; | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | _unitOfWorkManage.BeginTran(); | 
|---|
|  |  |  | _stockRepository.ProStockInfoDetailRepository.UpdateData(specifyVerDetails); | 
|---|
|  |  |  | _unitOfWorkManage.CommitTran(); | 
|---|
|  |  |  | content.OK("ææ´¾æå"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | _unitOfWorkManage.RollbackTran(); | 
|---|
|  |  |  | content.Error(ex.Message); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return await Task.FromResult(content); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// æååºå¾
åè´§åº(å¹³åº)+忥ERPåºåº(ç»å®äºåºåºååºå) | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | public WebResponseContent OutProductPK(SaveModel saveModel, string ProOutNo) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | WebResponseContent content = new WebResponseContent(); | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | List<string> OutPKCodes = saveModel.DelKeys.Select(x => x.ToString()).ToList(); | 
|---|
|  |  |  | if (OutPKCodes.IsNullOrEmpty()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error("ä¸è½ä¸ºç©º"); | 
|---|
|  |  |  | 
|---|
|  |  |  | return content.Error($"åºåºå{ProOutNo}å·²æ ç»å®åºå"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<Dt_ProStockInfo> proStockInfos = new List<Dt_ProStockInfo>(); | 
|---|
|  |  |  | List<Dt_ProStockInfoDetail> proStockInfoDetails=new List<Dt_ProStockInfoDetail>(); | 
|---|
|  |  |  | List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>(); | 
|---|
|  |  |  | List<Dt_Warehouse> warehouses = _basicRepository.WarehouseRepository.QueryData(x => x.WarehouseType == WarehouseTypEnum.æå.ToString()); | 
|---|
|  |  |  | foreach (var item in OutPKCodes) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | return content.Error($"åºåºæ°é{proStockInfoDetails.Sum(x => x.StockPcsQty)}>æå©è®¢åæ°é{proOutOrder.Details.Sum(x => x.LockQtyPcs - x.OverQtyPcs)}"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<StockOutItemsItem> stockOutItems = new List<StockOutItemsItem>(); | 
|---|
|  |  |  | List<Dt_ProOutOrderDetail> proOutOrderDetails = proOutOrder.Details.Where(x=> proStockInfoDetails.Select(x=>x.SaleOrder).Contains(x.SaleOrder) && proStockInfoDetails.Select(x=>x.ProductCode).Contains(x.PCode) && proStockInfoDetails.Select(x => x.ProductVersion).Contains(x.PVer)).ToList(); | 
|---|
|  |  |  | List<Dt_ProOutOrderDetail> proOutOrderDetails = proOutOrder.Details.Where(x=> proStockInfoDetails.Select(x=>x.ProductCode).Contains(x.PCode) && proStockInfoDetails.Select(x => x.ProductVersion).Contains(x.PVer)).ToList(); | 
|---|
|  |  |  | if (proOutOrderDetails==null || proOutOrderDetails.Count<=0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error("对åºåºåºè®¢åæç»ä¸ºç©º"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | int OldOverCount = proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count(); | 
|---|
|  |  |  | List<Dt_ProOutOrderDetail> newProDetails=new List<Dt_ProOutOrderDetail>(); | 
|---|
|  |  |  | foreach (var item in proStockInfoDetails) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //è·åå¯¹åºæç»å¤çåºåºæ°æ® | 
|---|
|  |  |  | Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrderDetails.Where(x => x.SaleOrder == item.SaleOrder && x.PVer == item.ProductVersion && x.PCode == item.ProductCode).FirstOrDefault(); | 
|---|
|  |  |  | Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrderDetails.Where(x => x.Id==item.OutDetailId && x.PVer == item.ProductVersion && x.PCode == item.ProductCode).FirstOrDefault(); | 
|---|
|  |  |  | if (proOutOrderDetail==null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error("æªæ¾å°å¯¹åºåºåºè®¢åæç»"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | proOutOrderDetail.OverQtyPcs += item.StockPcsQty; | 
|---|
|  |  |  | item.OutboundQuantity = item.StockPcsQty; | 
|---|
|  |  |  | item.OutSETQty = item.SETQty; | 
|---|
|  |  |  | if (proOutOrderDetail.OverQtyPcs> proOutOrderDetail.QtyPcs) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error($"åºåºè®¢åæç»è¡{proOutOrderDetail.RowId},溢åº{proOutOrderDetail.QtyPcs - proOutOrderDetail.OverQtyPcs}"); | 
|---|
|  |  |  | 
|---|
|  |  |  | if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); | 
|---|
|  |  |  | newProDetails.Add(proOutOrderDetail); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | int AddOverCount = proOutOrderDetails.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count(); | 
|---|
|  |  |  | int AddOverCount = newProDetails.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count(); | 
|---|
|  |  |  | if (proOutOrder.Details.Count == (AddOverCount + OldOverCount)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | proOutOrder.ProOrderStatus = OutOrderStatusEnum.åºåºå®æ.ObjToInt(); | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | PartNum = item.ProductCode, | 
|---|
|  |  |  | Rev = item.ProductVersion, | 
|---|
|  |  |  | SoNumber = item.SaleOrder, | 
|---|
|  |  |  | SoNumber = item.OutDetailSaleNo, | 
|---|
|  |  |  | BatchNumber = item.BagNo, | 
|---|
|  |  |  | QtyPcs = item.StockPcsQty, | 
|---|
|  |  |  | QtySet = item.SETQty | 
|---|
|  |  |  | QtyPcs = item.OutboundQuantity, | 
|---|
|  |  |  | QtySet = item.OutSETQty | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | stockOutItems.Add(outItemsItem); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Way = 1, | 
|---|
|  |  |  | StockOutCode = _outboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.ProOutCOdeRule)), | 
|---|
|  |  |  | ConfirmedUserNo = "admin", | 
|---|
|  |  |  | AssignUserNo = "admin", | 
|---|
|  |  |  | ConfirmedUserNo = App.User.UserName, | 
|---|
|  |  |  | AssignUserNo = App.User.UserName, | 
|---|
|  |  |  | WarehouseCode = warehouse.WarehouseCode, | 
|---|
|  |  |  | ShipDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), | 
|---|
|  |  |  | DeliverplanCode = proOutOrder.ProOutOrderNo, | 
|---|
|  |  |  | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | _stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(proStockInfos, OperateTypeEnum.èªå¨å®æ); | 
|---|
|  |  |  | _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(proStockInfoDetails, OperateTypeEnum.èªå¨å®æ); | 
|---|
|  |  |  | //WebResponseContent contentSaveInfos = SaveOutProPKInfos(proStockInfos); | 
|---|
|  |  |  | //if (!contentSaveInfos.Status) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    throw new Exception(contentSaveInfos.Message); | 
|---|
|  |  |  | //}; | 
|---|
|  |  |  | string response = _invokeERPService.InvokeProOutApi(proOutOrderModel); | 
|---|
|  |  |  | ErpRequestContent erpRequestContent = response.DeserializeObject<ErpRequestContent>(); | 
|---|
|  |  |  | if (erpRequestContent.res != 1) | 
|---|
|  |  |  | 
|---|
|  |  |  | return content; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// æååºå¾
åè´§åº(å¹³åº)+忥ERPåºåº(æªç»å®åºåºååºå) | 
|---|
|  |  |  | /// è·ååºåºææçå¤å
å
æç» | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | /// <param name="proStockInfos"></param> | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | public WebResponseContent OutProductNoPK(string[] OutPKCodes, string ProOutNo) | 
|---|
|  |  |  | public WebResponseContent SaveOutProPKInfos(List<Dt_ProStockInfo> proStockInfos) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | WebResponseContent content = new WebResponseContent(); | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (OutPKCodes.IsNullOrEmpty()) | 
|---|
|  |  |  | List<Dt_OutProPKStockInfo> outProPKStockInfos = new List<Dt_OutProPKStockInfo>(); | 
|---|
|  |  |  | foreach (var fromItem in proStockInfos) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error("ä¸è½ä¸ºç©º"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOutOrderNo == ProOutNo).Includes(x => x.Details).First(); | 
|---|
|  |  |  | if (proOutOrder == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error($"åºåºå{ProOutNo}ä¸åå¨"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.åºåºå®æ.ObjToInt()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error($"åºåºå{ProOutNo}已宿"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | string? userName = App.User.UserName;//GSWMS | 
|---|
|  |  |  | //è·åææå¤ç®±çæ°æ® | 
|---|
|  |  |  | List<Dt_ProStockInfo> AllproStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>() | 
|---|
|  |  |  | .Where(x => OutPKCodes.Contains(x.PalletCode) && x.StockStatus == StockStatusEmun.å¹³åºå
¥åºå®æ.ObjToInt()) | 
|---|
|  |  |  | .Includes(x => x.proStockInfoDetails).ToList(); | 
|---|
|  |  |  | List<Dt_ProStockInfo> proStockInfos = new List<Dt_ProStockInfo>(); | 
|---|
|  |  |  | List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>(); | 
|---|
|  |  |  | List<Dt_Warehouse> warehouses = _basicRepository.WarehouseRepository.QueryData(x => x.WarehouseType == WarehouseTypEnum.æå.ToString()); | 
|---|
|  |  |  | foreach (var item in OutPKCodes) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //è·ååºå | 
|---|
|  |  |  | Dt_ProStockInfo? proStockInfo = AllproStockInfos.Where(x => x.PalletCode == item).FirstOrDefault(); | 
|---|
|  |  |  | if (proStockInfo == null) | 
|---|
|  |  |  | foreach (var lordItem in fromItem.proStockInfoDetails) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error($"æªæ¾å°{item}åºå"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (proStockInfo.ShipmentOrder!=null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error($"å¤ç®±å·{item}为åºåºå{proStockInfo.ShipmentOrder}æå®åºå!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Dt_Warehouse? dt_Warehouse = warehouses.Where(x => x.WarehouseId == proStockInfo.WarehouseId).FirstOrDefault(); | 
|---|
|  |  |  | if (dt_Warehouse == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error($"å¤ç®±å·{item},ä¸å±äºæåä»"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | proStockInfos.Add(proStockInfo); | 
|---|
|  |  |  | proStockInfoDetails.AddRange(proStockInfo.proStockInfoDetails); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (proOutOrder.Details.Sum(x => x.QtyPcs - x.OverQtyPcs) < proStockInfoDetails.Sum(x => x.StockPcsQty)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error($"åºåºæ°é{proStockInfoDetails.Sum(x => x.StockPcsQty)}>æå©è®¢åæ°é{proOutOrder.Details.Sum(x => x.QtyPcs - x.OverQtyPcs)}"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<StockOutItemsItem> stockOutItems = new List<StockOutItemsItem>(); | 
|---|
|  |  |  | List<Dt_ProOutOrderDetail> proOutOrderDetails = proOutOrder.Details.Where(x => proStockInfoDetails.Select(x => x.SaleOrder).Contains(x.SaleOrder) && proStockInfoDetails.Select(x => x.ProductCode).Contains(x.PCode) && proStockInfoDetails.Select(x => x.ProductVersion).Contains(x.PVer)).ToList(); | 
|---|
|  |  |  | if (proOutOrderDetails == null || proOutOrderDetails.Count <= 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error("对åºåºåºè®¢åæç»ä¸ºç©º"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | int OldOverCount = proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count(); | 
|---|
|  |  |  | foreach (var item in proStockInfoDetails) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //è·åå¯¹åºæç»å¤çåºåºæ°æ® | 
|---|
|  |  |  | Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrderDetails.Where(x => x.SaleOrder == item.SaleOrder && x.PVer == item.ProductVersion && x.PCode == item.ProductCode).FirstOrDefault(); | 
|---|
|  |  |  | if (proOutOrderDetail == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error("æªæ¾å°å¯¹åºåºåºè®¢åæç»"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | proOutOrderDetail.OverQtyPcs += item.StockPcsQty; | 
|---|
|  |  |  | if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error($"åºåºè®¢åæç»è¡{proOutOrderDetail.RowId},溢åº{proOutOrderDetail.QtyPcs - proOutOrderDetail.OverQtyPcs}"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | proStockInfos.ForEach(x => | 
|---|
|  |  |  | { | 
|---|
|  |  |  | x.StockStatus = StockStatusEmun.å¹³åºå¾
åè´§.ObjToInt(); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | proStockInfoDetails.ForEach(x => | 
|---|
|  |  |  | { | 
|---|
|  |  |  | x.ProOutDetailStatus = StockStatusEmun.å¹³åºå¾
åè´§.ObjToInt(); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | int AddOverCount = proOutOrderDetails.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count(); | 
|---|
|  |  |  | if (proOutOrder.Details.Count == (AddOverCount + OldOverCount)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | proOutOrder.ProOrderStatus = OutOrderStatusEnum.åºåºå®æ.ObjToInt(); | 
|---|
|  |  |  | //è·åææå·²æ«ç å¾
åè´§çåºå | 
|---|
|  |  |  | List<Dt_ProStockInfo> AllOutStocks = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>() | 
|---|
|  |  |  | .Where(x => x.ShipmentOrder == ProOutNo && x.StockStatus == StockStatusEmun.å¹³åºå¾
åè´§.ObjToInt()) | 
|---|
|  |  |  | .Includes(x => x.proStockInfoDetails).ToList(); | 
|---|
|  |  |  | AllOutStocks.ForEach(x => | 
|---|
|  |  |  | { | 
|---|
|  |  |  | proStockInfoDetails.AddRange(x.proStockInfoDetails); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | proStockInfos.AddRange(AllOutStocks); | 
|---|
|  |  |  | foreach (var item in proStockInfoDetails) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | StockOutItemsItem outItemsItem = new StockOutItemsItem() | 
|---|
|  |  |  | Dt_OutProPKStockInfo outProPKStockInfo = new Dt_OutProPKStockInfo() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | PartNum = item.ProductCode, | 
|---|
|  |  |  | Rev = item.ProductVersion, | 
|---|
|  |  |  | SoNumber = item.SaleOrder, | 
|---|
|  |  |  | BatchNumber = item.BagNo, | 
|---|
|  |  |  | QtyPcs = item.StockPcsQty, | 
|---|
|  |  |  | QtySet = item.SETQty | 
|---|
|  |  |  | PCode = lordItem.ProductCode, | 
|---|
|  |  |  | PVer=lordItem.ProductVersion, | 
|---|
|  |  |  | PLot=lordItem.ProductVersion, | 
|---|
|  |  |  | DateCode=lordItem.DateCode, | 
|---|
|  |  |  | StockId=fromItem.Id, | 
|---|
|  |  |  | OriginalQuantity=lordItem.StockPcsQty, | 
|---|
|  |  |  | AssignQuantity=lordItem.StockPcsQty, | 
|---|
|  |  |  | PalletCode=fromItem.PalletCode, | 
|---|
|  |  |  | Unit="PCS" | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | stockOutItems.Add(outItemsItem); | 
|---|
|  |  |  | outProPKStockInfos.Add(outProPKStockInfo); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | _unitOfWorkManage.BeginTran(); | 
|---|
|  |  |  | Dt_Warehouse warehouse = warehouses.Where(x => x.WarehouseId == proOutOrder.WarehouseId).FirstOrDefault(); | 
|---|
|  |  |  | //å¤çåºåæ°æ®åä¸ä¼ ERP | 
|---|
|  |  |  | if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.åºåºå®æ.ObjToInt()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //æååºåè®°å½åå¨å¾
å å
¥ | 
|---|
|  |  |  | ERPProOutOrderModel proOutOrderModel = new ERPProOutOrderModel() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Way = 1, | 
|---|
|  |  |  | StockOutCode = _outboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.ProOutCOdeRule)), | 
|---|
|  |  |  | ConfirmedUserNo = "admin", | 
|---|
|  |  |  | AssignUserNo = "admin", | 
|---|
|  |  |  | WarehouseCode = warehouse.WarehouseCode, | 
|---|
|  |  |  | ShipDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), | 
|---|
|  |  |  | DeliverplanCode = proOutOrder.ProOutOrderNo, | 
|---|
|  |  |  | Remark = proOutOrder.Remark, | 
|---|
|  |  |  | StockOutItems = stockOutItems | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | _stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(proStockInfos, OperateTypeEnum.èªå¨å®æ); | 
|---|
|  |  |  | _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(proStockInfoDetails, OperateTypeEnum.èªå¨å®æ); | 
|---|
|  |  |  | string response = _invokeERPService.InvokeProOutApi(proOutOrderModel); | 
|---|
|  |  |  | ErpRequestContent erpRequestContent = response.DeserializeObject<ErpRequestContent>(); | 
|---|
|  |  |  | if (erpRequestContent.res != 1) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("忥ERP失败,é误信æ¯:" + erpRequestContent.Data); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | _stockRepository.ProStockInfoRepository.UpdateData(proStockInfos); | 
|---|
|  |  |  | _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfoDetails); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | _outboundRepository.ProOutOrderDetailRepository.UpdateData(proOutOrderDetails); | 
|---|
|  |  |  | BaseDal.UpdateData(proOutOrder); | 
|---|
|  |  |  | _unitOfWorkManage.CommitTran(); | 
|---|
|  |  |  | Db.InsertNav(outProPKStockInfos).Include(x=>x).ExecuteCommand(); | 
|---|
|  |  |  | content.OK(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return content; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //æ ¹æ®å
å
åºåº | 
|---|
|  |  |  | public WebResponseContent BagProductPK(SaveModel saveModel) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | WebResponseContent content = new WebResponseContent(); | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var outOrder = saveModel.MainData["proOutNo"].ToString(); | 
|---|
|  |  |  | var outBags = saveModel.DelKeys.Select(x => x.ToString()).ToList(); | 
|---|
|  |  |  | if (outBags.Count<=0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error("å
å
ä¿¡æ¯è·å失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | content.Error(ex.Message); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return content; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// æååºå¾
åè´§åº(å¹³åº)+忥ERPåºåº(æªç»å®åºåºååºå) | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | //public WebResponseContent OutProductNoPK(string[] OutPKCodes, string ProOutNo) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    WebResponseContent content = new WebResponseContent(); | 
|---|
|  |  |  | //    try | 
|---|
|  |  |  | //    { | 
|---|
|  |  |  | //        if (OutPKCodes.IsNullOrEmpty()) | 
|---|
|  |  |  | //        { | 
|---|
|  |  |  | //            return content.Error("ä¸è½ä¸ºç©º"); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | //        Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOutOrderNo == ProOutNo).Includes(x => x.Details).First(); | 
|---|
|  |  |  | //        if (proOutOrder == null) | 
|---|
|  |  |  | //        { | 
|---|
|  |  |  | //            return content.Error($"åºåºå{ProOutNo}ä¸åå¨"); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | //        if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.åºåºå®æ.ObjToInt()) | 
|---|
|  |  |  | //        { | 
|---|
|  |  |  | //            return content.Error($"åºåºå{ProOutNo}已宿"); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | //        string? userName = App.User.UserName;//GSWMS | 
|---|
|  |  |  | //        //è·åææå¤ç®±çæ°æ® | 
|---|
|  |  |  | //        List<Dt_ProStockInfo> AllproStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>() | 
|---|
|  |  |  | //            .Where(x => OutPKCodes.Contains(x.PalletCode) && x.StockStatus == StockStatusEmun.å¹³åºå
¥åºå®æ.ObjToInt()) | 
|---|
|  |  |  | //            .Includes(x => x.proStockInfoDetails).ToList(); | 
|---|
|  |  |  | //        List<Dt_ProStockInfo> proStockInfos = new List<Dt_ProStockInfo>(); | 
|---|
|  |  |  | //        List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>(); | 
|---|
|  |  |  | //        List<Dt_Warehouse> warehouses = _basicRepository.WarehouseRepository.QueryData(x => x.WarehouseType == WarehouseTypEnum.æå.ToString()); | 
|---|
|  |  |  | //        foreach (var item in OutPKCodes) | 
|---|
|  |  |  | //        { | 
|---|
|  |  |  | //            //è·ååºå | 
|---|
|  |  |  | //            Dt_ProStockInfo? proStockInfo = AllproStockInfos.Where(x => x.PalletCode == item).FirstOrDefault(); | 
|---|
|  |  |  | //            if (proStockInfo == null) | 
|---|
|  |  |  | //            { | 
|---|
|  |  |  | //                return content.Error($"æªæ¾å°{item}åºå"); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //            if (proStockInfo.ShipmentOrder!=null) | 
|---|
|  |  |  | //            { | 
|---|
|  |  |  | //                return content.Error($"å¤ç®±å·{item}为åºåºå{proStockInfo.ShipmentOrder}æå®åºå!"); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //            Dt_Warehouse? dt_Warehouse = warehouses.Where(x => x.WarehouseId == proStockInfo.WarehouseId).FirstOrDefault(); | 
|---|
|  |  |  | //            if (dt_Warehouse == null) | 
|---|
|  |  |  | //            { | 
|---|
|  |  |  | //                return content.Error($"å¤ç®±å·{item},ä¸å±äºæåä»"); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //            proStockInfos.Add(proStockInfo); | 
|---|
|  |  |  | //            proStockInfoDetails.AddRange(proStockInfo.proStockInfoDetails); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //        if (proOutOrder.Details.Sum(x => x.QtyPcs - x.OverQtyPcs) < proStockInfoDetails.Sum(x => x.StockPcsQty)) | 
|---|
|  |  |  | //        { | 
|---|
|  |  |  | //            return content.Error($"åºåºæ°é{proStockInfoDetails.Sum(x => x.StockPcsQty)}>æå©è®¢åæ°é{proOutOrder.Details.Sum(x => x.QtyPcs - x.OverQtyPcs)}"); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | //        List<StockOutItemsItem> stockOutItems = new List<StockOutItemsItem>(); | 
|---|
|  |  |  | //        List<Dt_ProOutOrderDetail> proOutOrderDetails = proOutOrder.Details.Where(x => proStockInfoDetails.Select(x => x.SaleOrder).Contains(x.SaleOrder) && proStockInfoDetails.Select(x => x.ProductCode).Contains(x.PCode) && proStockInfoDetails.Select(x => x.ProductVersion).Contains(x.PVer)).ToList(); | 
|---|
|  |  |  | //        if (proOutOrderDetails == null || proOutOrderDetails.Count <= 0) | 
|---|
|  |  |  | //        { | 
|---|
|  |  |  | //            return content.Error("对åºåºåºè®¢åæç»ä¸ºç©º"); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | //        int OldOverCount = proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count(); | 
|---|
|  |  |  | //        foreach (var item in proStockInfoDetails) | 
|---|
|  |  |  | //        { | 
|---|
|  |  |  | //            //è·åå¯¹åºæç»å¤çåºåºæ°æ® | 
|---|
|  |  |  | //            Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrderDetails.Where(x => x.SaleOrder == item.SaleOrder && x.PVer == item.ProductVersion && x.PCode == item.ProductCode).FirstOrDefault(); | 
|---|
|  |  |  | //            if (proOutOrderDetail == null) | 
|---|
|  |  |  | //            { | 
|---|
|  |  |  | //                return content.Error("æªæ¾å°å¯¹åºåºåºè®¢åæç»"); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //            proOutOrderDetail.OverQtyPcs += item.StockPcsQty; | 
|---|
|  |  |  | //            item.OutboundQuantity = item.StockPcsQty; | 
|---|
|  |  |  | //            item.OutSETQty = item.SETQty; | 
|---|
|  |  |  | //            if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs) | 
|---|
|  |  |  | //            { | 
|---|
|  |  |  | //                return content.Error($"åºåºè®¢åæç»è¡{proOutOrderDetail.RowId},溢åº{proOutOrderDetail.QtyPcs - proOutOrderDetail.OverQtyPcs}"); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //            if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs) | 
|---|
|  |  |  | //            { | 
|---|
|  |  |  | //                proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | //        proStockInfos.ForEach(x => | 
|---|
|  |  |  | //        { | 
|---|
|  |  |  | //            x.StockStatus = StockStatusEmun.å¹³åºå¾
åè´§.ObjToInt(); | 
|---|
|  |  |  | //        }); | 
|---|
|  |  |  | //        proStockInfoDetails.ForEach(x => | 
|---|
|  |  |  | //        { | 
|---|
|  |  |  | //            x.ProOutDetailStatus = StockStatusEmun.å¹³åºå¾
åè´§.ObjToInt(); | 
|---|
|  |  |  | //        }); | 
|---|
|  |  |  | //        int AddOverCount = proOutOrderDetails.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count(); | 
|---|
|  |  |  | //        if (proOutOrder.Details.Count == (AddOverCount + OldOverCount)) | 
|---|
|  |  |  | //        { | 
|---|
|  |  |  | //            proOutOrder.ProOrderStatus = OutOrderStatusEnum.åºåºå®æ.ObjToInt(); | 
|---|
|  |  |  | //            //è·åææå·²æ«ç å¾
åè´§çåºå | 
|---|
|  |  |  | //            List<Dt_ProStockInfo> AllOutStocks = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>() | 
|---|
|  |  |  | //            .Where(x => x.ShipmentOrder == ProOutNo && x.StockStatus == StockStatusEmun.å¹³åºå¾
åè´§.ObjToInt()) | 
|---|
|  |  |  | //            .Includes(x => x.proStockInfoDetails).ToList(); | 
|---|
|  |  |  | //            AllOutStocks.ForEach(x => | 
|---|
|  |  |  | //            { | 
|---|
|  |  |  | //                proStockInfoDetails.AddRange(x.proStockInfoDetails); | 
|---|
|  |  |  | //            }); | 
|---|
|  |  |  | //            proStockInfos.AddRange(AllOutStocks); | 
|---|
|  |  |  | //            foreach (var item in proStockInfoDetails) | 
|---|
|  |  |  | //            { | 
|---|
|  |  |  | //                StockOutItemsItem outItemsItem = new StockOutItemsItem() | 
|---|
|  |  |  | //                { | 
|---|
|  |  |  | //                    PartNum = item.ProductCode, | 
|---|
|  |  |  | //                    Rev = item.ProductVersion, | 
|---|
|  |  |  | //                    SoNumber = item.SaleOrder, | 
|---|
|  |  |  | //                    BatchNumber = item.BagNo, | 
|---|
|  |  |  | //                    QtyPcs = item.OutboundQuantity, | 
|---|
|  |  |  | //                    QtySet = item.OutSETQty | 
|---|
|  |  |  | //                }; | 
|---|
|  |  |  | //                stockOutItems.Add(outItemsItem); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | //        Dt_Warehouse warehouse = warehouses.Where(x => x.WarehouseId == proOutOrder.WarehouseId).FirstOrDefault(); | 
|---|
|  |  |  | //        _unitOfWorkManage.BeginTran(); | 
|---|
|  |  |  | //        //å¤çåºåæ°æ®åä¸ä¼ ERP | 
|---|
|  |  |  | //        if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.åºåºå®æ.ObjToInt()) | 
|---|
|  |  |  | //        { | 
|---|
|  |  |  | //            //æååºåè®°å½åå¨å¾
å å
¥ | 
|---|
|  |  |  | //            ERPProOutOrderModel proOutOrderModel = new ERPProOutOrderModel() | 
|---|
|  |  |  | //            { | 
|---|
|  |  |  | //                Way = 1, | 
|---|
|  |  |  | //                StockOutCode = _outboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.ProOutCOdeRule)), | 
|---|
|  |  |  | //                ConfirmedUserNo = App.User.UserName, | 
|---|
|  |  |  | //                AssignUserNo = App.User.UserName, | 
|---|
|  |  |  | //                WarehouseCode = warehouse.WarehouseCode, | 
|---|
|  |  |  | //                ShipDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), | 
|---|
|  |  |  | //                DeliverplanCode = proOutOrder.ProOutOrderNo, | 
|---|
|  |  |  | //                Remark = proOutOrder.Remark, | 
|---|
|  |  |  | //                StockOutItems = stockOutItems | 
|---|
|  |  |  | //            }; | 
|---|
|  |  |  | //            _stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(proStockInfos, OperateTypeEnum.èªå¨å®æ); | 
|---|
|  |  |  | //            _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(proStockInfoDetails, OperateTypeEnum.èªå¨å®æ); | 
|---|
|  |  |  | //            string response = _invokeERPService.InvokeProOutApi(proOutOrderModel); | 
|---|
|  |  |  | //            ErpRequestContent erpRequestContent = response.DeserializeObject<ErpRequestContent>(); | 
|---|
|  |  |  | //            if (erpRequestContent.res != 1) | 
|---|
|  |  |  | //            { | 
|---|
|  |  |  | //                throw new Exception("忥ERP失败,é误信æ¯:" + erpRequestContent.Data); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | //        else | 
|---|
|  |  |  | //        { | 
|---|
|  |  |  | //            _stockRepository.ProStockInfoRepository.UpdateData(proStockInfos); | 
|---|
|  |  |  | //            _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfoDetails); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | //        _outboundRepository.ProOutOrderDetailRepository.UpdateData(proOutOrderDetails); | 
|---|
|  |  |  | //        BaseDal.UpdateData(proOutOrder); | 
|---|
|  |  |  | //        _unitOfWorkManage.CommitTran(); | 
|---|
|  |  |  | //        content.OK(); | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  | //    catch (Exception ex) | 
|---|
|  |  |  | //    { | 
|---|
|  |  |  | //        content.Error(ex.Message); | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  | //    return content; | 
|---|
|  |  |  | //} | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// PDAè·ååºåºåæ® | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | /// <param name="saveModel"></param> | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | public WebResponseContent GetProOutOrders(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_ProOutOrder> proOutOrders = new List<Dt_ProOutOrder>(); | 
|---|
|  |  |  | if (string.IsNullOrEmpty(orderNo)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | proOutOrders = Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOrderStatus <= OutOrderStatusEnum.åºåºä¸.ObjToInt() && x.WarehouseId == warehouseId).Includes(x=>x.Details).OrderByDescending(x => x.Id).ToPageList(pageNo, 5); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | proOutOrders = Db.Queryable<Dt_ProOutOrder>().Where(x => (x.ProOutOrderNo.Contains(orderNo) || x.ProOutOrderNo.Contains(orderNo)) && x.ProOrderStatus <= OutOrderStatusEnum.åºåºä¸.ObjToInt() && x.WarehouseId == warehouseId).OrderByDescending(x => x.Id).Includes(x => x.Details).ToPageList(pageNo, 5); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | content.OK(data: proOutOrders); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception) | 
|---|
|  |  |  | { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | throw; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return content; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// è·åæ«ç è·å订åæç»ä¿¡æ¯ | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | public WebResponseContent GetOrderDetails(int keyId) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | WebResponseContent content=new WebResponseContent(); | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //è·ååºåºåå· | 
|---|
|  |  |  | Dt_ProOutOrder proOutOrder = BaseDal.QueryFirst(x => x.Id == keyId); | 
|---|
|  |  |  | if (proOutOrder == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error($"æªæ¾å°åºåºå{proOutOrder.ProOutOrderNo}"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //è·åæç» | 
|---|
|  |  |  | List<Dt_ProOutOrderDetail> proOutOrderDetails = _outboundRepository.ProOutOrderDetailRepository.QueryData(x => x.ProOrderId == keyId).OrderBy(x => x.ProOrderDetailStatus).ThenBy(x => x.Id).ToList(); | 
|---|
|  |  |  | content.OK("æå", new { proOutOrderDetails }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | content.Error(ex.Message); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return content; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// æ¥è¯¢ERPè®¢åæ£é¤åºåæ°é | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | public WebResponseContent OutProErpSync(string outProOrderNo) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | WebResponseContent content = new WebResponseContent(); | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //æ ¹æ®åºåºåå·è·å该åºåºè®¢åçERPåºåºåºåä¿¡æ¯ | 
|---|
|  |  |  | Dt_ProOutOrder proOutOrder = BaseDal.Db.Queryable<Dt_ProOutOrder>().Where(x=>x.ProOutOrderNo== outProOrderNo).Includes(x => x.Details).First(); | 
|---|
|  |  |  | if (proOutOrder==null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error($"æªæ¾å°æååºåºè®¢å{outProOrderNo}"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (proOutOrder.ProOrderStatus>=OutOrderStatusEnum.åºåºå®æ.ObjToInt()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error($"åºåºè®¢å已宿æå
³é"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //è°ç¨erpåºåºè®¢ååºåæ¥è¯¢æ¥å£ | 
|---|
|  |  |  | string response = _invokeERPService.InvokeOutProErpSync(outProOrderNo); | 
|---|
|  |  |  | ErpOutProSyncResponseContent erpOutProSyncResponse= response.DeserializeObject<ErpOutProSyncResponseContent>(); | 
|---|
|  |  |  | if (erpOutProSyncResponse.Code!=200) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error($"ERPåºåºè®¢åæ¥è¯¢æ¥å£è°ç¨å¤±è´¥,é误信æ¯:{erpOutProSyncResponse.Msg}"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<OutProStock> outProStocks = erpOutProSyncResponse.Data; | 
|---|
|  |  |  | if (outProStocks.Count<=0 || outProStocks==null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error($"æååºåºè®¢å{outProOrderNo}ERPå½åæªæåºåºåºåä¿¡æ¯"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // éªè¯ææåºåºåå·æ¯å¦ä¸è´ | 
|---|
|  |  |  | OutProStock? outExist = outProStocks.FirstOrDefault(x => x.ShippingNumber != outProOrderNo); | 
|---|
|  |  |  | if (outExist != null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error($"ERPè¿åäºåºåºè®¢å{outExist.ShippingNumber}åºåä¿¡æ¯"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //è·åå¹³åºåºåº | 
|---|
|  |  |  | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA101.ToString()); | 
|---|
|  |  |  | if (warehouse==null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error("æªæ¾å°åºåºä¿¡æ¯"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | var productCodes = outProStocks.Select(x => x.Partnum).Distinct().ToList(); | 
|---|
|  |  |  | //è·åææå¹³åºåºå | 
|---|
|  |  |  | List<Dt_ProStockInfoDetail> proStockInfoDetails = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo, Dt_ProStockInfoDetail>((master, detail) => master.Id == detail.ProStockId) | 
|---|
|  |  |  | .Where((master, detail) => master.WarehouseId == warehouse.WarehouseId && productCodes.Contains(detail.ProductCode)) | 
|---|
|  |  |  | .Select((master, detail) => detail) | 
|---|
|  |  |  | .ToList(); | 
|---|
|  |  |  | proStockInfoDetails = proStockInfoDetails.OrderBy(x => x.DateCode).ThenBy(x => x.CreateDate).ToList(); | 
|---|
|  |  |  | List<int> stockIds = proStockInfoDetails.Select(x => x.ProStockId).Distinct().ToList(); | 
|---|
|  |  |  | //è·åææå¹³åºä¸»è¡¨ | 
|---|
|  |  |  | List<Dt_ProStockInfo> proStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x => stockIds.Contains(x.Id)).Includes(x => x.proStockInfoDetails).ToList(); | 
|---|
|  |  |  | List<Dt_ProStockInfo> delProStockInfos = new List<Dt_ProStockInfo>(); | 
|---|
|  |  |  | List<Dt_ProStockInfoDetail> delStockInfoDetails = new List<Dt_ProStockInfoDetail>(); | 
|---|
|  |  |  | foreach (var item in outProStocks) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | foreach (var itemOut in proStockInfoDetails.Where(x => x.ProductCode == item.Partnum).ToList()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (item.Quantity==0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.SaleOrder == item.SoNumber && x.PCode == item.Partnum) ?? throw new Exception($"åºåºå{proOutOrder.ProOutOrderNo}æªæ¾å°éå®è®¢å{item.SoNumber}æç»,è¯·æ£æ¥"); | 
|---|
|  |  |  | if (item.Quantity >= itemOut.StockPcsQty) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //æ´æ°åºåºæç»åæ°é | 
|---|
|  |  |  | proOutOrderDetail.OverQtyPcs += itemOut.StockPcsQty; | 
|---|
|  |  |  | item.Quantity -= (int)itemOut.StockPcsQty; | 
|---|
|  |  |  | delStockInfoDetails.Add(itemOut); | 
|---|
|  |  |  | proStockInfoDetails.Remove(itemOut); | 
|---|
|  |  |  | if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error($"åºåºå{proOutOrder.ProOutOrderNo}éå®è®¢å{item.SoNumber}æ°é溢åº{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (proOutOrderDetail.ProOrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else if (item.Quantity < itemOut.StockPcsQty) | 
|---|
|  |  |  | { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //æ´æ°åºåºæç»åæ°é | 
|---|
|  |  |  | proOutOrderDetail.OverQtyPcs += item.Quantity; | 
|---|
|  |  |  | item.Quantity -= item.Quantity; | 
|---|
|  |  |  | float Range = itemOut.StockPcsQty / itemOut.SETQty; | 
|---|
|  |  |  | if (Range == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error($"{itemOut.BagNo}åå
æ°é转æ¢å¤±è´¥,è¯·æ£æ¥"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | int outSet = (int)(item.Quantity / Range); | 
|---|
|  |  |  | if (outSet == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error($"{itemOut.BagNo}åå
æ°é转æ¢å¤±è´¥,è¯·æ£æ¥"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | itemOut.SETQty -= outSet; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | itemOut.StockPcsQty -= item.Quantity; | 
|---|
|  |  |  | if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error($"åºåºå{proOutOrder.ProOutOrderNo}éå®è®¢å{item.SoNumber}æ°é溢åº{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (proOutOrderDetail.ProOrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (item.Quantity>0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return content.Error($"æªæ¾å°{item.SoNumber}坿£ååºå"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (proOutOrder.Details.Count == proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | proOutOrder.ProOrderStatus = OutOrderStatusEnum.åºåºå®æ.ObjToInt(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.ProOrderDetailStatus <= OrderDetailStatusEnum.Over.ObjToInt()); | 
|---|
|  |  |  | return content.Error($"{proOutOrderDetail?.SaleOrder}éå®è®¢åæ°ééåº{proOutOrderDetail?.QtyPcs},å¯åº{proOutOrderDetail?.OverQtyPcs}"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //è·åå é¤çåºå主表 | 
|---|
|  |  |  | List<int> delStockIds = delStockInfoDetails.Select(x => x.ProStockId).Distinct().ToList(); | 
|---|
|  |  |  | List<int> delStockDetailIds = delStockInfoDetails.Select(x => x.Id).ToList(); | 
|---|
|  |  |  | foreach (var item in delStockIds) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Dt_ProStockInfo proStockInfo = proStockInfos.FirstOrDefault(x => x.Id == item); | 
|---|
|  |  |  | Dt_ProStockInfoDetail? proStockInfoDetail = proStockInfo.proStockInfoDetails.FirstOrDefault(x => !delStockDetailIds.Contains(x.Id)); | 
|---|
|  |  |  | if (proStockInfoDetail == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | delProStockInfos.Add(proStockInfo); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //æ´æ°æ°æ® | 
|---|
|  |  |  | _unitOfWorkManage.BeginTran(); | 
|---|
|  |  |  | _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(delStockInfoDetails, OperateTypeEnum.èªå¨å é¤); | 
|---|
|  |  |  | _stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(delProStockInfos, OperateTypeEnum.èªå¨å®æ); | 
|---|
|  |  |  | _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfoDetails); | 
|---|
|  |  |  | BaseDal.UpdateData(proOutOrder); | 
|---|
|  |  |  | _outboundRepository.ProOutOrderDetailRepository.UpdateData(proOutOrder.Details); | 
|---|
|  |  |  | _unitOfWorkManage.CommitTran(); | 
|---|
|  |  |  | return content.OK(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | _unitOfWorkManage.RollbackTran(); | 
|---|
|  |  |  | return content.Error(ex.Message); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// åºåºåæ«ç åæ¥ERP | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | public async Task<WebResponseContent> OutProScanCodeSync(SaveModel saveModel) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | WebResponseContent content = new WebResponseContent(); | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | string? ProOutNo = saveModel.MainData["outProOrderNo"].ToString(); | 
|---|
|  |  |  | var Codes = saveModel.DelKeys.Select(x=>x.ToString().Trim()).ToList(); | 
|---|
|  |  |  | if (Codes.Count<=0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return await Task.FromResult(content.Error("æ«æå
容ä¸è½ä¸ºç©º")); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOutOrderNo == ProOutNo).Includes(x => x.Details).First(); | 
|---|
|  |  |  | if (proOutOrder == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return await Task.FromResult(content.Error($"åºåºå{ProOutNo}ä¸åå¨")); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (proOutOrder.ProOrderStatus >= OutOrderStatusEnum.åºåºå®æ.ObjToInt()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return await Task.FromResult(content.Error($"åºåºå{ProOutNo}已宿æå
³é")); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | string? userName = App.User.UserName;//GSWMS | 
|---|
|  |  |  | List<OutProInfoDTO> outProInfos= new List<OutProInfoDTO>(); | 
|---|
|  |  |  | foreach (var item in Codes) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | string[] proInfoInputs = item.Split(','); | 
|---|
|  |  |  | if (proInfoInputs.Length!=5) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return await Task.FromResult(content.Error($"å¤å
{item}æ«æä¸å
¨")); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | OutProInfoDTO outProInfo=new OutProInfoDTO() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | ProductCode= proInfoInputs[1], | 
|---|
|  |  |  | OutQtys = proInfoInputs[4].ObjToInt() | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | outProInfos.Add(outProInfo); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //è·åå¹³åºåºåº | 
|---|
|  |  |  | Dt_Warehouse warehouse = await _basicRepository.WarehouseRepository.QueryFirstAsync(x => x.WarehouseCode == WarehouseEnum.HA101.ToString()); | 
|---|
|  |  |  | if (warehouse == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return await Task.FromResult(content.Error("æªæ¾å°åºåºä¿¡æ¯")); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //è·åææå¹³åºåºå | 
|---|
|  |  |  | List<Dt_ProStockInfoDetail> proStockInfoDetails = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo, Dt_ProStockInfoDetail>((master, detail) => master.Id == detail.ProStockId) | 
|---|
|  |  |  | .Where((master, detail) => master.WarehouseId == warehouse.WarehouseId && outProInfos.Select(x=>x.ProductCode).Contains(detail.ProductCode)) | 
|---|
|  |  |  | .Select((master, detail) => detail) | 
|---|
|  |  |  | .ToList(); | 
|---|
|  |  |  | List<int> stockIds = proStockInfoDetails.Select(x => x.ProStockId).Distinct().ToList(); | 
|---|
|  |  |  | //è·åææå¹³åºä¸»è¡¨ | 
|---|
|  |  |  | List<Dt_ProStockInfo> proStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x => stockIds.Contains(x.Id)).Includes(x=>x.proStockInfoDetails).ToList(); | 
|---|
|  |  |  | proStockInfoDetails = proStockInfoDetails.OrderBy(x => x.DateCode).ThenBy(x => x.CreateDate).ThenBy(x=>x.StockPcsQty).ToList(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | List<Dt_Warehouse> warehouses = await _basicRepository.WarehouseRepository.QueryDataAsync(x => x.WarehouseType == WarehouseTypEnum.æå.ToString()); | 
|---|
|  |  |  | //å°å
¶åç» | 
|---|
|  |  |  | outProInfos = outProInfos.GroupBy(x => x.ProductCode).Select(x=>new OutProInfoDTO() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | ProductCode=x.Key, | 
|---|
|  |  |  | OutQtys=x.Sum(x=>x.OutQtys) | 
|---|
|  |  |  | }).ToList(); | 
|---|
|  |  |  | List<Dt_ProStockInfoDetail> UpStockInfoDetails = new List<Dt_ProStockInfoDetail>(); | 
|---|
|  |  |  | List<Dt_ProStockInfo> DelStocks = new List<Dt_ProStockInfo>(); | 
|---|
|  |  |  | foreach (var item in outProInfos) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //è·ååºå | 
|---|
|  |  |  | List<Dt_ProStockInfoDetail> outStocks = proStockInfoDetails.Where(x => x.ProductCode == item.ProductCode && x.OutProNo == null).ToList(); | 
|---|
|  |  |  | if (outStocks.Count <= 0 || outProInfos==null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return await Task.FromResult(content.Error($"æªæ¾å°äº§å{item.ProductCode}åºå")); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (outStocks.Sum(x=>x.StockPcsQty)< item.OutQtys) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return await Task.FromResult(content.Error($"å¯ç¨å¹³åºæ°é{outStocks.Sum(x => x.StockPcsQty)}䏿»¡è¶³åºåºæ°é{item.OutQtys}")); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | foreach (var outStock in outStocks) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //妿æ£å为0è·³åºé»è¾ | 
|---|
|  |  |  | if (item.OutQtys == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //夿åºåºæ°éæ¯å¦å¤§äºæçäºåºåæ°é | 
|---|
|  |  |  | if (item.OutQtys >= outStock.StockPcsQty) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.PCode == item.ProductCode && x.ProOrderDetailStatus < OrderDetailStatusEnum.Over.ObjToInt()); | 
|---|
|  |  |  | //夿æ¯å¦åå¨åä¸åå·ä¸¤æ¡æç» | 
|---|
|  |  |  | if (proOutOrderDetail == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return await Task.FromResult(content.Error($"åºåºå{proOutOrder.ProOutOrderNo}æªæ¾å°äº§å{item.ProductCode}æç»,è¯·æ£æ¥")); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<Dt_ProOutOrderDetail>? outOrderDetails = proOutOrder.Details.Where(x => x.PCode == item.ProductCode && x.ProOrderDetailStatus < OrderDetailStatusEnum.Over.ObjToInt() && x.Id != proOutOrderDetail.Id).ToList(); | 
|---|
|  |  |  | float BeyondQtys = proOutOrderDetail.QtyPcs - proOutOrderDetail.OverQtyPcs; | 
|---|
|  |  |  | //æ´æ°åºåºæç»åæ°é | 
|---|
|  |  |  | proOutOrderDetail.OverQtyPcs += outStock.StockPcsQty; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //æ¯å¦è¶
åº | 
|---|
|  |  |  | if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (outOrderDetails.Count>=1) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | proOutOrderDetail.OverQtyPcs -= outStock.StockPcsQty; | 
|---|
|  |  |  | proOutOrderDetail.OverQtyPcs += BeyondQtys; | 
|---|
|  |  |  | outStock.OutboundQuantity = BeyondQtys; | 
|---|
|  |  |  | outStock.OutDetailSaleNo = proOutOrderDetail.SaleOrder; | 
|---|
|  |  |  | outStock.OutProNo = proOutOrder.ProOutOrderNo; | 
|---|
|  |  |  | float Range = outStock.StockPcsQty / outStock.SETQty; | 
|---|
|  |  |  | if (outStock.OutboundQuantity== outStock.StockPcsQty) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | outStock.OutSETQty = outStock.SETQty; | 
|---|
|  |  |  | outStock.AssignDel = 1; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | outStock.OutSETQty = outStock.OutboundQuantity / Range; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (outStock.OutSETQty==0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return await Task.FromResult(content.Error($"{outStock.BagNo}åå
æ°é转æ¢å¤±è´¥,è¯·æ£æ¥")); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | item.OutQtys -= (int)BeyondQtys; | 
|---|
|  |  |  | UpStockInfoDetails.Add(outStock); | 
|---|
|  |  |  | proStockInfoDetails.Remove(outStock); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return await Task.FromResult(content.Error($"åºåºå{proOutOrder.ProOutOrderNo}è¡å·{proOutOrderDetail.RowId}产ååå·{item.ProductCode}æ°é溢åº{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}")); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | outStock.OutboundQuantity = outStock.StockPcsQty; | 
|---|
|  |  |  | outStock.OutDetailSaleNo = proOutOrderDetail.SaleOrder; | 
|---|
|  |  |  | outStock.OutProNo = proOutOrder.ProOutOrderNo; | 
|---|
|  |  |  | outStock.OutSETQty = outStock.SETQty; | 
|---|
|  |  |  | outStock.AssignDel = 1; | 
|---|
|  |  |  | item.OutQtys -= (int)outStock.StockPcsQty; | 
|---|
|  |  |  | UpStockInfoDetails.Add(outStock); | 
|---|
|  |  |  | proStockInfoDetails.Remove(outStock); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (proOutOrderDetail.ProOrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else if (item.OutQtys < outStock.StockPcsQty) //å©ä½æ°éå°äº | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.PCode == item.ProductCode && x.ProOrderDetailStatus < OrderDetailStatusEnum.Over.ObjToInt()); | 
|---|
|  |  |  | if (proOutOrderDetail == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return await Task.FromResult(content.Error($"åºåºå{proOutOrder.ProOutOrderNo}æªæ¾å°äº§å{item.ProductCode}æç»,è¯·æ£æ¥")); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<Dt_ProOutOrderDetail>? outOrderDetails = proOutOrder.Details.Where(x => x.PCode == item.ProductCode && x.ProOrderDetailStatus < OrderDetailStatusEnum.Over.ObjToInt() && x.Id != proOutOrderDetail.Id).ToList(); | 
|---|
|  |  |  | //æ´æ°åºåºæç»åæ°é | 
|---|
|  |  |  | float BeyondQtys = proOutOrderDetail.QtyPcs - proOutOrderDetail.OverQtyPcs; | 
|---|
|  |  |  | proOutOrderDetail.OverQtyPcs += item.OutQtys; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //æ¯å¦è¶
åº | 
|---|
|  |  |  | if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (outOrderDetails.Count >= 1) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | proOutOrderDetail.OverQtyPcs -= outStock.StockPcsQty; | 
|---|
|  |  |  | proOutOrderDetail.OverQtyPcs += BeyondQtys; | 
|---|
|  |  |  | outStock.OutDetailSaleNo = proOutOrderDetail.SaleOrder; | 
|---|
|  |  |  | outStock.OutProNo = proOutOrder.ProOutOrderNo; | 
|---|
|  |  |  | outStock.OutboundQuantity = BeyondQtys; | 
|---|
|  |  |  | float Range = outStock.StockPcsQty / outStock.SETQty; | 
|---|
|  |  |  | outStock.OutSETQty = outStock.OutboundQuantity / Range; | 
|---|
|  |  |  | if (outStock.OutSETQty == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return await Task.FromResult(content.Error($"{outStock.BagNo}åå
æ°é转æ¢å¤±è´¥,è¯·æ£æ¥")); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | item.OutQtys = 0; | 
|---|
|  |  |  | UpStockInfoDetails.Add(outStock); | 
|---|
|  |  |  | proStockInfoDetails.Remove(outStock); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return await Task.FromResult(content.Error($"åºåºå{proOutOrder.ProOutOrderNo}è¡å·{proOutOrderDetail.RowId}产ååå·{item.ProductCode}æ°é溢åº{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}")); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | outStock.OutDetailSaleNo = proOutOrderDetail.SaleOrder; | 
|---|
|  |  |  | outStock.OutProNo = proOutOrder.ProOutOrderNo; | 
|---|
|  |  |  | outStock.OutboundQuantity = item.OutQtys; | 
|---|
|  |  |  | float Range = outStock.StockPcsQty / outStock.SETQty; | 
|---|
|  |  |  | outStock.OutSETQty = outStock.OutboundQuantity / Range; | 
|---|
|  |  |  | if (outStock.OutSETQty == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return await Task.FromResult(content.Error($"{outStock.BagNo}åå
æ°é转æ¢å¤±è´¥,è¯·æ£æ¥")); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | item.OutQtys = 0; | 
|---|
|  |  |  | UpStockInfoDetails.Add(outStock); | 
|---|
|  |  |  | proStockInfoDetails.Remove(outStock); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (proOutOrderDetail.ProOrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (proOutOrder.Details.Count == proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | proOutOrder.ProOrderStatus = OutOrderStatusEnum.åºåºå®æ.ObjToInt(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.ProOrderDetailStatus < OrderDetailStatusEnum.Over.ObjToInt()); | 
|---|
|  |  |  | return await Task.FromResult(content.Error($"{proOutOrderDetail?.SaleOrder}éå®è®¢åæ°ééåº{proOutOrderDetail?.QtyPcs},å¯åº{proOutOrderDetail?.OverQtyPcs}")); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<StockOutItemsItem> stockOutItems = new List<StockOutItemsItem>(); | 
|---|
|  |  |  | //è·åææå·²æ«ç å¾
åè´§çåºå | 
|---|
|  |  |  | List<Dt_ProStockInfoDetail> assOutStocks = _stockRepository.ProStockInfoDetailRepository.Db.Queryable<Dt_ProStockInfoDetail>() | 
|---|
|  |  |  | .Where(x => x.OutProNo == ProOutNo).ToList(); | 
|---|
|  |  |  | UpStockInfoDetails.AddRange(assOutStocks); | 
|---|
|  |  |  | foreach (var item in UpStockInfoDetails) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | StockOutItemsItem outItemsItem = new StockOutItemsItem() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | PartNum = item.ProductCode, | 
|---|
|  |  |  | Rev = item.ProductVersion, | 
|---|
|  |  |  | SoNumber = item.OutDetailSaleNo, | 
|---|
|  |  |  | BatchNumber = item.ProductCode, | 
|---|
|  |  |  | QtyPcs = item.OutboundQuantity, | 
|---|
|  |  |  | QtySet = item.OutSETQty | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | stockOutItems.Add(outItemsItem); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Dt_Warehouse warehouseOut = warehouses.Where(x => x.WarehouseId == proOutOrder.WarehouseId).FirstOrDefault(); | 
|---|
|  |  |  | //è·åå é¤åºå | 
|---|
|  |  |  | List<Dt_ProStockInfoDetail> delDetails = UpStockInfoDetails.Where(x => x.AssignDel == 1).ToList(); | 
|---|
|  |  |  | List<Dt_ProStockInfoDetail> UpDetails = UpStockInfoDetails.Where(x => x.AssignDel != 1).ToList(); | 
|---|
|  |  |  | //è·åå é¤çåºå主表 | 
|---|
|  |  |  | List<int> delStockIds = delDetails.Select(x => x.ProStockId).Distinct().ToList(); | 
|---|
|  |  |  | List<int> delStockDetailIds = delDetails.Select(x => x.Id).ToList(); | 
|---|
|  |  |  | foreach (var item in delStockIds) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Dt_ProStockInfo proStockInfo = proStockInfos.FirstOrDefault(x=>x.Id==item); | 
|---|
|  |  |  | Dt_ProStockInfoDetail? proStockInfoDetail= proStockInfo.proStockInfoDetails.FirstOrDefault(x=> !delStockDetailIds.Contains(x.Id)); | 
|---|
|  |  |  | if (proStockInfoDetail==null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | DelStocks.Add(proStockInfo); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | _unitOfWorkManage.BeginTran(); | 
|---|
|  |  |  | //å¤çåºåæ°æ®åä¸ä¼ ERP | 
|---|
|  |  |  | //æååºåè®°å½åå¨å¾
å å
¥ | 
|---|
|  |  |  | ERPProOutOrderModel proOutOrderModel = new ERPProOutOrderModel() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Way = 1, | 
|---|
|  |  |  | StockOutCode = _outboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.ProOutCOdeRule)), | 
|---|
|  |  |  | ConfirmedUserNo = App.User.UserName, | 
|---|
|  |  |  | AssignUserNo = App.User.UserName, | 
|---|
|  |  |  | WarehouseCode = warehouseOut.WarehouseCode, | 
|---|
|  |  |  | ShipDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), | 
|---|
|  |  |  | DeliverplanCode = proOutOrder.ProOutOrderNo, | 
|---|
|  |  |  | Remark = proOutOrder.Remark, | 
|---|
|  |  |  | StockOutItems = stockOutItems | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | //æ´æ°æ°æ® | 
|---|
|  |  |  | UpDetails.ForEach(x => | 
|---|
|  |  |  | { | 
|---|
|  |  |  | x.StockPcsQty -= x.OutboundQuantity; | 
|---|
|  |  |  | x.SETQty -= x.OutSETQty; | 
|---|
|  |  |  | x.OutDetailId = 0; | 
|---|
|  |  |  | x.OutDetailSaleNo = null; | 
|---|
|  |  |  | x.OutProNo = null; | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(delDetails, OperateTypeEnum.èªå¨å®æ); | 
|---|
|  |  |  | _stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(DelStocks, OperateTypeEnum.èªå¨å®æ); | 
|---|
|  |  |  | await _stockRepository.ProStockInfoDetailRepository.UpdateDataAsync(UpDetails); | 
|---|
|  |  |  | //忥ERP | 
|---|
|  |  |  | string response = _invokeERPService.InvokeProOutApi(proOutOrderModel); | 
|---|
|  |  |  | ErpRequestContent erpRequestContent = response.DeserializeObject<ErpRequestContent>(); | 
|---|
|  |  |  | if (erpRequestContent.res != 1) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("忥ERP失败,é误信æ¯:" + erpRequestContent.Data); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | await _outboundRepository.ProOutOrderDetailRepository.UpdateDataAsync(proOutOrder.Details); | 
|---|
|  |  |  | await BaseDal.UpdateDataAsync(proOutOrder); | 
|---|
|  |  |  | _unitOfWorkManage.CommitTran(); | 
|---|
|  |  |  | return await Task.FromResult(content.OK()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | _unitOfWorkManage.RollbackTran(); | 
|---|
|  |  |  | return await Task.FromResult(content.Error(ex.Message)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|