| | |
| | | return content; |
| | | } |
| | | /// <summary> |
| | | /// æååºå¾
åè´§åº(å¹³åº)+忥ERPåºåº |
| | | /// æååºå¾
åè´§åº(å¹³åº)+忥ERPåºåº(ç»å®äºåºåºååºå) |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public WebResponseContent OutProductPK(string[] OutPKCodes,string 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()) |
| | | .Where(x => OutPKCodes.Contains(x.PalletCode) && x.ShipmentOrder == proOutOrder.ProOutOrderNo && x.StockStatus == StockStatusEmun.å¹³åºå
¥åºå®æ.ObjToInt()) |
| | | .Includes(x => x.proStockInfoDetails).ToList(); |
| | | if (AllproStockInfos.Count<=0) |
| | | { |
| | | return content.Error($"åºåºå{ProOutNo}å·²æ ç»å®åºå"); |
| | | } |
| | | 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()); |
| | |
| | | { |
| | | return content.Error("对åºåºåºè®¢åæç»ä¸ºç©º"); |
| | | } |
| | | int OldOverCount = proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count(); |
| | | foreach (var item in proStockInfoDetails) |
| | | { |
| | | //è·åå¯¹åºæç»å¤çåºåºæ°æ® |
| | |
| | | { |
| | | proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); |
| | | } |
| | | 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); |
| | | |
| | | } |
| | | int OldOverCount = proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count(); |
| | | |
| | | int AddOverCount = proOutOrderDetails.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count(); |
| | | if (proOutOrder.Details.Count== (OldOverCount + AddOverCount)) |
| | | 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 |
| | | _unitOfWorkManage.BeginTran(); |
| | | _stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(proStockInfos, OperateTypeEnum.èªå¨å®æ); |
| | | _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(proStockInfoDetails, OperateTypeEnum.èªå¨å®æ); |
| | | _outboundRepository.ProOutOrderDetailRepository.UpdateData(proOutOrderDetails); |
| | | BaseDal.UpdateData(proOutOrder); |
| | | //æååºåè®°å½åå¨å¾
å å
¥ |
| | | ERPProOutOrderModel proOutOrderModel = new ERPProOutOrderModel() |
| | | if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.åºåºå®æ.ObjToInt()) |
| | | { |
| | | Way = 1, |
| | | StockOutCode = _outboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.ProOutCOdeRule)), |
| | | ConfirmedUserNo=userName, |
| | | AssignUserNo=userName, |
| | | WarehouseCode=warehouse.WarehouseCode, |
| | | ShipDate=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | DeliverplanCode=proOutOrder.ProOutOrderNo, |
| | | Remark=proOutOrder.Remark, |
| | | StockOutItems= stockOutItems |
| | | }; |
| | | string response = _invokeERPService.InvokeProOutApi(proOutOrderModel); |
| | | ErpRequestContent erpRequestContent= response.DeserializeObject<ErpRequestContent>(); |
| | | if (erpRequestContent.res==1) |
| | | { |
| | | _unitOfWorkManage.CommitTran(); |
| | | content.OK(); |
| | | //æååºåè®°å½åå¨å¾
å å
¥ |
| | | 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 |
| | | { |
| | | throw new Exception(erpRequestContent.Data); |
| | | proStockInfos.ForEach(x => |
| | | { |
| | | x.StockStatus = StockStatusEmun.å¹³åºå¾
åè´§.ObjToInt(); |
| | | }); |
| | | proStockInfoDetails.ForEach(x => |
| | | { |
| | | x.ProOutDetailStatus = StockStatusEmun.å¹³åºå¾
åè´§.ObjToInt(); |
| | | }); |
| | | _stockRepository.ProStockInfoRepository.UpdateData(proStockInfos); |
| | | _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfoDetails); |
| | | } |
| | | _outboundRepository.ProOutOrderDetailRepository.UpdateData(proOutOrderDetails); |
| | | BaseDal.UpdateData(proOutOrder); |
| | | _unitOfWorkManage.CommitTran(); |
| | | content.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | } |
| | | 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; |
| | | 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 = "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(); |
| | | content.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | } |
| | | } |