diff --git a/Src/Dlhis.Basic/Organization/Controllers/FactorySettingController.cs b/Src/Dlhis.Basic/Organization/Controllers/FactorySettingController.cs
new file mode 100644
index 00000000..e6074b1f
--- /dev/null
+++ b/Src/Dlhis.Basic/Organization/Controllers/FactorySettingController.cs
@@ -0,0 +1,46 @@
+using Dlhis.Basic.Organization.Request;
+using Dlhis.Basic.Organization.Response;
+using Dlhis.Basic.Organization.Services;
+using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+
+namespace Dlhis.Basic.Organization.Controllers;
+
+///
+/// 厂区配置
+///
+[Authorize]
+[Route("api/[controller]")]
+[ApiController]
+public class FactorySettingController : ControllerBase
+{
+ private readonly IFactorySettingService _factorySettingService;
+
+ public FactorySettingController(IFactorySettingService factorySettingService)
+ {
+ _factorySettingService = factorySettingService;
+ }
+
+ ///
+ /// 获取厂区列表
+ ///
+ ///
+ [HttpGet("list")]
+ [IgnoreTenant]
+ public async Task> GetListAsync()
+ {
+ return await _factorySettingService.GetListAsync();
+ }
+
+ ///
+ /// 保存配置
+ ///
+ ///
+ [HttpPost("save")]
+ [IgnoreTenant]
+ public async Task SaveAsync(FactorySettingSaveRequest request)
+ {
+ await _factorySettingService.SaveAsync(request);
+ }
+}
\ No newline at end of file
diff --git a/Src/Dlhis.Basic/Organization/Request/FactorySettingSaveRequest.cs b/Src/Dlhis.Basic/Organization/Request/FactorySettingSaveRequest.cs
new file mode 100644
index 00000000..b2003fd0
--- /dev/null
+++ b/Src/Dlhis.Basic/Organization/Request/FactorySettingSaveRequest.cs
@@ -0,0 +1,19 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace Dlhis.Basic.Organization.Request;
+
+public class FactorySettingSaveRequest
+{
+ [Required]
+ public string Factory { get; set; }
+
+ ///
+ /// 外包人员自动下发
+ ///
+ public bool EnableOutsourceDown { get; set; }
+
+ ///
+ /// 档案二维码过期时间
+ ///
+ public int? UserQrCodeExpiration { get; set; }
+}
\ No newline at end of file
diff --git a/Src/Dlhis.Basic/Organization/Response/FactorySettingResponse.cs b/Src/Dlhis.Basic/Organization/Response/FactorySettingResponse.cs
new file mode 100644
index 00000000..fe69447b
--- /dev/null
+++ b/Src/Dlhis.Basic/Organization/Response/FactorySettingResponse.cs
@@ -0,0 +1,16 @@
+namespace Dlhis.Basic.Organization.Response;
+
+public class FactorySettingResponse
+{
+ public string Factory { get; set; }
+
+ ///
+ /// 是否启用外包自动下发
+ ///
+ public bool EnableOutsourceDown { get; set; }
+
+ ///
+ /// 档案二维码过期时间
+ ///
+ public int? UserQrCodeExpiration { get; set; }
+}
\ No newline at end of file
diff --git a/Src/Dlhis.Basic/Organization/Services/IFactorySettingService.cs b/Src/Dlhis.Basic/Organization/Services/IFactorySettingService.cs
new file mode 100644
index 00000000..0aee4dc4
--- /dev/null
+++ b/Src/Dlhis.Basic/Organization/Services/IFactorySettingService.cs
@@ -0,0 +1,11 @@
+using Dlhis.Basic.Organization.Request;
+using Dlhis.Basic.Organization.Response;
+
+namespace Dlhis.Basic.Organization.Services;
+
+public interface IFactorySettingService : IScopeDependency
+{
+ Task> GetListAsync();
+
+ Task SaveAsync(FactorySettingSaveRequest request);
+}
\ No newline at end of file
diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/FactorySettingService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/FactorySettingService.cs
new file mode 100644
index 00000000..76d4aca5
--- /dev/null
+++ b/Src/Dlhis.Basic/Organization/Services/Implements/FactorySettingService.cs
@@ -0,0 +1,59 @@
+using Dlhis.Basic.Organization.Request;
+using Dlhis.Basic.Organization.Response;
+using Dlhis.Entity.Sys.Entities;
+using Dlhis.Sys.Api;
+using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
+using Mapster;
+
+namespace Dlhis.Basic.Organization.Services.Implements;
+
+public class FactorySettingService : IFactorySettingService
+{
+ private readonly IDbContext _dbContext;
+ private readonly ITenantApi _tenantApi;
+
+ public FactorySettingService(IDbContext dbContext, ITenantApi tenantApi)
+ {
+ _dbContext = dbContext;
+ _tenantApi = tenantApi;
+ }
+
+ public async Task> GetListAsync()
+ {
+ var apiResult = await _tenantApi.GetMyTenantsAsync();
+ var factories = apiResult.Data;
+
+ var factoryCodes = factories.Select(x => x.Code).ToList();
+ var settings = await _dbContext.Queryable().Where(x => factoryCodes.Contains(x.TenantId))
+ .ToListAsync();
+
+ return factories.Select(item =>
+ {
+ return new FactorySettingResponse
+ {
+ Factory = factories.FirstOrDefault(x => x.Code == item.Code)?.Name,
+ EnableOutsourceDown = settings.FirstOrDefault(x => x.TenantId == item.Code)?.EnableOutsourceDown ?? false,
+ UserQrCodeExpiration = settings.FirstOrDefault(x => x.TenantId == item.Code)?.UserQrCodeExpiration,
+ };
+ }).ToList();
+ }
+
+ public async Task SaveAsync(FactorySettingSaveRequest request)
+ {
+ var setting = await _dbContext.Queryable().Where(x => request.Factory == x.TenantId).SingleAsync();
+ if (setting == null)
+ {
+ setting = request.Adapt();
+ setting.TenantId = request.Factory;
+
+ await _dbContext.InsertAsync(setting);
+ }
+ else
+ {
+ request.Adapt(setting);
+ setting.TenantId = request.Factory;
+
+ await _dbContext.UpdateAsync(setting);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Src/Dlhis.Entity/Sys/Entities/FactorySettingEntity.cs b/Src/Dlhis.Entity/Sys/Entities/FactorySettingEntity.cs
index 2c1cb8e2..2c8abf8e 100644
--- a/Src/Dlhis.Entity/Sys/Entities/FactorySettingEntity.cs
+++ b/Src/Dlhis.Entity/Sys/Entities/FactorySettingEntity.cs
@@ -13,20 +13,20 @@ public class FactorySettingEntity : SugarBaseEntity, ITenantId
///
/// 是否启用外包自动下发
///
- [SugarColumn(ColumnDataType = "bit", ColumnDescription = "是否启用外包自动下发")]
+ [SugarColumn(ColumnDataType = "bit", ColumnDescription = "是否启用外包自动下发", DefaultValue = "0")]
public bool EnableOutsourceDown { get; set; }
///
/// 档案二维码过期时间
///
- [SugarColumn(ColumnDescription = "档案二维码过期时间")]
- public int UserQrCodeExpiration { get; set; }
+ [SugarColumn(ColumnDescription = "档案二维码过期时间", IsNullable = true)]
+ public int? UserQrCodeExpiration { get; set; }
///
/// 电子餐券二维码过期时间
///
- [SugarColumn(ColumnDescription = "电子餐券二维码过期时间")]
- public int EMealVoucherQrCodeExpiration { get; set; }
+ [SugarColumn(ColumnDescription = "电子餐券二维码过期时间", IsNullable = true)]
+ public int? EMealVoucherQrCodeExpiration { get; set; }
public string TenantId { get; set; }
}
\ No newline at end of file