diff --git a/Src/Dlhis.Basic/Organization/Controllers/GainfoCardsController.cs b/Src/Dlhis.Basic/Organization/Controllers/GainfoCardsController.cs new file mode 100644 index 00000000..6ef9aed1 --- /dev/null +++ b/Src/Dlhis.Basic/Organization/Controllers/GainfoCardsController.cs @@ -0,0 +1,47 @@ +using Dlhis.Basic.Organization.Request; +using Dlhis.Basic.Organization.Response; +using Dlhis.Basic.Organization.Services; +using Dlhis.Basic.Packs; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace Dlhis.Basic.Organization.Controllers; + +/// +/// 档案卡记录 +/// +[Authorize] +[Route("api/[controller]")] +[ApiController] +public class GainfoCardsController : ControllerBase +{ + private readonly IGainfoCardService _gainfoCardService; + + public GainfoCardsController(IGainfoCardService gainfoCardService) + { + _gainfoCardService = gainfoCardService; + } + + /// + /// 换卡 + /// + /// + /// + [HttpPost("change")] + [Transactional] + public async Task ChangeCardAsync(ChangeCardRequest request) + { + await _gainfoCardService.ChangeCardAsync(request); + } + + /// + /// 换卡记录 + /// + /// + /// + [HttpGet("records")] + public async Task> GetChangeRecordsAsync(string userNo) + { + return await _gainfoCardService.GetChangeRecordsAsync(userNo); + } +} diff --git a/Src/Dlhis.Basic/Organization/Request/ChangeCardRequest.cs b/Src/Dlhis.Basic/Organization/Request/ChangeCardRequest.cs new file mode 100644 index 00000000..d470812f --- /dev/null +++ b/Src/Dlhis.Basic/Organization/Request/ChangeCardRequest.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; + +namespace Dlhis.Basic.Organization.Request; + +public class ChangeCardRequest +{ + [Required] + public string UserNo { get; set; } + + [Required] + public string CardNo { get; set; } + + [Required] + public string Reason { get; set; } + + public string Remark { get; set; } +} diff --git a/Src/Dlhis.Basic/Organization/Response/ChangeCardResponse.cs b/Src/Dlhis.Basic/Organization/Response/ChangeCardResponse.cs new file mode 100644 index 00000000..47943f0e --- /dev/null +++ b/Src/Dlhis.Basic/Organization/Response/ChangeCardResponse.cs @@ -0,0 +1,15 @@ +namespace Dlhis.Basic.Organization.Response; + +public class ChangeCardResponse +{ + public string UserNo { get; set; } + public string UserCode { get; set; } + public string UserName { get; set; } + public string CardNo { get; set; } + + public string Reason { get; set; } + + public string Remark { get; set; } + + public DateTime CreateTime { get; set; } +} diff --git a/Src/Dlhis.Basic/Organization/Services/IGainfoCardService.cs b/Src/Dlhis.Basic/Organization/Services/IGainfoCardService.cs new file mode 100644 index 00000000..8bbce4c7 --- /dev/null +++ b/Src/Dlhis.Basic/Organization/Services/IGainfoCardService.cs @@ -0,0 +1,11 @@ +using Dlhis.Basic.Organization.Request; +using Dlhis.Basic.Organization.Response; + +namespace Dlhis.Basic.Organization.Services; + +public interface IGainfoCardService +{ + Task ChangeCardAsync(ChangeCardRequest request); + + Task> GetChangeRecordsAsync(string userNo); +} diff --git a/Src/Dlhis.Basic/Organization/Services/IGainfoStore.cs b/Src/Dlhis.Basic/Organization/Services/IGainfoStore.cs index 3204fb74..8af56343 100644 --- a/Src/Dlhis.Basic/Organization/Services/IGainfoStore.cs +++ b/Src/Dlhis.Basic/Organization/Services/IGainfoStore.cs @@ -9,7 +9,7 @@ namespace Dlhis.Basic.Organization.Services; /// public interface IGainfoStore : IScopeDependency { - ISugarQueryable Queryable(GainfoStatusEnumType? gainfoStatus); + ISugarQueryable Queryable(GainfoStatusEnumType? gainfoStatus = null); diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoCardService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoCardService.cs new file mode 100644 index 00000000..c9d3213e --- /dev/null +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoCardService.cs @@ -0,0 +1,54 @@ +using Dlhis.Basic.Organization.Request; +using Dlhis.Basic.Organization.Response; +using Dlhis.Entity.Basic.Entity; +using Kurisu.AspNetCore.Utils.Extensions; +using Kurisu.SqlSugar.Services; + +namespace Dlhis.Basic.Organization.Services.Implements; + +public class GainfoCardService : IGainfoCardService +{ + private readonly IDbContext _dbContext; + private readonly IGainfoStore _gainfoStore; + + public GainfoCardService(IDbContext dbContext, IGainfoStore gainfoStore) + { + _dbContext = dbContext; + _gainfoStore = gainfoStore; + } + + public async Task ChangeCardAsync(ChangeCardRequest request) + { + var gainfo = await _gainfoStore.Queryable().Where(x => x.No == request.UserNo).FirstAsync(); + gainfo.ThrowIfNull("档案不存在"); + + gainfo.CardNo = request.CardNo; + + await _gainfoStore.UpdateAsync(gainfo); + await _dbContext.InsertAsync(new GainfoCardRecordEntity + { + UserNo = request.UserNo, + CardNo = request.CardNo, + Reason = request.Reason, + Remark = request.Remark, + }); + } + + public async Task> GetChangeRecordsAsync(string userNo) + { + return await _dbContext.Queryable() + .LeftJoin((x, ga) => x.UserNo == ga.No) + .Where(x => x.UserNo == userNo) + .Select((x, ga) => new ChangeCardResponse + { + UserNo = x.UserNo, + UserCode = ga.Code, + UserName = ga.Name, + CardNo = x.CardNo, + Reason = x.Reason, + Remark = x.Remark, + CreateTime = x.CreateTime, + }) + .ToListAsync(); + } +} diff --git a/Src/Dlhis.Entity/Basic/Entity/GainfoCardRecordEntity.cs b/Src/Dlhis.Entity/Basic/Entity/GainfoCardRecordEntity.cs new file mode 100644 index 00000000..59c4b49d --- /dev/null +++ b/Src/Dlhis.Entity/Basic/Entity/GainfoCardRecordEntity.cs @@ -0,0 +1,33 @@ +using Kurisu.Core.DataAccess.Entity; +using Kurisu.SqlSugar; +using SqlSugar; + +namespace Dlhis.Entity.Basic.Entity; + +[SugarTable(TableName = "GainfoCardRecord", TableDescription = "卡记录")] +public class GainfoCardRecordEntity : SugarBaseEntity, ITenantId +{ + /// + /// 档案No + /// + [SugarColumn(IsNullable = false, IndexGroupNameList = new[] { "idx_GainfoCardRecord_userno" })] + public string UserNo { get; set; } + + /// + /// 卡号 + /// + [SugarColumn(IsNullable = false)] + public string CardNo { get; set; } + + /// + /// 更换原因 + /// + public string Reason { get; set; } + + /// + /// 备注 + /// + public string Remark { get; set; } + + public string TenantId { get; set; } +}