示例#1
0
        /// <summary>
        /// 根据条件取得责任人信息
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public ResponsibleUserInfo GetExistedResponsibleUser(ResponsibleUserInfo entity)
        {
            CustomDataCommand dataCommand = DataCommandManager.CreateCustomDataCommandFromConfig("ExistedResponsibleUser");

            using (DynamicQuerySqlBuilder builder = new DynamicQuerySqlBuilder(dataCommand.CommandText, dataCommand, null, "sr.SysNo desc"))
            {
                //特殊模式责任人
                var isSpecialMode = (!entity.PayTypeSysNo.HasValue && !entity.ShipTypeSysNo.HasValue && !entity.CustomerSysNo.HasValue);
                if (!isSpecialMode)
                {
                    builder.ConditionConstructor.AddCondition(QueryConditionRelationType.AND, "sr.IsPayWhenRecv", DbType.Int32, "@IncomeStyle", QueryConditionOperatorType.Equal, entity.IncomeStyle);
                    builder.ConditionConstructor.AddCondition(QueryConditionRelationType.AND, "sr.PayTypeSysNo", DbType.Int32, "@PayTypeSysNo", QueryConditionOperatorType.Equal, entity.PayTypeSysNo);
                    builder.ConditionConstructor.AddCondition(QueryConditionRelationType.AND, "sr.ShipTypeSysNo", DbType.Int32, "@ShipTypeSysNo", QueryConditionOperatorType.Equal, entity.ShipTypeSysNo);
                    builder.ConditionConstructor.AddCondition(QueryConditionRelationType.AND, "sr.CustomerSysNo", DbType.Int32, "@CustomerSysNo", QueryConditionOperatorType.Equal, entity.CustomerSysNo);
                    builder.ConditionConstructor.AddCondition(QueryConditionRelationType.AND, "sr.CompanyCode", DbType.AnsiStringFixedLength, "@CompanyCode", QueryConditionOperatorType.Equal, entity.CompanyCode);
                }
                else
                {
                    builder.ConditionConstructor.AddCondition(QueryConditionRelationType.AND, "sr.IsPayWhenRecv", DbType.Int32, "@IsPayWhenRecv", QueryConditionOperatorType.Equal, entity.IncomeStyle);
                    builder.ConditionConstructor.AddCondition(QueryConditionRelationType.AND, "sr.CompanyCode", DbType.AnsiStringFixedLength, "@CompanyCode", QueryConditionOperatorType.Equal, entity.CompanyCode);
                    builder.ConditionConstructor.AddNullCheckCondition(QueryConditionRelationType.AND, "sr.PayTypeSysNo", QueryConditionOperatorType.IsNull);
                    builder.ConditionConstructor.AddNullCheckCondition(QueryConditionRelationType.AND, "sr.ShipTypeSysNo", QueryConditionOperatorType.IsNull);
                    builder.ConditionConstructor.AddNullCheckCondition(QueryConditionRelationType.AND, "sr.CustomerSysNo", QueryConditionOperatorType.IsNull);
                }

                dataCommand.CommandText = builder.BuildQuerySql();
                var result = dataCommand.ExecuteScalar();
                if (!(result is DBNull || result == null))
                {
                    return(LoadResponsibleUserBySysNo(Convert.ToInt32(result)));
                }
                return(null);
            }
        }
示例#2
0
 protected void PreCheckResponsibleUser(ResponsibleUserInfo entity)
 {
     if (!entity.IncomeStyle.HasValue && !entity.PayTypeSysNo.HasValue && !entity.ShipTypeSysNo.HasValue && !entity.CustomerSysNo.HasValue)
     {
         ThrowBizException("TrackingInfo_ValueCantAllEmpty");
     }
     if (String.IsNullOrEmpty(entity.ResponsibleUserName))
     {
         ThrowBizException("TrackingInfo_UserNameIsRequird");
     }
     if (!entity.Status.HasValue)
     {
         ThrowBizException("TrackingInfo_StatusIsRequird");
     }
     if (String.IsNullOrEmpty(entity.EmailAddress))
     {
         ThrowBizException("TrackingInfo_EmailAddressIsRequird");
     }
     if (entity.CustomerSysNo.HasValue)
     {
         if (!ExternalDomainBroker.ExistsCustomer(entity.CustomerSysNo.Value))
         {
             ThrowBizException("TrackingInfo_CustomerNotFound");
         }
     }
 }
