Commit 8878ab09 authored by 席世权's avatar 席世权

接口推送

parent b5ecfdc3
using DapperORM.Common.Models;
using PushApi.Act.Models.Send;
using PushInfo.Core.BLL;
using PushInfo.Core.Common;
using PushInfo.Core.Models.QueryResults;
using PushInfo.Core.Models.Tables;
using PushPlatform.Common.Enumerate;
using PushPlatform.Common.Model;
using PushPlatform.Common.Util;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PushApi.Act.BLL
{
/// <summary>
/// 外部推送
/// </summary>
public class OutProcessTaskBLL
{
#region 系统主动调用发送任务,数据来源外部
/// <summary>
///
/// </summary>
/// <param name="valModel"></param>
/// <returns></returns>
public BaseResponse<string> SendPushOfExternal(PushValModel valModel)
{
ProcessTaskBLL taskBll = new ProcessTaskBLL();
MapProjectPushBLL mProPushBll = new MapProjectPushBLL();
BaseResponse<string> result = new BaseResponse<string>();
try
{
Map_Project_Push task = mProPushBll.Query_Sys_Task_By_Id(valModel.ProCfgId);
if (task == null)
throw new Exception("传输的配置表的Id有误,推送失败。");
if (task.Exec_Status == (int)ExecuteStatus.已经停用)
throw new Exception("推送任务已停用,推送失败,请查询配置信息。");
mProPushBll.Modify_Task_Excute(valModel.ProCfgId, ExecuteStatus.已安排触发器, task.Trigger_Key, null);
DataMessage data = new DataMessage();
data.userId = valModel.UserId;
data.clientType = valModel.ClientType;
data.clientID = valModel.ClientId;
data.realName = valModel.RealName;
data.mobile = valModel.Mobile;
data.openId = valModel.OpenId;
data.dicValue = valModel.DicValue;
task.Push_Title = PushValueHelp.TransfOfDataModel(StringUtil.ExtractNotEmtry(valModel.PushTitle, task.Push_Title), data);
task.Push_Body = PushValueHelp.TransfOfDataModel(StringUtil.ExtractNotEmtry(valModel.PushBody, task.Push_Body), data);
task.Wx_MsmTemp = PushValueHelp.TransfOfDataModel(StringUtil.ExtractNotEmtry(valModel.WxMsmTemp, task.Wx_MsmTemp), data);
task.Push_IosLink = PushValueHelp.TransfOfDataModel(StringUtil.ExtractNotEmtry(valModel.PushIosLink, task.Push_IosLink), data);
task.Push_AndLink = PushValueHelp.TransfOfDataModel(StringUtil.ExtractNotEmtry(valModel.PushAndLink, task.Push_AndLink), data);
task.Push_WebLink = PushValueHelp.TransfOfDataModel(StringUtil.ExtractNotEmtry(valModel.PushWebLink, task.Push_WebLink), data);
task.Push_WechatLink = PushValueHelp.TransfOfDataModel(StringUtil.ExtractNotEmtry(valModel.PushWechatLink, task.Push_WechatLink), data);
if (taskBll.ConfirmSend(task, data))
{
result.DetailedMessage = "发送成功";
}
else
throw new Exception("发送失败");
}
catch (Exception ex)
{
result.DetailedStatus = DetailedStatusCode.Fail;
result.DetailedMessage = ex.Message;
LogHelper.Error(ex);
}
return result;
}
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PushApi.Act.Models.Send
{
public class PushValModel
{
/// <summary>
/// 推送配置表的Id
/// </summary>
public System.String ProCfgId { get; set; }
/// <summary>
/// 用户Id
/// </summary>
public System.String UserId { get; set; }
/// <summary>
/// 手机的系统类型
/// </summary>
public string ClientType { get; set; }
/// <summary>
/// 手机的设备序列号
/// </summary>
public string ClientId { get; set; }
/// <summary>
/// 用户正式姓名
/// </summary>
public string RealName { get; set; }
/// <summary>
/// 用户手机号
/// </summary>
public string Mobile { get; set; }
/// <summary>
/// 用户微信唯一标示
/// </summary>
public string OpenId { get; set; }
/// <summary>
/// 推送title
/// </summary>
public System.String PushTitle { get; set; }
/// <summary>
/// 推送body
/// </summary>
public System.String PushBody { get; set; }
/// <summary>
/// 推送消息模板
/// </summary>
public System.String WxMsmTemp { get; set; }
/// <summary>
/// ios跳转
/// </summary>
public System.String PushIosLink { get; set; }
/// <summary>
/// and跳转
/// </summary>
public System.String PushAndLink { get; set; }
/// <summary>
/// web跳转
/// </summary>
public System.String PushWebLink { get; set; }
/// <summary>
/// 微信跳转
/// </summary>
public System.String PushWechatLink { get; set; }
/// <summary>
/// 推送数据包
/// </summary>
public Dictionary<string, string> DicValue { get; set; }
}
}
......@@ -44,7 +44,9 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="BLL\OutProcessTaskBLL.cs" />
<Compile Include="BLL\TrialBLL.cs" />
<Compile Include="Models\Send\PushValModel.cs" />
<Compile Include="Models\Trial\DataMessage.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
......
using System.Web.Http;
using System.Linq;
using Swashbuckle.Application;
using WebActivatorEx;
using PushPf.Api;
[assembly: PreApplicationStartMethod(typeof(SwaggerConfig), "Register")]
namespace PushPf.Api
{
public class SwaggerConfig
{
public static void Register()
{
var thisAssembly = typeof(SwaggerConfig).Assembly;
GlobalConfiguration.Configuration
.EnableSwagger(c =>
{
// By default, the service root url is inferred from the request used to access the docs.
// However, there may be situations (e.g. proxy and load-balanced environments) where this does not
// resolve correctly. You can workaround this by providing your own code to determine the root URL.
//
//c.RootUrl(req => GetRootUrlFromAppConfig());
// If schemes are not explicitly provided in a Swagger 2.0 document, then the scheme used to access
// the docs is taken as the default. If your API supports multiple schemes and you want to be explicit
// about them, you can use the "Schemes" option as shown below.
//
//c.Schemes(new[] { "http", "https" });
// Use "SingleApiVersion" to describe a single version API. Swagger 2.0 includes an "Info" object to
// hold additional metadata for an API. Version and title are required but you can also provide
// additional fields by chaining methods off SingleApiVersion.
//
c.SingleApiVersion("v1", "PushPf.Api");
// If you want the output Swagger docs to be indented properly, enable the "PrettyPrint" option.
//
//c.PrettyPrint();
// If your API has multiple versions, use "MultipleApiVersions" instead of "SingleApiVersion".
// In this case, you must provide a lambda that tells Swashbuckle which actions should be
// included in the docs for a given API version. Like "SingleApiVersion", each call to "Version"
// returns an "Info" builder so you can provide additional metadata per API version.
//
//c.MultipleApiVersions(
// (apiDesc, targetApiVersion) => ResolveVersionSupportByRouteConstraint(apiDesc, targetApiVersion),
// (vc) =>
// {
// vc.Version("v2", "Swashbuckle Dummy API V2");
// vc.Version("v1", "Swashbuckle Dummy API V1");
// });
// You can use "BasicAuth", "ApiKey" or "OAuth2" options to describe security schemes for the API.
// See https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md for more details.
// NOTE: These only define the schemes and need to be coupled with a corresponding "security" property
// at the document or operation level to indicate which schemes are required for an operation. To do this,
// you'll need to implement a custom IDocumentFilter and/or IOperationFilter to set these properties
// according to your specific authorization implementation
//
//c.BasicAuth("basic")
// .Description("Basic HTTP Authentication");
//
// NOTE: You must also configure 'EnableApiKeySupport' below in the SwaggerUI section
//c.ApiKey("apiKey")
// .Description("API Key Authentication")
// .Name("apiKey")
// .In("header");
//
//c.OAuth2("oauth2")
// .Description("OAuth2 Implicit Grant")
// .Flow("implicit")
// .AuthorizationUrl("http://petstore.swagger.wordnik.com/api/oauth/dialog")
// //.TokenUrl("https://tempuri.org/token")
// .Scopes(scopes =>
// {
// scopes.Add("read", "Read access to protected resources");
// scopes.Add("write", "Write access to protected resources");
// });
// Set this flag to omit descriptions for any actions decorated with the Obsolete attribute
//c.IgnoreObsoleteActions();
// Each operation be assigned one or more tags which are then used by consumers for various reasons.
// For example, the swagger-ui groups operations according to the first tag of each operation.
// By default, this will be controller name but you can use the "GroupActionsBy" option to
// override with any value.
//
//c.GroupActionsBy(apiDesc => apiDesc.HttpMethod.ToString());
// You can also specify a custom sort order for groups (as defined by "GroupActionsBy") to dictate
// the order in which operations are listed. For example, if the default grouping is in place
// (controller name) and you specify a descending alphabetic sort order, then actions from a
// ProductsController will be listed before those from a CustomersController. This is typically
// used to customize the order of groupings in the swagger-ui.
//
//c.OrderActionGroupsBy(new DescendingAlphabeticComparer());
// If you annotate Controllers and API Types with
// Xml comments (http://msdn.microsoft.com/en-us/library/b2s063f7(v=vs.110).aspx), you can incorporate
// those comments into the generated docs and UI. You can enable this by providing the path to one or
// more Xml comment files.
//
//c.IncludeXmlComments(GetXmlCommentsPath());
// Swashbuckle makes a best attempt at generating Swagger compliant JSON schemas for the various types
// exposed in your API. However, there may be occasions when more control of the output is needed.
// This is supported through the "MapType" and "SchemaFilter" options:
//
// Use the "MapType" option to override the Schema generation for a specific type.
// It should be noted that the resulting Schema will be placed "inline" for any applicable Operations.
// While Swagger 2.0 supports inline definitions for "all" Schema types, the swagger-ui tool does not.
// It expects "complex" Schemas to be defined separately and referenced. For this reason, you should only
// use the "MapType" option when the resulting Schema is a primitive or array type. If you need to alter a
// complex Schema, use a Schema filter.
//
//c.MapType<ProductType>(() => new Schema { type = "integer", format = "int32" });
// If you want to post-modify "complex" Schemas once they've been generated, across the board or for a
// specific type, you can wire up one or more Schema filters.
//
//c.SchemaFilter<ApplySchemaVendorExtensions>();
// In a Swagger 2.0 document, complex types are typically declared globally and referenced by unique
// Schema Id. By default, Swashbuckle does NOT use the full type name in Schema Ids. In most cases, this
// works well because it prevents the "implementation detail" of type namespaces from leaking into your
// Swagger docs and UI. However, if you have multiple types in your API with the same class name, you'll
// need to opt out of this behavior to avoid Schema Id conflicts.
//
//c.UseFullTypeNameInSchemaIds();
// Alternatively, you can provide your own custom strategy for inferring SchemaId's for
// describing "complex" types in your API.
//
//c.SchemaId(t => t.FullName.Contains('`') ? t.FullName.Substring(0, t.FullName.IndexOf('`')) : t.FullName);
// Set this flag to omit schema property descriptions for any type properties decorated with the
// Obsolete attribute
//c.IgnoreObsoleteProperties();
// In accordance with the built in JsonSerializer, Swashbuckle will, by default, describe enums as integers.
// You can change the serializer behavior by configuring the StringToEnumConverter globally or for a given
// enum type. Swashbuckle will honor this change out-of-the-box. However, if you use a different
// approach to serialize enums as strings, you can also force Swashbuckle to describe them as strings.
//
//c.DescribeAllEnumsAsStrings();
// Similar to Schema filters, Swashbuckle also supports Operation and Document filters:
//
// Post-modify Operation descriptions once they've been generated by wiring up one or more
// Operation filters.
//
//c.OperationFilter<AddDefaultResponse>();
//
// If you've defined an OAuth2 flow as described above, you could use a custom filter
// to inspect some attribute on each action and infer which (if any) OAuth2 scopes are required
// to execute the operation
//
//c.OperationFilter<AssignOAuth2SecurityRequirements>();
// Post-modify the entire Swagger document by wiring up one or more Document filters.
// This gives full control to modify the final SwaggerDocument. You should have a good understanding of
// the Swagger 2.0 spec. - https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md
// before using this option.
//
//c.DocumentFilter<ApplyDocumentVendorExtensions>();
// In contrast to WebApi, Swagger 2.0 does not include the query string component when mapping a URL
// to an action. As a result, Swashbuckle will raise an exception if it encounters multiple actions
// with the same path (sans query string) and HTTP method. You can workaround this by providing a
// custom strategy to pick a winner or merge the descriptions for the purposes of the Swagger docs
//
c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
// Wrap the default SwaggerGenerator with additional behavior (e.g. caching) or provide an
// alternative implementation for ISwaggerProvider with the CustomProvider option.
//
//c.CustomProvider((defaultProvider) => new CachingSwaggerProvider(defaultProvider));
})
.EnableSwaggerUi(c =>
{
// Use the "DocumentTitle" option to change the Document title.
// Very helpful when you have multiple Swagger pages open, to tell them apart.
//
//c.DocumentTitle("My Swagger UI");
// Use the "InjectStylesheet" option to enrich the UI with one or more additional CSS stylesheets.
// The file must be included in your project as an "Embedded Resource", and then the resource's
// "Logical Name" is passed to the method as shown below.
//
//c.InjectStylesheet(containingAssembly, "Swashbuckle.Dummy.SwaggerExtensions.testStyles1.css");
// Use the "InjectJavaScript" option to invoke one or more custom JavaScripts after the swagger-ui
// has loaded. The file must be included in your project as an "Embedded Resource", and then the resource's
// "Logical Name" is passed to the method as shown above.
//
//c.InjectJavaScript(thisAssembly, "Swashbuckle.Dummy.SwaggerExtensions.testScript1.js");
// The swagger-ui renders boolean data types as a dropdown. By default, it provides "true" and "false"
// strings as the possible choices. You can use this option to change these to something else,
// for example 0 and 1.
//
//c.BooleanValues(new[] { "0", "1" });
// By default, swagger-ui will validate specs against swagger.io's online validator and display the result
// in a badge at the bottom of the page. Use these options to set a different validator URL or to disable the
// feature entirely.
//c.SetValidatorUrl("http://localhost/validator");
//c.DisableValidator();
// Use this option to control how the Operation listing is displayed.
// It can be set to "None" (default), "List" (shows operations for each resource),
// or "Full" (fully expanded: shows operations and their details).
//
//c.DocExpansion(DocExpansion.List);
// Specify which HTTP operations will have the 'Try it out!' option. An empty paramter list disables
// it for all operations.
//
//c.SupportedSubmitMethods("GET", "HEAD");
// Use the CustomAsset option to provide your own version of assets used in the swagger-ui.
// It's typically used to instruct Swashbuckle to return your version instead of the default
// when a request is made for "index.html". As with all custom content, the file must be included
// in your project as an "Embedded Resource", and then the resource's "Logical Name" is passed to
// the method as shown below.
//
//c.CustomAsset("index", containingAssembly, "YourWebApiProject.SwaggerExtensions.index.html");
// If your API has multiple versions and you've applied the MultipleApiVersions setting
// as described above, you can also enable a select box in the swagger-ui, that displays
// a discovery URL for each version. This provides a convenient way for users to browse documentation
// for different API versions.
//
//c.EnableDiscoveryUrlSelector();
// If your API supports the OAuth2 Implicit flow, and you've described it correctly, according to
// the Swagger 2.0 specification, you can enable UI support as shown below.
//
//c.EnableOAuth2Support(
// clientId: "test-client-id",
// clientSecret: null,
// realm: "test-realm",
// appName: "Swagger UI"
// //additionalQueryStringParams: new Dictionary<string, string>() { { "foo", "bar" } }
//);
// If your API supports ApiKey, you can override the default values.
// "apiKeyIn" can either be "query" or "header"
//
//c.EnableApiKeySupport("apiKey", "header");
});
}
}
}
\ No newline at end of file
using PushApi.Act.BLL;
using PushApi.Act.Models.Send;
using PushApi.Act.Models.Trial;
using PushPlatform.Common.Model;
using PushPlatform.Common.Util;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace PushPf.Api.Controllers
{
/// <summary>
///
/// </summary>
public class SendController : ApiController
{
/// <summary>
/// 系统主动调用发送任务,数据来源外部
/// </summary>
/// <param name="valModel">ProCfg_Id必须传输</param>
/// <returns></returns>
[HttpPost]
public HttpResponseMessage PushOfExternal(PushValModel valModel)
{
HttpStatusCode statusCode = HttpStatusCode.OK;
BaseResponse<string> model = new BaseResponse<string>();
try
{
if (string.IsNullOrEmpty(valModel.ProCfgId) || string.IsNullOrEmpty(valModel.UserId))
{
model.DetailedStatus = DetailedStatusCode.Fail;
model.DetailedMessage = "配置不能为空";
return Request.CreateResponse(statusCode, model);
}
model = new OutProcessTaskBLL().SendPushOfExternal(valModel);
}
catch (Exception ex)
{
LogHelper.Error(ex);
model.DetailedStatus = DetailedStatusCode.Fail;
model.DetailedMessage = "异常,请联系管理员";
}
return Request.CreateResponse(statusCode, model);
}
}
}
\ No newline at end of file
......@@ -35,6 +35,7 @@
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>bin\PushPf.Api.xml</DocumentationFile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
......@@ -81,6 +82,9 @@
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="Swashbuckle.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cd1bb07a5ac7c7bc, processorArchitecture=MSIL">
<HintPath>..\packages\Swashbuckle.Core.5.6.0\lib\net40\Swashbuckle.Core.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
......@@ -140,6 +144,9 @@
<Private>True</Private>
<HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.Razor.dll</HintPath>
</Reference>
<Reference Include="WebActivatorEx, Version=2.0.0.0, Culture=neutral, PublicKeyToken=7b26dc2a43f6a0d4, processorArchitecture=MSIL">
<HintPath>..\packages\WebActivatorEx.2.2.0\lib\net40\WebActivatorEx.dll</HintPath>
</Reference>
<Reference Include="WebGrease">
<Private>True</Private>
<HintPath>..\packages\WebGrease.1.5.2\lib\WebGrease.dll</HintPath>
......@@ -151,12 +158,15 @@
</ItemGroup>
<ItemGroup>
<Folder Include="App_Data\" />
<Folder Include="Views\Send\" />
</ItemGroup>
<ItemGroup>
<Compile Include="App_Start\BundleConfig.cs" />
<Compile Include="App_Start\FilterConfig.cs" />
<Compile Include="App_Start\RouteConfig.cs" />
<Compile Include="App_Start\SwaggerConfig.cs" />
<Compile Include="App_Start\WebApiConfig.cs" />
<Compile Include="Controllers\SendController.cs" />
<Compile Include="Controllers\TrialController.cs" />
<Compile Include="Global.asax.cs">
<DependentUpon>Global.asax</DependentUpon>
......
......@@ -71,6 +71,14 @@
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<system.codedom>
......
......@@ -33,5 +33,7 @@
<package id="Modernizr" version="2.6.2" targetFramework="net45" />
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net45" />
<package id="Respond" version="1.2.0" targetFramework="net45" />
<package id="Swashbuckle.Core" version="5.6.0" targetFramework="net45" />
<package id="WebActivatorEx" version="2.2.0" targetFramework="net45" />
<package id="WebGrease" version="1.5.2" targetFramework="net45" />
</packages>
\ No newline at end of file
......@@ -158,7 +158,7 @@
<VisualStudio>
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
<WebProjectProperties>
<UseIIS>True</UseIIS>
<UseIIS>False</UseIIS>
<AutoAssignPort>True</AutoAssignPort>
<DevelopmentServerPort>32450</DevelopmentServerPort>
<DevelopmentServerVPath>/</DevelopmentServerVPath>
......
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PushPlatform.Common.Model
{
#region 基础返回结果(返回数据)
/// <summary>
/// 基础返回结果(返回数据)
/// </summary>
public class BaseResponse<T>
{
/// <summary>
/// 网关状态
/// </summary>
public GatewayStatusCode GatewayStatus { get; set; }
/// <summary>
/// 网关状态描述
/// </summary>
public string GatewayMessage { get; set; }
/// <summary>
/// 详细交易状态
/// </summary>
public DetailedStatusCode DetailedStatus { get; set; }
/// <summary>
/// 详细交易状态
/// </summary>
public string DetailedMessage { get; set; }
/// <summary>
/// 返回数据
/// </summary>
public T Data { get; set; }
/// <summary>
/// 默认构造函数
/// </summary>
public BaseResponse()
{
GatewayStatus = GatewayStatusCode.Success;
GatewayMessage = "成功";
DetailedStatus = DetailedStatusCode.Success;
DetailedMessage = "成功";
}
}
#endregion
#region 基础返回结果(不返回数据)
/// <summary>
/// 基础返回结果(不返回数据)
/// </summary>
public class BaseResponse
{
/// <summary>
/// 网关状态
/// </summary>
public GatewayStatusCode GatewayStatus { get; set; }
/// <summary>
/// 网关状态描述
/// </summary>
public string GatewayMessage { get; set; }
/// <summary>
/// 详细状态
/// </summary>
public DetailedStatusCode DetailedStatus { get; set; }
/// <summary>
/// 详细状态描述
/// </summary>
public string DetailedMessage { get; set; }
/// <summary>
/// 默认构造函数
/// </summary>
public BaseResponse()
{
GatewayStatus = GatewayStatusCode.Success;
GatewayMessage = "成功";
DetailedStatus = DetailedStatusCode.Success;
DetailedMessage = "成功";
}
}
#endregion
/// <summary>
/// 网关状态代码
/// </summary>
[Description("网关状态代码")]
public enum GatewayStatusCode : int
{
/// <summary>
/// 成功
/// </summary>
[Description("成功")]
Success = 1,
/// <summary>
/// 失败
/// </summary>
[Description("失败")]
Fail = 2,
}
/// <summary>
/// 接口详细描述代码
/// </summary>
[Description("接口详细描述代码")]
public enum DetailedStatusCode : int
{
#region 公用
/// <summary>
/// 无意义的,防止某些序列化工具在序列化时报错
/// </summary>
[Description("无意义的,防止某些序列化工具在序列化时报错")]
None = 0,
/// <summary>
/// 成功
/// </summary>
[Description("成功")]
Success = 1,
/// <summary>
/// 失败
/// </summary>
[Description("失败")]
Fail = 2,
/// <summary>
/// 未知异常
/// </summary>
[Description("未知异常")]
Error = 3,
/// <summary>
/// 参数异常
/// </summary>
[Description("参数异常")]
ParamsError = 4,
/// <summary>
/// 重复提交数据
/// </summary>
[Description("重复提交数据")]
RepeatSubmit = 5,
/// <summary>
/// 配置错误
/// </summary>3
[Description("配置错误")]
ConfigIsError = 6,
/// <summary>
/// 暂无数据
/// </summary>
[Description("暂无数据")]
DataIsNull = 7,
/// <summary>
/// 数据已存在
/// </summary>
[Description("数据已存在")]
DataAlreadyExists = 8,
#endregion
/// <summary>
/// 重复登录
/// </summary>
[Description("重复登录")]
RepeatLogin = 9,
/// <summary>
/// 验证码已过期或已使用
/// </summary>
[Description("验证码已过期或已使用")]
VerifyCodeExpire = 10,
/// <summary>
/// Token已过期
/// </summary>
[Description("Token已过期")]
TokenExpire = 11,
/// <summary>
/// 部分成功(操作数据时只有部分数据操作成功)
/// </summary>
[Description("部分成功(操作数据时只有部分数据操作成功)")]
PartialSuccess = 12,
/// <summary>
/// 用户不存在
/// </summary>
[Description("用户不存在")]
UserDoesNotExist = 13,
/// <summary>
/// 其他客户端登录
/// </summary>
[Description("其他客户端登录")]
OtherClientLogin = 14,
/// <summary>
/// 该用户已经退出登录
/// </summary>
[Description("该用户已经退出登录")]
LogOutExpire = 15,
/// <summary>
/// 用户已禁用
/// </summary>
[Description("用户已禁用")]
UserDisabled = 16,
/// <summary>
/// 账号已过期
/// </summary>
[Description("账号已过期")]
AccountExpired = 17,
/// <summary>
/// 无权限
/// </summary>
[Description("无权限")]
NoPermission = 18,
/// <summary>
/// 账号已冻结
/// </summary>
[Description("账号已冻结")]
AccountFrozen = 19,
/// <summary>
/// 用户已冻结
/// </summary>
[Description("用户已冻结")]
UserFrozen = 20,
/// <summary>
/// 只抛错误信息
/// </summary>
[Description("只抛错误信息")]
OnlyThrowErrorMsg = 100,
/// <summary>
/// 用户已存在
/// </summary>
[Description("用户已存在")]
UserExist = 101,
/// <summary>
/// 角色不存在
/// </summary>
[Description("角色不存在")]
RoleDoesNotExist = 102,
/// <summary>
/// 科室不存在
/// </summary>
[Description("科室不存在")]
DepartmentDoesNotExist = 103,
/// <summary>
/// 综合评价信息不存在
/// </summary>
[Description("综合评价信息不存在")]
GradeInfoDoesNotExist = 104,
/// <summary>
/// 已提交
/// </summary>
[Description("已提交")]
Submitted = 105,
}
}
......@@ -90,6 +90,7 @@
<Compile Include="Enumerate\SelectType.cs" />
<Compile Include="Enumerate\SendCfgType.cs" />
<Compile Include="Enumerate\SmsType.cs" />
<Compile Include="Model\ApiBaseResponse.cs" />
<Compile Include="Model\APIResult.cs" />
<Compile Include="Model\AppPushConfig.cs" />
<Compile Include="Model\ChildProject.cs" />
......
......@@ -199,5 +199,18 @@ namespace PushPlatform.Common.Util
return null;
}
#endregion
/// <summary>
/// 判断不为空的返回
/// </summary>
/// <param name="firstStr"></param>
/// <param name="secondStr"></param>
/// <returns></returns>
public static string ExtractNotEmtry(string firstStr,string secondStr)
{
if (!string.IsNullOrEmpty(firstStr))
return firstStr;
return secondStr;
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment