///////////////////////////////////////////////////////////////////////////////// // 宁波拓通e智造平台 ToTong Next Builder // // https://git.tuotong-tech.com/tnb/tnb.server // ///////////////////////////////////////////////////////////////////////////////// using System.Text; using JNPF.Common.Security; using Mapster; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json.Linq; using SqlSugar; using Tnb.DataAccess; namespace Tnb.VmodelEngine; /// /// 视图模型服务类 /// public class VmodelPageAppService : VmAppService, IVmodelPageAppService { /// /// 构造函数 /// public VmodelPageAppService(IDataAccess da) : base(da) { } /// /// 获取一条 数据信息 /// public override async Task GetAsync(VmGetInput input) { var query = _db.Queryable().Where(a => a.deleted == 0); VmodelPage vm = await query.FirstAsync(a => a.id == input.id); return vm; } /// /// 获取多条 数据列表 /// public override async Task GetListAsync(VmGetListInput input) { VmPagedOutput ret = new(); var q = _db.Queryable().WhereIF(!string.IsNullOrEmpty(input.k), a => a.code.Contains(input.k!) || a.name.Contains(input.k!)); RefAsync total = 0; var data = await q.OrderBy(input.sort).ToPageListAsync((input.pnum - 1) * input.psize, input.psize, total); ret.total = total; ret.items = data.ConvertAll(a => a); return ret; } /// /// 新增 模型 /// public override async Task CreateAsync(VmCreateInput input) { ArgumentNullException.ThrowIfNull(input.data); VmodelPage vpage = input.data.Adapt(); await _db.Insertable(vpage).ExecuteCommandAsync(); return vpage; } /// /// 更新 数据 /// public override async Task UpdateAsync(VmUpdateInput input) { ArgumentNullException.ThrowIfNull(input.data); if (!input.data.ContainsKey(nameof(VmodelPage.id))) { throw new Exception($"更新数据时主键({nameof(VmodelPage.id)})不可为空"); } var id = input.data[nameof(VmodelPage.id)].ToString(); var model = await _db.Queryable().FirstAsync(a => a.id == id); ArgumentNullException.ThrowIfNull(model); input.data.Adapt(model, TypeAdapter.IgnoreNull); await _db.Updateable(model).WhereColumns(a => a.id).ExecuteCommandAsync(); return model; } /// /// 删除 数据 /// public override async Task DeleteAsync(VmDeleteInput input) { var ret = await _db.Deleteable(input.id).ExecuteCommandAsync(); return ret; } /// /// 从数据表创建模型 /// public async Task CreateByVmodel(CreatePageFromVmodelInput input) { ArgumentNullException.ThrowIfNull(input.vmid); var vm = await _dataAccess.GetVmodelAsync(input.vmid); ArgumentNullException.ThrowIfNull(vm); var page = await _db.Queryable().FirstAsync(a => a.vmid == vm.id); if (page == null) { page = new VmodelPage { vmid = vm.id, code = vm.vmCode, name = vm.vmName }; page.pageSchema = CreatePageSchema(vm, page.id); await _db.Insertable(page).ExecuteCommandAsync(); } else { page.pageSchema = CreatePageSchema(vm, page.id); await _db.Updateable(page).ExecuteCommandAsync(); } return page; } private JObject CreatePageSchema(Vmodel vm, string pageid) { StringBuilder str = new StringBuilder(); str.AppendLine("{"); str.AppendLine($"\"page\": {{ \"loadList\": true, \"watchClient\": false }},"); str.AppendLine($"\"queryData\": {{ }},"); str.AppendLine($"\"queryForm\": {{"); str.AppendLine($"\"show\": false,"); str.AppendLine($"\"attr\": {{ \"labelWidth\": \"106px\", \"hasKeyword\":false }},"); str.AppendLine($"\"cols\": {{"); var pQuery = vm.dbProps.Skip(1).Take(1).FirstOrDefault(); if (pQuery != null) { str.AppendLine($"\"{pQuery.code}\": {{ \"label\": \"{pQuery.name}\", \"span\": 8, \"qtype\": 2, \"isQuick\": true, \"comp\": {{ \"type\": \"el-input\", \"attr\": {{ \"placeholder\": \"{pQuery.name}\", \"clearable\": true, \"maxlength\": 20 }} }} }}"); } str.AppendLine($"}}"); str.AppendLine($"}},"); str.AppendLine($"\"list\": {{"); str.AppendLine($"\"opt\": {{ \"isPage\": true, \"isCheck\": true, \"sortBy\": \"\", \"pkey\": \"{vm.GetPrimary().code}\" }},"); str.AppendLine($"\"attr\": {{ \"border\": false }},"); str.AppendLine($"\"cols\": {{"); foreach (var p in vm.dbProps) { str.AppendLine($"\"{p.code}\":{{ \"label\": \"{p.name}\", \"show\": true, \"attr\": {{ {p.GetDefaultWidth()} }}, \"comp\": {{}} }},"); } str.AppendLine($"}}"); str.AppendLine($"}},"); str.AppendLine($"\"editData\": {vm.GetDefaultDObject().ToJsonString()},"); str.AppendLine($"\"editDlg\": {{ \"isAdd\": true, \"tabHeight\": 300, \"name\": \"{vm.vmName}\" }},"); str.AppendLine($"\"editForm\": {{"); str.AppendLine($"\"attr\": {{ \"labelWidth\": \"106px\" }},"); str.AppendLine($"\"rules\": {{"); foreach (var p in vm.dbProps.Where(a => a.required && !a.pkey)) { str.AppendLine($"\"{p.code}\": [{{ \"required\": true, \"message\": \"必填项不能为空\", \"trigger\": \"blur\" }}],"); } str.AppendLine($"}},"); str.AppendLine($"\"cols\": {{"); foreach (var p in vm.dbProps) { str.AppendLine($"\"{p.code}\": {{ \"label\": \"{p.name}\", \"show\": true, \"comp\": {p.GetDefaultComp().ToJsonString()} }},"); } str.AppendLine($"}}"); str.AppendLine($"}},"); str.AppendLine($"\"tree\": {{ \"key\": \"id\", \"height\": 300, \"props\": {{ \"label\": \"enumName\" }}, \"data\": [] }}"); str.AppendLine($"}}"); var s = str.ToString(); Console.WriteLine(s); return JObject.Parse(s); } }