@@ -0,0 +1,3 @@ | |||||
.vs | |||||
obj | |||||
bin |
@@ -0,0 +1,36 @@ | |||||
<Project Sdk="Microsoft.NET.Sdk"> | |||||
<PropertyGroup> | |||||
<TargetFramework>net6.0</TargetFramework> | |||||
<NoWarn>1701;1702;1591</NoWarn> | |||||
<DocumentationFile>BPA.MES.Base.Application.xml</DocumentationFile> | |||||
<ImplicitUsings>enable</ImplicitUsings> | |||||
</PropertyGroup> | |||||
<ItemGroup> | |||||
<None Remove="applicationsettings.json" /> | |||||
<None Remove="BPA.MES.Base.Application.xml" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<Content Include="applicationsettings.json"> | |||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | |||||
</Content> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<ProjectReference Include="..\BPA.MES.Base.Core\BPA.MES.Base.Core.csproj" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<Folder Include="Entitys\Base\" /> | |||||
<Folder Include="Services\DeviceService\" /> | |||||
<Folder Include="Services\MaterialService\" /> | |||||
<Folder Include="Services\RecipesService\" /> | |||||
<Folder Include="Services\CustomCodeService\" /> | |||||
<Folder Include="Services\SystemService\" /> | |||||
</ItemGroup> | |||||
</Project> |
@@ -0,0 +1,64 @@ | |||||
namespace BPA.MES.Base.Application | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 : | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/3/4 10:15:54 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public class ClaimConst | |||||
{ | |||||
/// <summary> | |||||
/// 用户Id | |||||
/// </summary> | |||||
public const string CLAINM_USERID = "UserId"; | |||||
/// <summary> | |||||
/// 账号 | |||||
/// </summary> | |||||
public const string CLAINM_ACCOUNT = "Account"; | |||||
/// <summary> | |||||
/// 名称 | |||||
/// </summary> | |||||
public const string CLAINM_NAME = "Name"; | |||||
/// <summary> | |||||
/// 头像 | |||||
/// </summary> | |||||
public const string CLAINM_AVATARURL = "AvatarUrl"; | |||||
/// <summary> | |||||
/// 电话 | |||||
/// </summary> | |||||
public const string CLAINM_PHONE = "Phone"; | |||||
/// <summary> | |||||
/// 性别 | |||||
/// </summary> | |||||
public const string CLAINM_SEX = "0"; | |||||
/// <summary> | |||||
/// 是否授权 | |||||
/// </summary> | |||||
public const string CLAINM_ISAUTH = "0"; | |||||
/// <summary> | |||||
/// 微信session_key | |||||
/// </summary> | |||||
public const string SESSION_KEY = "session_key"; | |||||
/// <summary> | |||||
/// 是否超级管理 | |||||
/// </summary> | |||||
public const string CLAINM_SUPERADMIN = "SuperAdmin"; | |||||
/// <summary> | |||||
/// 租户Id | |||||
/// </summary> | |||||
public const string TENANT_ID = "TenantId"; | |||||
/// <summary> | |||||
/// 用户组织机构Id | |||||
/// </summary> | |||||
public const string CLAINM_ORGID = "OrgId"; | |||||
/// <summary> | |||||
/// 用户组织机构名称 | |||||
/// </summary> | |||||
public const string CLAINM_ORGNAME = "OrgName"; | |||||
/// <summary> | |||||
/// 是否是管理员 | |||||
/// </summary> | |||||
public const bool ISADMIN = false; | |||||
} | |||||
} |
@@ -0,0 +1,22 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :设备配方表 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 :2023/3/2 13:57:00 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
[SugarTable("devices_recipes")] | |||||
public class DeviceRecipeEntity : DEntityBase | |||||
{ | |||||
/// <summary> | |||||
/// 设备Id | |||||
/// </summary> | |||||
public string DeviceId { get; set; } | |||||
/// <summary> | |||||
/// 配方Id | |||||
/// </summary> | |||||
public string RecipesId { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,23 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :设备 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 :2023/3/2 13:51:45 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
[SugarTable("devices_info")] | |||||
public class DevicesInfoEntity: DEntityBase | |||||
{ | |||||
/// <summary> | |||||
/// 名称 | |||||
/// </summary> | |||||
[Required(ErrorMessage = "名称不能为空")] | |||||
public string Name { get; set; } | |||||
/// <summary> | |||||
/// 编码 | |||||
/// </summary> | |||||
[Required(ErrorMessage = "编码不能为空")] | |||||
public string Code { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,21 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :分组信息 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/3/10 14:01:15 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
[SugarTable("group_info")] | |||||
public class GroupInfoEntity: DEntityBase | |||||
{ | |||||
/// <summary> | |||||
/// 名称 | |||||
/// </summary> | |||||
public string Name { get; set; } | |||||
/// <summary> | |||||
/// 介绍 | |||||
/// </summary> | |||||
public string Des { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,31 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :物料 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 :2023/3/2 13:52:00 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
[SugarTable("materials_info")] | |||||
public class MaterialsInfoEntity: DEntityBase | |||||
{ | |||||
/// <summary> | |||||
/// 名称 | |||||
/// </summary> | |||||
[Required(ErrorMessage = "名称不能为空")] | |||||
public string Name { get; set; } | |||||
/// <summary> | |||||
/// 编码 | |||||
/// </summary> | |||||
[Required(ErrorMessage = "编码不能为空")] | |||||
public string Code { get; set; } | |||||
/// <summary> | |||||
/// 单位 | |||||
/// </summary> | |||||
public string Unit { get; set; } | |||||
/// <summary> | |||||
/// 每秒出水量(g) | |||||
/// </summary> | |||||
public string Wos { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,33 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :配方物料信息 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/3/2 13:58:19 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
[SugarTable("recipes_material")] | |||||
public class RecipeMaterialEntity : DEntityBase | |||||
{ | |||||
/// <summary> | |||||
/// 物料Id | |||||
/// </summary> | |||||
public string MaterialId { get; set; } | |||||
/// <summary> | |||||
/// 配方Id | |||||
/// </summary> | |||||
public string RecipesId { get; set; } | |||||
/// <summary> | |||||
/// 通道 | |||||
/// </summary> | |||||
public string Outlet { get; set; } | |||||
/// <summary> | |||||
/// 顺序 | |||||
/// </summary> | |||||
public string Sort { get; set; } | |||||
/// <summary> | |||||
/// 时间(s) | |||||
/// </summary> | |||||
public string Time { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,21 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :配方分组 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/3/10 14:56:03 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
[SugarTable("recipes_group")] | |||||
public class RecipesGroupEntity | |||||
{ | |||||
/// <summary> | |||||
/// 组Id | |||||
/// </summary> | |||||
public string GroupId { get; set; } | |||||
/// <summary> | |||||
/// 产品Id | |||||
/// </summary> | |||||
public string RecipesId { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,25 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :配方信息 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/3/2 13:57:15 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
[SugarTable("recipes_info")] | |||||
public class RecipesInfoEntity : DEntityBase | |||||
{ | |||||
/// <summary> | |||||
/// 名称 | |||||
/// </summary> | |||||
public string Name { get; set; } | |||||
/// <summary> | |||||
/// 自定义编码 | |||||
/// </summary> | |||||
public string Code { get; set; } | |||||
/// <summary> | |||||
/// 图标 | |||||
/// </summary> | |||||
public string PicUrl { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,30 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :店铺信息 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/3/2 13:52:13 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
[SugarTable("store_info")] | |||||
public class StoreInfoEntity : DEntityBase | |||||
{ | |||||
/// <summary> | |||||
/// 名称 | |||||
/// </summary> | |||||
[Required(ErrorMessage = "名称不能为空")] | |||||
public string Name { get; set; } | |||||
/// <summary> | |||||
/// 地址 | |||||
/// </summary> | |||||
public string Address { get; set; } | |||||
/// <summary> | |||||
/// 联系电话 | |||||
/// </summary> | |||||
public string Phone { get; set; } | |||||
/// <summary> | |||||
/// 负责人 | |||||
/// </summary> | |||||
public string Directors { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,29 @@ | |||||
| |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :账户信息 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/3 10:18:43 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
[SugarTable("sys_account")] | |||||
public class AccountEntity : DEntityBase | |||||
{ | |||||
/// <summary> | |||||
/// 账号 | |||||
/// </summary> | |||||
[SugarColumn(IsNullable = false)] | |||||
public string Account { get; set; } | |||||
/// <summary> | |||||
/// 密码 | |||||
/// </summary> | |||||
[SugarColumn(IsNullable = false)] | |||||
public string Pwd { get; set; } | |||||
/// <summary> | |||||
/// 员工表Id | |||||
/// </summary> | |||||
[SugarColumn(IsNullable = false)] | |||||
public string EmployeeId { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,29 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 授权模板表 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/4 17:31:11 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
[SugarTable("sys_authorizetemplate")] | |||||
public class AuthorizeTemplateEntity : DEntityBase | |||||
{ | |||||
/// <summary> | |||||
/// 名称 | |||||
/// </summary> | |||||
public string Name { get; set; } | |||||
/// <summary> | |||||
/// 描述 | |||||
/// </summary> | |||||
public string Remark { get; set; } | |||||
/// <summary> | |||||
/// 创建时间 | |||||
/// </summary> | |||||
public DateTime? CreateAt { get; set; } | |||||
/// <summary> | |||||
/// 是否删除 | |||||
/// </summary> | |||||
public bool IsDeleted { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,27 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 : 授权模板子项表 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/4 17:31:27 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
[SugarTable("sys_authorizetemplate_item")] | |||||
public class AuthorizeTemplateItemEntity : DEntityBase | |||||
{ | |||||
/// <summary> | |||||
/// 模板编号 | |||||
/// </summary> | |||||
public string TB_TemplateId { get; set; } | |||||
/// <summary> | |||||
/// 模块编号 | |||||
/// </summary> | |||||
public string TB_ModuleId { get; set; } | |||||
/// <summary> | |||||
/// 是否删除 | |||||
/// </summary> | |||||
public bool IsDeleted { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,30 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :授权对象表 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/4 17:31:39 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
[SugarTable("sys_authorizetemplatemap")] | |||||
public class AuthorizeTemplateMapEntity : DEntityBase | |||||
{ | |||||
/// <summary> | |||||
/// 授权模板编号 | |||||
/// </summary> | |||||
public string TemplateId { get; set; } | |||||
/// <summary> | |||||
/// 授权对象编号(用户编号,角色编号) | |||||
/// </summary> | |||||
public string ObjectId { get; set; } | |||||
/// <summary> | |||||
/// 授权类型 1:用户,2:角色 | |||||
/// </summary> | |||||
public int AuthorizeType { get; set; } | |||||
/// <summary> | |||||
/// 是否删除 | |||||
/// </summary> | |||||
public bool IsDeleted { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,69 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :员工信息 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/4 17:44:31 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
[SugarTable("sys_employee")] | |||||
public class EmployeeEntity : DEntityBase | |||||
{ | |||||
/// <summary> | |||||
/// 员工姓名 | |||||
/// </summary> | |||||
[SugarColumn(IsNullable = false)] | |||||
public string Name { get; set; } | |||||
/// <summary> | |||||
/// 1男2女 | |||||
/// </summary> | |||||
[SugarColumn(IsNullable = true)] | |||||
public int Gender { get; set; } | |||||
/// <summary> | |||||
/// 手机号 | |||||
/// </summary> | |||||
[SugarColumn(IsNullable = false)] | |||||
public string Phone { get; set; } | |||||
/// <summary> | |||||
/// 员工IC卡 | |||||
/// </summary> | |||||
[SugarColumn(IsNullable = true)] | |||||
public string ICCard { get; set; } | |||||
/// <summary> | |||||
/// 头像 | |||||
/// </summary> | |||||
[SugarColumn(IsNullable = true)] | |||||
public string Header { get; set; } | |||||
[SugarColumn(IsNullable = false)] | |||||
public DateTime JoinDate { get; set; } | |||||
/// <summary> | |||||
/// 入职时间 | |||||
/// </summary> | |||||
[SugarColumn(IsNullable = true)] | |||||
public DateTime? OutDate { get; set; } | |||||
/// <summary> | |||||
/// 身份证 | |||||
/// </summary> | |||||
[SugarColumn(IsNullable = true)] | |||||
public string IdCard { get; set; } | |||||
/// <summary> | |||||
/// 1在职2出差3离职 | |||||
/// </summary> | |||||
[SugarColumn(IsNullable = false)] | |||||
public int Stutas { get; set; } | |||||
/// <summary> | |||||
/// 超管 | |||||
/// </summary> | |||||
[SugarColumn(IsNullable = false)] | |||||
public bool IsAdmin { get; set; } | |||||
/// <summary> | |||||
/// 角色Id | |||||
/// </summary> | |||||
public string TB_RoleId { get; set; } | |||||
/// <summary> | |||||
/// 是否删除 | |||||
/// </summary> | |||||
public bool IsDeleted { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,46 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :模块菜单表 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/4 17:32:15 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
[SugarTable("sys_module")] | |||||
public class ModuleEntity : DEntityBase | |||||
{ | |||||
/// <summary> | |||||
/// 类别 1:菜单,2:视图,3:功能 | |||||
/// </summary> | |||||
public int Category { get; set; } | |||||
/// <summary> | |||||
/// 菜单打开方式 0:框架内嵌,1:新开页面 | |||||
/// </summary> | |||||
public int OpenType { get; set; } | |||||
/// <summary> | |||||
/// 父级编号 | |||||
/// </summary> | |||||
public string ParentId { get; set; } | |||||
/// <summary> | |||||
/// 名称 | |||||
/// </summary> | |||||
public string Name { set; get; } | |||||
/// <summary> | |||||
/// 图标 | |||||
/// </summary> | |||||
public string Icon { set; get; } | |||||
/// <summary> | |||||
/// 地址 | |||||
/// </summary> | |||||
public string Url { set; get; } | |||||
/// <summary> | |||||
/// 状态 | |||||
/// </summary> | |||||
public bool IsDisabled { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,32 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :角色信息 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/4 17:32:32 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
[SugarTable("sys_role")] | |||||
public class RoleEntity : DEntityBase | |||||
{ | |||||
/// <summary> | |||||
/// 角色名称 | |||||
/// </summary> | |||||
public string Name { get; set; } | |||||
/// <summary> | |||||
/// 角色类型 1超级管理员,2其他 | |||||
/// </summary> | |||||
public int? RoleType { get; set; } | |||||
/// <summary> | |||||
/// 角色描述 | |||||
/// </summary> | |||||
public string Description { get; set; } | |||||
/// <summary> | |||||
/// 是否删除 | |||||
/// </summary> | |||||
public bool IsDeleted { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,19 @@ | |||||
global using Furion; | |||||
global using Furion.DataEncryption; | |||||
global using Furion.DataValidation; | |||||
global using Furion.DependencyInjection; | |||||
global using Furion.DynamicApiController; | |||||
global using Furion.Extensions; | |||||
global using Furion.FriendlyException; | |||||
global using Furion.Logging; | |||||
global using Mapster; | |||||
global using Microsoft.AspNetCore.Authorization; | |||||
global using Microsoft.AspNetCore.Http; | |||||
global using Microsoft.AspNetCore.Mvc; | |||||
global using Microsoft.CodeAnalysis; | |||||
global using BPA.MES.Base.Core; | |||||
global using static BPA.MES.Base.Core.TreeExtensions; | |||||
global using System.ComponentModel.DataAnnotations; | |||||
global using BPA.MES.Base.Application.Entitys; | |||||
global using Furion.DataEncryption.Extensions; | |||||
global using SqlSugar; |
@@ -0,0 +1,99 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :设备Dto类 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/3/2 16:12:06 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public class DeviceRecipeDto : DeviceRecipeEntity | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// 增加 | |||||
/// </summary> | |||||
public class DeviceRecipeAddInput : DeviceRecipeDto | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// 更新 | |||||
/// </summary> | |||||
public class DeviceRecipeUpdateInput : DeviceRecipeDto | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// 删除 | |||||
/// </summary> | |||||
public class DeviceRecipeDelInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// 不分页 | |||||
/// </summary> | |||||
public class DeviceRecipeQueryInput | |||||
{ | |||||
/// <summary> | |||||
/// 设备Id | |||||
/// </summary> | |||||
public string DeviceId { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// 分页 | |||||
/// </summary> | |||||
public class DeviceRecipeQueryPageInput : RequestPage | |||||
{ | |||||
} | |||||
public class DeviceRecipeBatchAddInput | |||||
{ | |||||
/// <summary> | |||||
/// 设备Id | |||||
/// </summary> | |||||
public string DeviceId { get; set; } | |||||
/// <summary> | |||||
/// 配方数组 | |||||
/// </summary> | |||||
public List<string> RecipesIds { get; set; } = new(); | |||||
} | |||||
/// <summary> | |||||
/// 输出 | |||||
/// </summary> | |||||
public class DeviceRecipeOutput : DeviceRecipeDto | |||||
{ | |||||
/// <summary> | |||||
/// 设备名称 | |||||
/// </summary> | |||||
public string DeviceName { get; set; } | |||||
/// <summary> | |||||
/// 配方名称 | |||||
/// </summary> | |||||
public string RecipeName { get; set; } | |||||
/// <summary> | |||||
/// 配方代码 | |||||
/// </summary> | |||||
public string RecipeCode { get; set; } | |||||
/// <summary> | |||||
/// 分组Id | |||||
/// </summary> | |||||
public string GroupId { get; set; } | |||||
/// <summary> | |||||
/// 分组名称 | |||||
/// </summary> | |||||
public string GroupName { get; set; } | |||||
/// <summary> | |||||
/// 配方图片地址 | |||||
/// </summary> | |||||
public string RecipesPic { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,51 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :设备Dto类 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/3/2 16:12:06 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public class DevicesInfoDto : DevicesInfoEntity | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// 增加 | |||||
/// </summary> | |||||
public class DevicesInfoAddInput : DevicesInfoDto | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// 更新 | |||||
/// </summary> | |||||
public class DevicesInfoUpdateInput : DevicesInfoDto | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// 删除 | |||||
/// </summary> | |||||
public class DevicesInfoDelInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// 分页 | |||||
/// </summary> | |||||
public class DevicesInfoQueryPageInput : RequestPage | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// 输出 | |||||
/// </summary> | |||||
public class DevicesInfoOutput : DevicesInfoDto | |||||
{ | |||||
} | |||||
} |
@@ -0,0 +1,145 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :设备服务 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 :2023/3/2 16:11:04 | |||||
/// 描 述 :店铺数据维护 | |||||
/// </summary> | |||||
[ApiDescriptionSettings(Name = "DeviceRecipe", KeepName = true, SplitCamelCase = true, KeepVerb = true)] | |||||
public class DeviceRecipeService : IDeviceRecipeService, ITransient, IDynamicApiController | |||||
{ | |||||
private readonly ISqlSugarClient _dbContext; | |||||
public DeviceRecipeService(ISqlSugarClient db) | |||||
{ | |||||
_dbContext = db; | |||||
} | |||||
/// <summary> | |||||
/// 增加 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
[HttpPost] | |||||
public async Task<bool> Add(DeviceRecipeAddInput input) | |||||
{ | |||||
var r_entity = await _dbContext.Queryable<DeviceRecipeEntity>().FirstAsync(x => x.DeviceId == input.DeviceId && x.RecipesId==input.RecipesId); | |||||
if (r_entity != null) | |||||
{ | |||||
throw Oops.Bah("名称已存在!"); | |||||
} | |||||
DeviceRecipeEntity entity = input.Adapt<DeviceRecipeEntity>(); | |||||
return await _dbContext.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandIdentityIntoEntityAsync(); | |||||
} | |||||
/// <summary> | |||||
/// 批量下发配方 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
public async Task<bool> BatchUpdate(DeviceRecipeBatchAddInput input) | |||||
{ | |||||
bool result = false; | |||||
List<DeviceRecipeEntity> dr_entitys = new(); | |||||
foreach (var item in input.RecipesIds) | |||||
{ | |||||
DeviceRecipeEntity entity = new(); | |||||
entity.RecipesId = item; | |||||
entity.DeviceId = input.DeviceId; | |||||
dr_entitys.Add(entity); | |||||
} | |||||
try | |||||
{ | |||||
_dbContext.Ado.BeginTran(); | |||||
await _dbContext.Deleteable<DeviceRecipeEntity>().Where(x => x.DeviceId == input.DeviceId).ExecuteCommandAsync(); | |||||
if (input.RecipesIds.Any()) | |||||
{ | |||||
await _dbContext.Insertable(dr_entitys).ExecuteCommandAsync(); | |||||
} | |||||
_dbContext.Ado.CommitTran(); | |||||
result = true; | |||||
} | |||||
catch (Exception ex) | |||||
{ | |||||
throw Oops.Bah("更新失败!"); | |||||
} | |||||
return result; | |||||
} | |||||
/// <summary> | |||||
/// 删除 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpPost] | |||||
public async Task<bool> Del(DeviceRecipeDelInput input) | |||||
{ | |||||
var res = await _dbContext.Deleteable<DeviceRecipeEntity>().Where(x => x.Id == input.Id).ExecuteCommandHasChangeAsync(); | |||||
return res; | |||||
} | |||||
/// <summary> | |||||
/// 详情 | |||||
/// </summary> | |||||
/// <param name="Id"></param> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpGet] | |||||
public async Task<DeviceRecipeOutput> Detail(string Id) | |||||
{ | |||||
var entity = await _dbContext.Queryable<DeviceRecipeEntity>().FirstAsync(x => x.Id == Id); | |||||
DeviceRecipeOutput output = entity.Adapt<DeviceRecipeOutput>(); | |||||
return output; | |||||
} | |||||
/// <summary> | |||||
/// 列表 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpPost,AllowAnonymous] | |||||
public async Task<List<DeviceRecipeOutput>> List(DeviceRecipeQueryInput input) | |||||
{ | |||||
var output = await _dbContext.Queryable<DeviceRecipeEntity>() | |||||
.LeftJoin<RecipesInfoEntity>((a,b)=>a.RecipesId==b.Id) | |||||
.LeftJoin<RecipesGroupEntity>((a,b,c)=>a.RecipesId==c.RecipesId) | |||||
.LeftJoin<GroupInfoEntity>((a, b, c,d)=>c.GroupId==d.Id) | |||||
.WhereIF(!string.IsNullOrEmpty(input.DeviceId),a=>a.DeviceId==input.DeviceId) | |||||
.Select((a, b, c,d) => new DeviceRecipeOutput | |||||
{ | |||||
DeviceId = a.DeviceId, | |||||
RecipeName = b.Name, | |||||
RecipeCode = b.Code, | |||||
RecipesId = a.RecipesId, | |||||
RecipesPic =b.PicUrl, | |||||
GroupId = c.GroupId, | |||||
GroupName = d.Name | |||||
}) | |||||
.ToListAsync(); | |||||
return output; | |||||
} | |||||
/// <summary> | |||||
/// 分页 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
[HttpPost] | |||||
public async Task<SqlSugarPagedList<DeviceRecipeOutput>> PagedList(DeviceRecipeQueryPageInput input) | |||||
{ | |||||
var entity = await _dbContext.Queryable<DeviceRecipeEntity>() | |||||
.ToPagedListAsync(input.PageIndex, input.PageSize); | |||||
SqlSugarPagedList<DeviceRecipeOutput> output = entity.Adapt<SqlSugarPagedList<DeviceRecipeOutput>>(); | |||||
return output; | |||||
} | |||||
/// <summary> | |||||
/// 更新 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpPost] | |||||
public async Task<bool> Update(DeviceRecipeUpdateInput input) | |||||
{ | |||||
var res = await _dbContext.Updateable<DeviceRecipeEntity>().ExecuteCommandHasChangeAsync(); | |||||
return res; | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,111 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :设备服务 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 :2023/3/2 16:11:04 | |||||
/// 描 述 :店铺数据维护 | |||||
/// </summary> | |||||
[ApiDescriptionSettings(Name = "DevicesInfo", KeepName = true, SplitCamelCase = true, KeepVerb = true)] | |||||
public class DevicesInfoService : IDevicesInfoService, ITransient, IDynamicApiController | |||||
{ | |||||
private readonly ISqlSugarClient _dbContext; | |||||
public DevicesInfoService(ISqlSugarClient db) | |||||
{ | |||||
_dbContext = db; | |||||
} | |||||
/// <summary> | |||||
/// 增加 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
[HttpPost] | |||||
public async Task<bool> Add(DevicesInfoAddInput input) | |||||
{ | |||||
var r_entity = await _dbContext.Queryable<DevicesInfoEntity>().FirstAsync(x => x.Name == input.Name); | |||||
if (r_entity != null) | |||||
{ | |||||
throw Oops.Bah("名称已存在!"); | |||||
} | |||||
DevicesInfoEntity entity = input.Adapt<DevicesInfoEntity>(); | |||||
return await _dbContext.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandIdentityIntoEntityAsync(); | |||||
} | |||||
/// <summary> | |||||
/// 删除 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpPost] | |||||
public async Task<bool> Del(DevicesInfoDelInput input) | |||||
{ | |||||
var res = await _dbContext.Deleteable<DevicesInfoEntity>().Where(x => x.Id == input.Id).ExecuteCommandHasChangeAsync(); | |||||
return res; | |||||
} | |||||
/// <summary> | |||||
/// 详情 | |||||
/// </summary> | |||||
/// <param name="Id"></param> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpGet] | |||||
public async Task<DevicesInfoOutput> Detail(string Id) | |||||
{ | |||||
var entity = await _dbContext.Queryable<DevicesInfoEntity>().FirstAsync(x => x.Id == Id); | |||||
DevicesInfoOutput output = entity.Adapt<DevicesInfoOutput>(); | |||||
return output; | |||||
} | |||||
/// <summary> | |||||
/// 列表 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpGet] | |||||
public async Task<List<DevicesInfoOutput>> List() | |||||
{ | |||||
var entity = await _dbContext.Queryable<DevicesInfoEntity>().ToListAsync(); | |||||
List<DevicesInfoOutput> output = entity.Adapt<List<DevicesInfoOutput>>(); | |||||
return output; | |||||
} | |||||
/// <summary> | |||||
/// 分页 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
[HttpPost] | |||||
public async Task<SqlSugarPagedList<DevicesInfoOutput>> PagedList(DevicesInfoQueryPageInput input) | |||||
{ | |||||
var entity = await _dbContext.Queryable<DevicesInfoEntity>() | |||||
.ToPagedListAsync(input.PageIndex, input.PageSize); | |||||
SqlSugarPagedList<DevicesInfoOutput> output = entity.Adapt<SqlSugarPagedList<DevicesInfoOutput>>(); | |||||
return output; | |||||
} | |||||
/// <summary> | |||||
/// 下拉 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpGet] | |||||
public async Task<dynamic> SelectList() | |||||
{ | |||||
var entity = await _dbContext.Queryable<DevicesInfoEntity>().Select(x => new | |||||
{ | |||||
key = x.Id, | |||||
value = x.Name | |||||
}).ToListAsync(); | |||||
return entity; | |||||
} | |||||
/// <summary> | |||||
/// 更新 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpPost] | |||||
public async Task<bool> Update(DevicesInfoUpdateInput input) | |||||
{ | |||||
var res = await _dbContext.Updateable<DevicesInfoEntity>().ExecuteCommandHasChangeAsync(); | |||||
return res; | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,49 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :设备配方服务 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 :2023/3/2 18:30:58 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public interface IDeviceRecipeService | |||||
{ | |||||
/// <summary> | |||||
/// 增加 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<bool> Add(DeviceRecipeAddInput input); | |||||
/// <summary> | |||||
/// 移除 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<bool> Del(DeviceRecipeDelInput input); | |||||
/// <summary> | |||||
/// 更新 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<bool> Update(DeviceRecipeUpdateInput input); | |||||
/// <summary> | |||||
/// 不分页列表 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<List<DeviceRecipeOutput>> List(DeviceRecipeQueryInput input); | |||||
/// <summary> | |||||
/// 分页列表 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<SqlSugarPagedList<DeviceRecipeOutput>> PagedList(DeviceRecipeQueryPageInput input); | |||||
/// <summary> | |||||
/// 查询单条 | |||||
/// </summary> | |||||
/// <param name="Id"></param> | |||||
/// <returns></returns> | |||||
Task<DeviceRecipeOutput> Detail(string Id); | |||||
/// <summary> | |||||
/// 批量下发配方 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
Task<bool> BatchUpdate(DeviceRecipeBatchAddInput input); | |||||
} | |||||
} |
@@ -0,0 +1,49 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :设备服务 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 :2023/3/2 18:30:58 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public interface IDevicesInfoService | |||||
{ | |||||
/// <summary> | |||||
/// 增加 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<bool> Add(DevicesInfoAddInput input); | |||||
/// <summary> | |||||
/// 移除 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<bool> Del(DevicesInfoDelInput input); | |||||
/// <summary> | |||||
/// 更新 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<bool> Update(DevicesInfoUpdateInput input); | |||||
/// <summary> | |||||
/// 不分页列表 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<List<DevicesInfoOutput>> List(); | |||||
/// <summary> | |||||
/// 分页列表 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<SqlSugarPagedList<DevicesInfoOutput>> PagedList(DevicesInfoQueryPageInput input); | |||||
/// <summary> | |||||
/// 下拉列表 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<dynamic> SelectList(); | |||||
/// <summary> | |||||
/// 查询单条 | |||||
/// </summary> | |||||
/// <param name="Id"></param> | |||||
/// <returns></returns> | |||||
Task<DevicesInfoOutput> Detail(string Id); | |||||
} | |||||
} |
@@ -0,0 +1,58 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :设备Dto类 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/3/2 16:12:06 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public class MaterialsInfoDto : MaterialsInfoEntity | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// 增加 | |||||
/// </summary> | |||||
public class MaterialsInfoAddInput : MaterialsInfoDto | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// 更新 | |||||
/// </summary> | |||||
public class MaterialsInfoUpdateInput : MaterialsInfoDto | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// 删除 | |||||
/// </summary> | |||||
public class MaterialsInfoDelInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// 分页 | |||||
/// </summary> | |||||
public class MaterialsInfoQueryPageInput : RequestPage | |||||
{ | |||||
/// <summary> | |||||
/// 名称 | |||||
/// </summary> | |||||
public string Name { get; set; } | |||||
/// <summary> | |||||
/// 编码 | |||||
/// </summary> | |||||
public string Code { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// 输出 | |||||
/// </summary> | |||||
public class MaterialsInfoOutput : MaterialsInfoDto | |||||
{ | |||||
} | |||||
} |
@@ -0,0 +1,48 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :物料服务 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 :2023/3/2 18:31:53 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public interface IMaterialsInfoService | |||||
{ | |||||
/// <summary> | |||||
/// 增加 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<bool> Add(MaterialsInfoAddInput input); | |||||
/// <summary> | |||||
/// 移除 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<bool> Del(MaterialsInfoDelInput input); | |||||
/// <summary> | |||||
/// 更新 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<bool> Update(MaterialsInfoUpdateInput input); | |||||
/// <summary> | |||||
/// 不分页列表 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<List<MaterialsInfoOutput>> List(); | |||||
/// <summary> | |||||
/// 分页列表 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<SqlSugarPagedList<MaterialsInfoOutput>> PagedList(MaterialsInfoQueryPageInput input); | |||||
/// <summary> | |||||
/// 下拉列表 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<dynamic> SelectList(); | |||||
/// <summary> | |||||
/// 查询单条 | |||||
/// </summary> | |||||
/// <param name="Id"></param> | |||||
/// <returns></returns> | |||||
Task<MaterialsInfoOutput> Detail(string Id); | |||||
} | |||||
} |
@@ -0,0 +1,115 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :物料服务 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 :2023/3/2 16:11:04 | |||||
/// 描 述 :店铺数据维护 | |||||
/// </summary> | |||||
[ApiDescriptionSettings(Name = "MaterialsInfo", KeepName = true, SplitCamelCase = true, KeepVerb = true)] | |||||
public class MaterialsInfoService : IMaterialsInfoService, ITransient, IDynamicApiController | |||||
{ | |||||
private readonly ISqlSugarClient _dbContext; | |||||
public MaterialsInfoService(ISqlSugarClient db) | |||||
{ | |||||
_dbContext = db; | |||||
} | |||||
/// <summary> | |||||
/// 增加 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
[HttpPost] | |||||
public async Task<bool> Add(MaterialsInfoAddInput input) | |||||
{ | |||||
var r_entity = await _dbContext.Queryable<MaterialsInfoEntity>().FirstAsync(x => x.Name == input.Name); | |||||
if (r_entity != null) | |||||
{ | |||||
throw Oops.Bah("名称已存在!"); | |||||
} | |||||
MaterialsInfoEntity entity = input.Adapt<MaterialsInfoEntity>(); | |||||
return await _dbContext.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandIdentityIntoEntityAsync(); | |||||
} | |||||
/// <summary> | |||||
/// 删除 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpPost] | |||||
public async Task<bool> Del(MaterialsInfoDelInput input) | |||||
{ | |||||
var res = await _dbContext.Deleteable<MaterialsInfoEntity>().Where(x => x.Id == input.Id).ExecuteCommandHasChangeAsync(); | |||||
return res; | |||||
} | |||||
/// <summary> | |||||
/// 详情 | |||||
/// </summary> | |||||
/// <param name="Id"></param> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpGet] | |||||
public async Task<MaterialsInfoOutput> Detail(string Id) | |||||
{ | |||||
var entity = await _dbContext.Queryable<MaterialsInfoEntity>().FirstAsync(x => x.Id == Id); | |||||
MaterialsInfoOutput output = entity.Adapt<MaterialsInfoOutput>(); | |||||
return output; | |||||
} | |||||
/// <summary> | |||||
/// 列表 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpGet] | |||||
public async Task<List<MaterialsInfoOutput>> List() | |||||
{ | |||||
var entity = await _dbContext.Queryable<MaterialsInfoEntity>().ToListAsync(); | |||||
List<MaterialsInfoOutput> output = entity.Adapt<List<MaterialsInfoOutput>>(); | |||||
return output; | |||||
} | |||||
/// <summary> | |||||
/// 分页 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
[HttpPost] | |||||
public async Task<SqlSugarPagedList<MaterialsInfoOutput>> PagedList(MaterialsInfoQueryPageInput input) | |||||
{ | |||||
var entity = await _dbContext.Queryable<MaterialsInfoEntity>() | |||||
.WhereIF(!string.IsNullOrEmpty(input.Name),x=>x.Name.Contains(input.Name)) | |||||
.WhereIF(!string.IsNullOrEmpty(input.Code), x => x.Code.Contains(input.Code)) | |||||
.ToPagedListAsync(input.PageIndex, input.PageSize); | |||||
SqlSugarPagedList<MaterialsInfoOutput> output = entity.Adapt<SqlSugarPagedList<MaterialsInfoOutput>>(); | |||||
return output; | |||||
} | |||||
/// <summary> | |||||
/// 下拉 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpGet] | |||||
public async Task<dynamic> SelectList() | |||||
{ | |||||
var entity = await _dbContext.Queryable<MaterialsInfoEntity>().Select(x => new | |||||
{ | |||||
key = x.Id, | |||||
value = x.Name | |||||
}).ToListAsync(); | |||||
return entity; | |||||
} | |||||
/// <summary> | |||||
/// 更新 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpPost] | |||||
public async Task<bool> Update(MaterialsInfoUpdateInput input) | |||||
{ | |||||
var entity = await _dbContext.Queryable<MaterialsInfoEntity>().Where(x => x.Id == input.Id).FirstAsync(); | |||||
entity = input.Adapt<MaterialsInfoEntity>(); | |||||
var res = await _dbContext.Updateable(entity).ExecuteCommandHasChangeAsync(); | |||||
return res; | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,54 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :产品分组 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/3/10 13:59:43 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public class GroupInfoDto : GroupInfoEntity | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// 增加 | |||||
/// </summary> | |||||
public class GroupInfoAddInput : GroupInfoDto | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// 更新 | |||||
/// </summary> | |||||
public class GroupInfoUpdateInput : GroupInfoDto | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// 删除 | |||||
/// </summary> | |||||
public class GroupInfoDelInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// 分页 | |||||
/// </summary> | |||||
public class GroupInfoQueryPageInput : RequestPage | |||||
{ | |||||
/// <summary> | |||||
/// 名称 | |||||
/// </summary> | |||||
public string Name { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// 输出 | |||||
/// </summary> | |||||
public class GroupInfoOutput : GroupInfoDto | |||||
{ | |||||
} | |||||
} |
@@ -0,0 +1,91 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :配方物料Dto类 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 :2023/3/2 16:12:06 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public class RecipeMaterialDto : RecipeMaterialEntity | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// 增加 | |||||
/// </summary> | |||||
public class RecipeMaterialAddInput | |||||
{ | |||||
/// <summary> | |||||
/// 物料Id | |||||
/// </summary> | |||||
public string MaterialId { get; set; } | |||||
/// <summary> | |||||
/// 配方Id | |||||
/// </summary> | |||||
public string RecipesId { get; set; } | |||||
/// <summary> | |||||
/// 通道 | |||||
/// </summary> | |||||
public string Outlet { get; set; } | |||||
/// <summary> | |||||
/// 顺序 | |||||
/// </summary> | |||||
public string Sort { get; set; } | |||||
/// <summary> | |||||
/// 时间(s) | |||||
/// </summary> | |||||
public string Time { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// 更新 | |||||
/// </summary> | |||||
public class RecipeMaterialUpdateInput : RecipeMaterialDto | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// 删除 | |||||
/// </summary> | |||||
public class RecipeMaterialDelInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// 不分页 | |||||
/// </summary> | |||||
public class RecipeMaterialQueryInput | |||||
{ | |||||
/// <summary> | |||||
/// 配方Id | |||||
/// </summary> | |||||
public string RecipesId { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// 分页 | |||||
/// </summary> | |||||
public class RecipeMaterialQueryPageInput : RequestPage | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// 输出 | |||||
/// </summary> | |||||
public class RecipeMaterialOutput : RecipeMaterialDto | |||||
{ | |||||
/// <summary> | |||||
/// 配方名称 | |||||
/// </summary> | |||||
public string RecipesName { get; set; } | |||||
/// <summary> | |||||
/// 物料名称 | |||||
/// </summary> | |||||
public string MaterialName { get; set; } | |||||
/// <summary> | |||||
/// 物料编码 | |||||
/// </summary> | |||||
public string MaterialCode { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,66 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :配方Dto类 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 :2023/3/2 16:12:06 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public class RecipesInfoDto : RecipesInfoEntity | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// 增加 | |||||
/// </summary> | |||||
public class RecipesInfoAddInput : RecipesInfoDto | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// 更新 | |||||
/// </summary> | |||||
public class RecipesInfoUpdateInput : RecipesInfoDto | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// 删除 | |||||
/// </summary> | |||||
public class RecipesInfoDelInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// 分页 | |||||
/// </summary> | |||||
public class RecipesInfoQueryPageInput : RequestPage | |||||
{ | |||||
/// <summary> | |||||
/// 名称 | |||||
/// </summary> | |||||
public string Name { get; set; } | |||||
/// <summary> | |||||
/// 分组id | |||||
/// </summary> | |||||
public string GroupId { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// 输出 | |||||
/// </summary> | |||||
public class RecipesInfoOutput : RecipesInfoDto | |||||
{ | |||||
/// <summary> | |||||
/// 分组Id | |||||
/// </summary> | |||||
public string GroupId { get; set; } | |||||
} | |||||
public class RecipesGroupInput : RecipesGroupEntity | |||||
{ | |||||
} | |||||
} |
@@ -0,0 +1,97 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :分组信息 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/3/10 14:03:06 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
[ApiDescriptionSettings(Name = "GroupInfo", KeepName = true, SplitCamelCase = true, KeepVerb = true)] | |||||
public class GroupInfoService : IGroupInfoService, ITransient, IDynamicApiController | |||||
{ | |||||
private readonly ISqlSugarClient _dbContext; | |||||
public GroupInfoService(ISqlSugarClient db) | |||||
{ | |||||
_dbContext = db; | |||||
} | |||||
/// <summary> | |||||
/// 增加 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
[HttpPost] | |||||
public async Task<bool> Add(GroupInfoAddInput input) | |||||
{ | |||||
GroupInfoEntity entity = input.Adapt<GroupInfoEntity>(); | |||||
return await _dbContext.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandIdentityIntoEntityAsync(); | |||||
} | |||||
/// <summary> | |||||
/// 删除 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpPost] | |||||
public async Task<bool> Del(GroupInfoDelInput input) | |||||
{ | |||||
var res = await _dbContext.Deleteable<GroupInfoEntity>().Where(x=>x.Id==input.Id).ExecuteCommandHasChangeAsync(); | |||||
return res; | |||||
} | |||||
/// <summary> | |||||
/// 详情 | |||||
/// </summary> | |||||
/// <param name="Id"></param> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpGet] | |||||
public async Task<GroupInfoOutput> Detail(string Id) | |||||
{ | |||||
var entity = await _dbContext.Queryable<GroupInfoEntity>().FirstAsync(); | |||||
GroupInfoOutput output = entity.Adapt<GroupInfoOutput>(); | |||||
return output; | |||||
} | |||||
/// <summary> | |||||
/// 列表 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpPost, AllowAnonymous] | |||||
public async Task<List<GroupInfoOutput>> List() | |||||
{ | |||||
var entity = await _dbContext.Queryable<GroupInfoEntity>().ToListAsync(); | |||||
List<GroupInfoOutput> output = entity.Adapt<List<GroupInfoOutput>>(); | |||||
return output; | |||||
} | |||||
/// <summary> | |||||
/// 分页 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
[HttpPost] | |||||
public async Task<SqlSugarPagedList<GroupInfoOutput>> PagedList(GroupInfoQueryPageInput input) | |||||
{ | |||||
var entity = await _dbContext.Queryable<GroupInfoEntity>() | |||||
.ToPagedListAsync(input.PageIndex, input.PageSize); | |||||
SqlSugarPagedList<GroupInfoOutput> output = entity.Adapt<SqlSugarPagedList<GroupInfoOutput>>(); | |||||
return output; | |||||
} | |||||
/// <summary> | |||||
/// 更新 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpPost] | |||||
public async Task<bool> Update(GroupInfoUpdateInput input) | |||||
{ | |||||
var entity = await _dbContext.Queryable<GroupInfoEntity>().FirstAsync(x=>x.Id==input.Id); | |||||
if (entity == null) | |||||
{ | |||||
throw Oops.Bah("数据不存在!"); | |||||
} | |||||
entity = input.Adapt<GroupInfoEntity>(); | |||||
var res = await _dbContext.Updateable(entity).ExecuteCommandHasChangeAsync(); | |||||
return res; | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,43 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :分组信息 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 :2023/3/10 14:03:21 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public interface IGroupInfoService | |||||
{ | |||||
/// <summary> | |||||
/// 增加 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<bool> Add(GroupInfoAddInput input); | |||||
/// <summary> | |||||
/// 移除 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<bool> Del(GroupInfoDelInput input); | |||||
/// <summary> | |||||
/// 更新 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<bool> Update(GroupInfoUpdateInput input); | |||||
/// <summary> | |||||
/// 不分页列表 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<List<GroupInfoOutput>> List(); | |||||
/// <summary> | |||||
/// 分页列表 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<SqlSugarPagedList<GroupInfoOutput>> PagedList(GroupInfoQueryPageInput input); | |||||
/// <summary> | |||||
/// 查询单条 | |||||
/// </summary> | |||||
/// <param name="Id"></param> | |||||
/// <returns></returns> | |||||
Task<GroupInfoOutput> Detail(string Id); | |||||
} | |||||
} |
@@ -0,0 +1,49 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :配方物料服务 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 :2023/3/2 18:33:18 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public interface IRecipeMaterialService | |||||
{ | |||||
/// <summary> | |||||
/// 增加 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<bool> Add(RecipeMaterialAddInput input); | |||||
/// <summary> | |||||
/// 批量增加 | |||||
/// </summary> | |||||
/// <param name="inputs"></param> | |||||
/// <returns></returns> | |||||
Task<bool> BatchAdd(List<RecipeMaterialAddInput> inputs); | |||||
/// <summary> | |||||
/// 移除 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<bool> Del(RecipeMaterialDelInput input); | |||||
/// <summary> | |||||
/// 更新 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<bool> Update(RecipeMaterialUpdateInput input); | |||||
/// <summary> | |||||
/// 不分页列表 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<List<RecipeMaterialOutput>> List(RecipeMaterialQueryInput input); | |||||
/// <summary> | |||||
/// 分页列表 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<SqlSugarPagedList<RecipeMaterialOutput>> PagedList(RecipeMaterialQueryPageInput input); | |||||
/// <summary> | |||||
/// 查询单条 | |||||
/// </summary> | |||||
/// <param name="Id"></param> | |||||
/// <returns></returns> | |||||
Task<RecipeMaterialOutput> Detail(string Id); | |||||
} | |||||
} |
@@ -0,0 +1,54 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :配方服务 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 :2023/3/2 18:33:18 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public interface IRecipesInfoService | |||||
{ | |||||
/// <summary> | |||||
/// 增加 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<bool> Add(RecipesInfoAddInput input); | |||||
/// <summary> | |||||
/// 移除 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<bool> Del(RecipesInfoDelInput input); | |||||
/// <summary> | |||||
/// 更新 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<bool> Update(RecipesInfoUpdateInput input); | |||||
/// <summary> | |||||
/// 不分页列表 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<List<RecipesInfoOutput>> List(); | |||||
/// <summary> | |||||
/// 分页列表 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<SqlSugarPagedList<RecipesInfoOutput>> PagedList(RecipesInfoQueryPageInput input); | |||||
/// <summary> | |||||
/// 下拉列表 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
Task<dynamic> SelectList(); | |||||
/// <summary> | |||||
/// 查询单条 | |||||
/// </summary> | |||||
/// <param name="Id"></param> | |||||
/// <returns></returns> | |||||
Task<RecipesInfoOutput> Detail(string Id); | |||||
/// <summary> | |||||
/// 更改物料分组 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
Task<bool> ChangeGroup(RecipesGroupInput input); | |||||
} | |||||
} |
@@ -0,0 +1,131 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :配方物料服务 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 :2023/3/2 16:11:04 | |||||
/// 描 述 :配方物料数据维护 | |||||
/// </summary> | |||||
[ApiDescriptionSettings(Name = "RecipeMaterial", KeepName = true, SplitCamelCase = true, KeepVerb = true)] | |||||
public class RecipeMaterialService : IRecipeMaterialService, ITransient, IDynamicApiController | |||||
{ | |||||
private readonly ISqlSugarClient _dbContext; | |||||
public RecipeMaterialService(ISqlSugarClient db) | |||||
{ | |||||
_dbContext = db; | |||||
} | |||||
/// <summary> | |||||
/// 增加 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
[HttpPost] | |||||
public async Task<bool> Add(RecipeMaterialAddInput input) | |||||
{ | |||||
RecipeMaterialEntity entity = input.Adapt<RecipeMaterialEntity>(); | |||||
return await _dbContext.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandIdentityIntoEntityAsync(); | |||||
} | |||||
/// <summary> | |||||
/// 批量增加 | |||||
/// </summary> | |||||
/// <param name="inputs"></param> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
public async Task<bool> BatchAdd(List<RecipeMaterialAddInput> inputs) | |||||
{ | |||||
bool result = false; | |||||
List<RecipeMaterialEntity> entitys = inputs.Adapt<List<RecipeMaterialEntity>>(); | |||||
try | |||||
{ | |||||
_dbContext.Ado.BeginTran(); | |||||
await _dbContext.Deleteable<RecipeMaterialEntity>().Where(x => x.RecipesId == inputs[0].RecipesId).ExecuteCommandAsync(); | |||||
await _dbContext.Insertable(entitys).ExecuteCommandAsync(); | |||||
_dbContext.Ado.CommitTran(); | |||||
result = true; | |||||
} | |||||
catch (Exception ex) | |||||
{ | |||||
_dbContext.Ado.RollbackTran(); | |||||
throw Oops.Bah("保存失败!"); | |||||
} | |||||
return result; | |||||
} | |||||
/// <summary> | |||||
/// 删除 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpPost] | |||||
public async Task<bool> Del(RecipeMaterialDelInput input) | |||||
{ | |||||
var res = await _dbContext.Deleteable<RecipeMaterialEntity>().Where(x => x.Id == input.Id).ExecuteCommandHasChangeAsync(); | |||||
return res; | |||||
} | |||||
/// <summary> | |||||
/// 详情 | |||||
/// </summary> | |||||
/// <param name="Id"></param> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpGet] | |||||
public async Task<RecipeMaterialOutput> Detail(string Id) | |||||
{ | |||||
var entity = await _dbContext.Queryable<RecipeMaterialEntity>().FirstAsync(x => x.Id == Id); | |||||
RecipeMaterialOutput output = entity.Adapt<RecipeMaterialOutput>(); | |||||
return output; | |||||
} | |||||
/// <summary> | |||||
/// 列表 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpPost,AllowAnonymous] | |||||
public async Task<List<RecipeMaterialOutput>> List(RecipeMaterialQueryInput input) | |||||
{ | |||||
var output = await _dbContext.Queryable<RecipeMaterialEntity>() | |||||
.LeftJoin<RecipesInfoEntity>((a,b)=>a.RecipesId==b.Id) | |||||
.LeftJoin<MaterialsInfoEntity>((a,b,c)=>a.MaterialId==c.Id) | |||||
.WhereIF(!string.IsNullOrEmpty(input.RecipesId),(a,b,c)=>a.RecipesId==input.RecipesId) | |||||
.Select((a,b,c)=>new RecipeMaterialOutput | |||||
{ | |||||
MaterialName = c.Name, | |||||
MaterialCode = c.Code, | |||||
MaterialId = c.Id, | |||||
RecipesId = a.RecipesId, | |||||
RecipesName = b.Name, | |||||
Sort = a.Sort, | |||||
Time = a.Time, | |||||
Outlet = a.Outlet | |||||
}) | |||||
.ToListAsync(); | |||||
return output; | |||||
} | |||||
/// <summary> | |||||
/// 分页 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
[HttpPost] | |||||
public async Task<SqlSugarPagedList<RecipeMaterialOutput>> PagedList(RecipeMaterialQueryPageInput input) | |||||
{ | |||||
var entity = await _dbContext.Queryable<RecipeMaterialEntity>() | |||||
.ToPagedListAsync(input.PageIndex, input.PageSize); | |||||
SqlSugarPagedList<RecipeMaterialOutput> output = entity.Adapt<SqlSugarPagedList<RecipeMaterialOutput>>(); | |||||
return output; | |||||
} | |||||
/// <summary> | |||||
/// 更新 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpPost] | |||||
public async Task<bool> Update(RecipeMaterialUpdateInput input) | |||||
{ | |||||
var res = await _dbContext.Updateable<RecipeMaterialEntity>().ExecuteCommandHasChangeAsync(); | |||||
return res; | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,132 @@ | |||||
namespace BPA.MES.Base.Application.Entitys | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :物料服务 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 :2023/3/2 16:11:04 | |||||
/// 描 述 :店铺数据维护 | |||||
/// </summary> | |||||
[ApiDescriptionSettings(Name = "RecipesInfo", KeepName = true, SplitCamelCase = true, KeepVerb = true)] | |||||
public class RecipesInfoService : IRecipesInfoService, ITransient, IDynamicApiController | |||||
{ | |||||
private readonly ISqlSugarClient _dbContext; | |||||
public RecipesInfoService(ISqlSugarClient db) | |||||
{ | |||||
_dbContext = db; | |||||
} | |||||
/// <summary> | |||||
/// 增加 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
[HttpPost] | |||||
public async Task<bool> Add(RecipesInfoAddInput input) | |||||
{ | |||||
var r_entity = await _dbContext.Queryable<RecipesInfoEntity>().FirstAsync(x => x.Name == input.Name); | |||||
if (r_entity != null) | |||||
{ | |||||
throw Oops.Bah("名称已存在!"); | |||||
} | |||||
RecipesInfoEntity entity = input.Adapt<RecipesInfoEntity>(); | |||||
return await _dbContext.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandIdentityIntoEntityAsync(); | |||||
} | |||||
/// <summary> | |||||
/// 删除 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpPost] | |||||
public async Task<bool> Del(RecipesInfoDelInput input) | |||||
{ | |||||
var res = await _dbContext.Deleteable<RecipesInfoEntity>().Where(x => x.Id == input.Id).ExecuteCommandHasChangeAsync(); | |||||
return res; | |||||
} | |||||
/// <summary> | |||||
/// 详情 | |||||
/// </summary> | |||||
/// <param name="Id"></param> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpGet] | |||||
public async Task<RecipesInfoOutput> Detail(string Id) | |||||
{ | |||||
var entity = await _dbContext.Queryable<RecipesInfoEntity>().FirstAsync(x => x.Id == Id); | |||||
RecipesInfoOutput output = entity.Adapt<RecipesInfoOutput>(); | |||||
return output; | |||||
} | |||||
/// <summary> | |||||
/// 列表 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpGet] | |||||
public async Task<List<RecipesInfoOutput>> List() | |||||
{ | |||||
var entity = await _dbContext.Queryable<RecipesInfoEntity>().ToListAsync(); | |||||
List<RecipesInfoOutput> output = entity.Adapt<List<RecipesInfoOutput>>(); | |||||
return output; | |||||
} | |||||
/// <summary> | |||||
/// 分页 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
[HttpPost] | |||||
public async Task<SqlSugarPagedList<RecipesInfoOutput>> PagedList(RecipesInfoQueryPageInput input) | |||||
{ | |||||
var entity = await _dbContext.Queryable<RecipesInfoEntity>() | |||||
.LeftJoin<RecipesGroupEntity>((a,b)=>a.Id==b.RecipesId) | |||||
.WhereIF(!string.IsNullOrEmpty(input.Name), (a, b) => a.Name.Contains(input.Name)) | |||||
.WhereIF(!string.IsNullOrEmpty(input.GroupId), (a, b) => b.GroupId==input.GroupId) | |||||
.Select<RecipesInfoOutput>() | |||||
.ToPagedListAsync(input.PageIndex, input.PageSize); | |||||
SqlSugarPagedList<RecipesInfoOutput> output = entity.Adapt<SqlSugarPagedList<RecipesInfoOutput>>(); | |||||
return output; | |||||
} | |||||
/// <summary> | |||||
/// 下拉 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpGet] | |||||
public async Task<dynamic> SelectList() | |||||
{ | |||||
var entity = await _dbContext.Queryable<RecipesInfoEntity>().Select(x => new | |||||
{ | |||||
key = x.Id, | |||||
value = x.Name | |||||
}).ToListAsync(); | |||||
return entity; | |||||
} | |||||
/// <summary> | |||||
/// 更新 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpPost] | |||||
public async Task<bool> Update(RecipesInfoUpdateInput input) | |||||
{ | |||||
var entity = await _dbContext.Queryable<RecipesInfoEntity>().Where(x => x.Id == input.Id).FirstAsync(); | |||||
entity = input.Adapt<RecipesInfoEntity>(); | |||||
var res = await _dbContext.Updateable(entity).ExecuteCommandHasChangeAsync(); | |||||
return res; | |||||
} | |||||
[HttpPost] | |||||
public async Task<bool> ChangeGroup(RecipesGroupInput input) | |||||
{ | |||||
var isExit = await _dbContext.Queryable<RecipesGroupEntity>().FirstAsync(x=>x.RecipesId==input.RecipesId); | |||||
var entity = input.Adapt<RecipesGroupEntity>(); | |||||
if (isExit==null) | |||||
{ | |||||
return await _dbContext.Insertable(entity).ExecuteCommandIdentityIntoEntityAsync(); | |||||
} | |||||
else | |||||
{ | |||||
return await _dbContext.Updateable(entity).Where(x => x.RecipesId == input.RecipesId).ExecuteCommandHasChangeAsync(); | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,94 @@ | |||||
/// <summary> | |||||
/// 名 称 :[账号信息]实体基础 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/3 10:21:42 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
namespace BPA.MES.Base.Application | |||||
{ | |||||
/// <summary> | |||||
/// [账号信息]入参基础 | |||||
/// </summary> | |||||
public class AccountInput | |||||
{ | |||||
/// <summary> | |||||
/// 账号 | |||||
/// </summary> | |||||
/// <example>admin</example> | |||||
public string Account { get; set; } | |||||
/// <summary> | |||||
/// 密码 | |||||
/// </summary> | |||||
/// <example>e10adc3949ba59abbe56e057f20f883e</example> | |||||
public string Pwd { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [账号信息]添加入参 | |||||
/// </summary> | |||||
public class AccountAddInput : AccountInput | |||||
{ | |||||
/// <summary> | |||||
/// 员工编号 | |||||
/// </summary> | |||||
public string TB_Employee_Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [账号信息]修改入参 | |||||
/// </summary> | |||||
public class AccountUpdateInput : AccountInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
/// <summary> | |||||
/// 员工编号 | |||||
/// </summary> | |||||
public string TB_Employee_Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [账号信息]修改密码 | |||||
/// </summary> | |||||
public class AccountUpdatePwdInput: AccountInput | |||||
{ | |||||
/// <summary> | |||||
/// 新密码 | |||||
/// </summary> | |||||
public string NewPwd { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [账号信息]删除入参 | |||||
/// </summary> | |||||
public class AccountDelInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [账号信息]普通查询入参 | |||||
/// </summary> | |||||
public class AccountQueryInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [账号信息]分页查询入参 | |||||
/// </summary> | |||||
public class AccountQueryPageInput : RequestPage | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
/// <summary> | |||||
/// 设备名称 | |||||
/// </summary> | |||||
public string Name { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,29 @@ | |||||
namespace BPA.MES.Base.Application | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :[账号信息]输出实体 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/3 10:22:37 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public class AccountOutput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string Id { get;set; } | |||||
/// <summary> | |||||
/// 账号 | |||||
/// </summary> | |||||
public string Account { get; set; } | |||||
/// <summary> | |||||
/// 密码 | |||||
/// </summary> | |||||
public string Pwd { get; set; } | |||||
/// <summary> | |||||
/// 员工id | |||||
/// </summary> | |||||
public string TB_Employee_Id { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,134 @@ | |||||
///<summary> | |||||
/// 名 称 :[授权模块]实体基础 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/3 10:21:42 | |||||
/// 描 述 | |||||
/// </summary> | |||||
namespace BPA.MES.Base.Application | |||||
{ | |||||
/// <summary> | |||||
/// [授权模块]入参基础 | |||||
/// </summary> | |||||
public class AuthorModuleInput | |||||
{ | |||||
/// <summary> | |||||
/// 子级列表 | |||||
/// </summary> | |||||
public List<AuthorModuleInput>? Childrens { get; set; } | |||||
/// <summary> | |||||
/// 拥有权限 | |||||
/// </summary> | |||||
public bool HasPermission { get; set; } | |||||
/// <summary> | |||||
/// 模块编号 | |||||
/// </summary> | |||||
public string Id { get; set; } | |||||
/// <summary> | |||||
/// 类别 1:菜单,2:视图,3:功能 | |||||
/// </summary> | |||||
public int Category { get; set; } | |||||
/// <summary> | |||||
/// 菜单打开方式 0:框架内嵌,1:新开页面 | |||||
/// </summary> | |||||
public int OpenType { get; set; } | |||||
/// <summary> | |||||
/// 父级编号 | |||||
/// </summary> | |||||
public string ParentId { get; set; } | |||||
/// <summary> | |||||
/// 名称 | |||||
/// </summary> | |||||
public string Name { set; get; } | |||||
/// <summary> | |||||
/// 图标 | |||||
/// </summary> | |||||
public string Icon { set; get; } | |||||
/// <summary> | |||||
/// 地址 | |||||
/// </summary> | |||||
public string Url { set; get; } | |||||
/// <summary> | |||||
/// 排序码 | |||||
/// </summary> | |||||
public int Sort { set; get; } | |||||
/// <summary> | |||||
/// 启用禁用 | |||||
/// </summary> | |||||
public bool IsDisabled { get; set; } | |||||
/// <summary> | |||||
/// 子集 | |||||
/// </summary> | |||||
public List<ModuleTreeInput>? Children { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [授权模块]添加入参 | |||||
/// </summary> | |||||
public class AuthorModuleAddInput : AuthorModuleInput | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// [授权模块]批量授权信息 | |||||
/// </summary> | |||||
public class AuthorModulesAddInput | |||||
{ | |||||
/// <summary> | |||||
/// 模板名称 | |||||
/// </summary> | |||||
public string TemplateName { set; get; } | |||||
/// <summary> | |||||
/// 授权模块 | |||||
/// </summary> | |||||
public List<string> ModuleIds { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [授权模块]修改入参 | |||||
/// </summary> | |||||
public class AuthorModuleUpdateInput : AuthorModuleInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [授权模块]删除入参 | |||||
/// </summary> | |||||
public class AuthorModuleDelInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [授权模块]普通查询入参 | |||||
/// </summary> | |||||
public class AuthorModuleQueryInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [授权模块]分页查询入参 | |||||
/// </summary> | |||||
public class AuthorModuleQueryPageInput : RequestPage | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,70 @@ | |||||
///<summary> | |||||
/// 名 称 :[账号信息]实体基础 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/3 10:21:42 | |||||
/// 描 述 | |||||
/// </summary> | |||||
namespace BPA.MES.Base.Application | |||||
{ | |||||
/// <summary> | |||||
/// [账号信息]入参基础 | |||||
/// </summary> | |||||
public class AuthorModuleItemInput | |||||
{ | |||||
/// <summary> | |||||
/// 模板Id | |||||
/// </summary> | |||||
public string TB_TemplateId { get; set; } | |||||
/// <summary> | |||||
/// 模块Id | |||||
/// </summary> | |||||
public List<string> TB_ModuleIds { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [账号信息]添加入参 | |||||
/// </summary> | |||||
public class AuthorModuleItemAddInput : AuthorModuleItemInput | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// [账号信息]修改入参 | |||||
/// </summary> | |||||
public class AuthorModuleItemUpdateInput : AuthorModuleItemInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [账号信息]删除入参 | |||||
/// </summary> | |||||
public class AuthorModuleItemDelInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [账号信息]普通查询入参 | |||||
/// </summary> | |||||
public class AuthorModuleItemQueryInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [账号信息]分页查询入参 | |||||
/// </summary> | |||||
public class AuthorModuleItemQueryPageInput : RequestPage | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,12 @@ | |||||
namespace BPA.MES.Base.Application | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 : | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/4 17:20:51 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public class AuthorModuleItemOutput | |||||
{ | |||||
} | |||||
} |
@@ -0,0 +1,68 @@ | |||||
namespace BPA.MES.Base.Application | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :授权模块输出 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/4 17:18:24 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public class AuthorModuleOutput | |||||
{ | |||||
/// <summary> | |||||
/// 子级列表 | |||||
/// </summary> | |||||
public List<AuthorModuleOutput>? Childrens { get; set; } | |||||
/// <summary> | |||||
/// 拥有权限 | |||||
/// </summary> | |||||
public bool HasPermission { get; set; } | |||||
/// <summary> | |||||
/// 模块编号 | |||||
/// </summary> | |||||
public string Id { get; set; } | |||||
/// <summary> | |||||
/// 类别 1:菜单,2:视图,3:功能 | |||||
/// </summary> | |||||
public int Category { get; set; } | |||||
/// <summary> | |||||
/// 菜单打开方式 0:框架内嵌,1:新开页面 | |||||
/// </summary> | |||||
public int OpenType { get; set; } | |||||
/// <summary> | |||||
/// 父级编号 | |||||
/// </summary> | |||||
public string ParentId { get; set; } | |||||
/// <summary> | |||||
/// 名称 | |||||
/// </summary> | |||||
public string Name { set; get; } | |||||
/// <summary> | |||||
/// 图标 | |||||
/// </summary> | |||||
public string Icon { set; get; } | |||||
/// <summary> | |||||
/// 地址 | |||||
/// </summary> | |||||
public string Url { set; get; } | |||||
/// <summary> | |||||
/// 排序码 | |||||
/// </summary> | |||||
public int Sort { set; get; } | |||||
/// <summary> | |||||
/// 启用禁用 | |||||
/// </summary> | |||||
public bool IsDisabled { get; set; } | |||||
/// <summary> | |||||
/// 子集 | |||||
/// </summary> | |||||
public List<ModuleTreeInput>? Children { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,97 @@ | |||||
///<summary> | |||||
/// 名 称 :[授权信息]实体基础 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/3 10:21:42 | |||||
/// 描 述 | |||||
/// </summary> | |||||
namespace BPA.MES.Base.Application | |||||
{ | |||||
/// <summary> | |||||
/// [授权信息]入参基础 | |||||
/// </summary> | |||||
public class AuthorizeInput | |||||
{ | |||||
/// <summary> | |||||
/// 关键字 | |||||
/// </summary> | |||||
public string Keyword { get; set; } | |||||
/// <summary> | |||||
/// 模板Id | |||||
/// </summary> | |||||
public string TemplateId { get; set; } | |||||
/// <summary> | |||||
/// 授权类型 1:用户,2:角色 | |||||
/// </summary> | |||||
public int Type { get; set; } | |||||
/// <summary> | |||||
/// 授权对象 | |||||
/// </summary> | |||||
public List<string>? ObjectIds { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [授权信息]添加入参 | |||||
/// </summary> | |||||
public class AuthorizeAddInput : AuthorizeInput | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// [授权信息]角色授权入参 | |||||
/// </summary> | |||||
public class AuthorMapAddInput | |||||
{ | |||||
/// <summary> | |||||
/// 模板编号 | |||||
/// </summary> | |||||
public List<string> TemplateIds { get; set; } | |||||
/// <summary> | |||||
/// 授权类型 1用户 2角色 | |||||
/// </summary> | |||||
public int AuthorizeType { get; set; } | |||||
/// <summary> | |||||
/// 授权对象 | |||||
/// </summary> | |||||
public string ObjectId { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [授权信息]修改入参 | |||||
/// </summary> | |||||
public class AuthorizeUpdateInput : AuthorizeInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [授权信息]删除入参 | |||||
/// </summary> | |||||
public class AuthorizeDelInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [授权信息]普通查询入参 | |||||
/// </summary> | |||||
public class AuthorizeQueryInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [授权信息]分页查询入参 | |||||
/// </summary> | |||||
public class AuthorizeQueryPageInput : RequestPage | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,27 @@ | |||||
namespace BPA.MES.Base.Application | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :授权信息输出 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/4 17:24:21 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public class AuthorizeOutput | |||||
{ | |||||
/// <summary> | |||||
/// 编号 | |||||
/// </summary> | |||||
public string Id { get; set; } | |||||
/// <summary> | |||||
/// 名称 | |||||
/// </summary> | |||||
public string Name { get; set; } | |||||
/// <summary> | |||||
/// 已授权 | |||||
/// </summary> | |||||
public bool IsAuthorized { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,74 @@ | |||||
///<summary> | |||||
/// 名 称 :[授权模块]实体基础 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/3 10:21:42 | |||||
/// 描 述 | |||||
/// </summary> | |||||
namespace BPA.MES.Base.Application | |||||
{ | |||||
/// <summary> | |||||
/// [授权模块]入参基础 | |||||
/// </summary> | |||||
public class AuthorizeTemplateInput | |||||
{ | |||||
/// <summary> | |||||
/// 名称 | |||||
/// </summary> | |||||
public string Name { get; set; } | |||||
/// <summary> | |||||
/// 描述 | |||||
/// </summary> | |||||
public string Remark { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [授权模块]添加入参 | |||||
/// </summary> | |||||
public class AuthorizeTemplateAddInput : AuthorizeTemplateInput | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// [授权模块]修改入参 | |||||
/// </summary> | |||||
public class AuthorizeTemplateUpdateInput : AuthorizeTemplateInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [授权模块]删除入参 | |||||
/// </summary> | |||||
public class AuthorizeTemplateDelInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [授权模块]普通查询入参 | |||||
/// </summary> | |||||
public class AuthorizeTemplateQueryInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [授权模块]分页查询入参 | |||||
/// </summary> | |||||
public class AuthorizeTemplateQueryPageInput : RequestPage | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
/// <summary> | |||||
/// 关键字 | |||||
/// </summary> | |||||
public string Keyword { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,24 @@ | |||||
namespace BPA.MES.Base.Application | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :授权模块输出 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/4 9:48:24 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public class AuthorizeTemplateOutput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string Id { get; set; } | |||||
/// <summary> | |||||
/// 名称 | |||||
/// </summary> | |||||
public string Name { get; set; } | |||||
/// <summary> | |||||
/// 描述 | |||||
/// </summary> | |||||
public string Remark { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,141 @@ | |||||
namespace BPA.MES.Base.Application | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 : | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/5 15:15:50 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public class EmployeeInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string Id { get; set; } | |||||
/// <summary> | |||||
/// 排序 | |||||
/// </summary> | |||||
public int Sort { get; set; } | |||||
/// <summary> | |||||
/// 员工姓名 | |||||
/// </summary> | |||||
public string Name { get; set; } | |||||
/// <summary> | |||||
/// 1男2女 | |||||
/// </summary> | |||||
public int Gender { get; set; } | |||||
/// <summary> | |||||
/// 手机号 | |||||
/// </summary> | |||||
public string Phone { get; set; } | |||||
/// <summary> | |||||
/// 员工IC卡 | |||||
/// </summary> | |||||
public string ICCard { get; set; } | |||||
/// <summary> | |||||
/// 头像 | |||||
/// </summary> | |||||
public string Header { get; set; } | |||||
/// <summary> | |||||
/// 入职时间 | |||||
/// </summary> | |||||
public DateTime JoinDate { get; set; } | |||||
/// <summary> | |||||
/// 离职时间 | |||||
/// </summary> | |||||
public DateTime? OutDate { get; set; } | |||||
/// <summary> | |||||
/// 身份证 | |||||
/// </summary> | |||||
public string IdCard { get; set; } | |||||
/// <summary> | |||||
/// 1在职2出差3离职 | |||||
/// </summary> | |||||
public int Stutas { get; set; } | |||||
/// <summary> | |||||
/// 角色Id | |||||
/// </summary> | |||||
public string TB_RoleId { get; set; } | |||||
/// <summary> | |||||
/// 是否存在账号 | |||||
/// </summary> | |||||
public bool IsAccount { get; set; } | |||||
/// <summary> | |||||
/// 账号 | |||||
/// </summary> | |||||
public string Account { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [授权信息]添加入参 | |||||
/// </summary> | |||||
public class EmployeeAddInput : EmployeeInput | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// [授权信息]修改入参 | |||||
/// </summary> | |||||
public class EmployeeUpdateInput : EmployeeInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [授权信息]删除入参 | |||||
/// </summary> | |||||
public class EmployeeDelInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [授权信息]普通查询入参 | |||||
/// </summary> | |||||
public class EmployeeQueryInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [授权信息]分页查询入参 | |||||
/// </summary> | |||||
public class EmployeeQueryPageInput : RequestPage | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
/// <summary> | |||||
/// 关键字 | |||||
/// </summary> | |||||
public string Keyword { get; set; } | |||||
/// <summary> | |||||
/// 状态 | |||||
/// </summary> | |||||
public int Status { get; set; } | |||||
/// <summary> | |||||
/// 性别 | |||||
/// </summary> | |||||
public int Gender { get; set; } | |||||
/// <summary> | |||||
/// 入职时间 | |||||
/// </summary> | |||||
public DateTime? JoinDate { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,69 @@ | |||||
namespace BPA.MES.Base.Application | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :[员工信息] | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/5 15:18:02 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public class EmployeeOutput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string Id { get; set; } | |||||
/// <summary> | |||||
/// 排序 | |||||
/// </summary> | |||||
public int Sort { get; set; } | |||||
/// <summary> | |||||
/// 员工姓名 | |||||
/// </summary> | |||||
public string Name { get; set; } | |||||
/// <summary> | |||||
/// 1男2女 | |||||
/// </summary> | |||||
public int Gender { get; set; } | |||||
/// <summary> | |||||
/// 手机号 | |||||
/// </summary> | |||||
public string Phone { get; set; } | |||||
/// <summary> | |||||
/// 员工IC卡 | |||||
/// </summary> | |||||
public string ICCard { get; set; } | |||||
/// <summary> | |||||
/// 头像 | |||||
/// </summary> | |||||
public string Header { get; set; } | |||||
/// <summary> | |||||
/// 入职时间 | |||||
/// </summary> | |||||
public DateTime JoinDate { get; set; } | |||||
/// <summary> | |||||
/// 离职时间 | |||||
/// </summary> | |||||
public DateTime? OutDate { get; set; } | |||||
/// <summary> | |||||
/// 身份证 | |||||
/// </summary> | |||||
public string IdCard { get; set; } | |||||
/// <summary> | |||||
/// 1在职2出差3离职 | |||||
/// </summary> | |||||
public int Stutas { get; set; } | |||||
/// <summary> | |||||
/// 角色Id | |||||
/// </summary> | |||||
public string TB_RoleId { get; set; } | |||||
/// <summary> | |||||
/// 是否存在账号 | |||||
/// </summary> | |||||
public bool IsAccount { get; set; } | |||||
/// <summary> | |||||
/// 账号 | |||||
/// </summary> | |||||
public string Account { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,8 @@ | |||||
namespace BPA.MES.Base.Application; | |||||
public class Mapper : IRegister | |||||
{ | |||||
public void Register(TypeAdapterConfig config) | |||||
{ | |||||
} | |||||
} |
@@ -0,0 +1,97 @@ | |||||
///<summary> | |||||
/// 名 称 :[模块信息]实体基础 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/3 10:21:42 | |||||
/// 描 述 | |||||
/// </summary> | |||||
namespace BPA.MES.Base.Application | |||||
{ | |||||
/// <summary> | |||||
/// [模块信息]入参基础 | |||||
/// </summary> | |||||
public class ModuleInput | |||||
{ | |||||
/// <summary> | |||||
/// 类别 1:菜单,2:视图,3:功能 | |||||
/// </summary> | |||||
public int Category { get; set; } | |||||
/// <summary> | |||||
/// 菜单打开方式 0:框架内嵌,1:新开页面 | |||||
/// </summary> | |||||
public int OpenType { get; set; } | |||||
/// <summary> | |||||
/// 父级编号 | |||||
/// </summary> | |||||
public string ParentId { get; set; } | |||||
/// <summary> | |||||
/// 名称 | |||||
/// </summary> | |||||
public string Name { set; get; } | |||||
/// <summary> | |||||
/// 图标 | |||||
/// </summary> | |||||
public string Icon { set; get; } | |||||
/// <summary> | |||||
/// 地址 | |||||
/// </summary> | |||||
public string Url { set; get; } | |||||
/// <summary> | |||||
/// 排序码 | |||||
/// </summary> | |||||
public int Sort { set; get; } | |||||
/// <summary> | |||||
/// 启用禁用 | |||||
/// </summary> | |||||
public bool IsDisabled { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [模块信息]添加入参 | |||||
/// </summary> | |||||
public class ModuleAddInput : ModuleInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [模块信息]修改入参 | |||||
/// </summary> | |||||
public class ModuleUpdateInput : ModuleInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [模块信息]删除入参 | |||||
/// </summary> | |||||
public class ModuleDelInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [模块信息]普通查询入参 | |||||
/// </summary> | |||||
public class ModuleQueryInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [模块信息]分页查询入参 | |||||
/// </summary> | |||||
public class ModuleQueryPageInput : RequestPage | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,48 @@ | |||||
namespace BPA.MES.Base.Application | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 : | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/4 9:48:24 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public class ModuleOutput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string Id { get; set; } | |||||
/// <summary> | |||||
/// 类别 1:菜单,2:视图,3:功能 | |||||
/// </summary> | |||||
public int Category { get; set; } | |||||
/// <summary> | |||||
/// 菜单打开方式 0:框架内嵌,1:新开页面 | |||||
/// </summary> | |||||
public int OpenType { get; set; } | |||||
/// <summary> | |||||
/// 父级编号 | |||||
/// </summary> | |||||
public string ParentId { get; set; } | |||||
/// <summary> | |||||
/// 名称 | |||||
/// </summary> | |||||
public string Name { set; get; } | |||||
/// <summary> | |||||
/// 图标 | |||||
/// </summary> | |||||
public string Icon { set; get; } | |||||
/// <summary> | |||||
/// 地址 | |||||
/// </summary> | |||||
public string Url { set; get; } | |||||
/// <summary> | |||||
/// 排序码 | |||||
/// </summary> | |||||
public int Sort { set; get; } | |||||
/// <summary> | |||||
/// 启用禁用 | |||||
/// </summary> | |||||
public bool IsDisabled { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,108 @@ | |||||
///<summary> | |||||
/// 名 称 :[菜单模块树]实体基础 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/3 10:21:42 | |||||
/// 描 述 | |||||
/// </summary> | |||||
namespace BPA.MES.Base.Application | |||||
{ | |||||
/// <summary> | |||||
/// [菜单模块树]入参基础 | |||||
/// </summary> | |||||
public class ModuleTreeInput | |||||
{ | |||||
/// <summary> | |||||
/// 类别 1:菜单,2:视图,3:功能 | |||||
/// </summary> | |||||
public int Category { get; set; } | |||||
/// <summary> | |||||
/// 菜单打开方式 0:框架内嵌,1:新开页面 | |||||
/// </summary> | |||||
public int OpenType { get; set; } | |||||
/// <summary> | |||||
/// 父级编号 | |||||
/// </summary> | |||||
public string ParentId { get; set; } | |||||
/// <summary> | |||||
/// 名称 | |||||
/// </summary> | |||||
public string Name { set; get; } | |||||
/// <summary> | |||||
/// 图标 | |||||
/// </summary> | |||||
public string Icon { set; get; } | |||||
/// <summary> | |||||
/// 地址 | |||||
/// </summary> | |||||
public string Url { set; get; } | |||||
/// <summary> | |||||
/// 排序码 | |||||
/// </summary> | |||||
public int Sort { set; get; } | |||||
/// <summary> | |||||
/// 启用禁用 | |||||
/// </summary> | |||||
public bool IsDisabled { get; set; } | |||||
/// <summary> | |||||
/// 子集 | |||||
/// </summary> | |||||
public List<ModuleTreeInput> Children { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [菜单模块树]添加入参 | |||||
/// </summary> | |||||
public class ModuleTreeAddInput : ModuleTreeInput | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// [菜单模块树]修改入参 | |||||
/// </summary> | |||||
public class ModuleTreeUpdateInput : ModuleTreeInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [菜单模块树]删除入参 | |||||
/// </summary> | |||||
public class ModuleTreeDelInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [菜单模块树]普通查询入参 | |||||
/// </summary> | |||||
public class ModuleTreeQueryInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
/// <summary> | |||||
/// 名称 | |||||
/// </summary> | |||||
public string Name { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [菜单模块树]分页查询入参 | |||||
/// </summary> | |||||
public class ModuleTreeQueryPageInput : RequestPage | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,59 @@ | |||||
namespace BPA.MES.Base.Application | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :[菜单模块树]输出 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/4 16:14:43 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public class ModuleTreeOutput | |||||
{ | |||||
/// <summary> | |||||
/// 模块编号 | |||||
/// </summary> | |||||
public string Id { get; set; } | |||||
/// <summary> | |||||
/// 类别 1:菜单,2:视图,3:功能 | |||||
/// </summary> | |||||
public int Category { get; set; } | |||||
/// <summary> | |||||
/// 菜单打开方式 0:框架内嵌,1:新开页面 | |||||
/// </summary> | |||||
public int OpenType { get; set; } | |||||
/// <summary> | |||||
/// 父级编号 | |||||
/// </summary> | |||||
public string ParentId { get; set; } | |||||
/// <summary> | |||||
/// 名称 | |||||
/// </summary> | |||||
public string Name { set; get; } | |||||
/// <summary> | |||||
/// 图标 | |||||
/// </summary> | |||||
public string Icon { set; get; } | |||||
/// <summary> | |||||
/// 地址 | |||||
/// </summary> | |||||
public string Url { set; get; } | |||||
/// <summary> | |||||
/// 排序码 | |||||
/// </summary> | |||||
public int Sort { set; get; } | |||||
/// <summary> | |||||
/// 启用禁用 | |||||
/// </summary> | |||||
public bool IsDisabled { get; set; } | |||||
/// <summary> | |||||
/// 子集 | |||||
/// </summary> | |||||
public List<ModuleTreeOutput> Children { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,71 @@ | |||||
namespace BPA.MES.Base.Application | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :[角色信息] | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/4 9:43:25 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public class RoleInput | |||||
{ | |||||
/// <summary> | |||||
/// 角色名称 | |||||
/// </summary> | |||||
public string Name { get; set; } | |||||
/// <summary> | |||||
/// 角色描述 | |||||
/// </summary> | |||||
public string Description { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [角色信息]添加入参 | |||||
/// </summary> | |||||
public class RoleAddInput : RoleInput | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// [角色信息]修改入参 | |||||
/// </summary> | |||||
public class RoleUpdateInput : RoleInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [角色信息]删除入参 | |||||
/// </summary> | |||||
public class RoleDelInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [角色信息]普通查询入参 | |||||
/// </summary> | |||||
public class RoleQueryInput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// [角色信息]分页查询入参 | |||||
/// </summary> | |||||
public class RoleQueryPageInput : RequestPage | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string? Id { get; set; } | |||||
/// <summary> | |||||
/// 关键字 | |||||
/// </summary> | |||||
public string Keyword { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,24 @@ | |||||
namespace BPA.MES.Base.Application | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :角色信息 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/4 9:43:42 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public class RoleOutput | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string Id { get; set; } | |||||
/// <summary> | |||||
/// 角色名称 | |||||
/// </summary> | |||||
public string Name { get; set; } | |||||
/// <summary> | |||||
/// 角色描述 | |||||
/// </summary> | |||||
public string Description { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,62 @@ | |||||
| |||||
namespace BPA.MES.Base.Application | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :个人角色信息 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/1/4 17:46:47 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public class UserRoleCacheDto | |||||
{ | |||||
public List<string> AuthorizationCodes { get; set; } | |||||
public List<UserMenu> Menus { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// 个人菜单信息 | |||||
/// </summary> | |||||
public class UserMenu : ITree<UserMenu> | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
public string Id { get; set; } | |||||
/// <summary> | |||||
/// 菜单名称 | |||||
/// </summary> | |||||
public string Name { get; set; } | |||||
/// <summary> | |||||
/// 菜单地址 | |||||
/// </summary> | |||||
public string Url { get; set; } | |||||
/// <summary> | |||||
/// 菜单图标 | |||||
/// </summary> | |||||
public string Icon { get; set; } | |||||
/// <summary> | |||||
/// 菜单子项 | |||||
/// </summary> | |||||
public List<UserMenu> Children { get; set; } | |||||
/// <summary> | |||||
/// 父级Id | |||||
/// </summary> | |||||
public string ParentId { get; set; } | |||||
/// <summary> | |||||
/// 分页信息 | |||||
/// </summary> | |||||
public string Sort { get; set; } | |||||
/// <summary> | |||||
/// 打开类型 | |||||
/// </summary> | |||||
public int OpenType { get; set; } | |||||
/// <summary> | |||||
/// 类别 | |||||
/// </summary> | |||||
public int Category { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,645 @@ | |||||
namespace BPA.MES.Base.Application | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :授权服务 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 :2023/3/2 16:11:04 | |||||
/// 描 述 :授权服务数据维护 | |||||
/// </summary> | |||||
[ApiDescriptionSettings(Name = "Authorize", KeepName = true, SplitCamelCase = true, KeepVerb = true)] | |||||
public class AuthorizeService : IAuthorizeService, ITransient, IDynamicApiController | |||||
{ | |||||
private readonly IHttpContextAccessor _httpContextAccessor; | |||||
private readonly ISqlSugarClient db; | |||||
private readonly ISqlSugarClient _dbContext; | |||||
public AuthorizeService(ISqlSugarClient db, IHttpContextAccessor httpContextAccessor) | |||||
{ | |||||
this.db = db; | |||||
_dbContext = db; | |||||
_httpContextAccessor = httpContextAccessor; | |||||
} | |||||
#region 当前用户 | |||||
/// <summary> | |||||
/// 登录 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
[AllowAnonymous] | |||||
public async Task<bool> Login(AccountInput input) | |||||
{ | |||||
var Info = await db.Queryable<AccountEntity>().FirstAsync(t => t.Account == input.Account && t.Pwd == input.Pwd); | |||||
if (Info == null) | |||||
throw Oops.Bah("请输入正确的账号和密码"); | |||||
var User = await db.Queryable<EmployeeEntity>().FirstAsync(t => t.Id == Info.EmployeeId); | |||||
if (User == null) | |||||
{ | |||||
throw Oops.Bah("账号没有权限"); | |||||
} | |||||
//return ResolveService<IJwtService>().CreateAccessToken(new UserIdentity | |||||
//{ | |||||
// Id = User.Id, | |||||
// UserName = User.Name, | |||||
// IsAdmin = User.IsAdmin, | |||||
//}); | |||||
// 生成Token令牌 | |||||
//var accessToken = await _jwtBearerManager.CreateTokenAdmin(user); | |||||
var accessToken = JWTEncryption.Encrypt(new Dictionary<string, object> | |||||
{ | |||||
{ClaimConst.CLAINM_USERID, User.Id}, | |||||
{ClaimConst.CLAINM_NAME,User.Name}, | |||||
{ClaimConst.CLAINM_ISAUTH,User.IsAdmin}, | |||||
},20); | |||||
// 设置Swagger自动登录 | |||||
_httpContextAccessor.HttpContext.SigninToSwagger(accessToken); | |||||
// 生成刷新Token令牌 | |||||
var refreshToken = | |||||
JWTEncryption.GenerateRefreshToken(accessToken, 25); | |||||
_httpContextAccessor.HttpContext.Response.Headers["access-token"] = accessToken; | |||||
// 设置刷新Token令牌 | |||||
_httpContextAccessor.HttpContext.Response.Headers["x-access-token"] = refreshToken; | |||||
return true; | |||||
} | |||||
/// <summary> | |||||
/// 获取个人信息 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
public async Task<object> GetUserInfo() | |||||
{ | |||||
string userId = App.User?.FindFirst(ClaimConst.CLAINM_USERID)?.Value; | |||||
var user = await db.Queryable<EmployeeEntity>().LeftJoin<RoleEntity>((t, x) => t.TB_RoleId == x.Id) | |||||
.Where((t, x) => t.Id == userId).Select((t, x) => new | |||||
{ | |||||
RoleName = x.Name, | |||||
RoleType = x.RoleType, | |||||
Id = t.Id, | |||||
UserName = t.Name | |||||
}).FirstAsync(); | |||||
var menus = (await GetJurisdictionItemsAsync())?.Menus; | |||||
return new | |||||
{ | |||||
Menus = menus, | |||||
UserInfo = new | |||||
{ | |||||
UserId = user?.Id, | |||||
user?.RoleName, | |||||
user?.UserName | |||||
} | |||||
}; | |||||
} | |||||
[HttpGet] | |||||
public async Task<List<string>> MultipleModuleAuthorityAsync() | |||||
{ | |||||
return (await GetJurisdictionItemsAsync())?.AuthorizationCodes; | |||||
} | |||||
/// <summary> | |||||
/// 获取用户权限 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
[HttpGet] | |||||
async Task<UserRoleCacheDto> GetJurisdictionItemsAsync() | |||||
{ | |||||
string userId = App.User?.FindFirst(ClaimConst.CLAINM_USERID)?.Value; | |||||
var result = new UserRoleCacheDto(); | |||||
result.AuthorizationCodes = (await GetAuthorityModuleIdsAsync(userId)) ?? new List<string>(); | |||||
if (result.AuthorizationCodes.HasVal()) | |||||
{ | |||||
var temp = await db.Queryable<ModuleEntity>().Where(t => t.Category == 1 || t.Category == 2 || t.Category == 3) | |||||
.Where(t => result.AuthorizationCodes.Contains(t.Id) && !t.IsDisabled).OrderBy(t => t.ParentId) | |||||
.ToListAsync(); | |||||
result.Menus = temp.Adapt<List<UserMenu>>().BuildTree(); | |||||
} | |||||
result.Menus = result.Menus ?? new List<UserMenu>(); | |||||
return result; | |||||
} | |||||
/// <summary> | |||||
/// 获取权限模块编号 | |||||
/// </summary> | |||||
/// <param name="userId"></param> | |||||
/// <returns></returns> | |||||
/// <exception cref="NotImplementedException"></exception> | |||||
[HttpGet] | |||||
async Task<List<string>> GetAuthorityModuleIdsAsync(string userId) | |||||
{ | |||||
List<string> moduleIds = null; | |||||
var user = await db.Queryable<EmployeeEntity>().Where(m => m.Id == userId).FirstAsync(); | |||||
if (user == null) | |||||
{ | |||||
return moduleIds; | |||||
} | |||||
//超管用户 | |||||
if (user.IsAdmin) | |||||
{ | |||||
moduleIds = await db.Queryable<ModuleEntity>() | |||||
.OrderBy(m => m.ParentId).OrderBy(m => m.Name) | |||||
.ToListAsync(m => m.Id); | |||||
} | |||||
else | |||||
{ | |||||
moduleIds = await GetAuthorityModuleIdsAsync((category) => | |||||
{ | |||||
if (category == 1) | |||||
{ | |||||
return user.Id; | |||||
} | |||||
if (category == 2) | |||||
{ | |||||
return user.TB_RoleId; | |||||
} | |||||
else | |||||
{ | |||||
throw new NotImplementedException("无效授权类别"); | |||||
} | |||||
}); | |||||
} | |||||
return moduleIds; | |||||
} | |||||
/// <summary> | |||||
/// 获取账户信息 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
[HttpPost] | |||||
public async Task<SqlSugarPagedList<AccountOutput>> AccountPageList(AccountQueryPageInput input) | |||||
{ | |||||
var entity = await _dbContext.Queryable<AccountEntity>() | |||||
.ToPagedListAsync(input.PageIndex,input.PageSize); | |||||
SqlSugarPagedList<AccountOutput> output = entity.Adapt<SqlSugarPagedList<AccountOutput>>(); | |||||
return output; | |||||
} | |||||
/// <summary> | |||||
/// 添加账户 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
public async Task<bool> AddAccount(AccountAddInput input) | |||||
{ | |||||
var entity = input.Adapt<AccountEntity>(); | |||||
return await _dbContext.Insertable(entity).ExecuteCommandIdentityIntoEntityAsync(); | |||||
} | |||||
/// <summary> | |||||
/// 修改账户信息 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
public async Task<bool> UpdateAccount(AccountUpdateInput input) { | |||||
var entity = input.Adapt<AccountEntity>(); | |||||
return await _dbContext.Updateable(entity).ExecuteCommandHasChangeAsync(); | |||||
} | |||||
/// <summary> | |||||
/// 删除账户 | |||||
/// </summary> | |||||
/// <param name="input"></param> | |||||
/// <returns></returns> | |||||
public async Task<bool> DelAccount(AccountDelInput input) { | |||||
var entity = input.Adapt<AccountEntity>(); | |||||
return await _dbContext.Deleteable(entity).Where(x=>x.Id==input.Id).ExecuteCommandHasChangeAsync(); | |||||
} | |||||
/// <summary> | |||||
/// 获取授权模块编号 | |||||
/// </summary> | |||||
/// <param name="getObjectId"></param> | |||||
/// <returns></returns> | |||||
[HttpGet] | |||||
async Task<List<string>> GetAuthorityModuleIdsAsync(Func<int, string> getObjectId) | |||||
{ | |||||
for (int index = 1; index <= 2; index++) | |||||
{ | |||||
var objectId = getObjectId(index); | |||||
var templateIds = await db.Queryable<AuthorizeTemplateMapEntity>().LeftJoin<AuthorizeTemplateEntity>((t, x) => t.TemplateId == x.Id) | |||||
.Where((t, x) => t.AuthorizeType == index && t.ObjectId == objectId).ToListAsync(t => t.TemplateId); | |||||
if (!templateIds.HasVal() || templateIds.Count == 0) | |||||
{ | |||||
continue; | |||||
} | |||||
return await db.Queryable<AuthorizeTemplateItemEntity>().LeftJoin<ModuleEntity>((t, x) => t.TB_ModuleId == x.Id) | |||||
.Where((t, x) => templateIds.Contains(t.TB_TemplateId)) | |||||
.GroupBy((t, x) => t.TB_ModuleId).ToListAsync(t => t.TB_ModuleId); | |||||
} | |||||
return null; | |||||
} | |||||
#endregion | |||||
#region 角色 | |||||
[HttpPost] | |||||
public async Task<bool> AddRole(RoleAddInput input) | |||||
{ | |||||
var check = await db.Queryable<RoleEntity>().FirstAsync(t => t.Name == input.Name); | |||||
if (check != null) throw Oops.Bah ("角色名称不能重复"); | |||||
var model = input.Adapt<RoleEntity>(); | |||||
model.RoleType = 2; | |||||
return await db.Insertable(model).ExecuteCommandAsync() > 0; | |||||
} | |||||
[HttpPost] | |||||
public async Task<bool> EditRole(RoleUpdateInput input) | |||||
{ | |||||
if (!await db.Queryable<RoleEntity>().Where(it => it.Id == input.Id).AnyAsync()) | |||||
throw Oops.Bah("角色不存在或已被删除"); | |||||
if (await _dbContext.Queryable<RoleEntity>().Where(it => it.Id != input.Id && it.Name == input.Name).AnyAsync()) | |||||
throw Oops.Bah("角色名称已经存在"); | |||||
return await _dbContext.Updateable<RoleEntity>(input).Where(a => a.Id == input.Id).ExecuteCommandHasChangeAsync(); | |||||
} | |||||
[HttpGet] | |||||
public async Task<bool> RemoveRole(string input) | |||||
{ | |||||
return await db.Updateable<RoleEntity>().Where(t => t.Id == input).ExecuteCommandHasChangeAsync(); | |||||
} | |||||
[HttpGet] | |||||
public async Task<RoleOutput> GetRole(string input) | |||||
{ | |||||
var entity = await db.Queryable<RoleEntity>().FirstAsync(t => t.Id == input); | |||||
return entity.Adapt<RoleOutput>(); | |||||
} | |||||
[HttpGet] | |||||
public async Task<List<RoleOutput>> GetRoleList() | |||||
{ | |||||
var entity = await db.Queryable<RoleEntity>().Where(t => t.RoleType != 1).ToListAsync(); | |||||
return entity.Adapt<List<RoleOutput>>(); | |||||
} | |||||
[HttpPost] | |||||
public async Task<SqlSugarPagedList<RoleOutput>> QueryRole(RoleQueryPageInput input) | |||||
{ | |||||
var eneity = await db.Queryable<RoleEntity>() | |||||
.WhereIF(!string.IsNullOrEmpty(input.Keyword), t => t.Name.Contains(input.Keyword)) | |||||
.Select<RoleOutput>() | |||||
.ToPagedListAsync(input.PageIndex, input.PageSize); | |||||
return eneity; | |||||
} | |||||
#endregion | |||||
#region 模块 | |||||
[HttpPost] | |||||
public async Task<bool> AddModule(ModuleAddInput input) | |||||
{ | |||||
input.ParentId = input.ParentId ?? string.Empty; | |||||
input.Id = null; | |||||
return (await db.Insertable(input.Adapt<ModuleEntity>()).ExecuteCommandAsync()) > 0; | |||||
} | |||||
[HttpPost] | |||||
public async Task<bool> EditModule(ModuleUpdateInput input) | |||||
{ | |||||
if (!await db.Queryable<ModuleEntity>().Where(it => it.Id == input.Id ).AnyAsync()) | |||||
{ | |||||
throw Oops.Bah("模块不存在或已被删除"); | |||||
} | |||||
input.ParentId = input.ParentId ?? string.Empty; | |||||
return await db.Updateable<ModuleEntity>(input).Where(a => a.Id == input.Id).ExecuteCommandHasChangeAsync(); | |||||
} | |||||
[HttpGet] | |||||
public async Task RemoveModule(string input) | |||||
{ | |||||
var list = await db.Queryable<ModuleEntity>().Where(it => it.ParentId == input).ToListAsync(); | |||||
if (list.HasVal()) | |||||
{ | |||||
foreach (var item in list) | |||||
{ | |||||
await RemoveModule(item.Id); | |||||
} | |||||
} | |||||
await _dbContext.Updateable<ModuleEntity>().Where(it => it.Id == input).ExecuteCommandAsync(); | |||||
} | |||||
[HttpPost] | |||||
public async Task<List<ModuleTreeOutput>> GetTreeGrid(ModuleTreeQueryInput input) | |||||
{ | |||||
var list = new List<ModuleTreeOutput>(); | |||||
var datas = await db.Queryable<ModuleEntity>() | |||||
.WhereIF(!string.IsNullOrEmpty(input.Name), t => t.Name.Contains(input.Name)) | |||||
.OrderBy(it => it.ParentId) | |||||
.OrderBy(it => it.Name) | |||||
.ToListAsync(); | |||||
var modules = datas.Adapt<List<ModuleTreeOutput>>(); | |||||
if (modules.HasVal()) | |||||
{ | |||||
foreach (var item in modules.Where(it => it.Category == 1)) | |||||
{ | |||||
item.Children = modules.Where(it => it.ParentId == item.Id && it.Category == 2).OrderBy(it => it.Sort).ToList(); | |||||
foreach (var view in item.Children) | |||||
{ | |||||
view.Children = modules.Where(it => it.ParentId == view.Id && it.Category == 3).OrderBy(it => it.Sort).ToList(); | |||||
} | |||||
list.Add(item); | |||||
} | |||||
} | |||||
return list; | |||||
} | |||||
#endregion | |||||
#region 授权模板 | |||||
[HttpPost] | |||||
public async Task<bool> AddAuthorTemp(AuthorizeTemplateAddInput input) | |||||
{ | |||||
if (await db.Queryable<AuthorizeTemplateEntity>().Where(it => it.Name == input.Name && it.IsDeleted == false).AnyAsync()) | |||||
throw Oops.Bah("模板名称已经存在"); | |||||
var data = await db.Insertable(input.Adapt<AuthorizeTemplateEntity>()).ExecuteCommandAsync(); | |||||
return data > 0; | |||||
} | |||||
[HttpPost] | |||||
public async Task<bool> EditAuthorTemp(AuthorizeTemplateUpdateInput input) | |||||
{ | |||||
if (!await db.Queryable<AuthorizeTemplateEntity>().Where(it => it.Id == input.Id && it.IsDeleted == false).AnyAsync()) | |||||
throw Oops.Bah("模板不存在或已被删除"); | |||||
if (await db.Queryable<AuthorizeTemplateEntity>().Where(it => it.Id != input.Id && it.Name == input.Name && it.IsDeleted == false).AnyAsync()) | |||||
throw Oops.Bah("模板名称已经存在"); | |||||
return await db.Updateable<AuthorizeTemplateEntity>(input).Where(a => a.Id == input.Id).ExecuteCommandHasChangeAsync(); | |||||
} | |||||
[HttpGet] | |||||
public async Task<bool> RemoveAuthorTemp(string input) | |||||
{ | |||||
var f1 = await db.Updateable<AuthorizeTemplateEntity>().SetColumns(t => t.IsDeleted == true).Where(t => t.Id == input).ExecuteCommandHasChangeAsync(); | |||||
var f2 = await db.Updateable<AuthorizeTemplateItemEntity>().SetColumns(T => T.IsDeleted == true).Where(t => t.TB_TemplateId == input).ExecuteCommandHasChangeAsync(); | |||||
return f1 && f2; | |||||
} | |||||
[HttpPost] | |||||
public async Task<SqlSugarPagedList<AuthorizeTemplateOutput>> QueryAuthorTemp(AuthorizeTemplateQueryPageInput input) | |||||
{ | |||||
RefAsync<int> Total = 0; | |||||
var data = await db.Queryable<AuthorizeTemplateEntity>().Where(t => !t.IsDeleted) | |||||
.WhereIF(!string.IsNullOrEmpty(input.Keyword), t => t.Name.Contains(input.Keyword)) | |||||
.OrderByDescending(t => t.CreateAt) | |||||
.Select<AuthorizeTemplateOutput>() | |||||
.ToPagedListAsync(input.PageIndex, input.PageSize); | |||||
return data; | |||||
} | |||||
public async Task<AuthorizeTemplateOutput> GetAuthorTemp(string input) | |||||
{ | |||||
var data = await db.Queryable<AuthorizeTemplateEntity>().Where(it => it.Id == input && it.IsDeleted == false).FirstAsync(); | |||||
return data.Adapt<AuthorizeTemplateOutput>(); | |||||
} | |||||
#endregion | |||||
#region 授权模板详情 | |||||
[HttpGet] | |||||
public async Task<List<AuthorModuleOutput>> GetModuleByTemplateId(string input) | |||||
{ | |||||
List<AuthorModuleOutput> result = new List<AuthorModuleOutput>(); | |||||
var modules = await db.Queryable<ModuleEntity>().ToListAsync(); | |||||
var roots = modules.Adapt<List<AuthorModuleOutput>>(); | |||||
db.ThenMapper(roots, item => | |||||
{ | |||||
item.HasPermission = db.Queryable<AuthorizeTemplateItemEntity>().Where(m => m.TB_TemplateId == input && m.TB_ModuleId == item.Id).Any(); | |||||
}); | |||||
if (roots.HasVal()) | |||||
{ | |||||
foreach (var item in roots.Where(it => it.Category == 1)) | |||||
{ | |||||
item.Childrens = roots.Where(it => it.ParentId == item.Id && it.Category == 2).OrderBy(it => it.Name).ToList(); | |||||
foreach (var view in item.Childrens) | |||||
{ | |||||
view.Childrens = roots.Where(it => it.ParentId == view.Id && it.Category == 3).OrderBy(it => it.Name).ToList(); | |||||
} | |||||
result.Add(item); | |||||
} | |||||
} | |||||
return result; | |||||
} | |||||
[HttpPost] | |||||
public async Task<bool> EditTemplateItem(AuthorModuleItemUpdateInput input) | |||||
{ | |||||
var temp = await db.Queryable<AuthorizeTemplateEntity>().FirstAsync(t => t.Id == input.TB_TemplateId && t.IsDeleted == false); | |||||
await db.Updateable<AuthorizeTemplateItemEntity>().SetColumns(T => T.IsDeleted == true) | |||||
.Where(t => t.TB_TemplateId == input.TB_TemplateId).ExecuteCommandHasChangeAsync(); | |||||
var entity = input.TB_ModuleIds.Distinct().ToList().ConvertAll(t => new AuthorizeTemplateItemEntity | |||||
{ | |||||
TB_ModuleId = t, | |||||
TB_TemplateId = input.TB_TemplateId | |||||
}); | |||||
var res = await db.Insertable(entity).ExecuteCommandAsync(); | |||||
return res > 0; | |||||
} | |||||
[HttpPost] | |||||
public async Task<List<AuthorizeOutput>> GetAuthorizeObjects(AuthorizeInput input) | |||||
{ | |||||
List<AuthorizeOutput> result; | |||||
if (input.Type == 2) | |||||
{ | |||||
var temp = await db.Queryable<RoleEntity>() | |||||
.Where(t => t.RoleType != 1) | |||||
.Where(t => t.IsDeleted == false) | |||||
.WhereIF(!string.IsNullOrWhiteSpace(input.Keyword), t => t.Name.Contains(input.Keyword)) | |||||
.OrderBy(t => t.RoleType) | |||||
.OrderBy(t => t.Name) | |||||
.ToListAsync(); | |||||
result = temp.Adapt<List<AuthorizeOutput>>(); | |||||
db.ThenMapper(result, item => | |||||
{ | |||||
item.IsAuthorized = db.Queryable<AuthorizeTemplateMapEntity>() | |||||
.Where(m => m.TemplateId == input.TemplateId && m.AuthorizeType == input.Type && m.ObjectId == item.Id).Any(); | |||||
}); | |||||
} | |||||
else | |||||
{ | |||||
var temp = await db.Queryable<EmployeeEntity>() | |||||
.Where(t => t.IsAdmin == false) | |||||
.Where(t => t.IsDeleted == false) | |||||
.WhereIF(!string.IsNullOrWhiteSpace(input.Keyword), t => t.Name.Contains(input.Keyword)) | |||||
.OrderBy(t => t.Name) | |||||
.ToListAsync(); | |||||
result = temp.Adapt<List<AuthorizeOutput>>(); | |||||
db.ThenMapper(result, item => | |||||
{ | |||||
item.IsAuthorized = db.Queryable<AuthorizeTemplateMapEntity>().Where(t => t.IsDeleted == false) | |||||
.Where(m => m.TemplateId == input.TemplateId && m.AuthorizeType == input.Type && m.ObjectId == item.Id).Any(); | |||||
}); | |||||
} | |||||
if (result.HasVal()) | |||||
{ | |||||
result = result.OrderByDescending(m => m.IsAuthorized).ThenBy(m => m.Name).ToList(); | |||||
} | |||||
return result; | |||||
} | |||||
[HttpPost] | |||||
public async Task<bool> RemoveAuthorize(AuthorizeInput input) | |||||
{ | |||||
var objectIds = input.ObjectIds.Distinct().ToArray(); | |||||
return await db.Updateable<AuthorizeTemplateMapEntity>().SetColumns(t => t.IsDeleted == true) | |||||
.Where(it => it.TemplateId == input.TemplateId && it.AuthorizeType == input.Type && objectIds.Contains(it.ObjectId)) | |||||
.ExecuteCommandHasChangeAsync(); | |||||
} | |||||
[HttpPost] | |||||
public async Task AddAuthorize(AuthorMapAddInput input) | |||||
{ | |||||
foreach (var item in input.TemplateIds.Distinct()) | |||||
{ | |||||
if (!await _dbContext.Queryable<AuthorizeTemplateMapEntity>().AnyAsync(m => m.TemplateId == item && m.AuthorizeType == input.AuthorizeType && m.IsDeleted == false && m.ObjectId == input.ObjectId)) | |||||
{ | |||||
await _dbContext.Insertable(new AuthorizeTemplateMapEntity() | |||||
{ | |||||
TemplateId = item, | |||||
ObjectId = input.ObjectId, | |||||
AuthorizeType = input.AuthorizeType | |||||
}).ExecuteCommandAsync(); | |||||
} | |||||
} | |||||
} | |||||
[HttpPost] | |||||
public async Task<bool> SaveAuthorize(AuthorModulesAddInput input) | |||||
{ | |||||
if (await db.Queryable<AuthorizeTemplateEntity>().Where(it => it.Name == input.TemplateName && it.IsDeleted == false).AnyAsync()) | |||||
{ | |||||
throw Oops.Bah("模板名称已经存在"); | |||||
} | |||||
AuthorizeTemplateEntity Model = new AuthorizeTemplateEntity(); | |||||
Model.Name = input.TemplateName; | |||||
List<AuthorizeTemplateItemEntity> templateItems = input.ModuleIds.ConvertAll(m => new AuthorizeTemplateItemEntity | |||||
{ | |||||
TB_TemplateId = Model.Id, | |||||
TB_ModuleId = m | |||||
}); | |||||
try | |||||
{ | |||||
db.Ado.BeginTran(); | |||||
var f1 = (await db.Insertable(Model).ExecuteCommandAsync()) > 0; | |||||
var f2 = (await _dbContext.Insertable(templateItems).ExecuteCommandAsync()) > 0; | |||||
db.Ado.CommitTran(); | |||||
return f1 && f2; | |||||
} | |||||
catch (Exception) | |||||
{ | |||||
db.Ado.RollbackTran(); | |||||
return false; | |||||
} | |||||
} | |||||
[HttpGet] | |||||
public async Task<bool> RestoreAccountByUser(string input) | |||||
{ | |||||
var Demo = "123456".ToMD5Encrypt(); | |||||
return await db.Updateable<AccountEntity>().SetColumns(t => t.Pwd == Demo) | |||||
.Where(t => t.EmployeeId == input).ExecuteCommandHasChangeAsync(); | |||||
} | |||||
[HttpPost] | |||||
public async Task<bool> AddAccountByUser(AccountAddInput input) | |||||
{ | |||||
var temp = await db.Queryable<AccountEntity>().FirstAsync(t => t.EmployeeId == input.TB_Employee_Id); | |||||
if (temp != null) | |||||
{ | |||||
//throw new BusinessException("该员工已绑定账户,请勿重复绑定"); | |||||
temp.Account = input.Account; | |||||
return await db.Updateable(temp).ExecuteCommandAsync() > 0; | |||||
} | |||||
else | |||||
{ | |||||
var model = input.Adapt<AccountEntity>(); | |||||
//默认123456 | |||||
model.Pwd = "123456".ToMD5Encrypt(); | |||||
return await db.Insertable(model).ExecuteCommandAsync() > 0; | |||||
} | |||||
} | |||||
[HttpPost] | |||||
public async Task<bool> EditAccountPwd(AccountUpdatePwdInput input) | |||||
{ | |||||
var model = db.Queryable<AccountEntity>().First(t => t.Account == input.Account && t.Pwd == input.Pwd); | |||||
if (model == null) throw Oops.Bah("原密码不正确"); | |||||
model.Pwd = input.NewPwd; | |||||
return await db.Updateable(model).ExecuteCommandAsync() > 0; | |||||
} | |||||
[HttpGet] | |||||
public async Task<AccountOutput> GetAccountByUser(string input) | |||||
{ | |||||
var data = await db.Queryable<AccountEntity>().FirstAsync(t => t.EmployeeId == input); | |||||
return data.Adapt<AccountOutput>(); | |||||
} | |||||
[HttpPost] | |||||
public async Task<bool> AddEmployee(EmployeeAddInput input) | |||||
{ | |||||
var model = input.Adapt<EmployeeEntity>(); | |||||
model.IsAdmin = false; | |||||
var temp = await db.Queryable<EmployeeEntity>().FirstAsync(t => t.Name.Equals(input.Name) && t.Phone.Equals(input.Phone) && t.IsDeleted == false); | |||||
if (temp != null) throw Oops.Bah("该员工已经存在"); | |||||
return await db.Insertable(model).ExecuteCommandAsync() > 0; | |||||
} | |||||
[HttpPost] | |||||
public async Task<bool> EditEmployee(EmployeeUpdateInput input) | |||||
{ | |||||
var temp = await db.Queryable<EmployeeEntity>().FirstAsync(t => t.Id == input.Id); | |||||
temp.Header = input.Header; | |||||
temp.IdCard = input.IdCard; | |||||
temp.Gender = input.Gender; | |||||
temp.JoinDate = input.JoinDate; | |||||
temp.OutDate = input.OutDate; | |||||
temp.Name = input.Name; | |||||
temp.Phone = input.Phone; | |||||
temp.Stutas = input.Stutas; | |||||
return await db.Updateable(temp).ExecuteCommandHasChangeAsync(); | |||||
} | |||||
[HttpPost] | |||||
public async Task<SqlSugarPagedList<EmployeeOutput>> QueryEmployee(EmployeeQueryPageInput input) | |||||
{ | |||||
var entity = await db.Queryable<EmployeeEntity>() | |||||
.WhereIF(!string.IsNullOrEmpty(input.Keyword), t => t.Name.Contains(input.Keyword) || t.Phone.Contains(input.Keyword)) | |||||
.WhereIF(input.Status > 0, t => t.Stutas == input.Status).WhereIF(input.Gender > 0, t => t.Gender == input.Gender) | |||||
.WhereIF(input.JoinDate.HasValue, t => t.JoinDate <= input.JoinDate.Value) | |||||
.Where(t => t.IsAdmin == false) | |||||
.Where(t => t.IsDeleted == false) | |||||
.Select(t => new EmployeeOutput() | |||||
{ | |||||
Id = t.Id.SelectAll(), | |||||
IsAccount = SqlFunc.Subqueryable<AccountEntity>().Where(s => s.EmployeeId == t.Id).Any(), | |||||
Account = SqlFunc.Subqueryable<AccountEntity>().Where(s => s.EmployeeId == t.Id).Select(s => s.Account) | |||||
}) | |||||
.ToPagedListAsync(input.PageIndex, input.PageSize); | |||||
return entity; | |||||
} | |||||
[HttpGet] | |||||
public async Task<bool> RemoveEmployee([FromQuery] string employeeId) | |||||
{ | |||||
bool result = false; | |||||
var entity =await db.Queryable<AccountEntity>().FirstAsync(x=>x.EmployeeId== employeeId); | |||||
try | |||||
{ | |||||
db.Ado.BeginTran(); | |||||
await db.Deleteable<EmployeeEntity>().Where(t => t.Id == employeeId).ExecuteCommandAsync(); | |||||
if (entity!=null) | |||||
{ | |||||
entity.EmployeeId = string.Empty; | |||||
await db.Updateable(entity).ExecuteCommandAsync(); | |||||
} | |||||
db.Ado.CommitTran(); | |||||
result = true; | |||||
} | |||||
catch (Exception ex) | |||||
{ | |||||
db.Ado.RollbackTran(); | |||||
throw Oops.Bah("删除失败!"); | |||||
} | |||||
return result; | |||||
} | |||||
[HttpGet] | |||||
public async Task<List<EmployeeOutput>> EmployeeList() | |||||
{ | |||||
var data = await db.Queryable<EmployeeEntity>().Where(t => t.IsAdmin == false).ToListAsync(); | |||||
return data.Adapt<List<EmployeeOutput>>(); | |||||
} | |||||
#endregion | |||||
} | |||||
} |
@@ -0,0 +1,63 @@ | |||||
namespace BPA.MES.Base.Application; | |||||
public interface IAuthorizeService | |||||
{ | |||||
#region 账户 | |||||
Task<bool> RestoreAccountByUser(string input); | |||||
Task<bool> AddAccountByUser(AccountAddInput input); | |||||
Task<bool> EditAccountPwd(AccountUpdatePwdInput input); | |||||
Task<AccountOutput> GetAccountByUser(string input); | |||||
Task<SqlSugarPagedList<AccountOutput>> AccountPageList(AccountQueryPageInput input); | |||||
Task<bool> AddAccount(AccountAddInput input); | |||||
Task<bool> UpdateAccount(AccountUpdateInput input); | |||||
Task<bool> DelAccount(AccountDelInput input); | |||||
Task<bool> Login(AccountInput input); | |||||
#endregion | |||||
#region 员工 | |||||
Task<bool> AddEmployee(EmployeeAddInput input); | |||||
Task<bool> EditEmployee(EmployeeUpdateInput input); | |||||
Task<SqlSugarPagedList<EmployeeOutput>> QueryEmployee(EmployeeQueryPageInput input); | |||||
Task<bool> RemoveEmployee(string input); | |||||
Task<List<EmployeeOutput>> EmployeeList(); | |||||
#endregion | |||||
Task<object> GetUserInfo(); | |||||
Task<List<string>> MultipleModuleAuthorityAsync(); | |||||
#region 角色 | |||||
Task<bool> AddRole(RoleAddInput input); | |||||
Task<bool> EditRole(RoleUpdateInput input); | |||||
Task<bool> RemoveRole(string input); | |||||
Task<RoleOutput> GetRole(string input); | |||||
Task<List<RoleOutput>> GetRoleList(); | |||||
Task<SqlSugarPagedList<RoleOutput>> QueryRole(RoleQueryPageInput input); | |||||
#endregion | |||||
#region 模块 | |||||
Task<bool> AddModule(ModuleAddInput input); | |||||
Task<bool> EditModule(ModuleUpdateInput input); | |||||
Task RemoveModule(string input); | |||||
Task<List<ModuleTreeOutput>> GetTreeGrid(ModuleTreeQueryInput input); | |||||
#endregion | |||||
#region 授权模板 | |||||
Task<bool> AddAuthorTemp(AuthorizeTemplateAddInput input); | |||||
Task<bool> EditAuthorTemp(AuthorizeTemplateUpdateInput input); | |||||
Task<bool> RemoveAuthorTemp(string input); | |||||
Task<SqlSugarPagedList<AuthorizeTemplateOutput>> QueryAuthorTemp(AuthorizeTemplateQueryPageInput input); | |||||
Task<AuthorizeTemplateOutput> GetAuthorTemp(string input); | |||||
#endregion | |||||
#region 授权模板详情 | |||||
Task<List<AuthorModuleOutput>> GetModuleByTemplateId(string input); | |||||
Task<bool> EditTemplateItem(AuthorModuleItemUpdateInput input); | |||||
Task<List<AuthorizeOutput>> GetAuthorizeObjects(AuthorizeInput input); | |||||
Task<bool> RemoveAuthorize(AuthorizeInput input); | |||||
Task<bool> SaveAuthorize(AuthorModulesAddInput input); | |||||
Task AddAuthorize(AuthorMapAddInput input); | |||||
#endregion | |||||
} |
@@ -0,0 +1,12 @@ | |||||
{ | |||||
"SpecificationDocumentSettings": { | |||||
"DocumentTitle": "MES数据接口" | |||||
}, | |||||
"CorsAccessorSettings": { | |||||
"WithExposedHeaders": [ | |||||
"access-token", | |||||
"x-access-token", | |||||
"environment" | |||||
] | |||||
} | |||||
} |
@@ -0,0 +1,23 @@ | |||||
<Project Sdk="Microsoft.NET.Sdk"> | |||||
<PropertyGroup> | |||||
<TargetFramework>net6.0</TargetFramework> | |||||
<NoWarn>1701;1702;1591</NoWarn> | |||||
<DocumentationFile>BPA.MES.Base.Core.xml</DocumentationFile> | |||||
</PropertyGroup> | |||||
<ItemGroup> | |||||
<None Remove="BPA.MES.Base.Core.xml" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.8.6.6" /> | |||||
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.8.6.6" /> | |||||
<PackageReference Include="Furion.Pure" Version="4.8.6.6" /> | |||||
<PackageReference Include="SqlSugarCore" Version="5.1.3.50" /> | |||||
<PackageReference Include="Yitter.IdGenerator" Version="1.0.14" /> | |||||
</ItemGroup> | |||||
</Project> |
@@ -0,0 +1,131 @@ | |||||
<?xml version="1.0"?> | |||||
<doc> | |||||
<assembly> | |||||
<name>BPA.MES.Base.Core</name> | |||||
</assembly> | |||||
<members> | |||||
<member name="T:BPA.MES.Base.Core.DEntityBase"> | |||||
<summary> | |||||
名 称 :主键 | |||||
创 建 人 :yangxiao | |||||
创建时间 :2023/3/2 13:59:33 | |||||
描 述 : | |||||
</summary> | |||||
</member> | |||||
<member name="P:BPA.MES.Base.Core.DEntityBase.Id"> | |||||
<summary> | |||||
主键 | |||||
</summary> | |||||
</member> | |||||
<member name="T:BPA.MES.Base.Core.EmptyExtensions"> | |||||
<summary> | |||||
名 称 : | |||||
创 建 人 :yangxiao | |||||
创建时间 : 2023/3/4 9:51:33 | |||||
描 述 : | |||||
</summary> | |||||
</member> | |||||
<member name="T:BPA.MES.Base.Core.RequestPage"> | |||||
<summary> | |||||
名 称 :分页基础类 | |||||
创 建 人 :yangxiao | |||||
创建时间 : 2023/3/2 16:15:41 | |||||
描 述 : | |||||
</summary> | |||||
</member> | |||||
<member name="P:BPA.MES.Base.Core.RequestPage.PageIndex"> | |||||
<summary> | |||||
页码 | |||||
</summary> | |||||
<example>1</example> | |||||
</member> | |||||
<member name="P:BPA.MES.Base.Core.RequestPage.PageSize"> | |||||
<summary> | |||||
页大小 | |||||
</summary> | |||||
<example>10</example> | |||||
</member> | |||||
<member name="T:BPA.MES.Base.Core.SqlSugarPagedList`1"> | |||||
<summary> | |||||
名 称 :分页泛型集合 | |||||
创 建 人 :yangxiao | |||||
创建时间 : 2023/3/2 16:21:27 | |||||
描 述 : | |||||
</summary> | |||||
</member> | |||||
<member name="P:BPA.MES.Base.Core.SqlSugarPagedList`1.Page"> | |||||
<summary> | |||||
页码 | |||||
</summary> | |||||
</member> | |||||
<member name="P:BPA.MES.Base.Core.SqlSugarPagedList`1.PageSize"> | |||||
<summary> | |||||
页容量 | |||||
</summary> | |||||
</member> | |||||
<member name="P:BPA.MES.Base.Core.SqlSugarPagedList`1.Total"> | |||||
<summary> | |||||
总条数 | |||||
</summary> | |||||
</member> | |||||
<member name="P:BPA.MES.Base.Core.SqlSugarPagedList`1.TotalPages"> | |||||
<summary> | |||||
总页数 | |||||
</summary> | |||||
</member> | |||||
<member name="P:BPA.MES.Base.Core.SqlSugarPagedList`1.Items"> | |||||
<summary> | |||||
当前页集合 | |||||
</summary> | |||||
</member> | |||||
<member name="P:BPA.MES.Base.Core.SqlSugarPagedList`1.HasPrevPage"> | |||||
<summary> | |||||
是否有上一页 | |||||
</summary> | |||||
</member> | |||||
<member name="P:BPA.MES.Base.Core.SqlSugarPagedList`1.HasNextPage"> | |||||
<summary> | |||||
是否有下一页 | |||||
</summary> | |||||
</member> | |||||
<member name="T:BPA.MES.Base.Core.SqlSugarPagedExtensions"> | |||||
<summary> | |||||
分页拓展类 | |||||
</summary> | |||||
</member> | |||||
<member name="M:BPA.MES.Base.Core.SqlSugarPagedExtensions.ToPagedList``1(SqlSugar.ISugarQueryable{``0},System.Int32,System.Int32)"> | |||||
<summary> | |||||
分页拓展 | |||||
</summary> | |||||
<param name="entity"></param> | |||||
<param name="pageIndex"></param> | |||||
<param name="pageSize"></param> | |||||
<returns></returns> | |||||
</member> | |||||
<member name="M:BPA.MES.Base.Core.SqlSugarPagedExtensions.ToPagedListAsync``1(SqlSugar.ISugarQueryable{``0},System.Int32,System.Int32)"> | |||||
<summary> | |||||
分页拓展 | |||||
</summary> | |||||
<param name="entity"></param> | |||||
<param name="pageIndex"></param> | |||||
<param name="pageSize"></param> | |||||
<returns></returns> | |||||
</member> | |||||
<member name="T:BPA.MES.Base.Core.SqlsugarSetup"> | |||||
<summary> | |||||
名 称 :数据库启动类 | |||||
创 建 人 :yangxiao | |||||
创建时间 : 2023/3/23 14:09:30 | |||||
描 述 : | |||||
</summary> | |||||
</member> | |||||
<member name="T:BPA.MES.Base.Core.TreeExtensions"> | |||||
<summary> | |||||
名 称 : | |||||
创 建 人 :yangxiao | |||||
创建时间 : 2023/3/4 9:50:52 | |||||
描 述 : | |||||
</summary> | |||||
</member> | |||||
</members> | |||||
</doc> |
@@ -0,0 +1,27 @@ | |||||
using SqlSugar; | |||||
using System.ComponentModel; | |||||
using Yitter.IdGenerator; | |||||
namespace BPA.MES.Base.Core | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :主键 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 :2023/3/2 13:59:33 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public class DEntityBase | |||||
{ | |||||
/// <summary> | |||||
/// 主键 | |||||
/// </summary> | |||||
[Description("主键")] | |||||
[SugarColumn(IsPrimaryKey = true)] | |||||
public string Id { get; set; } | |||||
public DEntityBase() | |||||
{ | |||||
var b = YitIdHelper.NextId(); | |||||
Id = b.ToString(); | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,21 @@ | |||||
namespace BPA.MES.Base.Core | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 : | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/3/4 9:51:33 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public static class EmptyExtensions | |||||
{ | |||||
public static bool HasVal<T>(this T obj) | |||||
{ | |||||
if (obj != null) | |||||
{ | |||||
return !obj.Equals(default(T)); | |||||
} | |||||
return false; | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,22 @@ | |||||
namespace BPA.MES.Base.Core | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :分页基础类 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/3/2 16:15:41 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public class RequestPage | |||||
{ | |||||
/// <summary> | |||||
/// 页码 | |||||
/// </summary> | |||||
/// <example>1</example> | |||||
public int PageIndex { get; set; } | |||||
/// <summary> | |||||
/// 页大小 | |||||
/// </summary> | |||||
/// <example>10</example> | |||||
public int PageSize { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,109 @@ | |||||
using SqlSugar; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Threading.Tasks; | |||||
namespace BPA.MES.Base.Core | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :分页泛型集合 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/3/2 16:21:27 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public class SqlSugarPagedList<TEntity> | |||||
where TEntity : new() | |||||
{ | |||||
/// <summary> | |||||
/// 页码 | |||||
/// </summary> | |||||
public int Page { get; set; } | |||||
/// <summary> | |||||
/// 页容量 | |||||
/// </summary> | |||||
public int PageSize { get; set; } | |||||
/// <summary> | |||||
/// 总条数 | |||||
/// </summary> | |||||
public int Total { get; set; } | |||||
/// <summary> | |||||
/// 总页数 | |||||
/// </summary> | |||||
public int TotalPages { get; set; } | |||||
/// <summary> | |||||
/// 当前页集合 | |||||
/// </summary> | |||||
public IEnumerable<TEntity> Items { get; set; } | |||||
/// <summary> | |||||
/// 是否有上一页 | |||||
/// </summary> | |||||
public bool HasPrevPage { get; set; } | |||||
/// <summary> | |||||
/// 是否有下一页 | |||||
/// </summary> | |||||
public bool HasNextPage { get; set; } | |||||
} | |||||
/// <summary> | |||||
/// 分页拓展类 | |||||
/// </summary> | |||||
public static class SqlSugarPagedExtensions | |||||
{ | |||||
/// <summary> | |||||
/// 分页拓展 | |||||
/// </summary> | |||||
/// <param name="entity"></param> | |||||
/// <param name="pageIndex"></param> | |||||
/// <param name="pageSize"></param> | |||||
/// <returns></returns> | |||||
public static SqlSugarPagedList<TEntity> ToPagedList<TEntity>(this ISugarQueryable<TEntity> entity, int pageIndex, int pageSize) | |||||
where TEntity : new() | |||||
{ | |||||
var total = 0; | |||||
var items = entity.ToPageList(pageIndex, pageSize, ref total); | |||||
var totalPages = (int)Math.Ceiling(total / (double)pageSize); | |||||
return new SqlSugarPagedList<TEntity> | |||||
{ | |||||
Page = pageIndex, | |||||
PageSize = pageSize, | |||||
Items = items, | |||||
Total = total, | |||||
TotalPages = totalPages, | |||||
HasNextPage = pageIndex < totalPages, | |||||
HasPrevPage = pageIndex - 1 > 0 | |||||
}; | |||||
} | |||||
/// <summary> | |||||
/// 分页拓展 | |||||
/// </summary> | |||||
/// <param name="entity"></param> | |||||
/// <param name="pageIndex"></param> | |||||
/// <param name="pageSize"></param> | |||||
/// <returns></returns> | |||||
public static async Task<SqlSugarPagedList<TEntity>> ToPagedListAsync<TEntity>(this ISugarQueryable<TEntity> entity, int pageIndex, int pageSize) | |||||
where TEntity : new() | |||||
{ | |||||
RefAsync<int> total = 0; | |||||
var items = await entity.ToPageListAsync(pageIndex, pageSize, total); | |||||
var totalPages = (int)Math.Ceiling(total / (double)pageSize); | |||||
return new SqlSugarPagedList<TEntity> | |||||
{ | |||||
Page = pageIndex, | |||||
PageSize = pageSize, | |||||
Items = items, | |||||
Total = total, | |||||
TotalPages = totalPages, | |||||
HasNextPage = pageIndex < totalPages, | |||||
HasPrevPage = pageIndex - 1 > 0 | |||||
}; | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,41 @@ | |||||
using Furion; | |||||
using Microsoft.Extensions.Configuration; | |||||
using Microsoft.Extensions.DependencyInjection; | |||||
using SqlSugar; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
namespace BPA.MES.Base.Core | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 :数据库启动类 | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/3/23 14:09:30 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public static class SqlsugarSetup | |||||
{ | |||||
public static void AddSqlsugarSetup(this IServiceCollection services, IConfiguration configuration, string dbName = "ConnectionString") | |||||
{ | |||||
//如果多个数数据库传 List<ConnectionConfig> | |||||
var dbs = App.GetConfig<List<ConnectionConfig>>("ConnectionConfigs")[0]; | |||||
var configConnection = new ConnectionConfig() | |||||
{ | |||||
DbType = dbs.DbType, | |||||
ConnectionString = dbs.ConnectionString, | |||||
IsAutoCloseConnection = dbs.IsAutoCloseConnection, | |||||
}; | |||||
SqlSugarScope sqlSugar = new SqlSugarScope(configConnection, | |||||
db => | |||||
{ | |||||
//单例参数配置,所有上下文生效 | |||||
db.Aop.OnLogExecuting = (sql, pars) => | |||||
{ | |||||
Console.WriteLine(sql);//输出sql | |||||
}; | |||||
}); | |||||
services.AddSingleton<ISqlSugarClient>(sqlSugar);//这边是SqlSugarScope用AddSingleton | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,65 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
namespace BPA.MES.Base.Core | |||||
{ | |||||
/// <summary> | |||||
/// 名 称 : | |||||
/// 创 建 人 :yangxiao | |||||
/// 创建时间 : 2023/3/4 9:50:52 | |||||
/// 描 述 : | |||||
/// </summary> | |||||
public static class TreeExtensions | |||||
{ | |||||
public static List<T> BuildTree<T>(this List<T> list, string rootId = "") where T : class, ITree<T> | |||||
{ | |||||
string rootId2 = rootId; | |||||
List<T> list2 = list; | |||||
List<T> resul = null; | |||||
if (list2.HasVal()) | |||||
{ | |||||
List<T> list3 = list2.Where((T e) => e.ParentId == rootId2).ToList(); | |||||
if (list3.HasVal()) | |||||
{ | |||||
resul = new List<T>(); | |||||
list3.ForEach(delegate (T it) | |||||
{ | |||||
it.Children = list2.BuildTree(it.Id); | |||||
resul.Add(it); | |||||
}); | |||||
} | |||||
} | |||||
return resul; | |||||
} | |||||
public interface ITree<T> where T : class | |||||
{ | |||||
string Id { get; set; } | |||||
string ParentId { get; set; } | |||||
List<T> Children { get; set; } | |||||
} | |||||
public static List<T> DeleteTreeNodes<T>(this List<T> list, Func<T, bool> condition) where T : class, ITree<T> | |||||
{ | |||||
if (list.HasVal()) | |||||
{ | |||||
for (int i = 0; i < list.Count; i++) | |||||
{ | |||||
T val = list[i]; | |||||
if (condition(val)) | |||||
{ | |||||
list.Remove(val); | |||||
} | |||||
else if (val.Children.HasVal()) | |||||
{ | |||||
val.Children.DeleteTreeNodes(condition); | |||||
} | |||||
} | |||||
} | |||||
return list; | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,19 @@ | |||||
<Project Sdk="Microsoft.NET.Sdk"> | |||||
<PropertyGroup> | |||||
<TargetFramework>net6.0</TargetFramework> | |||||
<NoWarn>1701;1702;1591</NoWarn> | |||||
<DocumentationFile>BPA.MES.Base.Web.Core.xml</DocumentationFile> | |||||
</PropertyGroup> | |||||
<ItemGroup> | |||||
<None Remove="BPA.MES.Base.Web.Core.xml" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<ProjectReference Include="..\BPA.MES.Base.Application\BPA.MES.Base.Application.csproj" /> | |||||
</ItemGroup> | |||||
</Project> |
@@ -0,0 +1,8 @@ | |||||
<?xml version="1.0"?> | |||||
<doc> | |||||
<assembly> | |||||
<name>BPA.MES.Base.Web.Core</name> | |||||
</assembly> | |||||
<members> | |||||
</members> | |||||
</doc> |
@@ -0,0 +1,16 @@ | |||||
using Furion.Authorization; | |||||
using Microsoft.AspNetCore.Authorization; | |||||
using Microsoft.AspNetCore.Http; | |||||
using System.Threading.Tasks; | |||||
namespace BPA.MES.Base.Web.Core; | |||||
public class JwtHandler : AppAuthorizeHandler | |||||
{ | |||||
public override Task<bool> PipelineAsync(AuthorizationHandlerContext context, DefaultHttpContext httpContext) | |||||
{ | |||||
// 这里写您的授权判断逻辑,授权通过返回 true,否则返回 false | |||||
return Task.FromResult(true); | |||||
} | |||||
} |
@@ -0,0 +1,52 @@ | |||||
using BPA.MES.Base.Core; | |||||
using Furion; | |||||
using Microsoft.AspNetCore.Builder; | |||||
using Microsoft.AspNetCore.Hosting; | |||||
using Microsoft.Extensions.DependencyInjection; | |||||
using Microsoft.Extensions.Hosting; | |||||
using Yitter.IdGenerator; | |||||
namespace BPA.MES.Base.Web.Core; | |||||
public class Startup : AppStartup | |||||
{ | |||||
public void ConfigureServices(IServiceCollection services) | |||||
{ | |||||
services.AddConsoleFormatter(); | |||||
services.AddJwt<JwtHandler>(); | |||||
services.AddCorsAccessor(); | |||||
services.AddSqlsugarSetup(App.Configuration); | |||||
// 配置雪花Id算法机器码 | |||||
YitIdHelper.SetIdGenerator(new IdGeneratorOptions | |||||
{ | |||||
WorkerId = 5 | |||||
}); | |||||
services.AddControllers() | |||||
.AddInjectWithUnifyResult(); | |||||
} | |||||
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) | |||||
{ | |||||
if (env.IsDevelopment()) | |||||
{ | |||||
app.UseDeveloperExceptionPage(); | |||||
} | |||||
app.UseHttpsRedirection(); | |||||
app.UseRouting(); | |||||
app.UseCorsAccessor(); | |||||
app.UseAuthentication(); | |||||
app.UseAuthorization(); | |||||
app.UseInject(string.Empty); | |||||
app.UseEndpoints(endpoints => | |||||
{ | |||||
endpoints.MapControllers(); | |||||
}); | |||||
} | |||||
} |
@@ -0,0 +1,21 @@ | |||||
<Project Sdk="Microsoft.NET.Sdk.Web"> | |||||
<PropertyGroup> | |||||
<TargetFramework>net6.0</TargetFramework> | |||||
<ImplicitUsings>enable</ImplicitUsings> | |||||
<SatelliteResourceLanguages>en-US</SatelliteResourceLanguages> | |||||
<PublishReadyToRunComposite>true</PublishReadyToRunComposite> | |||||
</PropertyGroup> | |||||
<ItemGroup> | |||||
<ProjectReference Include="..\BPA.MES.Base.Web.Core\BPA.MES.Base.Web.Core.csproj" /> | |||||
</ItemGroup> | |||||
<ProjectExtensions> | |||||
<VisualStudio> | |||||
<UserProperties properties_4launchsettings_1json__JsonSchema="" /> | |||||
</VisualStudio> | |||||
</ProjectExtensions> | |||||
</Project> |
@@ -0,0 +1,9 @@ | |||||
<?xml version="1.0" encoding="utf-8"?> | |||||
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> | |||||
<DebuggerFlavor>ProjectDebugger</DebuggerFlavor> | |||||
</PropertyGroup> | |||||
<PropertyGroup> | |||||
<ActiveDebugProfile>BPA.MES.Base.Web.Entry</ActiveDebugProfile> | |||||
</PropertyGroup> | |||||
</Project> |
@@ -0,0 +1 @@ | |||||
Serve.Run(RunOptions.Default.WithArgs(args)); |
@@ -0,0 +1,31 @@ | |||||
{ | |||||
"$schema": "http://json.schemastore.org/launchsettings.json", | |||||
"iisSettings": { | |||||
"windowsAuthentication": false, | |||||
"anonymousAuthentication": true, | |||||
"iisExpress": { | |||||
"applicationUrl": "http://localhost:53785", | |||||
"sslPort": 44342 | |||||
} | |||||
}, | |||||
"profiles": { | |||||
"IIS Express": { | |||||
"commandName": "IISExpress", | |||||
"launchBrowser": true, | |||||
"launchUrl": "", | |||||
"environmentVariables": { | |||||
"ASPNETCORE_ENVIRONMENT": "Development" | |||||
} | |||||
}, | |||||
"BPA.MES.Base.Web.Entry": { | |||||
"commandName": "Project", | |||||
"dotnetRunMessages": true, | |||||
"launchBrowser": true, | |||||
"launchUrl": "", | |||||
"applicationUrl": "https://localhost:5001;http://localhost:5000", | |||||
"environmentVariables": { | |||||
"ASPNETCORE_ENVIRONMENT": "Development" | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,22 @@ | |||||
using Furion; | |||||
using System.Reflection; | |||||
namespace BPA.MES.Base.Web.Entry; | |||||
public class SingleFilePublish : ISingleFilePublish | |||||
{ | |||||
public Assembly[] IncludeAssemblies() | |||||
{ | |||||
return Array.Empty<Assembly>(); | |||||
} | |||||
public string[] IncludeAssemblyNames() | |||||
{ | |||||
return new[] | |||||
{ | |||||
"BPA.MES.Base.Application", | |||||
"BPA.MES.Base.Core", | |||||
"BPA.MES.Base.Web.Core" | |||||
}; | |||||
} | |||||
} |
@@ -0,0 +1,10 @@ | |||||
{ | |||||
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json", | |||||
"Logging": { | |||||
"LogLevel": { | |||||
"Default": "Information", | |||||
"Microsoft.AspNetCore": "Warning", | |||||
"Microsoft.EntityFrameworkCore": "Information" | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,18 @@ | |||||
{ | |||||
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json", | |||||
"Logging": { | |||||
"LogLevel": { | |||||
"Default": "Information", | |||||
"Microsoft.AspNetCore": "Warning", | |||||
"Microsoft.EntityFrameworkCore": "Information" | |||||
} | |||||
}, | |||||
"AllowedHosts": "*", | |||||
"ConnectionConfigs": [ | |||||
{ | |||||
"ConnectionString": "server=10.2.1.254;Port=3306;Database=bpa_mes_base;Uid=root;Pwd=BapAdmin123456.;", | |||||
"DbType": "MySql", | |||||
"IsAutoCloseConnection": true | |||||
} | |||||
] | |||||
} |
@@ -0,0 +1,43 @@ | |||||
| |||||
Microsoft Visual Studio Solution File, Format Version 12.00 | |||||
# Visual Studio Version 17 | |||||
VisualStudioVersion = 17.3.32519.111 | |||||
MinimumVisualStudioVersion = 10.0.40219.1 | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BPA.MES.Base.Application", "BPA.MES.Base.Application\BPA.MES.Base.Application.csproj", "{AB699EE9-43A8-46F2-A855-04A26DE63372}" | |||||
EndProject | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BPA.MES.Base.Web.Core", "BPA.MES.Base.Web.Core\BPA.MES.Base.Web.Core.csproj", "{9D14BB78-DA2A-4040-B9DB-5A515B599181}" | |||||
EndProject | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BPA.MES.Base.Core", "BPA.MES.Base.Core\BPA.MES.Base.Core.csproj", "{4FB30091-15C7-4FD9-AB7D-266814F360F5}" | |||||
EndProject | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BPA.MES.Base.Web.Entry", "BPA.MES.Base.Web.Entry\BPA.MES.Base.Web.Entry.csproj", "{C8D99F52-EDC7-411F-8300-6DB14BF59E8C}" | |||||
EndProject | |||||
Global | |||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | |||||
Debug|Any CPU = Debug|Any CPU | |||||
Release|Any CPU = Release|Any CPU | |||||
EndGlobalSection | |||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution | |||||
{AB699EE9-43A8-46F2-A855-04A26DE63372}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{AB699EE9-43A8-46F2-A855-04A26DE63372}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{AB699EE9-43A8-46F2-A855-04A26DE63372}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{AB699EE9-43A8-46F2-A855-04A26DE63372}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{9D14BB78-DA2A-4040-B9DB-5A515B599181}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{9D14BB78-DA2A-4040-B9DB-5A515B599181}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{9D14BB78-DA2A-4040-B9DB-5A515B599181}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{9D14BB78-DA2A-4040-B9DB-5A515B599181}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{4FB30091-15C7-4FD9-AB7D-266814F360F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{4FB30091-15C7-4FD9-AB7D-266814F360F5}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{4FB30091-15C7-4FD9-AB7D-266814F360F5}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{4FB30091-15C7-4FD9-AB7D-266814F360F5}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{C8D99F52-EDC7-411F-8300-6DB14BF59E8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{C8D99F52-EDC7-411F-8300-6DB14BF59E8C}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{C8D99F52-EDC7-411F-8300-6DB14BF59E8C}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{C8D99F52-EDC7-411F-8300-6DB14BF59E8C}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
EndGlobalSection | |||||
GlobalSection(SolutionProperties) = preSolution | |||||
HideSolutionNode = FALSE | |||||
EndGlobalSection | |||||
GlobalSection(ExtensibilityGlobals) = postSolution | |||||
SolutionGuid = {B2073C2C-0FD3-452B-8047-8134D68E12CE} | |||||
EndGlobalSection | |||||
EndGlobal |
@@ -0,0 +1,16 @@ | |||||
# http://editorconfig.org | |||||
root = true | |||||
[*] | |||||
indent_style = space | |||||
indent_size = 2 | |||||
end_of_line = lf | |||||
charset = utf-8 | |||||
trim_trailing_whitespace = true | |||||
insert_final_newline = true | |||||
[*.md] | |||||
trim_trailing_whitespace = false | |||||
[Makefile] | |||||
indent_style = tab |
@@ -0,0 +1,8 @@ | |||||
/lambda/ | |||||
/scripts | |||||
/config | |||||
.history | |||||
public | |||||
dist | |||||
.umi | |||||
mock |
@@ -0,0 +1,7 @@ | |||||
module.exports = { | |||||
extends: [require.resolve('@umijs/lint/dist/config/eslint')], | |||||
globals: { | |||||
page: true, | |||||
REACT_APP_ENV: true, | |||||
}, | |||||
}; |
@@ -0,0 +1,41 @@ | |||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. | |||||
# dependencies | |||||
**/node_modules | |||||
# roadhog-api-doc ignore | |||||
/src/utils/request-temp.js | |||||
_roadhog-api-doc | |||||
# production | |||||
/dist | |||||
# misc | |||||
.DS_Store | |||||
npm-debug.log* | |||||
yarn-error.log | |||||
/coverage | |||||
.idea | |||||
yarn.lock | |||||
package-lock.json | |||||
*bak | |||||
.vscode | |||||
# visual studio code | |||||
.history | |||||
*.log | |||||
functions/* | |||||
.temp/** | |||||
# umi | |||||
.umi | |||||
.umi-production | |||||
.umi-test | |||||
# screenshot | |||||
screenshot | |||||
.firebase | |||||
.eslintcache | |||||
build |
@@ -0,0 +1,22 @@ | |||||
**/*.svg | |||||
.umi | |||||
.umi-production | |||||
/dist | |||||
.dockerignore | |||||
.DS_Store | |||||
.eslintignore | |||||
*.png | |||||
*.toml | |||||
docker | |||||
.editorconfig | |||||
Dockerfile* | |||||
.gitignore | |||||
.prettierignore | |||||
LICENSE | |||||
.eslintcache | |||||
*.lock | |||||
yarn-error.log | |||||
.history | |||||
CNAME | |||||
/build | |||||
/public |
@@ -0,0 +1,21 @@ | |||||
module.exports = { | |||||
singleQuote: true, | |||||
trailingComma: 'all', | |||||
printWidth: 100, | |||||
proseWrap: 'never', | |||||
endOfLine: 'lf', | |||||
overrides: [ | |||||
{ | |||||
files: '.prettierrc', | |||||
options: { | |||||
parser: 'json', | |||||
}, | |||||
}, | |||||
{ | |||||
files: 'document.ejs', | |||||
options: { | |||||
parser: 'html', | |||||
}, | |||||
}, | |||||
], | |||||
}; |
@@ -0,0 +1,57 @@ | |||||
# Ant Design Pro | |||||
This project is initialized with [Ant Design Pro](https://pro.ant.design). Follow is the quick guide for how to use. | |||||
## Environment Prepare | |||||
Install `node_modules`: | |||||
```bash | |||||
npm install | |||||
``` | |||||
or | |||||
```bash | |||||
yarn | |||||
``` | |||||
## Provided Scripts | |||||
Ant Design Pro provides some useful script to help you quick start and build with web project, code style check and test. | |||||
Scripts provided in `package.json`. It's safe to modify or add additional script: | |||||
### Start project | |||||
```bash | |||||
npm start | |||||
``` | |||||
### Build project | |||||
```bash | |||||
npm run build | |||||
``` | |||||
### Check code style | |||||
```bash | |||||
npm run lint | |||||
``` | |||||
You can also use script to auto fix some lint error: | |||||
```bash | |||||
npm run lint:fix | |||||
``` | |||||
### Test code | |||||
```bash | |||||
npm test | |||||
``` | |||||
## More | |||||
You can view full document on our [official website](https://pro.ant.design). And welcome any feedback in our [github](https://github.com/ant-design/ant-design-pro). |
@@ -0,0 +1,126 @@ | |||||
// https://umijs.org/config/ | |||||
import { defineConfig } from '@umijs/max'; | |||||
import { join } from 'path'; | |||||
import defaultSettings from './defaultSettings'; | |||||
import proxy from './proxy'; | |||||
import routes from './routes'; | |||||
const { REACT_APP_ENV = 'dev' } = process.env; | |||||
export default defineConfig({ | |||||
/** | |||||
* @name 开启 hash 模式 | |||||
* @description 让 build 之后的产物包含 hash 后缀。通常用于增量发布和避免浏览器加载缓存。 | |||||
* @doc https://umijs.org/docs/api/config#hash | |||||
*/ | |||||
history:{type:'hash'}, | |||||
hash: true, | |||||
/** | |||||
* @name 兼容性设置 | |||||
* @description 设置 ie11 不一定完美兼容,需要检查自己使用的所有依赖 | |||||
* @doc https://umijs.org/docs/api/config#targets | |||||
*/ | |||||
// targets: { | |||||
// ie: 11, | |||||
// }, | |||||
/** | |||||
* @name 路由的配置,不在路由中引入的文件不会编译 | |||||
* @description 只支持 path,component,routes,redirect,wrappers,title 的配置 | |||||
* @doc https://umijs.org/docs/guides/routes | |||||
*/ | |||||
// umi routes: https://umijs.org/docs/routing | |||||
routes, | |||||
/** | |||||
* @name 主题的配置 | |||||
* @description 虽然叫主题,但是其实只是 less 的变量设置 | |||||
* @doc antd的主题设置 https://ant.design/docs/react/customize-theme-cn | |||||
* @doc umi 的theme 配置 https://umijs.org/docs/api/config#theme | |||||
*/ | |||||
theme: { | |||||
// 如果不想要 configProvide 动态设置主题需要把这个设置为 default | |||||
// 只有设置为 variable, 才能使用 configProvide 动态设置主色调 | |||||
'root-entry-name': 'variable', | |||||
}, | |||||
/** | |||||
* @name moment 的国际化配置 | |||||
* @description 如果对国际化没有要求,打开之后能减少js的包大小 | |||||
* @doc https://umijs.org/docs/api/config#ignoremomentlocale | |||||
*/ | |||||
ignoreMomentLocale: false, | |||||
/** | |||||
* @name 代理配置 | |||||
* @description 可以让你的本地服务器代理到你的服务器上,这样你就可以访问服务器的数据了 | |||||
* @see 要注意以下 代理只能在本地开发时使用,build 之后就无法使用了。 | |||||
* @doc 代理介绍 https://umijs.org/docs/guides/proxy | |||||
* @doc 代理配置 https://umijs.org/docs/api/config#proxy | |||||
*/ | |||||
proxy: proxy[REACT_APP_ENV as keyof typeof proxy], | |||||
/** | |||||
* @name 快速热更新配置 | |||||
* @description 一个不错的热更新组件,更新时可以保留 state | |||||
*/ | |||||
fastRefresh: true, | |||||
//============== 以下都是max的插件配置 =============== | |||||
/** | |||||
* @name 数据流插件 | |||||
* @@doc https://umijs.org/docs/max/data-flow | |||||
*/ | |||||
model: {}, | |||||
/** | |||||
* 一个全局的初始数据流,可以用它在插件之间共享数据 | |||||
* @description 可以用来存放一些全局的数据,比如用户信息,或者一些全局的状态,全局初始状态在整个 Umi 项目的最开始创建。 | |||||
* @doc https://umijs.org/docs/max/data-flow#%E5%85%A8%E5%B1%80%E5%88%9D%E5%A7%8B%E7%8A%B6%E6%80%81 | |||||
*/ | |||||
initialState: {}, | |||||
/** | |||||
* @name layout 插件 | |||||
* @doc https://umijs.org/docs/max/layout-menu | |||||
*/ | |||||
layout: { | |||||
locale: false, | |||||
...defaultSettings, | |||||
}, | |||||
/** | |||||
* @name 国际化插件 | |||||
* @doc https://umijs.org/docs/max/i18n | |||||
*/ | |||||
locale: { | |||||
}, | |||||
/** | |||||
* @name antd 插件 | |||||
* @description 内置了 babel import 插件 | |||||
* @doc https://umijs.org/docs/max/antd#antd | |||||
*/ | |||||
antd: {}, | |||||
/** | |||||
* @name moment2dayjs 插件 | |||||
* @description 将项目中的 moment 替换为 dayjs | |||||
* @doc https://umijs.org/docs/max/moment2dayjs | |||||
*/ | |||||
moment2dayjs: { | |||||
preset: 'antd', | |||||
plugins: ['duration'], | |||||
}, | |||||
/** | |||||
* @name 网络请求配置 | |||||
* @description 它基于 axios 和 ahooks 的 useRequest 提供了一套统一的网络请求和错误处理方案。 | |||||
* @doc https://umijs.org/docs/max/request | |||||
*/ | |||||
request: {}, | |||||
/** | |||||
* @name 权限插件 | |||||
* @description 基于 initialState 的权限插件,必须先打开 initialState | |||||
* @doc https://umijs.org/docs/max/access | |||||
*/ | |||||
access: {}, | |||||
//================ pro 插件配置 ================= | |||||
presets: ['umi-presets-pro'], | |||||
keepalive: [/./], | |||||
tabsLayout: {}, | |||||
mfsu: { | |||||
strategy: 'normal', | |||||
}, | |||||
requestRecord: {}, | |||||
}); |
@@ -0,0 +1,28 @@ | |||||
import { Settings as LayoutSettings } from '@ant-design/pro-components'; | |||||
/** | |||||
* @name | |||||
*/ | |||||
const Settings: LayoutSettings & { | |||||
pwa?: boolean; | |||||
logo?: string; | |||||
title?:any | |||||
} = { | |||||
navTheme: 'light', | |||||
colorPrimary: '#13C2C2', | |||||
layout: 'mix', | |||||
contentWidth: 'Fluid', | |||||
fixedHeader: false, | |||||
fixSiderbar: true, | |||||
colorWeak: false, | |||||
title: "五芳斋中控管理系统", | |||||
menu: { | |||||
locale: false, // 禁用多语言功能 | |||||
}, | |||||
pwa: false, | |||||
splitMenus:false, | |||||
logo: './logo.png', | |||||
iconfontUrl: '', | |||||
}; | |||||
export default Settings; |
@@ -0,0 +1,16 @@ | |||||
/** | |||||
* @name 代理的配置 | |||||
* @see 在生产环境 代理是无法生效的,所以这里没有生产环境的配置 | |||||
* @doc https://umijs.org/docs/guides/proxy | |||||
*/ | |||||
export default { | |||||
dev: { | |||||
'/api/': { | |||||
target: 'http://localhost:5000', | |||||
pathRewrite: { | |||||
'/api': '/api' | |||||
}, | |||||
changeOrigin: true, | |||||
} | |||||
} | |||||
}; |
@@ -0,0 +1,20 @@ | |||||
export default [ | |||||
{ path: '/user', layout: false, routes: [{ path: '/user/login', component: './user/login' }] }, | |||||
{ path: '/', icon: 'SmileOutlined', component: './welcome',name:'欢迎页' }, | |||||
{ path:'/logs',icon: 'SettingOutlined',name:'日志管理', | |||||
routes: [{ path: '/logs/log',name:'日志管理', component: './logs/index' }] | |||||
}, | |||||
{ | |||||
icon: 'SettingOutlined', | |||||
path: '/system', | |||||
name:'系统管理', | |||||
routes: [ | |||||
{ path: '/system/account',name:'账号管理', component: './system/account' }, | |||||
{ path: '/system/user',name:'人员管理', component: './system/user' }, | |||||
{ path: '/system/role',name:'角色管理', component: './system/role' }, | |||||
{ path: '/system/module',name:'模块管理', component: './system/module' }, | |||||
{ path: '/system/authTemplate',name:'权限管理', component: './system/authTemplate' }, | |||||
], | |||||
}, | |||||
{ path: '*', layout: false, component: './404' }, | |||||
]; |
@@ -0,0 +1,23 @@ | |||||
import { configUmiAlias, createConfig } from '@umijs/max/test'; | |||||
export default async () => { | |||||
const config = await configUmiAlias({ | |||||
...createConfig({ | |||||
target: 'browser', | |||||
}), | |||||
}); | |||||
console.log(); | |||||
return { | |||||
...config, | |||||
testEnvironmentOptions: { | |||||
...(config?.testEnvironmentOptions || {}), | |||||
url: 'http://localhost:8000', | |||||
}, | |||||
setupFiles: [...(config.setupFiles || []), './tests/setupTests.jsx'], | |||||
globals: { | |||||
...config.globals, | |||||
localStorage: null, | |||||
}, | |||||
}; | |||||
}; |
@@ -0,0 +1,11 @@ | |||||
{ | |||||
"compilerOptions": { | |||||
"jsx": "react-jsx", | |||||
"emitDecoratorMetadata": true, | |||||
"experimentalDecorators": true, | |||||
"baseUrl": ".", | |||||
"paths": { | |||||
"@/*": ["./src/*"] | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,103 @@ | |||||
{ | |||||
"name": "ant-design-pro", | |||||
"version": "6.0.0", | |||||
"license": "ISC", | |||||
"private": true, | |||||
"description": "An out-of-box UI solution for enterprise applications", | |||||
"scripts": { | |||||
"analyze": "cross-env ANALYZE=1 max build", | |||||
"build": "max build", | |||||
"deploy": "npm run build && npm run gh-pages", | |||||
"dev": "npm run start:dev", | |||||
"gh-pages": "gh-pages -d dist", | |||||
"i18n-remove": "pro i18n-remove --write", | |||||
"postinstall": "max setup", | |||||
"jest": "jest", | |||||
"lint": "npm run lint:js && npm run lint:prettier && npm run tsc", | |||||
"lint-staged": "lint-staged", | |||||
"lint-staged:js": "eslint --ext .js,.jsx,.ts,.tsx ", | |||||
"lint:fix": "eslint --fix --cache --ext .js,.jsx,.ts,.tsx --format=pretty ./src ", | |||||
"lint:js": "eslint --cache --ext .js,.jsx,.ts,.tsx --format=pretty ./src", | |||||
"lint:prettier": "prettier -c --write \"**/**.{js,jsx,tsx,ts,less,md,json}\" --end-of-line auto", | |||||
"openapi": "max openapi", | |||||
"prepare": "cd ../.. && husky install frontend/.husky", | |||||
"prettier": "prettier -c --write \"**/**.{js,jsx,tsx,ts,less,md,json}\"", | |||||
"preview": "npm run build && max preview --port 8000", | |||||
"record": "cross-env NODE_ENV=development REACT_APP_ENV=test max record --scene=login", | |||||
"serve": "umi-serve", | |||||
"start:mock": "cross-env UMI_ENV=dev max dev", | |||||
"start": "cross-env UMI_ENV=dev max dev", | |||||
"start:dev": "cross-env REACT_APP_ENV=dev MOCK=none UMI_ENV=dev max dev", | |||||
"start:no-mock": "cross-env MOCK=none UMI_ENV=dev max dev", | |||||
"start:pre": "cross-env REACT_APP_ENV=pre UMI_ENV=dev max dev", | |||||
"start:test": "cross-env REACT_APP_ENV=test MOCK=none UMI_ENV=dev max dev", | |||||
"test": "jest", | |||||
"test:coverage": "npm run jest -- --coverage", | |||||
"test:update": "npm run jest -- -u", | |||||
"tsc": "tsc --noEmit" | |||||
}, | |||||
"lint-staged": { | |||||
"**/*.{js,jsx,ts,tsx}": "npm run lint-staged:js", | |||||
"**/*.{js,jsx,tsx,ts,less,md,json}": [ | |||||
"prettier --write" | |||||
] | |||||
}, | |||||
"browserslist": [ | |||||
"> 1%", | |||||
"last 2 versions", | |||||
"not ie <= 10" | |||||
], | |||||
"dependencies": { | |||||
"@ant-design/icons": "^4.8.0", | |||||
"@ant-design/pro-components": "^2.3.44", | |||||
"@ant-design/pro-layout": "^7.8.3", | |||||
"@ant-design/use-emotion-css": "1.0.4", | |||||
"@umijs/route-utils": "^2.2.2", | |||||
"antd": "^5.2.3", | |||||
"classnames": "^2.3.2", | |||||
"eslint-config-prettier": "^8.6.0", | |||||
"eslint-plugin-unicorn": "^46.0.0", | |||||
"js-md5": "^0.7.3", | |||||
"lodash": "^4.17.21", | |||||
"moment": "^2.29.4", | |||||
"omit.js": "^2.0.2", | |||||
"rc-menu": "^9.8.1", | |||||
"rc-util": "^5.25.2", | |||||
"react": "^18.2.0", | |||||
"react-dev-inspector": "^1.8.3", | |||||
"react-dom": "^18.2.0", | |||||
"react-helmet-async": "^1.3.0" | |||||
}, | |||||
"devDependencies": { | |||||
"@ant-design/pro-cli": "^2.1.5", | |||||
"@testing-library/react": "^13.4.0", | |||||
"@types/classnames": "^2.3.1", | |||||
"@types/express": "^4.17.14", | |||||
"@types/history": "^4.7.11", | |||||
"@types/jest": "^29.2.4", | |||||
"@types/js-md5": "^0.7.0", | |||||
"@types/lodash": "^4.14.191", | |||||
"@types/react": "^17.0.52", | |||||
"@types/react-dom": "^17.0.18", | |||||
"@types/react-helmet": "^6.1.6", | |||||
"@umijs/lint": "^4.0.35", | |||||
"@umijs/max": "^4.0.55", | |||||
"cross-env": "^7.0.3", | |||||
"eslint": "^8.29.0", | |||||
"express": "^4.18.2", | |||||
"gh-pages": "^3.2.3", | |||||
"husky": "^7.0.4", | |||||
"jest": "^29.3.1", | |||||
"jest-environment-jsdom": "^29.3.1", | |||||
"lint-staged": "^10.5.4", | |||||
"mockjs": "^1.1.0", | |||||
"prettier": "^2.8.1", | |||||
"swagger-ui-dist": "^4.15.5", | |||||
"ts-node": "^10.9.1", | |||||
"typescript": "^4.9.4", | |||||
"umi-presets-pro": "^2.0.0" | |||||
}, | |||||
"engines": { | |||||
"node": ">=12.0.0" | |||||
} | |||||
} |
@@ -0,0 +1,22 @@ | |||||
// playwright.config.ts | |||||
import type { PlaywrightTestConfig } from '@playwright/test'; | |||||
import { devices } from '@playwright/test'; | |||||
const config: PlaywrightTestConfig = { | |||||
forbidOnly: !!process.env.CI, | |||||
retries: process.env.CI ? 2 : 0, | |||||
use: { | |||||
trace: 'on-first-retry', | |||||
}, | |||||
projects: [ | |||||
{ | |||||
name: 'chromium', | |||||
use: { ...devices['Desktop Chrome'] }, | |||||
}, | |||||
{ | |||||
name: 'firefox', | |||||
use: { ...devices['Desktop Firefox'] }, | |||||
}, | |||||
], | |||||
}; | |||||
export default config; |
@@ -0,0 +1 @@ | |||||
preview.pro.ant.design |