/// <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); } }
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"); } } }
public void UpdateResponsibleUser(ResponsibleUserInfo entity) { DataCommand cmd = DataCommandManager.GetDataCommand("UpdateResponsibleUser"); cmd.SetParameterValue(entity); cmd.ExecuteNonQuery(); }
public ResponsibleUserInfo CreateResponsibleUser(ResponsibleUserInfo entity) { DataCommand cmd = DataCommandManager.GetDataCommand("CreateResponsibleUser"); cmd.SetParameterValue(entity); entity.SysNo = cmd.ExecuteScalar <int>(); return(LoadResponsibleUserBySysNo(entity.SysNo.Value)); }
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); } }
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); }
/// <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); }
public bool ExistedResponsibleUser(ResponsibleUserInfo request) { return(ObjectFactory <TrackingInfoAppService> .Instance.GetExistedResponsibleUser(request) != null); }
public ResponsibleUserInfo GetExistedResponsibleUser(ResponsibleUserInfo entity) { return(ObjectFactory <TrackingInfoProcessor> .Instance.GetExistedResponsibleUser(entity)); }
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); }
/// <summary> /// 取得已经存在的符合条件的跟踪单负责人 /// </summary> /// <param name="entity"></param> /// <returns></returns> public virtual ResponsibleUserInfo GetExistedResponsibleUser(ResponsibleUserInfo entity) { return(m_TrackInfoDA.GetExistedResponsibleUser(entity)); }
/// <summary> /// 创建跟踪单负责人 /// </summary> /// <param name="entity"></param> /// <returns></returns> public virtual ResponsibleUserInfo CreateResponsibleUser(ResponsibleUserInfo entity) { PreCheckResponsibleUser(entity); return(m_TrackInfoDA.CreateResponsibleUser(entity)); }