Commit 91588038 by 仙女 小

代码初始化

parent 753e3fa2
......@@ -9,5 +9,8 @@ namespace Kivii.Domain.Contents
internal class Configs
{
public const string TableNameReport = "LIMS_Reports";
public const string TableNameGuestLog = "REDI_GuestLogs";
public const string TableNameRedirect = "REDI_Redirects";
public const string RouteRedirect = "/Url/{InternalCode*}";
}
}
using Kivii.DataAnnotations;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Domain.Contents.Entities
{
[Api(Description = "访客日志")]
[Alias(Configs.TableNameGuestLog)]
public class GuestLog : EntityWithMetadata
{
[DefaultEmptyGuid]
[IgnoreUpdate]
public Guid RedirectKvid { get; set; }
[IgnoreUpdate]
[StringLength(20), Default("")]
public string Ip { get; set; }
[IgnoreUpdate]
[StringLength(500)]
public string UserAgent { get; set; }
[ApiMember(Description = "访问时间")]
[IgnoreUpdate]
public DateTime GuestTime { get; set; }
[ApiMember(Description = "访问者")]
[IgnoreUpdate]
[StringLength(50), Default("")]
public string UserName { get; set; }
[DefaultEmptyGuid]
[IgnoreUpdate]
public Guid UserKvid { get; set; }
[DefaultEmptyGuid]
[IgnoreUpdate]
public string Email { get; set; }
[DefaultEmptyGuid]
[IgnoreUpdate]
public string LastName { get; set; }
[DefaultEmptyGuid]
[IgnoreUpdate]
public string FirstName { get; set; }
[DefaultEmptyGuid]
[IgnoreUpdate]
public string DisplayName { get; set; }
[DefaultEmptyGuid]
[IgnoreUpdate]
public string Sequence { get; set; }
[DefaultEmptyGuid]
[IgnoreUpdate]
public string UserAuthName { get; set; }
[DefaultEmptyGuid]
[IgnoreUpdate]
public string UserAuthId { get; set; }
}
}
using Kivii.DataAnnotations;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Domain.Contents
{
[Api(Description = "重定向管理")]
[Alias(Configs.TableNameRedirect)]
public class Redirect : EntityWithMetadata, IEntityInAssemblyDb,
IEntityHasCreator, IEntityHasUpdater
{
#region 关联信息
//[InternalSetter]
[DefaultEmptyGuid]
public Guid BizKvid { get; set; }
[ApiMember(Description = "业务流水号")]
//[InternalSetter]
[StringLength(200)]
public string BizId { get; set; }
[ApiMember(Description = "业务类型")]
//[InternalSetter]
[StringLength(100)]
public string BizType { get; set; }
#endregion
#region 基本信息
[ApiMember(Description = "内部编号,如果有必须要唯一")]
[IgnoreUpdate, Unique]
[StringLength(50), Required]
public string InternalCode { get; set; }
[ApiMember(Description = "标题,简述")]
[StringLength(200), Required]
public string Title { get; set; }
[ApiMember(Description = "分类")]
[StringLength(50), Default("")]
public string Type { get; set; }
[ApiMember(Description = "跳转地址")]
[StringLength(500), Default("")]
public string Url { get; set; }
[ApiMember(Description = "模板地址,可以为空")]
[StringLength(500), Default("")]
public string TemplatePath { get; set; }
[ApiMember(Description = "是否发布")]
public bool IsPublish { get; set; }
#endregion
#region 文本 摘要 备注
[ApiMember(Description = "摘要,最大500字")]
[IgnoreUpdate]
[StringLength(500), Default("")]
public string Summary { get; set; }
[ApiMember(Description = "备注,最大2000字")]
[StringLength(2000), Default("")]
public string Remark { get; set; }
#endregion
#region 统计信息
[ApiMember(Description = "点击数")]
[InternalSetter]
[Default(0)]
public int Hits { get; set; }
#endregion
#region 操作相关 Creator Updater Operator OperateTime
[ApiMember(Description = "操作日期")]
[IgnoreUpdate]
[Required]
public DateTime OperateTime { get; set; }
[ApiMember(Description = "创建人Kvid ")]
[IgnoreUpdate]
[CurrentMemberKvid]
public Guid CreatorKvid { get; set; }
[ApiMember(Description = "创建人")]
[IgnoreUpdate]
[StringLength(50), CurrentMemberName]
public string CreatorName { get; set; }
[ApiMember(Description = "更新人Kvid ")]
[CurrentMemberKvid]
public Guid UpdaterKvid { get; set; }
[ApiMember(Description = "更新人")]
[StringLength(50), CurrentMemberName]
public string UpdaterName { get; set; }
#endregion
}
}
using Kivii.Domain.Contents.Services;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Domain.Contents.Feartures
{
public class RedirectFeature : IPlugin
{
public void Register(IAppHost appHost)
{
appHost.RegisterService<RedirectService>();
}
}
}
......@@ -51,8 +51,14 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Configs.cs" />
<Compile Include="Entities\GuestLog.cs" />
<Compile Include="Entities\Report.cs" />
<Compile Include="Feartures\RedirectFeature.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Entities\Redirect.cs" />
<Compile Include="Services\RedirectService.cs" />
<Compile Include="Transforms\RedirectRequest.cs" />
<Compile Include="Transforms\RestfulRedirect.cs" />
<Compile Include="Transforms\RestfulReport.cs" />
</ItemGroup>
<ItemGroup>
......
......@@ -11,6 +11,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Kivii.Domain.Contents")]
[assembly: AssemblyCopyright("Copyright © 2022")]
[assembly:AssemblyLoadFeature(typeof(Kivii.Domain.Contents.Feartures.RedirectFeature))]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
......
using Kivii.Domain.Contents.Transforms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Domain.Contents.Services
{
public class RedirectService : Service
{
public object Any(RedirectRequest request)
{
return this.Excute(request);
}
}
}
using Kivii.Domain.Contents.Entities;
using Kivii.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Domain.Contents.Transforms
{
[Route(Configs.RouteRedirect)]
public class RedirectRequest
{
public string InternalCode { get; set; }
}
internal static class RedirectExtensions
{
public static object Excute(this Service service, RedirectRequest request)
{
if (request.InternalCode.IsNullOrEmpty()) return HttpError.NotFound("Need InternalCode!");
var conn = KiviiContext.GetOpenedDbConnection<Redirect>();
var redirect = conn.Single<Redirect>(o => o.InternalCode.ToLower() == request.InternalCode.ToLower());
if (redirect == null) return HttpError.NotFound("Need Redirect Item!");
if (!redirect.IsPublish) return HttpError.NotFound("This Item is Unannounced!");
//访问数增加
conn.UpdateAdd(() => new Redirect { Hits = 1 }, o => o.Kvid == redirect.Kvid);
var session = service.GetSession();
var guestLog = new GuestLog();
guestLog.PopulateWith(session);
guestLog.Kvid = Guid.NewGuid();
guestLog.RedirectKvid = redirect.Kvid;
guestLog.GuestTime = DateTime.Now;
guestLog.Ip = service.Request.UserHostAddress;
guestLog.UserAgent = service.Request.UserAgent;
conn.Insert(guestLog);
if (redirect.TemplatePath.IsNullOrEmpty()) return HttpResult.Redirect(redirect.Url);
return new HttpResult
{
Response = redirect,
View = redirect.TemplatePath
};
}
}
}
using Kivii.Linq;
using Kivii.Web;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Domain.Contents.Transforms
{
#region CRUDQ
/// <summary>
/// 没有设置权限,方便Job中调用接口
/// </summary>
//[RequiresAnyRole(MemberRoles.Everyone)]
public class RedirectCreate : RestfulExecution<Redirect>
{
public Redirect Item { get; set; }
public List<Redirect> Items { get; set; }
public override object OnExecution(IRequest req, IResponse res)
{
(Item == null && Items.IsNullOrEmpty()).ThrowIfTrue("Need Item Or Items!");
if (Items.IsNullOrEmpty()) Items = new List<Redirect>();
if (Item != null) Items.Add(Item);
var conn = KiviiContext.GetOpenedDbConnection<Redirect>();
var rtns = new RestfulCreateResponse<Redirect>();
rtns.Results = new List<Redirect>();
foreach (var item in Items)
{
item.ThrowIfNull("请传入要创建的内容!");
if (item.Kvid == Guid.Empty) item.Kvid = Guid.NewGuid();
if (item.InternalCode.IsNullOrEmpty())
{
if (item.Type.IsNullOrEmpty()) throw new Exception("InternalCode和Type不能同时为空!");
item.InternalCode = $"{item.Type}/{item.Kvid.ToString().Substring(0, 8)}";
}
item.Title.ThrowIfNullOrEmpty("重定向标题不能为空!");
item.OperateTime = DateTime.Now;
conn.Insert(item);
rtns.Results.Add(item);
}
return rtns;
}
}
[RequiresAnyRole(MemberRoles.Administrator, MemberRoles.Manager, MemberRoles.Configuration)]
public class RedirectUpdate : RestfulUpdate<Redirect>
{ }
public class RedirectQuery : RestfulQuery<Redirect>
{ }
public class RedirectRead : RestfulRead<Redirect>
{ }
#endregion
[Api(Description = "业务关联")]
[RequiresAnyRole(MemberRoles.Administrator, MemberRoles.Manager, MemberRoles.Configuration)]
public class RedirectBiz : RestfulExecution<Redirect>
{
public List<Guid> Kvids { get; set; }
public Guid BizKvid { get; set; }
public string BizType { get; set; }
public string BizId { get; set; }
public override object OnExecution(IRequest req, IResponse res)
{
Kvids.ThrowIfNull("缺少Kvid");
BizKvid.ThrowIfEmpty("缺少关联对象BizKvid");
BizType.ThrowIfNullOrEmpty("缺少关联对象实体类名BizType");
Type entityType = Text.AssemblyUtils.FindType(BizType);
entityType.ThrowIfNull($"不正确的实体类名:{BizType}");
var conn = KiviiContext.GetOpenedDbConnection<Redirect>();
var redirects = conn.SelectByIds<Redirect>(Kvids);
var rtns = new RestfulUpdateResponse<Redirect>();
rtns.Results = new List<Redirect>();
foreach (var redirect in redirects)
{
redirect.ThrowIfNull("未找到对应数据,无法进行关联!");
redirect.BizId = BizId;
redirect.AddOnlyProperties(o => o.BizId);
redirect.BizType = BizType;
redirect.AddOnlyProperties(o => o.BizType);
redirect.BizKvid = BizKvid;
redirect.AddOnlyProperties(o => o.BizKvid);
conn.UpdateOnly(redirect);
rtns.Results.Add(redirect);
}
return rtns;
}
}
}
......@@ -22,7 +22,7 @@ namespace Kivii.Domain.Contents.Transforms
var report = conn.Select(queryReport).FirstOrDefault();
(report == null).ThrowIfTrue("未查询到报告!请重新核对报告号信息.");
var code = report.Kvid.ToString();
code = code.Substring(code.Length-4,4).ToLower();
code = code.Substring(0,4).ToLower();
(code != VerificationCode.ToLower()).ThrowIfTrue("验证码匹配失败!请重新核对验证码信息.");
var rtns = new RestfulQueryResponse<Report>();
rtns.Results = new List<Report>();
......
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