Пример #1
0
        /// <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");
                }
            }
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        /// <summary>
        /// 更新电汇邮局收款单
        /// </summary>
        /// <param name="entity"></param>
        public void Update(PostIncomeInfo entity)
        {
            DataCommand command = DataCommandManager.GetDataCommand("UpdatePostIncome");

            command.SetParameterValue(entity);
            command.ExecuteNonQuery();
        }
Пример #4
0
        /// <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));
        }
Пример #5
0
        /// <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();
        }
Пример #6
0
        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();
        }
Пример #7
0
        /// <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);
        }
Пример #8
0
 /// <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"));
 }
Пример #9
0
 public PostIncomeInfo CreatePostIncome(PostIncomeInfo input)
 {
     return(ObjectFactory <PostIncomeAppService> .Instance.Create(input));
 }
Пример #10
0
        /// <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);
        }
Пример #11
0
 /// <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);
 }
Пример #12
0
 /// <summary>
 /// 创建电汇邮局收款单
 /// </summary>
 /// <param name="input">待创建的电汇邮局收款单</param>
 /// <returns>创建后的电汇邮局收款单</returns>
 public virtual PostIncomeInfo Create(PostIncomeInfo entity)
 {
     //批量创建时不需要验证SO#和OrderType
     return(ObjectFactory <PostIncomeProcessor> .Instance.Create(entity, true));
 }
Пример #13
0
        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);
        }