From 9125b9804582dc7a47c0ed462e2b078f73fdddc7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E9=B9=8F?= <304594656@qq.com>
Date: Mon, 16 Dec 2024 16:09:43 +0800
Subject: [PATCH] =?UTF-8?q?=E5=9B=9E=E6=94=B6=E8=AE=B0=E5=BD=95=E7=95=8C?=
=?UTF-8?q?=E9=9D=A2=E5=B1=95=E7=A4=BA:=201.=E5=A2=9E=E5=8A=A0=E5=8D=95?=
=?UTF-8?q?=E4=BB=B7/=E9=87=91=E9=A2=9D/=E6=93=8D=E4=BD=9C=E5=91=98?=
=?UTF-8?q?=EF=BC=9B=202.=E6=94=AF=E6=8C=81=E7=94=A8=E6=88=B7=E8=87=AA?=
=?UTF-8?q?=E5=AE=9A=E4=B9=89=E5=B1=95=E7=A4=BA=E5=88=97=EF=BC=9B=202.?=
=?UTF-8?q?=E6=94=AF=E6=8C=81=E7=AE=A1=E7=90=86=E5=91=98=E8=87=AA=E5=AE=9A?=
=?UTF-8?q?=E4=B9=89=E5=88=97=E5=90=8D/=E6=98=AF=E5=90=A6=E5=B1=95?=
=?UTF-8?q?=E7=A4=BA=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ResultInfos/Dtos/ResultDto.cs | 21 ++
.../ResultInfos/ResultService.cs | 5 +
Waste.Application/Waste.Application.xml | 90 +++++
Waste.Domain/DataModel/JT_Setting.cs | 311 ++++++++++++++++++
Waste.Web.Entry/Handler/BaseModel.cs | 7 +
.../Pages/Result/GlobalConfig.cshtml | 97 ++++++
.../Pages/Result/GlobalConfig.cshtml.cs | 43 +++
Waste.Web.Entry/Pages/Result/Index.cshtml | 103 +++---
Waste.Web.Entry/Pages/Result/Index.cshtml.cs | 47 ++-
.../Pages/Result/ResultColumnConfigService.cs | 206 ++++++++++++
10 files changed, 871 insertions(+), 59 deletions(-)
create mode 100644 Waste.Domain/DataModel/JT_Setting.cs
create mode 100644 Waste.Web.Entry/Pages/Result/GlobalConfig.cshtml
create mode 100644 Waste.Web.Entry/Pages/Result/GlobalConfig.cshtml.cs
create mode 100644 Waste.Web.Entry/Pages/Result/ResultColumnConfigService.cs
diff --git a/Waste.Application/ResultInfos/Dtos/ResultDto.cs b/Waste.Application/ResultInfos/Dtos/ResultDto.cs
index 00a9cfc..ad99880 100644
--- a/Waste.Application/ResultInfos/Dtos/ResultDto.cs
+++ b/Waste.Application/ResultInfos/Dtos/ResultDto.cs
@@ -146,6 +146,27 @@ namespace Waste.Application
/// 上报是否成功,1-成功,0-失败
///
public int PostStatus { get; set; }
+
+ ///
+ /// 物品小类
+ ///
+ public string Measure_WasteSType { get; set; }
+ ///
+ /// 价格
+ ///
+ public decimal? Measure_Price { get; set; }
+ ///
+ /// 金额
+ ///
+ public decimal? Measure_Amount { get; set; }
+ ///
+ /// 操作员
+ ///
+ public string Measure_OpUser { get; set; }
+ ///
+ /// 唯一消息ID
+ ///
+ public string Measure_UUID { get; set; }
}
///
diff --git a/Waste.Application/ResultInfos/ResultService.cs b/Waste.Application/ResultInfos/ResultService.cs
index b1ebcda..e802254 100644
--- a/Waste.Application/ResultInfos/ResultService.cs
+++ b/Waste.Application/ResultInfos/ResultService.cs
@@ -145,6 +145,11 @@ namespace Waste.Application
});
var ext = allext.FirstOrDefault(e => e.ResultId == it.Id);
it.WasteType = ext != null && !ext.WasteSType.IsEmpty() ? $"{ext.WasteSType}【{it.WasteType}】" : it.WasteType;
+ it.Measure_WasteSType = ext?.WasteSType;
+ it.Measure_Price = ext?.Price;
+ it.Measure_Amount = ext?.Amount;
+ it.Measure_OpUser = ext?.OpUser;
+ it.Measure_UUID = ext?.UUID;
})
.ToPageListAsync(param.offset, param.limit, totalnum);
return new PageParms
diff --git a/Waste.Application/Waste.Application.xml b/Waste.Application/Waste.Application.xml
index 9ef9b59..a7fcc08 100644
--- a/Waste.Application/Waste.Application.xml
+++ b/Waste.Application/Waste.Application.xml
@@ -1722,6 +1722,31 @@
上报是否成功,1-成功,0-失败
+
+
+ 物品小类
+
+
+
+
+ 价格
+
+
+
+
+ 金额
+
+
+
+
+ 操作员
+
+
+
+
+ 唯一消息ID
+
+
上传的数据包体
@@ -2398,6 +2423,36 @@
上报时间
+
+
+ 设备机器码
+
+
+
+
+ 设备编号
+
+
+
+
+ 设备所属省份
+
+
+
+
+ 设备所属城市
+
+
+
+
+ 设备所属区/县
+
+
+
+
+ 设备详细地址
+
+
发送第三方消息
@@ -2448,6 +2503,41 @@
设备ID
+
+
+ 设备机器码
+
+
+
+
+ 设备编号
+
+
+
+
+ 设备所属省份
+
+
+
+
+ 设备所属城市
+
+
+
+
+ 设备所属区/县
+
+
+
+
+ 设备详细地址
+
+
+
+
+ 最近心跳时间
+
+
CAP订阅相关接口
diff --git a/Waste.Domain/DataModel/JT_Setting.cs b/Waste.Domain/DataModel/JT_Setting.cs
new file mode 100644
index 0000000..5781538
--- /dev/null
+++ b/Waste.Domain/DataModel/JT_Setting.cs
@@ -0,0 +1,311 @@
+using System;
+using System.Threading.Tasks;
+using Furion.DependencyInjection;
+using SqlSugar;
+using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
+using System.Linq;
+using Microsoft.EntityFrameworkCore.Query.Internal;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Options;
+
+namespace Waste.Domain
+{
+ public class JT_Setting
+ {
+ public JT_Setting() { }
+ public JT_Setting(Guid id, string name, string value, string providerName, string providerKey)
+ {
+ this.Id = id;
+ this.Name = name;
+ this.Value = value;
+ this.ProviderName = providerName;
+ this.ProviderKey = providerKey;
+ }
+ [SugarColumn(IsPrimaryKey = true)]
+ public Guid Id { get; set; }
+ public string Name { get; set; }
+ public string Value { get; set; }
+
+ public string ProviderName { get; set; }
+ public string ProviderKey { get; set; }
+
+ public override string ToString()
+ {
+ return $"{base.ToString()}, Name = {Name}, Value = {Value}, ProviderName = {ProviderName}, ProviderKey = {ProviderKey}";
+ }
+ }
+ public class SettingProvider : ITransient
+ {
+ private readonly IServiceProvider _serviceProvider;
+
+ private readonly SettingDefinitionManager SettingDefinitionManager;
+ private readonly SettingValueProviderManager SettingValueProviderManager;
+
+
+ public SettingProvider(IServiceProvider serviceProvider, SettingDefinitionManager settingDefinitionManager, SettingValueProviderManager settingValueProviderManager)
+ {
+ _serviceProvider = serviceProvider;
+ SettingDefinitionManager = settingDefinitionManager;
+ SettingValueProviderManager = settingValueProviderManager;
+ }
+
+ public virtual async Task GetOrNullAsync(string name)
+ {
+ var setting = await SettingDefinitionManager.GetAsync(name);
+ var providers = Enumerable
+ .Reverse(SettingValueProviderManager.Providers);
+
+ if (setting.Providers.Any())
+ {
+ providers = providers.Where(p => setting.Providers.Contains(p.Name));
+ }
+
+ //TODO: How to implement setting.IsInherited?
+
+ var value = await GetOrNullValueFromProvidersAsync(providers, setting);
+ /* if (value != null && setting.IsEncrypted)
+ {
+ value = SettingEncryptionService.Decrypt(setting, value);
+ }*/
+
+ return value;
+ }
+
+
+
+ protected virtual async Task GetOrNullValueFromProvidersAsync(
+ IEnumerable providers,
+ SettingDefinition setting)
+ {
+ foreach (var provider in providers)
+ {
+ var value = await provider.GetOrNullAsync(setting);
+ if (value != null)
+ {
+ return value;
+ }
+ }
+
+ return null;
+ }
+ }
+
+ public class SettingDefinitionManager : ISingleton
+ {
+ protected IDictionary SettingDefinitions { get; } =
+ new Dictionary();
+
+ public SettingDefinitionManager AddSettingDefinition(SettingDefinition settingDefinition)
+ {
+ SettingDefinitions[settingDefinition.Name] = settingDefinition;
+ return this;
+ }
+ public virtual async Task GetAsync(string name)
+ {
+
+ var setting = await GetOrNullAsync(name);
+
+ if (setting == null)
+ {
+ throw new Exception("Undefined setting: " + name);
+ }
+
+ return setting;
+ }
+ public virtual Task GetOrNullAsync(string name)
+ {
+ return Task.FromResult(GetOrDefault(SettingDefinitions, name));
+ }
+ public static TValue? GetOrDefault(IDictionary dictionary, TKey key)
+ {
+ return dictionary.TryGetValue(key, out var obj) ? obj : default;
+ }
+ }
+
+ public class SettingValueProviderManager : ISingleton
+ {
+ public List Providers => _lazyProviders.Value;
+ private readonly Lazy> _lazyProviders;
+ protected IServiceProvider ServiceProvider { get; }
+ public SettingValueProviderManager(IServiceProvider serviceProvider)
+ {
+ ServiceProvider = serviceProvider;
+ _lazyProviders = new Lazy>(GetProviders, true);
+ }
+
+
+
+ protected virtual List GetProviders()
+ {
+
+ using (var scope = ServiceProvider.CreateScope())
+
+ return new List()
+ {
+ scope.ServiceProvider.GetRequiredService(),
+ scope.ServiceProvider.GetRequiredService(),
+ scope.ServiceProvider.GetRequiredService(),
+ };
+ }
+ }
+
+
+ public class SettingManagementStore : ITransient
+ {
+ private readonly ISqlSugarRepository repository;
+
+ public SettingManagementStore(ISqlSugarRepository repository)
+ {
+ this.repository = repository;
+ }
+
+ public virtual async Task GetOrNullAsync(string name, string providerName, string providerKey)
+ {
+ return (await FindAsync(name, providerName, providerKey))?.Value;
+ }
+ public virtual async Task SetAsync(string name, string value, string providerName, string providerKey)
+ {
+ var setting = await FindAsync(name, providerName, providerKey);
+ if (setting == null)
+ {
+ setting = new JT_Setting(Guid.NewGuid(), name, value, providerName, providerKey);
+ await repository.InsertAsync(setting);
+ }
+ else
+ {
+ setting.Value = value;
+ await repository.UpdateAsync(setting);
+ }
+
+
+ }
+
+ private async Task FindAsync(string name, string providerName, string providerKey)
+ {
+ return await repository.Where(x =>
+ x.Name == name && x.ProviderName == providerName)
+ .WhereIF(!string.IsNullOrWhiteSpace(providerKey), x => x.ProviderKey == providerKey).FirstAsync();
+ }
+ }
+
+ public abstract class SettingValueProvider : ITransient
+ {
+ public abstract string Name { get; }
+
+ protected SettingManagementStore SettingStore { get; }
+
+ protected SettingValueProvider(SettingManagementStore settingStore)
+ {
+ SettingStore = settingStore;
+ }
+ public abstract Task GetOrNullAsync(SettingDefinition setting);
+
+ protected virtual async Task SetAsync(string name, string value, string providerKey)
+ {
+ await SettingStore.SetAsync(name, value, Name, providerKey);
+
+ }
+
+ protected virtual async Task SetAsync(SettingDefinition setting, string value, string providerKey)
+ {
+ await SettingStore.SetAsync(setting.Name, value, Name, providerKey);
+ }
+
+ }
+
+ public class GlobalSettingValueProvider : SettingValueProvider
+ {
+ public GlobalSettingValueProvider(SettingManagementStore settingStore) : base(settingStore)
+ {
+ }
+
+ public const string ProviderName = "G";
+
+ public override string Name => ProviderName;
+
+ public override Task GetOrNullAsync(SettingDefinition setting)
+ {
+ return SettingStore.GetOrNullAsync(setting.Name, Name, null);
+ }
+ public Task SetAsync(string name, string value)
+ {
+ return base.SetAsync(name, value, null);
+ }
+ }
+ public class UserSettingValueProvider : SettingValueProvider
+ {
+ public const string ProviderName = "U";
+
+ public override string Name => ProviderName;
+
+ protected ICurrentUser CurrentUser { get; }
+
+ public UserSettingValueProvider(SettingManagementStore settingStore, ICurrentUser currentUser)
+ : base(settingStore)
+ {
+ CurrentUser = currentUser;
+ }
+
+ public override async Task GetOrNullAsync(SettingDefinition setting)
+ {
+ if (CurrentUser.Id == null)
+ {
+ return null;
+ }
+
+ return await SettingStore.GetOrNullAsync(setting.Name, Name, CurrentUser.Id.ToString());
+ }
+
+ public Task SetAsync(string name, string value)
+ {
+ return base.SetAsync(name, value, CurrentUser.Id.ToString());
+ }
+ }
+
+ public interface ICurrentUser
+ {
+ Guid? Id { get; }
+ }
+ public class DefaultValueSettingValueProvider : SettingValueProvider
+ {
+ public const string ProviderName = "D";
+
+ public override string Name => ProviderName;
+
+ public DefaultValueSettingValueProvider(SettingManagementStore settingStore)
+ : base(settingStore)
+ {
+
+ }
+
+ public override Task GetOrNullAsync(SettingDefinition setting)
+ {
+ return Task.FromResult(setting.DefaultValue);
+ }
+
+
+ }
+ // public Guid UserId { get; set; }
+
+ public class SettingDefinition
+ {
+ ///
+ /// Unique name of the setting.
+ ///
+ [NotNull]
+ public string Name { get; set; }
+
+ public string DisplayName { get; set; }
+
+ ///
+ /// Default value of the setting.
+ ///
+ public string? DefaultValue { get; set; }
+ ///
+ /// A list of allowed providers to get/set value of this setting.
+ /// An empty list indicates that all providers are allowed.
+ ///
+ public List Providers { get; } = new List();
+ }
+}
\ No newline at end of file
diff --git a/Waste.Web.Entry/Handler/BaseModel.cs b/Waste.Web.Entry/Handler/BaseModel.cs
index be36528..9041028 100644
--- a/Waste.Web.Entry/Handler/BaseModel.cs
+++ b/Waste.Web.Entry/Handler/BaseModel.cs
@@ -6,6 +6,8 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
+using Furion.DependencyInjection;
+using Waste.Domain;
namespace Waste.Web.Entry
{
@@ -65,4 +67,9 @@ namespace Waste.Web.Entry
});
}
}
+
+ public class CurrentUser : ICurrentUser, ITransient
+ {
+ public Guid? Id => OperatorProvider.Provider.GetCurrent()?.UserId;
+ }
}
diff --git a/Waste.Web.Entry/Pages/Result/GlobalConfig.cshtml b/Waste.Web.Entry/Pages/Result/GlobalConfig.cshtml
new file mode 100644
index 0000000..5821570
--- /dev/null
+++ b/Waste.Web.Entry/Pages/Result/GlobalConfig.cshtml
@@ -0,0 +1,97 @@
+@page
+@model Waste.Web.Entry.Pages.Result.GlobalConfigModel
+@{
+ ViewData["Title"] = "字段配置";
+}
+
+
+@section Scripts
+{
+
+
+}
diff --git a/Waste.Web.Entry/Pages/Result/GlobalConfig.cshtml.cs b/Waste.Web.Entry/Pages/Result/GlobalConfig.cshtml.cs
new file mode 100644
index 0000000..23b8c2c
--- /dev/null
+++ b/Waste.Web.Entry/Pages/Result/GlobalConfig.cshtml.cs
@@ -0,0 +1,43 @@
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.RazorPages;
+
+namespace Waste.Web.Entry.Pages.Result
+{
+ public class GlobalConfigModel : PageModel
+ {
+ private readonly ResultColumnConfigService columnConfigService;
+
+ public GlobalConfigModel(ResultColumnConfigService columnConfigService)
+ {
+ this.columnConfigService = columnConfigService;
+ }
+
+ public async Task OnGetAsync()
+ {
+ Column = (await columnConfigService.GetGlobalColumn()).Select(x => new GlobalColumnConfigOutput
+ {
+ SystemTitle = ResultColumnConfigService.SystemColumn[x.Name],
+ Name = x.Name,
+ Title = x.Title,
+ IsShow = x.IsShow
+ });
+
+ }
+
+ public async Task OnPostUpdateConfigAsync([FromBody] List input)
+ {
+ await columnConfigService.WriteGlobalConfig(input);
+ //await service.UpdateAccountConfig(Baseuser.UserId, config);
+ return Content("ok");
+ }
+
+ public IEnumerable Column { get; set; }
+ public class GlobalColumnConfigOutput : GlobalColumnConfig
+ {
+ public string SystemTitle { get; set; }
+ }
+ }
+}
diff --git a/Waste.Web.Entry/Pages/Result/Index.cshtml b/Waste.Web.Entry/Pages/Result/Index.cshtml
index 701dd74..2d17bea 100644
--- a/Waste.Web.Entry/Pages/Result/Index.cshtml
+++ b/Waste.Web.Entry/Pages/Result/Index.cshtml
@@ -58,6 +58,22 @@
@section Scripts
{