| | |
| | | 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; |
| | |
| | | /// æ¥æ¶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); |
| | | } |
| | | } |
| | | proOutOrderDetails.Add(proOutOrderDetail); |
| | | } |
| | | Dt_ProOutOrder proOutOrder= new Dt_ProOutOrder() |
| | | { |
| | |
| | | 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); |
| | | }; |
| | | //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) |
| | |
| | | /// æååºå¾
åè´§åº(å¹³åº)+忥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); |
| | | } |
| | | //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; |
| | | if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs) |
| | | { |
| | | return content.Error($"åºåºè®¢åæç»è¡{proOutOrderDetail.RowId},溢åº{proOutOrderDetail.QtyPcs - proOutOrderDetail.OverQtyPcs}"); |
| | | } |
| | | if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs) |
| | | { |
| | | proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); |
| | | } |
| | | // 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.StockPcsQty, |
| | | QtySet = item.SETQty |
| | | }; |
| | | stockOutItems.Add(outItemsItem); |
| | | } |
| | | } |
| | | _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 = 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; |
| | | } |
| | | // } |
| | | // 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> |
| | |
| | | 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); |
| | | 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); |
| | | 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); |
| | |
| | | { |
| | | return content.Error($"æªæ¾å°åºåºå{proOutOrder.ProOutOrderNo}"); |
| | | } |
| | | //è·åå½åå·²ç»å®çå¤å
ç (åºåºç¶æ) |
| | | List<string> outBags = _stockRepository.ProStockInfoRepository.QueryData(x => x.StockStatus == StockStatusEmun.å¹³åºå¾
åè´§.ObjToInt() && x.ShipmentOrder== proOutOrder.ProOutOrderNo).Select(x=>x.PalletCode).ToList(); |
| | | //è·åæç» |
| | | List<Dt_ProOutOrderDetail> proOutOrderDetails = _outboundRepository.ProOutOrderDetailRepository.QueryData(x=>x.ProOrderId==keyId).OrderBy(x=>x.ProOrderDetailStatus).ThenBy(x=>x.Id).ToList(); |
| | | content.OK("æå", new { outBags, proOutOrderDetails }); |
| | | 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) |
| | | { |
| | |
| | | } |
| | | return content; |
| | | } |
| | | /// <summary> |
| | | /// æ¥è¯¢ERPè®¢åæ£é¤åºåæ°é |
| | | /// </summary> |
| | | public async Task<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 await Task.FromResult(content.Error($"æªæ¾å°æååºåºè®¢å{outProOrderNo}")); |
| | | } |
| | | if (proOutOrder.ProOrderStatus>=OutOrderStatusEnum.åºåºå®æ.ObjToInt()) |
| | | { |
| | | return await Task.FromResult(content.Error($"åºåºè®¢å已宿æå
³é")); |
| | | } |
| | | //è°ç¨erpåºåºè®¢ååºåæ¥è¯¢æ¥å£ |
| | | string response = _invokeERPService.InvokeOutProErpSync(outProOrderNo); |
| | | ErpOutProSyncResponseContent erpOutProSyncResponse= response.DeserializeObject<ErpOutProSyncResponseContent>(); |
| | | if (erpOutProSyncResponse.Code!=200) |
| | | { |
| | | return await Task.FromResult(content.Error($"ERPåºåºè®¢åæ¥è¯¢æ¥å£è°ç¨å¤±è´¥,é误信æ¯:{erpOutProSyncResponse.Msg}")); |
| | | } |
| | | List<OutProStock> outProStocks = erpOutProSyncResponse.Data; |
| | | if (outProStocks.Count<=0 || outProStocks==null) |
| | | { |
| | | return await Task.FromResult(content.Error($"æååºåºè®¢å{outProOrderNo}ERPå½åæªæåºåºåºåä¿¡æ¯")); |
| | | } |
| | | //è·åå¹³åºåºåº |
| | | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA101.ToString()); |
| | | if (warehouse==null) |
| | | { |
| | | return await Task.FromResult(content.Error("æªæ¾å°åºåºä¿¡æ¯")); |
| | | } |
| | | //è·åææå¹³åºåºå |
| | | List<Dt_ProStockInfo> proStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId).Includes(x => x.proStockInfoDetails).ToList(); |
| | | List<Dt_ProStockInfoDetail> proStockInfoDetails= new List<Dt_ProStockInfoDetail>(); |
| | | foreach (var item in proStockInfos) |
| | | { |
| | | proStockInfoDetails.AddRange(item.proStockInfoDetails); |
| | | } |
| | | proStockInfoDetails = proStockInfoDetails.OrderBy(x => x.DateCode).ThenBy(x => x.CreateDate).ToList() ; |
| | | List<Dt_ProStockInfo> delProStockInfos = new List<Dt_ProStockInfo>(); |
| | | List<Dt_ProStockInfoDetail> delStockInfoDetails = new List<Dt_ProStockInfoDetail>(); |
| | | foreach (var item in outProStocks) |
| | | { |
| | | //æ¥è¯¢åºåè®°å½ |
| | | if (item.ShippingNumber != outProOrderNo) |
| | | { |
| | | return await Task.FromResult(content.Error($"ERPè¿åäºåºåºè®¢å{item.ShippingNumber}åºåä¿¡æ¯")); |
| | | } |
| | | //è·ååºå |
| | | List<Dt_ProStockInfoDetail> outStocks = proStockInfoDetails.Where(x=>x.ProductCode==item.Partnum).ToList(); |
| | | if (outStocks.Count==0 || outStocks==null) |
| | | { |
| | | return await Task.FromResult(content.Error($"{item.Partnum}产ååå·åºåä¸åå¨")); |
| | | } |
| | | foreach (var itemOut in outStocks) |
| | | { |
| | | if (item.Quantity==0) |
| | | { |
| | | break; |
| | | } |
| | | if (item.Quantity >= itemOut.StockPcsQty) |
| | | { |
| | | Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.SaleOrder == item.SoNumber && x.PCode == item.Partnum); |
| | | if (proOutOrderDetail == null) |
| | | { |
| | | return await Task.FromResult(content.Error($"åºåºå{proOutOrder.ProOutOrderNo}æªæ¾å°éå®è®¢å{item.SoNumber}æç»,è¯·æ£æ¥")); |
| | | } |
| | | //æ´æ°åºåºæç»åæ°é |
| | | proOutOrderDetail.OverQtyPcs += itemOut.StockPcsQty; |
| | | item.Quantity -= (int)itemOut.StockPcsQty; |
| | | delStockInfoDetails.Add(itemOut); |
| | | proStockInfoDetails.Remove(itemOut); |
| | | if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs) |
| | | { |
| | | return await Task.FromResult(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) |
| | | { |
| | | Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.SaleOrder == item.SoNumber && x.PCode == item.Partnum); |
| | | if (proOutOrderDetail == null) |
| | | { |
| | | return await Task.FromResult(content.Error($"åºåºå{proOutOrder.ProOutOrderNo}æªæ¾å°éå®è®¢å{item.SoNumber}æç»,è¯·æ£æ¥")); |
| | | } |
| | | //æ´æ°åºåºæç»åæ°é |
| | | proOutOrderDetail.OverQtyPcs += item.Quantity; |
| | | item.Quantity -= item.Quantity; |
| | | float Range = itemOut.StockPcsQty / itemOut.SETQty; |
| | | itemOut.SETQty = item.Quantity / Range; |
| | | itemOut.StockPcsQty -= item.Quantity; |
| | | if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs) |
| | | { |
| | | return await Task.FromResult(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 (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}")); |
| | | } |
| | | //æ´æ°æ°æ® |
| | | _unitOfWorkManage.BeginTran(); |
| | | if (delStockInfoDetails.Count > 0) |
| | | { |
| | | _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(delStockInfoDetails, OperateTypeEnum.èªå¨å é¤); |
| | | } |
| | | await _stockRepository.ProStockInfoDetailRepository.UpdateDataAsync(proStockInfoDetails); |
| | | await BaseDal.UpdateDataAsync(proOutOrder); |
| | | await _outboundRepository.ProOutOrderDetailRepository.UpdateDataAsync(proOutOrder.Details); |
| | | _unitOfWorkManage.CommitTran(); |
| | | return await Task.FromResult(content.OK()); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return await Task.FromResult(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_ProStockInfo> AllproStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>() |
| | | .Where(x => x.WarehouseId == warehouse.WarehouseId) |
| | | .Includes(x => x.proStockInfoDetails).ToList(); |
| | | List<Dt_ProStockInfo> proStockInfos = new List<Dt_ProStockInfo>(); |
| | | List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>(); |
| | | foreach (var item in AllproStockInfos) |
| | | { |
| | | proStockInfoDetails.AddRange(item.proStockInfoDetails); |
| | | } |
| | | 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>(); |
| | | 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}åºå")); |
| | | } |
| | | 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; |
| | | } |
| | | 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; |
| | | 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.OutDetailSaleNo = proOutOrderDetail.SaleOrder; |
| | | outStock.OutProNo = proOutOrder.ProOutOrderNo; |
| | | outStock.OutboundQuantity = item.OutQtys; |
| | | float Range = outStock.StockPcsQty / outStock.SETQty; |
| | | outStock.OutSETQty = outStock.OutboundQuantity / Range; |
| | | item.OutQtys -= item.OutQtys; |
| | | 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>(); |
| | | if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.åºåºå®æ.ObjToInt()) |
| | | { |
| | | //è·åææå·²æ«ç å¾
åè´§çåºå |
| | | 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(); |
| | | _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 = warehouseOut.WarehouseCode, |
| | | ShipDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | DeliverplanCode = proOutOrder.ProOutOrderNo, |
| | | Remark = proOutOrder.Remark, |
| | | StockOutItems = stockOutItems |
| | | }; |
| | | //è·åå é¤åºå |
| | | List<Dt_ProStockInfoDetail> delDetails = UpStockInfoDetails.Where(x=>x.AssignDel==1).ToList(); |
| | | List<Dt_ProStockInfoDetail> UpDetails = UpStockInfoDetails.Where(x => x.AssignDel != 1).ToList(); |
| | | //æ´æ°æ°æ® |
| | | 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.èªå¨å®æ); |
| | | 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); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | await _stockRepository.ProStockInfoDetailRepository.UpdateDataAsync(UpStockInfoDetails); |
| | | } |
| | | 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)); |
| | | } |
| | | } |
| | | } |
| | | } |