/// <summary> /// Handle前检查 /// </summary> /// <param name="entity"></param> protected virtual void PreCheckForHandle(PostIncomeInfo entity, string confirmedSOSysNoStr) { entity.Validate(p => p.SysNo != null, () => { throw new ArgumentNullException("entity.SysNo"); }) .Validate(p => p.HandleStatus != null, () => { throw new ArgumentNullException("entity.HandleStatus"); }); var soSysNoList = confirmedSOSysNoStr.Replace(",", ".") .Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries) .Distinct().ToList() .ConvertAll(s => Int32.Parse(s)); var soList = ExternalDomainBroker.GetSOBaseInfoList(soSysNoList); if (soList.Count != soSysNoList.Count) { var exceptSysNoList = soSysNoList.Except(soList.Select(s => s.SysNo.Value)).ToList(); ThrowBizException("PostIncome_InvalidSOSysNo", string.Join(".", exceptSysNoList)); } else { var recTotal = soList.Sum(s => s.ReceivableAmount); if (recTotal > entity.IncomeAmt.Value) { ThrowBizException("PostIncome_ReceivableAmtMoreThanIncomeAmt"); } } }
/// <summary> /// 创建电汇邮局收款单 /// </summary> /// <param name="entity"></param> /// <param name="needValidate">是否需要验证SO#和OrderType</param> /// <returns></returns> public virtual PostIncomeInfo Create(PostIncomeInfo entity, bool needValidate) { PostIncomeInfo result = new PostIncomeInfo(); PreCheckForCreateOrUpdate(entity, needValidate); options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted; options.Timeout = TransactionManager.DefaultTimeout; using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required, options)) { entity.HandleStatus = PostIncomeHandleStatus.WaitingHandle; entity.ConfirmStatus = PostIncomeStatus.Origin; result = m_PostIncomeDA.Create(entity); //发送创建电汇邮局收款单Message EventPublisher.Publish(new CreatePostIncomeInfoMessage() { PostIncomeInfoSysNo = entity.SysNo.Value, CurrentUserSysNo = ServiceContext.Current.UserSysNo }); ts.Complete(); } return(result); }
/// <summary> /// 更新电汇邮局收款单 /// </summary> /// <param name="entity"></param> public void Update(PostIncomeInfo entity) { DataCommand command = DataCommandManager.GetDataCommand("UpdatePostIncome"); command.SetParameterValue(entity); command.ExecuteNonQuery(); }
/// <summary> /// 创建电汇邮局收款单 /// </summary> /// <param name="entity"></param> /// <returns></returns> public PostIncomeInfo Create(PostIncomeInfo entity) { DataCommand command = DataCommandManager.GetDataCommand("InsertPostIncome"); command.SetParameterValue(entity); entity.SysNo = Convert.ToInt32(command.ExecuteScalar()); return(LoadBySysNo(entity.SysNo.Value)); }
/// <summary> /// 处理电汇邮局收款单 /// </summary> /// <param name="entity"></param> public void Handle(PostIncomeInfo entity) { DataCommand command = DataCommandManager.GetDataCommand("HandlePostIncome"); command.SetParameterValue("@SysNo", entity.SysNo); command.SetParameterValue("@HandleStatus", entity.HandleStatus); command.SetParameterValue("@CSNotes", entity.CSNotes); command.SetParameterValueAsCurrentUserSysNo("@HandleUserSysNo"); command.ExecuteNonQuery(); }
public void AbandonSplitForSO(PostIncomeInfo entity) { DataCommand command = DataCommandManager.GetDataCommand("AbandonPostIncomeSplitForSO"); command.SetParameterValue("@SysNo", entity.SysNo); command.SetParameterValue("@ConfirmStatus", entity.ConfirmStatus); command.SetParameterValue("@ConfirmUserSysNo", entity.ConfirmUserSysNo); command.SetParameterValue("@HandleStatus", entity.HandleStatus); command.SetParameterValue("@HandleUserSysNo", entity.HandleUserSysNo); command.ExecuteNonQuery(); }
/// <summary> /// 更新电汇邮局收款单 /// </summary> /// <param name="entity"></param> /// <returns></returns> public virtual void Update(PostIncomeInfo entity, string confirmedSOSysNo) { PreCheckForCreateOrUpdate(entity, false); var origin = LoadBySysNo(entity.SysNo.Value); if (origin.ConfirmStatus == PostIncomeStatus.Confirmed) { Handle(entity, confirmedSOSysNo); } m_PostIncomeDA.Update(entity); }
/// <summary> /// Create Or Update前检查 /// </summary> /// <param name="entity"></param> protected virtual void PreCheckForCreateOrUpdate(PostIncomeInfo entity, bool needValidate) { entity.Validate(p => p.IncomeDate != null, () => ThrowBizException("PostIncome_IncomeDateRequired")) .Validate(p => !string.IsNullOrEmpty(p.IncomeBank), () => ThrowBizException("PostIncome_IncomeBankRequired")) .Validate(p => p.IncomeAmt != null, () => ThrowBizException("PostIncome_IncomeAmtRequired")) .Validate(p => p.IncomeAmt >= 0, () => ThrowBizException("PostIncome_IncomeAmtShouldNotLessThanZero")) .Validate(p => { if (p.SOSysNo != null && needValidate) { var so = ObjectFactory <ISOBizInteract> .Instance.GetSOBaseInfo(p.SOSysNo.Value); if (so == null) { ThrowBizException("PostIncome_SONotExistFormat", p.SOSysNo); } return(ObjectFactory <PostPayProcessor> .Instance.IsBankOrPostPayType(so.PayTypeSysNo.Value)); } return(true); }, () => ThrowBizException("PostIncome_NotMatchSOPayTypeSysNo")); }
public PostIncomeInfo CreatePostIncome(PostIncomeInfo input) { return(ObjectFactory <PostIncomeAppService> .Instance.Create(input)); }
/// <summary> /// 处理电汇邮局收款单 /// </summary> /// <param name="entity"></param> /// <returns></returns> public virtual void Handle(PostIncomeInfo entity, string confirmedSOSysNoStr) { PreCheckForHandle(entity, confirmedSOSysNoStr); var postIncomeInfo = LoadBySysNo(entity.SysNo.Value); if (postIncomeInfo.ConfirmStatus.Value != PostIncomeStatus.Confirmed) { ThrowBizException("PostIncome_Handle_ConfirmStatusNotMatch"); } //保证下面对ConfirmedSOSysNoList操作时不为NULL if (string.IsNullOrEmpty(confirmedSOSysNoStr)) { confirmedSOSysNoStr = string.Empty; } string[] confirmedSOSysNoList = confirmedSOSysNoStr.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries); foreach (var confirmedSOSysNo in confirmedSOSysNoList) { //验证订单号是否有效 var so = ExternalDomainBroker.GetSOBaseInfo(Convert.ToInt32(confirmedSOSysNo)); if (!ObjectFactory <PostPayProcessor> .Instance.IsBankOrPostPayType(so.PayTypeSysNo.Value)) { ThrowBizException("PostIncome_NotMatchSOPayTypeSysNo", confirmedSOSysNo); } } List <int> abandonList = new List <int>(); var postIncomeConfirm = postIncomeInfo.ConfirmInfoList; postIncomeConfirm.ForEach(p => { int idx = confirmedSOSysNoStr.IndexOf(p.ConfirmedSoSysNo.ToString()); if (idx < 0) { if (p.Status == PostIncomeConfirmStatus.Audit) { ThrowBizException("PostIncome_StatusNotMatchAudit", p.ConfirmedSoSysNo); } if (p.Status == PostIncomeConfirmStatus.Related) { abandonList.Add(p.SysNo.Value); } } }); List <int> updateList = new List <int>(); List <string> errorList = new List <string>(); postIncomeConfirm = GetConfirmedListBySOSysNo(string.Join(",", confirmedSOSysNoList)); postIncomeConfirm.ForEach(p => { if (p.Status == PostIncomeConfirmStatus.Audit || (p.Status == PostIncomeConfirmStatus.Related && p.PostIncomeSysNo != entity.SysNo)) { errorList.Add(p.ConfirmedSoSysNo.ToString()); } else { updateList.Add(p.SysNo.Value); } }); if (errorList.Count > 0) { ThrowBizException("PostIncome_StatusNotMatchRelated", string.Join(".", errorList.ToArray())); } List <PostIncomeConfirmInfo> insertEntityList = new List <PostIncomeConfirmInfo>(); string[] confirmedSoList = confirmedSOSysNoList; foreach (string confirmedSo in confirmedSoList) { int soNo = Convert.ToInt32(confirmedSo); bool exist = postIncomeConfirm.Exists(p => p.ConfirmedSoSysNo == soNo); if (!exist) { insertEntityList.Add(new PostIncomeConfirmInfo() { PostIncomeSysNo = entity.SysNo, ConfirmedSoSysNo = soNo }); } } TransactionOptions options = new TransactionOptions(); options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted; options.Timeout = TransactionManager.DefaultTimeout; using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options)) { abandonList.ForEach(p => { UpdatePostIncomeConfirmStatus(p, PostIncomeConfirmStatus.Cancel);//作废CS确认的订单 }); updateList.ForEach(p => { UpdatePostIncomeConfirmStatus(p, PostIncomeConfirmStatus.Related);//更新CS确认的订单 }); insertEntityList.ForEach(p => { CreatePostIncomeConfirm(p);//添加CS确认的订单 }); m_PostIncomeDA.Handle(entity); scope.Complete(); } //记录操作日志 ObjectFactory <ICommonBizInteract> .Instance.CreateOperationLog( GetMessageString("PostIncome_Log_Handle", ServiceContext.Current.UserSysNo, postIncomeInfo.SysNo) , BizLogType.Invoice_PostIncome_Handle , postIncomeInfo.SysNo.Value , postIncomeInfo.CompanyCode); }
/// <summary> /// 更新电汇邮局收款单 /// </summary> /// <param name="entity"></param> /// <param name="confirmedSOSysNo">CS确认的订单号,多个订单号之间用逗号隔开</param> /// <returns></returns> public virtual void Update(PostIncomeInfo entity, string confirmedSOSysNo) { ObjectFactory <PostIncomeProcessor> .Instance.Update(entity, confirmedSOSysNo); }
/// <summary> /// 创建电汇邮局收款单 /// </summary> /// <param name="input">待创建的电汇邮局收款单</param> /// <returns>创建后的电汇邮局收款单</returns> public virtual PostIncomeInfo Create(PostIncomeInfo entity) { //批量创建时不需要验证SO#和OrderType return(ObjectFactory <PostIncomeProcessor> .Instance.Create(entity, true)); }
private void BatachCreate(DataTable dataTable, string companyCode, ref List <PostIncomeInfo> successList, ref List <ImportPostIncome> faultList, ref string message) { List <PostIncomeInfo> list = new List <PostIncomeInfo>(); List <PostIncomeInfo> _successList = new List <PostIncomeInfo>(); List <ImportPostIncome> _faultList = new List <ImportPostIncome>(); dataTable.Columns.Add("SysNo"); int index = 1; foreach (DataRow row in dataTable.Rows) { try { if (string.IsNullOrEmpty(row["SOSysNo"].ToString()) && string.IsNullOrEmpty(row["IncomeAmt"].ToString()) && string.IsNullOrEmpty(row["PayUser"].ToString()) && string.IsNullOrEmpty(row["IncomeDate"].ToString()) && string.IsNullOrEmpty(row["PayBank"].ToString()) && string.IsNullOrEmpty(row["IncomeBank"].ToString()) && string.IsNullOrEmpty(row["BankNo"].ToString()) && string.IsNullOrEmpty(row["Notes"].ToString())) { break; } PostIncomeInfo entity = new PostIncomeInfo(); entity.SysNo = index; entity.SOSysNo = string.IsNullOrEmpty(row["SOSysNo"].ToString()) ? default(int?) : int.Parse(row["SOSysNo"].ToString()); entity.IncomeAmt = decimal.Parse(row["IncomeAmt"].ToString()); entity.PayUser = row["PayUser"].ToString(); entity.IncomeDate = DateTime.Parse(row["IncomeDate"].ToString()); entity.PayBank = row["PayBank"].ToString(); entity.IncomeBank = row["IncomeBank"].ToString(); entity.BankNo = row["BankNo"].ToString(); entity.Notes = row["Notes"].ToString(); entity.CompanyCode = companyCode; index++; list.Add(entity); } catch (Exception) { ImportPostIncome model = new ImportPostIncome(); model.SysNo = index++; model.SOSysNo = row["SOSysNo"].ToString(); model.IncomeAmtString = row["IncomeAmt"].ToString(); model.PayUser = row["PayUser"].ToString(); model.IncomeDateString = row["IncomeDate"].ToString(); model.PayBank = row["PayBank"].ToString(); model.IncomeBank = row["IncomeBank"].ToString(); model.BankNo = row["BankNo"].ToString(); model.Notes = row["Notes"].ToString(); _faultList.Add(model); } } List <BatchActionItem <PostIncomeInfo> > items = list.Select(x => new BatchActionItem <PostIncomeInfo>() { ID = x.SysNo.ToString(), Data = x }).ToList(); var result = BatchActionManager.DoBatchAction(items, (PostIncomeInfo) => { ObjectFactory <PostIncomeProcessor> .Instance.Create(PostIncomeInfo, false); }); if (result.SuccessList != null) { result.SuccessList.ForEach(p => { p.Data.IncomeAmt = p.Data.IncomeAmt ?? 0; _successList.Add(p.Data); }); } if (result.FaultList != null) { result.FaultList.ForEach(p => { ImportPostIncome failed = new ImportPostIncome(); failed.SysNo = p.FaultItem.Data.SysNo; failed.SOSysNo = p.FaultItem.Data.SOSysNo.ToString(); failed.IncomeAmtString = p.FaultItem.Data.IncomeAmt.ToString(); failed.PayUser = p.FaultItem.Data.PayUser; failed.IncomeDateString = p.FaultItem.Data.IncomeDate.ToString(); failed.PayBank = p.FaultItem.Data.PayBank; failed.IncomeBank = p.FaultItem.Data.IncomeBank; failed.BankNo = p.FaultItem.Data.BankNo; failed.Notes = p.FaultItem.Data.Notes; _faultList.Add(failed); }); faultList.Sort(new ImportPostIncome()); } successList = _successList; faultList = _faultList; message = string.Format(ResouceManager.GetMessageString(InvoiceConst.ResourceTitle.PostIncome, "PostIncome_ImportExcel"), dataTable.Rows.Count, successList.Count, faultList.Count); }