示例#3
0
        public void UpdateResponsibleUser(ResponsibleUserInfo entity)
        {
            DataCommand cmd = DataCommandManager.GetDataCommand("UpdateResponsibleUser");

            cmd.SetParameterValue(entity);

            cmd.ExecuteNonQuery();
        }
示例#4
0
        public ResponsibleUserInfo CreateResponsibleUser(ResponsibleUserInfo entity)
        {
            DataCommand cmd = DataCommandManager.GetDataCommand("CreateResponsibleUser");

            cmd.SetParameterValue(entity);

            entity.SysNo = cmd.ExecuteScalar <int>();
            return(LoadResponsibleUserBySysNo(entity.SysNo.Value));
        }
示例#5
0
        public void CreateOrUpdateResponsibleUser(ResponsibleUserInfo entity, bool overrideWhenCreate)
        {
            var existed = GetExistedResponsibleUser(entity);

            if (!overrideWhenCreate)
            {
                if (existed != null)
                {
                    throw new ECCentral.BizEntity.BizException(ResouceManager.GetMessageString(InvoiceConst.ResourceTitle.TrackingInfo, "TrackingInfo_CreateOrUpdateResponsibleUser_Exist"));
                }
                ObjectFactory <TrackingInfoProcessor> .Instance.CreateResponsibleUser(entity);
            }
            else
            {
                if (existed == null)
                {
                    throw new ECCentral.BizEntity.BizException(ResouceManager.GetMessageString(InvoiceConst.ResourceTitle.TrackingInfo, "TrackingInfo_CreateOrUpdateResponsibleUser_NotFound"));
                }
                entity.SysNo = existed.SysNo;
                ObjectFactory <TrackingInfoProcessor> .Instance.UpdateResponsibleUser(entity);
            }
        }
示例#6
0
        private bool IsRuleMatch(ResponsibleUserInfo responsibleUser, TrackingInfo trackingInfo)
        {
            var soIncomeBL = ObjectFactory <SOIncomeProcessor> .Instance;

            if (trackingInfo.OrderType == SOIncomeOrderType.SO)
            {
                //订单不存在直接抛出异常,这个是数据错误。
                var soInfo = ExternalDomainBroker.GetSOInfo(trackingInfo.OrderSysNo.Value);

                if (responsibleUser.CustomerSysNo == soInfo.BaseInfo.CustomerSysNo ||
                    responsibleUser.ShipTypeSysNo == soInfo.ShippingInfo.ShipTypeSysNo ||
                    responsibleUser.PayTypeSysNo == soInfo.BaseInfo.PayTypeSysNo)
                {
                    return(true);
                }

                //比较收款类型,SO单只有货到付款和款到发货两种。
                if (!responsibleUser.CustomerSysNo.HasValue &&
                    !responsibleUser.ShipTypeSysNo.HasValue &&
                    !responsibleUser.PayTypeSysNo.HasValue &&
                    (int)responsibleUser.IncomeStyle.Value == (int)trackingInfo.IncomeStyle.Value
                    )
                {
                    return(true);
                }
            }
            else
            {
                if (!responsibleUser.CustomerSysNo.HasValue &&
                    !responsibleUser.ShipTypeSysNo.HasValue &&
                    !responsibleUser.PayTypeSysNo.HasValue &&
                    responsibleUser.IncomeStyle == ResponseUserOrderStyle.RefundException)
                {
                    return(true);
                }
            }

            return(false);
        }
