diff --git a/Infrastructure/ZR.Infrastructure.csproj b/Infrastructure/ZR.Infrastructure.csproj
index ac986db..869ca58 100644
--- a/Infrastructure/ZR.Infrastructure.csproj
+++ b/Infrastructure/ZR.Infrastructure.csproj
@@ -17,6 +17,8 @@
+
+
diff --git a/ZR.Admin.WebApi/Controllers/CommonController.cs b/ZR.Admin.WebApi/Controllers/CommonController.cs
index 785b620..9d621bd 100644
--- a/ZR.Admin.WebApi/Controllers/CommonController.cs
+++ b/ZR.Admin.WebApi/Controllers/CommonController.cs
@@ -1,5 +1,7 @@
using System.Net;
using System.Net.Sockets;
+using Infrastructure.Helper;
+using JinianNet.JNTemplate;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
@@ -9,6 +11,7 @@ using ZR.Service.IService;
using ZR.Service.System;
using ZR.Service.System.IService;
using ZR.ServiceCore.Model;
+using ZR.ServiceCore.Services.IService;
namespace ZR.Admin.WebApi.Controllers
{
@@ -47,8 +50,11 @@ namespace ZR.Admin.WebApi.Controllers
[HttpGet]
public IActionResult Index()
{
- return Ok("看到这里页面说明你已经成功启动了本项目:)\n\n" +
- "如果觉得项目有用,打赏作者喝杯咖啡作为奖励\n☛☛http://www.izhaorui.cn/doc/support.html\n");
+ var contentTpl = JnHelper.ReadTemplate("", "logo.txt");
+ var content = contentTpl?.Render();
+ // return Ok("看到这里页面说明你已经成功启动了本项目:)\n\n" +
+ // $"{content}如果觉得项目有用,打赏作者喝杯咖啡作为奖励\n☛☛http://www.izhaorui.cn/doc/support.html\n");
+ return Ok($"{content}\n\n看到这里页面说明你已经成功启动了本项目:)\n");
}
///
@@ -160,7 +166,7 @@ namespace ZR.Admin.WebApi.Controllers
uploadDto.FileDir = OptionsSetting.Upload.LocalSavePath;
}
file = await SysFileService.SaveFileToLocal(savePath, uploadDto.FileName, uploadDto.FileDir,
- HttpContext.GetName(), formFile, scheme + serverIP);
+ HttpContext.GetUId(), HttpContext.GetName(), formFile, scheme + serverIP);
break;
case StoreType.REMOTE:
break;
@@ -174,7 +180,8 @@ namespace ZR.Admin.WebApi.Controllers
{
return ToResponse(ResultCode.CUSTOM_ERROR, "上传文件过大,不能超过 " + AlimaxContentLength + " MB");
}
- file = new(formFile.FileName, uploadDto.FileName, fileExt, fileSize + "kb", uploadDto.FileDir, HttpContext.GetName())
+ file = new(formFile.FileName, uploadDto.FileName, fileExt, fileSize + "kb",
+ uploadDto.FileDir, HttpContext.GetUId(), HttpContext.GetName())
{
StoreType = (int)StoreType.ALIYUN,
FileType = formFile.ContentType
diff --git a/ZR.Admin.WebApi/Controllers/System/BaseCodeRuleController.cs b/ZR.Admin.WebApi/Controllers/System/BaseCodeRuleController.cs
new file mode 100644
index 0000000..347ab91
--- /dev/null
+++ b/ZR.Admin.WebApi/Controllers/System/BaseCodeRuleController.cs
@@ -0,0 +1,45 @@
+using ZR.Model;
+using ZR.Model.System;
+using ZR.ServiceCore.Services.IService;
+
+namespace ZR.Admin.WebApi.Controllers.System;
+[Route("base/codeRule")]
+public class BaseCodeRuleController : BaseController
+{
+ private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
+
+ private readonly IBaseCodeRuleService _baseCodeRuleService;
+
+ public BaseCodeRuleController(IBaseCodeRuleService baseCodeRuleService)
+ {
+ _baseCodeRuleService = baseCodeRuleService;
+ }
+
+ [HttpPost("addBaseCodeRule")]
+ public async Task AddBaseCodeRule([FromBody] BaseCodeRule baseCodeRule)
+ {
+ var result = await _baseCodeRuleService.InsertBaseCodeRuleAsync(baseCodeRule);
+ return SUCCESS(result);
+ }
+
+ [HttpDelete("deleteBaseCodeRule/{code}")]
+ public async Task DeleteBaseCodeRule(string code)
+ {
+ var result = await _baseCodeRuleService.DeleteBaseCodeRuleAsync(code);
+ return SUCCESS(result);
+ }
+
+ [HttpPut("updateBaseCodeRule")]
+ public async Task UpdateBaseCodeRule([FromBody] BaseCodeRule baseCodeRule)
+ {
+ var result = await _baseCodeRuleService.UpdateBaseCodeRule(baseCodeRule);
+ return SUCCESS(result);
+ }
+
+ [HttpGet("getBaseCodeRuleList")]
+ public IActionResult GetBaseCodeRuleList([FromQuery] BaseCodeRule baseCodeRule, [FromQuery] PagerInfo pagerInfo)
+ {
+ var result = _baseCodeRuleService.SelectBaseCodeRulePage(baseCodeRule, pagerInfo);
+ return SUCCESS(result);
+ }
+}
\ No newline at end of file
diff --git a/ZR.Admin.WebApi/Controllers/System/SysFileController.cs b/ZR.Admin.WebApi/Controllers/System/SysFileController.cs
index 4c29154..dd22b6f 100644
--- a/ZR.Admin.WebApi/Controllers/System/SysFileController.cs
+++ b/ZR.Admin.WebApi/Controllers/System/SysFileController.cs
@@ -5,6 +5,7 @@ using ZR.Model.System;
using ZR.Service.System.IService;
using ZR.ServiceCore.Model;
using ZR.ServiceCore.Model.Dto;
+using ZR.ServiceCore.Services.IService;
namespace ZR.Admin.WebApi.Controllers
{
diff --git a/ZR.Admin.WebApi/Controllers/System/SysNoticeController.cs b/ZR.Admin.WebApi/Controllers/System/SysNoticeController.cs
index 72f364d..fe71832 100644
--- a/ZR.Admin.WebApi/Controllers/System/SysNoticeController.cs
+++ b/ZR.Admin.WebApi/Controllers/System/SysNoticeController.cs
@@ -22,12 +22,12 @@ namespace ZR.Admin.WebApi.Controllers.System
///
/// 通知公告表接口
///
- private readonly ISysNoticeService _SysNoticeService;
+ private readonly ISysNoticeService _sysNoticeService;
private readonly IHubContext _hubContext;
- public SysNoticeController(ISysNoticeService SysNoticeService, IHubContext hubContext)
+ public SysNoticeController(ISysNoticeService sysNoticeService, IHubContext hubContext)
{
- _SysNoticeService = SysNoticeService;
+ _sysNoticeService = sysNoticeService;
_hubContext = hubContext;
}
@@ -41,7 +41,7 @@ namespace ZR.Admin.WebApi.Controllers.System
var predicate = Expressionable.Create();
predicate = predicate.And(m => m.Status == 0);
- var response = _SysNoticeService.GetPages(predicate.ToExpression(), parm);
+ var response = _sysNoticeService.GetPages(predicate.ToExpression(), parm);
return SUCCESS(response);
}
@@ -53,19 +53,19 @@ namespace ZR.Admin.WebApi.Controllers.System
[ActionPermissionFilter(Permission = "system:notice:list")]
public IActionResult QuerySysNotice([FromQuery] SysNoticeQueryDto parm)
{
- PagedInfo response = _SysNoticeService.GetPageList(parm);
+ PagedInfo response = _sysNoticeService.GetPageList(parm);
return SUCCESS(response);
}
///
/// 查询通知公告表详情
///
- ///
+ ///
///
- [HttpGet("{NoticeId}")]
- public IActionResult GetSysNotice(int NoticeId)
+ [HttpGet("{noticeId}")]
+ public IActionResult GetSysNotice(long noticeId)
{
- var response = _SysNoticeService.GetFirst(x => x.NoticeId == NoticeId);
+ var response = _sysNoticeService.GetFirst(x => x.NoticeId == noticeId);
return SUCCESS(response);
}
@@ -95,7 +95,7 @@ namespace ZR.Admin.WebApi.Controllers.System
// it.Create_time
// });
- var result = _SysNoticeService.Insertable(modal).ExecuteReturnSnowflakeId();
+ var result = _sysNoticeService.Insertable(modal).ExecuteReturnSnowflakeId();
return SUCCESS(result);
}
@@ -114,7 +114,7 @@ namespace ZR.Admin.WebApi.Controllers.System
.Map(dest => dest.NoticeId, src => src.NoticeId.ParseToLong());
var model = parm.Adapt(config).ToUpdate(HttpContext);
- var response = _SysNoticeService.Update(w => w.NoticeId == model.NoticeId, it => new SysNotice()
+ var response = _sysNoticeService.Update(w => w.NoticeId == model.NoticeId, it => new SysNotice()
{
NoticeTitle = model.NoticeTitle,
NoticeType = model.NoticeType,
@@ -132,16 +132,16 @@ namespace ZR.Admin.WebApi.Controllers.System
/// 发送通知公告表
///
///
- [HttpPut("send/{NoticeId}")]
+ [HttpPut("send/{noticeId}")]
[ActionPermissionFilter(Permission = "system:notice:update")]
[Log(Title = "发送通知公告", BusinessType = BusinessType.OTHER)]
- public IActionResult SendNotice(long NoticeId = 0)
+ public IActionResult SendNotice(long noticeId = 0)
{
- if (NoticeId <= 0)
+ if (noticeId <= 0)
{
throw new CustomException("请求实体不能为空");
}
- var response = _SysNoticeService.GetFirst(x => x.NoticeId == NoticeId);
+ var response = _sysNoticeService.GetFirst(x => x.NoticeId == noticeId);
if (response != null && response.Status == 0)
{
_hubContext.Clients.All.SendAsync(HubsConstant.ReceiveNotice, response.NoticeTitle, response.NoticeContent);
@@ -158,10 +158,10 @@ namespace ZR.Admin.WebApi.Controllers.System
[Log(Title = "通知公告", BusinessType = BusinessType.DELETE)]
public IActionResult DeleteSysNotice(string ids)
{
- int[] idsArr = Tools.SpitIntArrary(ids);
+ var idsArr = Tools.SpitLongArrary(ids);
if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); }
- var response = _SysNoticeService.Delete(idsArr);
+ var response = _sysNoticeService.Delete(idsArr);
return SUCCESS(response);
}
diff --git a/ZR.Admin.WebApi/Controllers/System/SysProfileController.cs b/ZR.Admin.WebApi/Controllers/System/SysProfileController.cs
index eb70c5c..252d985 100644
--- a/ZR.Admin.WebApi/Controllers/System/SysProfileController.cs
+++ b/ZR.Admin.WebApi/Controllers/System/SysProfileController.cs
@@ -6,6 +6,7 @@ using ZR.Model.System;
using ZR.Service.System.IService;
using ZR.ServiceCore.Model;
using ZR.ServiceCore.Model.Dto;
+using ZR.ServiceCore.Services.IService;
namespace ZR.Admin.WebApi.Controllers.System
{
@@ -133,7 +134,7 @@ namespace ZR.Admin.WebApi.Controllers.System
}
var file = await FileService.SaveFileToLocal(hostEnvironment.WebRootPath, "", "avatar",
- HttpContext.GetName(), formFile, serverIP);
+ HttpContext.GetUId(), HttpContext.GetName(), formFile, serverIP);
UserService.UpdatePhoto(new SysUser() { Avatar = file.AccessUrl, UserId = userId });
return SUCCESS(new { imgUrl = file.AccessUrl });
diff --git a/ZR.Admin.WebApi/IpRateLimitConfig.json b/ZR.Admin.WebApi/IpRateLimitConfig.json
new file mode 100644
index 0000000..c18ae7f
--- /dev/null
+++ b/ZR.Admin.WebApi/IpRateLimitConfig.json
@@ -0,0 +1,47 @@
+{
+ //接口请求限制
+ "IpRateLimiting": {
+ "EnableEndpointRateLimiting": true,
+ "StackBlockedRequests": false,
+ "RealIpHeader": "X-Real-IP",
+ "ClientIdHeader": "X-ClientId",
+ "HttpStatusCode": 429,
+ "EndpointWhitelist": [
+ "post:/system/dict/data/types",
+ "*:/msghub/negotiate",
+ "*:/LogOut",
+ "*:/common/uploadfile",
+ "post:/aim/msg/list/sendmsg"
+ ],
+ "QuotaExceededResponse": {
+ "Content": "{{\"code\":429,\"msg\":\"访问过于频繁,请稍后重试\"}}",
+ "ContentType": "application/json",
+ "StatusCode": 429
+ },
+ // "IpWhitelist": [ "127.0.0.1", "::1/10", "192.168.0.0/24" ],
+ //通用规则,api规则,结尾一定要带*
+ "GeneralRules": [
+ {
+ "Endpoint": "*:/captchaImage",
+ //时间段,格式:{数字}{单位};可使用单位:s, m, h, d
+ "Period": "3s",
+ "Limit": 5
+ },
+ {
+ "Endpoint": "((post)|(put)):*",
+ "Period": "3s",
+ "Limit": 1
+ },
+ {
+ "Endpoint": "*:/aim/msg/list/SendMsg",
+ "Period": "1s",
+ "Limit": 0,
+ }
+ ]
+ },
+ "IpRateLimitPolicies": {
+ //ip规则
+ "IpRules": [
+ ]
+ }
+}
\ No newline at end of file
diff --git a/ZR.Admin.WebApi/NLog.config b/ZR.Admin.WebApi/NLog.config
index 92b8eba..c633162 100644
--- a/ZR.Admin.WebApi/NLog.config
+++ b/ZR.Admin.WebApi/NLog.config
@@ -71,7 +71,18 @@
-
+
+
@@ -88,7 +99,7 @@
-
+
diff --git a/ZR.Admin.WebApi/Program.cs b/ZR.Admin.WebApi/Program.cs
index 557fba5..8685327 100644
--- a/ZR.Admin.WebApi/Program.cs
+++ b/ZR.Admin.WebApi/Program.cs
@@ -19,6 +19,9 @@ using IpRateLimitPolicy = AspNetCoreRateLimit.IpRateLimitPolicy;
var builder = WebApplication.CreateBuilder(args);
+//load json config by ipRateLimit
+builder.Configuration.AddJsonFile("IpRateLimitConfig.json", true, true);
+
//load json config by loginVerify
builder.Configuration.AddJsonFile("loginVerifyConf.json", true, true);
@@ -38,7 +41,7 @@ builder.Services.AddCors(builder.Configuration);
// Grpc
builder.Services.AddGrpc();
// 显示logo
-// builder.Services.AddLogo();
+builder.Services.AddLogo();
//消除Error unprotecting the session cookie警告
builder.Services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + "DataProtection"));
diff --git a/ZR.Admin.WebApi/appsettings.json b/ZR.Admin.WebApi/appsettings.json
index ae1d6e5..04f0c9e 100644
--- a/ZR.Admin.WebApi/appsettings.json
+++ b/ZR.Admin.WebApi/appsettings.json
@@ -103,35 +103,9 @@
"RedisServer": {
"open": 1, //是否启用redis
"Cache": "8.140.174.251:6379,password=Wyd210213,defaultDatabase=0,poolsize=50,ssl=false,writeBuffer=10240,prefix=cache:",
+// "Cache": "127.0.0.1:6379,password=Wyd210213,defaultDatabase=0,poolsize=50,ssl=false,writeBuffer=10240,prefix=cache:",
"Session": "8.140.174.251:6379,password=Wyd210213,defaultDatabase=0,poolsize=50,ssl=false,writeBuffer=10240,prefix=session:"
- },
- //接口请求限制
- "IpRateLimiting": {
- "EnableEndpointRateLimiting": true,
- "StackBlockedRequests": false,
- "RealIpHeader": "X-Real-IP",
- "ClientIdHeader": "X-ClientId",
- "HttpStatusCode": 429,
- "EndpointWhitelist": [ "post:/system/dict/data/types", "*:/msghub/negotiate", "*:/LogOut", "*:/common/uploadfile", "*:/VerifyScan" ],
- "QuotaExceededResponse": {
- "Content": "{{\"code\":429,\"msg\":\"访问过于频繁,请稍后重试\"}}",
- "ContentType": "application/json",
- "StatusCode": 429
- },
- //通用规则,api规则,结尾一定要带*
- "GeneralRules": [
- {
- "Endpoint": "*:/captchaImage",
- //时间段,格式:{数字}{单位};可使用单位:s, m, h, d
- "Period": "3s",
- "Limit": 5
- },
- {
- "Endpoint": "((post)|(put)):*",
- "Period": "3s",
- "Limit": 1
- }
- ]
+// "Session": "127.0.0.1:6379,password=Wyd210213,defaultDatabase=0,poolsize=50,ssl=false,writeBuffer=10240,prefix=session:"
},
//验证码配置
"CaptchaOptions": {
@@ -147,5 +121,8 @@
"BubbleCount": 3, // 气泡数量
"BubbleThickness": 1.0 // 气泡边沿厚度
}
+ },
+ "GrpcUrls": {
+ "FindTeacher": "http://localhost:5212"
}
}
diff --git a/ZR.Admin.WebApi/web.config b/ZR.Admin.WebApi/web.config
new file mode 100644
index 0000000..435c2a3
--- /dev/null
+++ b/ZR.Admin.WebApi/web.config
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ZR.Common/IdUtils.cs b/ZR.Common/IdUtils.cs
new file mode 100644
index 0000000..4aa8ccd
--- /dev/null
+++ b/ZR.Common/IdUtils.cs
@@ -0,0 +1,269 @@
+using System;
+using SqlSugar;
+using SqlSugar.IOC;
+
+namespace ZR.Common;
+
+public static class IdUtils
+{
+ // public static string GetSerialNumber(string code)
+ // {
+ // var vCode = new SugarParameter("@v_code", code);
+ // var vSerialNumber = new SugarParameter("@v_serialnumber", null, true);
+ // vSerialNumber.DbType = System.Data.DbType.String;
+ // //TODO 会抛异常
+ // DbScoped.SugarScope.GetConnectionScope(0).CopyNew().Ado.UseStoredProcedure()
+ // .GetDataTable("p_get_serialnumber", vCode, vSerialNumber);
+ // // .SqlQuerySingle("p_get_serialnumber", vCode, vSerialNumber);
+ // Console.WriteLine(vSerialNumber.Value.ToString());
+ // return vSerialNumber.Value.ToString();
+ // }
+
+ public static string GetSerialNumber(string code)
+ {
+ var serialNumber = string.Empty;
+
+ var tmpVal = string.Empty;
+ var resStr = string.Empty;
+ // var sp = string.Empty;
+ // 当前值(加1)
+ int? nextValue = 0;
+ // 目标值(加cnt)
+ int? destValue = 0;
+ // 循环值
+ int? cycleValue = 0;
+ // 系统类型值
+ var sysTypeValue = string.Empty;
+ // 类型值
+ var typeValue = string.Empty;
+
+ using var db = DbScoped.SugarScope.GetConnectionScope("0");
+ try
+ {
+ db.Ado.BeginTran();
+ var codeRule = db.Queryable()
+ .TranLock(DbLockType.Wait)
+ .First(it => it.Code == code);
+ if (codeRule.CurrVal == 0)
+ {
+ nextValue = codeRule.IniVal;
+ }
+ else
+ {
+ nextValue = codeRule.CurrVal + codeRule.Step;
+ }
+
+ // cycleValue = codeRule.CycleVal;
+ typeValue = codeRule.TypeVal;
+
+ cycleValue = codeRule.CycleVal ?? 1;
+
+ switch (codeRule.Type)
+ {
+ case "YYYY":
+ sysTypeValue = DateTime.Now.ToString("yyyy");
+ break;
+ case "YYYYMM":
+ sysTypeValue = DateTime.Now.ToString("yyyyMM");
+ break;
+ case "YYYYMMDD":
+ sysTypeValue = DateTime.Now.ToString("yyyyMMdd");
+ break;
+ default:
+ sysTypeValue = " ";
+ break;
+ }
+
+ // 循环类型值改变,初始化类型循环
+ if (string.IsNullOrWhiteSpace(sysTypeValue) != string.IsNullOrWhiteSpace(typeValue))
+ {
+ typeValue = sysTypeValue;
+ cycleValue = 1;
+ nextValue = codeRule.IniVal;
+ }
+
+ // 检查是否达到最大值,当达到最大值时抛出异常
+ if (codeRule.FinishVal != null)
+ {
+ if (codeRule.Cycle != 1)
+ {
+ // 不是循环,有循环不会引发最大值错误
+ if (codeRule.Step > 0)
+ {
+ if (nextValue > codeRule.FinishVal)
+ {
+ serialNumber = "-1";
+ }
+ }
+ else
+ {
+ if (nextValue < codeRule.FinishVal)
+ {
+ serialNumber = "-1";
+ }
+ }
+ }
+ }
+
+ destValue = nextValue;
+
+ // 计算取值,如果非循环,数量不足时把剩下的取出返回,如果循环,则循环取
+
+ if (codeRule.FinishVal != null)
+ {
+ if (codeRule.Step > 0)
+ {
+ if (destValue > codeRule.FinishVal)
+ {
+ if (codeRule.Cycle == 1)
+ {
+ cycleValue = cycleValue + 1;
+ destValue = codeRule.IniVal;
+ }
+ else
+ {
+
+ }
+ }
+ }
+ else
+ {
+ if (destValue < codeRule.FinishVal)
+ {
+ if (codeRule.Cycle == 1)
+ {
+ cycleValue = cycleValue + 1;
+ destValue = codeRule.IniVal;
+ }
+ else
+ {
+
+ }
+ }
+ }
+ }
+
+ // 生成值字符串,逗号分割
+ tmpVal = $"{typeValue}{destValue.ToString().PadLeft(codeRule.Width, codeRule.FillChar[0])}";
+
+ if (!string.IsNullOrWhiteSpace(codeRule.Prefix))
+ {
+ tmpVal = $"{codeRule.Prefix}{codeRule.JoinChar ?? string.Empty}{tmpVal}";
+ }
+
+ if (!string.IsNullOrWhiteSpace(codeRule.Sufix))
+ {
+ tmpVal = $"{tmpVal}{codeRule.JoinChar ?? string.Empty}{codeRule.Sufix}";
+ }
+
+ resStr = tmpVal;
+
+ serialNumber = resStr;
+
+ var foundRows = db.Updateable()
+ .SetColumns(it => new CodeRule
+ {
+ TypeVal = typeValue,
+ CycleVal = cycleValue,
+ CurrVal = destValue,
+ Version = codeRule.Version + 1
+ })
+ .Where(it => it.Code == code && it.Version == codeRule.Version)
+ .ExecuteCommand();
+ if (foundRows != 0) db.Ado.CommitTran();
+ }
+ catch (Exception e)
+ {
+ // 没有对应更新行,说明被别人更新了,重新计算
+ serialNumber = "-1";
+ db.Ado.RollbackTran();
+ throw;
+ }
+ return serialNumber;
+ }
+}
+[SugarTable("base_coderule")]
+[Tenant("0")]
+public class CodeRule
+{
+ ///
+ /// 代码
+ ///
+ [SugarColumn(IsPrimaryKey = true)]
+ public string Code { get; set; }
+
+ ///
+ /// 名称
+ ///
+ public string Name { get; set; }
+
+ ///
+ /// 类型
+ ///
+ public string Type { get; set; }
+
+ ///
+ /// 前缀
+ ///
+ public string Prefix { get; set; }
+
+ ///
+ /// 宽度
+ ///
+ public int Width { get; set; }
+
+ ///
+ /// 初始值
+ ///
+ public int IniVal { get; set; }
+
+ ///
+ /// 增量
+ ///
+ public int Step { get; set; }
+
+ ///
+ /// 终止值
+ ///
+ public int? FinishVal { get; set; }
+
+ ///
+ /// 循环
+ ///
+ public int Cycle { get; set; }
+
+ ///
+ /// 后缀
+ ///
+ public string Sufix { get; set; }
+
+ ///
+ /// 分隔符
+ ///
+ public string JoinChar { get; set; }
+
+ ///
+ /// 填充符
+ ///
+ public string FillChar { get; set; }
+
+ ///
+ /// 类型值
+ ///
+ public string TypeVal { get; set; }
+
+ ///
+ /// 循环号
+ ///
+ public int? CycleVal { get; set; }
+
+ ///
+ /// 当前值
+ ///
+ public int? CurrVal { get; set; }
+
+ ///
+ /// 版本号
+ ///
+ public int Version { get; set; }
+}
\ No newline at end of file
diff --git a/ZR.Repository/ZR.Repository.csproj b/ZR.Repository/ZR.Repository.csproj
index 0f43c8c..0a69b22 100644
--- a/ZR.Repository/ZR.Repository.csproj
+++ b/ZR.Repository/ZR.Repository.csproj
@@ -12,7 +12,5 @@
-
-
diff --git a/ZR.ServiceCore/Model/BaseCodeRule.cs b/ZR.ServiceCore/Model/BaseCodeRule.cs
new file mode 100644
index 0000000..0923382
--- /dev/null
+++ b/ZR.ServiceCore/Model/BaseCodeRule.cs
@@ -0,0 +1,89 @@
+namespace ZR.Model.System;
+///
+/// 编码规则表
+///
+[SugarTable("base_coderule")]
+[Tenant("0")]
+public class BaseCodeRule
+{
+ ///
+ /// 代码
+ ///
+ [SugarColumn(IsPrimaryKey = true)]
+ public string Code { get; set; }
+
+ ///
+ /// 名称
+ ///
+ public string Name { get; set; }
+
+ ///
+ /// 类型
+ ///
+ public string Type { get; set; }
+
+ ///
+ /// 前缀
+ ///
+ public string Prefix { get; set; }
+
+ ///
+ /// 宽度
+ ///
+ public int Width { get; set; }
+
+ ///
+ /// 初始值
+ ///
+ public int IniVal { get; set; }
+
+ ///
+ /// 增量
+ ///
+ public int Step { get; set; }
+
+ ///
+ /// 终止值
+ ///
+ public int FinishVal { get; set; }
+
+ ///
+ /// 循环
+ ///
+ public int Cycle { get; set; }
+
+ ///
+ /// 后缀
+ ///
+ public string Sufix { get; set; }
+
+ ///
+ /// 分隔符
+ ///
+ public string JoinChar { get; set; }
+
+ ///
+ /// 填充符
+ ///
+ public string FillChar { get; set; }
+
+ ///
+ /// 类型值
+ ///
+ public string TypeVal { get; set; }
+
+ ///
+ /// 循环号
+ ///
+ public int CycleVal { get; set; }
+
+ ///
+ /// 当前值
+ ///
+ public int CurrVal { get; set; }
+
+ ///
+ /// 版本号
+ ///
+ public int Version { get; set; }
+}
\ No newline at end of file
diff --git a/ZR.ServiceCore/Model/Dto/SysNoticeDto.cs b/ZR.ServiceCore/Model/Dto/SysNoticeDto.cs
index 5167320..01b9162 100644
--- a/ZR.ServiceCore/Model/Dto/SysNoticeDto.cs
+++ b/ZR.ServiceCore/Model/Dto/SysNoticeDto.cs
@@ -15,6 +15,7 @@ namespace ZR.ServiceCore.Model.Dto
public string NoticeContent { get; set; }
public int Status { get; set; }
public string Remark { get; set; }
+ public string Create_name { get; set; }
public DateTime Create_time { get; set; }
}
diff --git a/ZR.ServiceCore/Model/SysFile.cs b/ZR.ServiceCore/Model/SysFile.cs
index 0f65979..8144663 100644
--- a/ZR.ServiceCore/Model/SysFile.cs
+++ b/ZR.ServiceCore/Model/SysFile.cs
@@ -39,9 +39,13 @@
///
public string FileExt { get; set; }
///
- /// 创建人
+ /// 创建者
///
- public string Create_by { get; set; }
+ public long Create_by { get; set; }
+ ///
+ /// 创建者名称
+ ///
+ public string Create_name { get; set; }
///
/// 上传时间
///
@@ -56,14 +60,16 @@
public string AccessUrl { get; set; }
public SysFile() { }
- public SysFile(string originFileName, string fileName, string ext, string fileSize, string storePath, string create_by)
+ public SysFile(string originFileName, string fileName, string ext, string fileSize, string storePath,
+ long createBy, string createName)
{
StorePath = storePath;
RealName = originFileName;
FileName = fileName;
FileExt = ext;
FileSize = fileSize;
- Create_by = create_by;
+ Create_by = createBy;
+ Create_name = createName;
Create_time = DateTime.Now;
}
}
diff --git a/ZR.ServiceCore/Services/BaseCodeRuleService.cs b/ZR.ServiceCore/Services/BaseCodeRuleService.cs
new file mode 100644
index 0000000..8229802
--- /dev/null
+++ b/ZR.ServiceCore/Services/BaseCodeRuleService.cs
@@ -0,0 +1,33 @@
+using Infrastructure.Attribute;
+using ZR.Model;
+using ZR.Model.System;
+using ZR.Service;
+using ZR.Service.System.IService;
+using ZR.ServiceCore.Services.IService;
+
+namespace ZR.ServiceCore.Services;
+
+[AppService(ServiceType = typeof(IBaseCodeRuleService), ServiceLifetime = LifeTime.Transient)]
+public class BaseCodeRuleService : BaseService, IBaseCodeRuleService
+{
+ public Task InsertBaseCodeRuleAsync(BaseCodeRule baseCodeRule)
+ {
+ return Insertable(baseCodeRule).ExecuteCommandAsync();
+ }
+
+ public Task DeleteBaseCodeRuleAsync(string code)
+ {
+ return Deleteable().Where(m => m.Code == code).ExecuteCommandAsync();
+ }
+
+ public Task UpdateBaseCodeRule(BaseCodeRule baseCodeRule)
+ {
+ return Updateable(baseCodeRule).ExecuteCommandAsync();
+ }
+
+ public PagedInfo SelectBaseCodeRulePage(BaseCodeRule baseCodeRule, PagerInfo pager)
+ {
+ var exp = Expressionable.Create();
+ return GetPages(exp.ToExpression(), pager);
+ }
+}
\ No newline at end of file
diff --git a/ZR.ServiceCore/Services/IService/IBaseCodeRuleService.cs b/ZR.ServiceCore/Services/IService/IBaseCodeRuleService.cs
new file mode 100644
index 0000000..57dfa5f
--- /dev/null
+++ b/ZR.ServiceCore/Services/IService/IBaseCodeRuleService.cs
@@ -0,0 +1,16 @@
+using ZR.Model;
+using ZR.Model.System;
+using ZR.Service;
+
+namespace ZR.ServiceCore.Services.IService;
+
+public interface IBaseCodeRuleService : IBaseService
+{
+ public Task InsertBaseCodeRuleAsync(BaseCodeRule baseCodeRule);
+
+ public Task DeleteBaseCodeRuleAsync(string code);
+
+ public Task UpdateBaseCodeRule(BaseCodeRule baseCodeRule);
+
+ public PagedInfo SelectBaseCodeRulePage(BaseCodeRule baseCodeRule, PagerInfo pager);
+}
\ No newline at end of file
diff --git a/ZR.ServiceCore/Services/IService/ISysFileService.cs b/ZR.ServiceCore/Services/IService/ISysFileService.cs
index 6b59bb3..7fc4de9 100644
--- a/ZR.ServiceCore/Services/IService/ISysFileService.cs
+++ b/ZR.ServiceCore/Services/IService/ISysFileService.cs
@@ -1,10 +1,8 @@
-using Infrastructure.Attribute;
-using Microsoft.AspNetCore.Http;
-using System.Threading.Tasks;
-using ZR.Model.System;
+using Microsoft.AspNetCore.Http;
+using ZR.Service;
using ZR.ServiceCore.Model;
-namespace ZR.Service.System.IService
+namespace ZR.ServiceCore.Services.IService
{
public interface ISysFileService : IBaseService
{
@@ -19,7 +17,8 @@ namespace ZR.Service.System.IService
///
///
/// 文件对象
- Task SaveFileToLocal(string rootPath, string fileName, string fileDir, string userName, IFormFile formFile, string uploadUrl);
+ Task SaveFileToLocal(string rootPath, string fileName, string fileDir, long userId, string userName,
+ IFormFile formFile, string uploadUrl);
Task SaveFileToAliyun(SysFile file, IFormFile formFile);
///
diff --git a/ZR.ServiceCore/Services/SysFileService.cs b/ZR.ServiceCore/Services/SysFileService.cs
index 0c49caf..90a5330 100644
--- a/ZR.ServiceCore/Services/SysFileService.cs
+++ b/ZR.ServiceCore/Services/SysFileService.cs
@@ -1,18 +1,19 @@
-using Infrastructure;
+using System.Net;
+using System.Security.Cryptography;
+using System.Text;
+using Infrastructure;
using Infrastructure.Attribute;
using Infrastructure.Enums;
using Infrastructure.Model;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Options;
-using System.Net;
-using System.Security.Cryptography;
-using System.Text;
using ZR.Common;
-using ZR.Model.System;
+using ZR.Service;
using ZR.Service.System.IService;
using ZR.ServiceCore.Model;
+using ZR.ServiceCore.Services.IService;
-namespace ZR.Service.System
+namespace ZR.ServiceCore.Services
{
///
/// 文件管理
@@ -38,7 +39,8 @@ namespace ZR.Service.System
/// 上传的文件流
///
///
- public async Task SaveFileToLocal(string rootPath, string fileName, string fileDir, string userName, IFormFile formFile, string uploadUrl)
+ public async Task SaveFileToLocal(string rootPath, string fileName, string fileDir, long userId, string userName,
+ IFormFile formFile, string uploadUrl)
{
string fileExt = Path.GetExtension(formFile.FileName);
fileName = (fileName.IsEmpty() ? HashFileName() : fileName) + fileExt;
@@ -58,7 +60,7 @@ namespace ZR.Service.System
}
// string uploadUrl = OptionsSetting.Upload.UploadUrl;
string accessPath = string.Concat(uploadUrl, "/", filePath.Replace("\\", "/"), "/", fileName);
- SysFile file = new(formFile.FileName, fileName, fileExt, fileSize + "kb", filePath, userName)
+ SysFile file = new(formFile.FileName, fileName, fileExt, fileSize + "kb", filePath, userId, userName)
{
StoreType = (int)StoreType.LOCAL,
FileType = formFile.ContentType,