/// <summary> /// 虚库采购单 - 作废 /// </summary> /// <param name="vspoInfo"></param> /// <returns></returns> public virtual VirtualStockPurchaseOrderInfo AdandonVSPO(VirtualStockPurchaseOrderInfo vspoInfo) { #region [Check实体逻辑] //虚库采购单的编号不能为空: if (!vspoInfo.SysNo.HasValue) { //虚库采购单的编号不能为空 throw new BizException(GetMessageString("VSPO_VSPOSysNoEmpty")); } #endregion //虚库采购单为作废状态,不能再作废 VirtualStockPurchaseOrderInfo localEntiy = VSPurchaseOrderDA.LoadVSPO(vspoInfo.SysNo.Value); if (localEntiy == null) { ///该虚库采购单在数据中不存在,操作失败! throw new BizException(GetMessageString("VSPO_VSPONotFound")); } if (localEntiy.Status.HasValue && localEntiy.Status.Value == VirtualPurchaseOrderStatus.Abandon) { //虚库采购单为作废状态,不能再作废! throw new BizException(GetMessageString("VSPO_Abandon_Invalid_Abandon")); } if (vspoInfo.InStockOrderType.Value != VirtualPurchaseInStockOrderType.PO) { vspoInfo.InStockOrderSysNo = Convert.ToInt32(vspoInfo.InStockOrderSysNo.Value.ToString().Substring(2)); } TransactionOptions options = new TransactionOptions(); options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted; options.Timeout = TransactionManager.DefaultTimeout; using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options)) { string strInfo = string.Empty; if (vspoInfo.InStockOrderType == VirtualPurchaseInStockOrderType.Shift) { int isCanAbadon = 0; int shiftsysno = 0; //调用Inventory接口,判断对应的自动移仓单是否已出库 bool isShift = ExternalDomainBroker.IsAutoShift(vspoInfo.InStockOrderSysNo.Value, out isCanAbadon, out shiftsysno); if (isShift) { if (isCanAbadon == 1) { //调用Invoice接口,设置 St_Shift 作废 ExternalDomainBroker.AbandonShift(shiftsysno); } if (isCanAbadon == 0) { //请注意:对应的自动移仓单已出库! strInfo = GetMessageString("VSPO_OutStock_Note"); } } } if (vspoInfo.InStockOrderType.Value != VirtualPurchaseInStockOrderType.PO) { vspoInfo.InStockOrderSysNo = Convert.ToInt32(vspoInfo.InStockOrderSysNo.Value.ToString().Substring(2)); } //更新状态操作: vspoInfo.Status = VirtualPurchaseOrderStatus.Abandon; VSPurchaseOrderDA.AbandonVSPO(vspoInfo); //邮件收发 ////成功作废虚库商品采购单,并发邮件通知PM负责人员 //vspoInfo.Messges = strInfo + MessageResource.VSPO_Check_ConfirmPMRequiredValue; //如果销售单没有生成虚库采购单: int getExistSOCount = VSPurchaseOrderDA.CheckExistsSOVirtualItemRequest(vspoInfo.SOSysNo.Value); if (getExistSOCount == 0) { //调用Order接口,作废虚库采购单后将对应的订单标识为未备货状态: ExternalDomainBroker.UpdateSOCheckShipping(vspoInfo.SOSysNo.Value, VirtualPurchaseOrderStatus.Abandon); } //发送邮件: SendEmailWhenUpdate(PurchaseOrderOperationType.Abandon, vspoInfo); //写LOG:CommonService.WriteLog<VSPOEntity>(entity, " Abandon VSPO ", entity.SysNo.Value.ToString(), (int)LogType.St_SOVirtualItemRequest_Abandon); ExternalDomainBroker.CreateLog(" Abandon VSPO " , BizEntity.Common.BizLogType.St_SOVirtualItemRequest_Abandon , vspoInfo.SysNo.Value , vspoInfo.CompanyCode); scope.Complete(); } return(vspoInfo); }