示例#7
0
        /// <summary>
        /// 更新跟踪单负责人
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public virtual ResponsibleUserInfo UpdateResponsibleUser(ResponsibleUserInfo entity)
        {
            PreCheckResponsibleUser(entity);

            var responsibleUser = m_TrackInfoDA.LoadResponsibleUserBySysNo(entity.SysNo.Value);

            if (string.Compare(responsibleUser.ResponsibleUserName, entity.ResponsibleUserName, true) != 0)
            {
                var notClosed = m_TrackInfoDA.GetNotClosedTrackingInfoBelongToCertainUser(responsibleUser.ResponsibleUserName);

                foreach (var trackingInfo in notClosed)
                {
                    if (IsRuleMatch(responsibleUser, trackingInfo))
                    {
                        trackingInfo.ResponsibleUserName = entity.ResponsibleUserName;
                        UpdateTrackingInfoResponsibleUserName(trackingInfo, entity.EmailAddress);
                    }
                }
            }

            m_TrackInfoDA.UpdateResponsibleUser(entity);

            return(entity);
        }
示例#8
0
 public bool ExistedResponsibleUser(ResponsibleUserInfo request)
 {
     return(ObjectFactory <TrackingInfoAppService> .Instance.GetExistedResponsibleUser(request) != null);
 }
示例#9
0
 public ResponsibleUserInfo GetExistedResponsibleUser(ResponsibleUserInfo entity)
 {
     return(ObjectFactory <TrackingInfoProcessor> .Instance.GetExistedResponsibleUser(entity));
 }
示例#10
0
        protected virtual string GetResponsibleUserName(TrackingInfo entity)
        {
            if (!entity.OrderSysNo.HasValue)
            {
                throw new ArgumentNullException("entity.OrderSysNo");
            }

            if (!entity.OrderType.HasValue)
            {
                throw new ArgumentNullException("entity.OrderType");
            }

            var allResponseUsers = GetAllResponsibleUsers(entity.CompanyCode);

            //fixbug:Dictionary键重复问题
            //原来的IPP在配置责任人的时候有bug,不能判断勾选了“特殊责任人”,但是实际条件又不满足“特殊责任人”的情况,导致生成重复的责任人数据(配送方式、支付方式、客户编号相同的数据)。
            //ECCentral不会产生这样的数据,但为了兼容之前的数据,作出下面的调整。
            var vipDict = allResponseUsers.Where(x => x.CustomerSysNo.HasValue)
                          .GroupBy(g => g.CustomerSysNo).ToDictionary(x => x.Key, x => x.FirstOrDefault());

            var shipTypeDict = allResponseUsers.Where(x => x.ShipTypeSysNo.HasValue)
                               .GroupBy(g => g.ShipTypeSysNo).ToDictionary(x => x.Key, x => x.FirstOrDefault());

            var payTypeDict = allResponseUsers.Where(x => x.PayTypeSysNo.HasValue)
                              .GroupBy(g => g.PayTypeSysNo).ToDictionary(x => x.Key, x => x.FirstOrDefault());

            var incomeStyleDict = allResponseUsers.Where(x => x.IncomeStyle.HasValue &&
                                                         !x.PayTypeSysNo.HasValue &&
                                                         !x.ShipTypeSysNo.HasValue &&
                                                         !x.CustomerSysNo.HasValue &&
                                                         !x.SourceType.HasValue).ToDictionary(x => x.IncomeStyle);

            if (entity.OrderType == SOIncomeOrderType.SO)
            {
                var soInfo = ExternalDomainBroker.GetSOInfo(entity.OrderSysNo.Value);

                if (soInfo == null)
                {
                    ThrowBizException("TrackingInfo_NotExistSORecord", entity.OrderSysNo);
                }

                var soIncomeInfo = ObjectFactory <SOIncomeProcessor> .Instance.GetListByCriteria(null, soInfo.SysNo, SOIncomeOrderType.SO, null)
                                   .Select(s => s).FirstOrDefault();

                var netpayInfo = ObjectFactory <NetPayProcessor> .Instance.GetListByCriteria(
                    new NetPayInfo()
                {
                    SOSysNo = soInfo.SysNo,
                }).Where(w => w.Status > NetPayStatus.Abandon).Select(s => s).FirstOrDefault();

                //责任人来源方式
                ResponsibleSource?souceType = null;
                if (soIncomeInfo.IncomeStyle == SOIncomeOrderStyle.Advanced)
                {
                    if (netpayInfo.Source == NetPaySource.Bank)
                    {
                        souceType = ResponsibleSource.NetPay;
                    }
                    else
                    {
                        souceType = ResponsibleSource.Manual;
                    }
                }

                //款到发货
                if (soIncomeInfo.IncomeStyle == SOIncomeOrderStyle.Advanced)
                {
                    #region CRL10309 By Kilin 根据来源方式(网关、手动)匹配责任人

                    //根据来源方式匹配
                    ResponsibleUserInfo responsibleUser = allResponseUsers
                                                          .Where(w => w.IncomeStyle == ResponseUserOrderStyle.Advanced &&
                                                                 w.SourceType.HasValue &&
                                                                 souceType.HasValue &&
                                                                 w.SourceType == souceType.Value)
                                                          .Select(s => s)
                                                          .FirstOrDefault();

                    if (responsibleUser != null)
                    {
                        return(responsibleUser.ResponsibleUserName);
                    }

                    //如果是 银行电汇
                    if (soInfo.BaseInfo.PayTypeSysNo.HasValue)
                    {
                        if (payTypeDict.ContainsKey(soInfo.BaseInfo.PayTypeSysNo.Value))
                        {
                            return(payTypeDict[soInfo.BaseInfo.PayTypeSysNo.Value].ResponsibleUserName);
                        }
                    }

                    //最后一步取支付方式和来源方式都为空的数据
                    responsibleUser = allResponseUsers
                                      .Where(w => w.IncomeStyle == ResponseUserOrderStyle.Advanced &&
                                             !w.PayTypeSysNo.HasValue &&
                                             !w.SourceType.HasValue)
                                      .Select(s => s)
                                      .FirstOrDefault();

                    if (responsibleUser != null)
                    {
                        return(responsibleUser.ResponsibleUserName);
                    }

                    #endregion CRL10309 By Kilin 根据来源方式(网关、手动)匹配责任人
                }
                //货到付款
                else if (soIncomeInfo.IncomeStyle == SOIncomeOrderStyle.Normal)
                {
                    //优先按照客户编号匹配责任人
                    if (vipDict.ContainsKey(soInfo.BaseInfo.CustomerSysNo.Value))
                    {
                        return(vipDict[soInfo.BaseInfo.CustomerSysNo.Value].ResponsibleUserName);
                    }

                    //其次是按照配送方式匹配责任人
                    if (shipTypeDict.ContainsKey(soInfo.ShippingInfo.ShipTypeSysNo.Value))
                    {
                        return(shipTypeDict[soInfo.ShippingInfo.ShipTypeSysNo.Value].ResponsibleUserName);
                    }
                }

                ResponseUserOrderStyle incomeStyle = ResponseUserOrderStyle.Normal;
                if (!soInfo.BaseInfo.PayWhenReceived.Value)
                {
                    incomeStyle = ResponseUserOrderStyle.Advanced;
                }

                //最后按照是否货到付款确定责任人
                if (incomeStyleDict.ContainsKey(incomeStyle))
                {
                    return(incomeStyleDict[incomeStyle].ResponsibleUserName);
                }
            }
            else
            {
                if (incomeStyleDict.ContainsKey(ResponseUserOrderStyle.RefundException))
                {
                    return(incomeStyleDict[ResponseUserOrderStyle.RefundException].ResponsibleUserName);
                }
            }
            return(string.Empty);
        }
示例#11
0
 /// <summary>
 /// 取得已经存在的符合条件的跟踪单负责人
 /// </summary>
 /// <param name="entity"></param>
 /// <returns></returns>
 public virtual ResponsibleUserInfo GetExistedResponsibleUser(ResponsibleUserInfo entity)
 {
     return(m_TrackInfoDA.GetExistedResponsibleUser(entity));
 }
示例#12
0
        /// <summary>
        /// 创建跟踪单负责人
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public virtual ResponsibleUserInfo CreateResponsibleUser(ResponsibleUserInfo entity)
        {
            PreCheckResponsibleUser(entity);

            return(m_TrackInfoDA.CreateResponsibleUser(entity));
        }