Ver código fonte

初始化MES

master
Yanko 2 meses atrás
commit
e8459e755e
100 arquivos alterados com 15065 adições e 0 exclusões
  1. +4
    -0
      .gitignore
  2. +154
    -0
      Jenkinsfile
  3. +7
    -0
      NuGet.config
  4. +25
    -0
      backend/.dockerignore
  5. +40
    -0
      backend/BPA.MES.Base.Application/BPA.MES.Base.Application.csproj
  6. +9376
    -0
      backend/BPA.MES.Base.Application/BPA.MES.Base.Application.xml
  7. +88
    -0
      backend/BPA.MES.Base.Application/Const/ClaimConst.cs
  8. +40
    -0
      backend/BPA.MES.Base.Application/Const/DeviceTypeEnum.cs
  9. +10
    -0
      backend/BPA.MES.Base.Application/Const/ELogType.cs
  10. +26
    -0
      backend/BPA.MES.Base.Application/Const/OrderStatusEnum.cs
  11. +40
    -0
      backend/BPA.MES.Base.Application/Const/WorkOrderStatusEnum.cs
  12. +33
    -0
      backend/BPA.MES.Base.Application/Entitys/Agv/AgvLineEntity.cs
  13. +21
    -0
      backend/BPA.MES.Base.Application/Entitys/Agv/AgvPointEntity.cs
  14. +22
    -0
      backend/BPA.MES.Base.Application/Entitys/App/Pztj_BucketInfoEntity.cs
  15. +38
    -0
      backend/BPA.MES.Base.Application/Entitys/App/Pztj_BucketMaterialsRecordEntity.cs
  16. +36
    -0
      backend/BPA.MES.Base.Application/Entitys/App/Pztj_CraftStepsEntity.cs
  17. +25
    -0
      backend/BPA.MES.Base.Application/Entitys/App/Pztj_CraftsInfoEntity.cs
  18. +43
    -0
      backend/BPA.MES.Base.Application/Entitys/App/Pztj_DevicesInfoEntity.cs
  19. +33
    -0
      backend/BPA.MES.Base.Application/Entitys/App/Pztj_FinalsInfoEntity.cs
  20. +21
    -0
      backend/BPA.MES.Base.Application/Entitys/App/Pztj_LineDevicesEntity.cs
  21. +21
    -0
      backend/BPA.MES.Base.Application/Entitys/App/Pztj_LineStocksEntity.cs
  22. +34
    -0
      backend/BPA.MES.Base.Application/Entitys/App/Pztj_MaterialsInfoEntity.cs
  23. +30
    -0
      backend/BPA.MES.Base.Application/Entitys/App/Pztj_StockInfoEntity.cs
  24. +48
    -0
      backend/BPA.MES.Base.Application/Entitys/App/Pztj_WorkInfoEntity.cs
  25. +21
    -0
      backend/BPA.MES.Base.Application/Entitys/App/Pztj_WorkInfoItemEntity.cs
  26. +33
    -0
      backend/BPA.MES.Base.Application/Entitys/App/Pztj_WorkInfoStatusEntity.cs
  27. +26
    -0
      backend/BPA.MES.Base.Application/Entitys/App/WorkBatchEntity.cs
  28. +67
    -0
      backend/BPA.MES.Base.Application/Entitys/App/WorkInfoCraftstepRecordEntity.cs
  29. +63
    -0
      backend/BPA.MES.Base.Application/Entitys/App/WorkInfoMaterialsRecordEntity.cs
  30. +26
    -0
      backend/BPA.MES.Base.Application/Entitys/Base/DeviceProductEntity.cs
  31. +38
    -0
      backend/BPA.MES.Base.Application/Entitys/Base/DeviceProductFunctionEntity.cs
  32. +30
    -0
      backend/BPA.MES.Base.Application/Entitys/Base/DeviceProductParmEntity.cs
  33. +22
    -0
      backend/BPA.MES.Base.Application/Entitys/Base/DeviceRecipeEntity.cs
  34. +33
    -0
      backend/BPA.MES.Base.Application/Entitys/Base/DictDataEntity.cs
  35. +26
    -0
      backend/BPA.MES.Base.Application/Entitys/Base/DictTypeEntity.cs
  36. +21
    -0
      backend/BPA.MES.Base.Application/Entitys/Base/GroupInfoEntity.cs
  37. +29
    -0
      backend/BPA.MES.Base.Application/Entitys/Base/MQTTInfoEntity.cs
  38. +31
    -0
      backend/BPA.MES.Base.Application/Entitys/Base/OperLogEntity.cs
  39. +13
    -0
      backend/BPA.MES.Base.Application/Entitys/Base/OrderInfoEntity.cs
  40. +25
    -0
      backend/BPA.MES.Base.Application/Entitys/Base/ProductLineEntity.cs
  41. +36
    -0
      backend/BPA.MES.Base.Application/Entitys/Base/RecipeMaterialEntity.cs
  42. +21
    -0
      backend/BPA.MES.Base.Application/Entitys/Base/RecipesGroupEntity.cs
  43. +22
    -0
      backend/BPA.MES.Base.Application/Entitys/Base/RecipesInfoEntity.cs
  44. +30
    -0
      backend/BPA.MES.Base.Application/Entitys/Base/StoreInfoEntity.cs
  45. +27
    -0
      backend/BPA.MES.Base.Application/Entitys/KepData/AlarmLog.cs
  46. +33
    -0
      backend/BPA.MES.Base.Application/Entitys/KepData/DataVAlarmLimit.cs
  47. +20
    -0
      backend/BPA.MES.Base.Application/Entitys/KepData/ch1_device1.cs
  48. +54
    -0
      backend/BPA.MES.Base.Application/Entitys/Logs/AlarmLogEntity.cs
  49. +39
    -0
      backend/BPA.MES.Base.Application/Entitys/Logs/ProgramLogEntity.cs
  50. +45
    -0
      backend/BPA.MES.Base.Application/Entitys/Logs/RunLogEntity.cs
  51. +36
    -0
      backend/BPA.MES.Base.Application/Entitys/Logs/UserLogEntity.cs
  52. +24
    -0
      backend/BPA.MES.Base.Application/Entitys/Order/OrderEntity.cs
  53. +30
    -0
      backend/BPA.MES.Base.Application/Entitys/Order/OrderInfoEntity.cs
  54. +18
    -0
      backend/BPA.MES.Base.Application/Entitys/Order/OrderWorkEntity.cs
  55. +29
    -0
      backend/BPA.MES.Base.Application/Entitys/Sys/AccountEntity.cs
  56. +38
    -0
      backend/BPA.MES.Base.Application/Entitys/Sys/EmployeeEntity.cs
  57. +46
    -0
      backend/BPA.MES.Base.Application/Entitys/Sys/ModuleEntity.cs
  58. +32
    -0
      backend/BPA.MES.Base.Application/Entitys/Sys/RoleEntity.cs
  59. +26
    -0
      backend/BPA.MES.Base.Application/Entitys/Sys/RoleModuleEntity.cs
  60. +39
    -0
      backend/BPA.MES.Base.Application/Filters/AGVAttribute.cs
  61. +46
    -0
      backend/BPA.MES.Base.Application/Filters/OperLogAttribute.cs
  62. +19
    -0
      backend/BPA.MES.Base.Application/GlobalUsings.cs
  63. +21
    -0
      backend/BPA.MES.Base.Application/MQTT/IMessage.cs
  64. +145
    -0
      backend/BPA.MES.Base.Application/MQTT/MQTTService.cs
  65. +14
    -0
      backend/BPA.MES.Base.Application/MQTT/MessageID.cs
  66. +18
    -0
      backend/BPA.MES.Base.Application/MQTT/MsgPackage.cs
  67. +42
    -0
      backend/BPA.MES.Base.Application/MQTT/Topics.cs
  68. +473
    -0
      backend/BPA.MES.Base.Application/Services/AGVService/Dtos/AGVThirdPartyDto.cs
  69. +95
    -0
      backend/BPA.MES.Base.Application/Services/AGVService/Dtos/AgvLineDto.cs
  70. +83
    -0
      backend/BPA.MES.Base.Application/Services/AGVService/Dtos/AgvPointDto.cs
  71. +170
    -0
      backend/BPA.MES.Base.Application/Services/AGVService/Services/AGVThirdPartyService.cs
  72. +115
    -0
      backend/BPA.MES.Base.Application/Services/AGVService/Services/AgvLineService.cs
  73. +115
    -0
      backend/BPA.MES.Base.Application/Services/AGVService/Services/AgvPointService.cs
  74. +40
    -0
      backend/BPA.MES.Base.Application/Services/AGVService/Services/IAGVThirdPartyService.cs
  75. +43
    -0
      backend/BPA.MES.Base.Application/Services/AGVService/Services/IAgvLineService.cs
  76. +43
    -0
      backend/BPA.MES.Base.Application/Services/AGVService/Services/IAgvPointService.cs
  77. +50
    -0
      backend/BPA.MES.Base.Application/Services/BaseService.cs
  78. +75
    -0
      backend/BPA.MES.Base.Application/Services/BucketInfoService/Dtos/BucketInfoDto.cs
  79. +135
    -0
      backend/BPA.MES.Base.Application/Services/BucketInfoService/Dtos/BucketMaterialsRecordDto.cs
  80. +168
    -0
      backend/BPA.MES.Base.Application/Services/BucketInfoService/Services/BucketInfoService.cs
  81. +140
    -0
      backend/BPA.MES.Base.Application/Services/BucketInfoService/Services/BucketMaterialsRecordServcie.cs
  82. +53
    -0
      backend/BPA.MES.Base.Application/Services/BucketInfoService/Services/IBucketInfoService.cs
  83. +49
    -0
      backend/BPA.MES.Base.Application/Services/BucketInfoService/Services/IBucketMaterialsRecordService.cs
  84. +83
    -0
      backend/BPA.MES.Base.Application/Services/CraftsInfoService/Dtos/CraftsInfoDto.cs
  85. +100
    -0
      backend/BPA.MES.Base.Application/Services/CraftsInfoService/Dtos/CraftsStepsDto.cs
  86. +130
    -0
      backend/BPA.MES.Base.Application/Services/CraftsInfoService/Services/CraftsInfoService.cs
  87. +144
    -0
      backend/BPA.MES.Base.Application/Services/CraftsInfoService/Services/CraftsStepsService.cs
  88. +48
    -0
      backend/BPA.MES.Base.Application/Services/CraftsInfoService/Services/ICraftsInfoService.cs
  89. +54
    -0
      backend/BPA.MES.Base.Application/Services/CraftsInfoService/Services/ICraftsStepsService.cs
  90. +87
    -0
      backend/BPA.MES.Base.Application/Services/DeviceProductService/Dtos/DeviceProductDto.cs
  91. +111
    -0
      backend/BPA.MES.Base.Application/Services/DeviceProductService/Dtos/DeviceProductFunctionDto.cs
  92. +91
    -0
      backend/BPA.MES.Base.Application/Services/DeviceProductService/Dtos/DeviceProductParmDto.cs
  93. +128
    -0
      backend/BPA.MES.Base.Application/Services/DeviceProductService/Services/DeviceProductFunctionService.cs
  94. +115
    -0
      backend/BPA.MES.Base.Application/Services/DeviceProductService/Services/DeviceProductParmService.cs
  95. +127
    -0
      backend/BPA.MES.Base.Application/Services/DeviceProductService/Services/DeviceProductService.cs
  96. +48
    -0
      backend/BPA.MES.Base.Application/Services/DeviceProductService/Services/IDeviceProductFunctionService.cs
  97. +48
    -0
      backend/BPA.MES.Base.Application/Services/DeviceProductService/Services/IDeviceProductParmService.cs
  98. +48
    -0
      backend/BPA.MES.Base.Application/Services/DeviceProductService/Services/IDeviceProductService.cs
  99. +99
    -0
      backend/BPA.MES.Base.Application/Services/DeviceService/Dtos/DeviceRecipeDto.cs
  100. +88
    -0
      backend/BPA.MES.Base.Application/Services/DeviceService/Dtos/DevicesInfoDto.cs

+ 4
- 0
.gitignore Ver arquivo

@@ -0,0 +1,4 @@
.vs
obj
bin
Properties

+ 154
- 0
Jenkinsfile Ver arquivo

@@ -0,0 +1,154 @@

pipeline{
agent any
parameters {
choice(
description: 'pztjwebi:开发环境1',
name: 'environment',
choices: ['pztj']
)

choice(
description: '前端or后端',
name: 'projectqh',
choices: ['backend','frontend']
)

choice(
description: '执行操作(发布|回滚)',
name: 'operation',
choices: ['develop', 'rollback']
)

choice(
description: '分支名',
name: 'branchName',
choices: ['master']
)

string(
name: 'tag',
defaultValue: '',
description: '版本tag'
)

}

stages
{
stage('Prepare') {
steps {
script{
echo "1.Prepare Stage"
echo "当前环境${params.environment}"
if(params.operation=='develop')
{
checkout scm
script {
build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
if (env.BRANCH_NAME != 'master') {
build_tag = "${env.BRANCH_NAME}-${build_tag}"
}
}
}
else{
script {
if(params.branchName!= 'master')
{
build_tag = "${params.branchName}-${params.tag}"
}
else
{
build_tag="${params.tag}"
}
}
}
}
}
}
stage('Test') {
steps {
script{
echo "2.Test Stage"
}
}
}
stage('Build') {
steps {
script{
echo "3.Build Docker Image Stage"
if(params.operation=='develop')
{
if(params.projectqh=='backend')
{
sh "cp -r backend/* ./"
sh "docker build -f backend/dockerfile -t 10.2.1.24:10242/bpa/pztjapi:${build_tag} ."
}
else if(params.projectqh=='frontend')
{
sh "docker build -f frontend/dockerfile -t 10.2.1.24:10242/bpa/pztjweb:${build_tag} ."
}
}
}
}
}
stage('Push') {
steps {
script{
echo "4.Push Docker Image Stage"
withCredentials([usernamePassword(credentialsId: 'harbor', passwordVariable: 'harborPassword', usernameVariable: 'harborUser')]) {
sh "docker login -u ${harborUser} -p ${harborPassword} 10.2.1.24:10242"
if(params.operation=='develop')
{
if(params.projectqh=='backend')
{
sh "docker push 10.2.1.24:10242/bpa/pztjapi:${build_tag}"

}
else if(params.projectqh=='frontend')
{
sh "docker push 10.2.1.24:10242/bpa/pztjweb:${build_tag}"
}
}
}
}
}

}
stage('Deploy') {

steps {
script{
echo "5. Deploy Stage"
// if(params.environment=='test')
// {
// input "确认要部署线上环境吗?"
// }
if(params.projectqh=='backend')
{

sh "sed -i 's/<BUILD_TAG>/${build_tag}/' k8s_pztjapi.yaml"
sh "sed -i 's/<BRANCH_NAME>/${env.BRANCH_NAME}/' k8s_pztjapi.yaml"
sh "sed -i 's/<NAMESPACES>/${params.environment}/' k8s_pztjapi.yaml"
sh "kubectl apply -f k8s_pztjapi.yaml --record"
}
else if(params.projectqh=='frontend')
{
sh "sed -i 's/<BUILD_TAG>/${build_tag}/' k8s_pztjweb.yaml"
sh "sed -i 's/<BRANCH_NAME>/${env.BRANCH_NAME}/' k8s_pztjweb.yaml"
sh "sed -i 's/<NAMESPACES>/${params.environment}/' k8s_pztjweb.yaml"
sh "kubectl apply -f k8s_pztjweb.yaml --record"
}
}
}
}
}
}

+ 7
- 0
NuGet.config Ver arquivo

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json"/>
<add key="bpa" value="http://10.2.1.25:10243/repository/bpa/index.json"/>
</packageSources>
</configuration>

+ 25
- 0
backend/.dockerignore Ver arquivo

@@ -0,0 +1,25 @@
**/.classpath
**/.dockerignore
**/.env
**/.git
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/azds.yaml
**/bin
**/charts
**/docker-compose*
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
LICENSE
README.md

+ 40
- 0
backend/BPA.MES.Base.Application/BPA.MES.Base.Application.csproj Ver arquivo

@@ -0,0 +1,40 @@
<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\View\" />
<Folder Include="Services\DeviceService\" />
<Folder Include="Services\MaterialService\" />
<Folder Include="Services\RecipesService\" />
<Folder Include="Services\CustomCodeService\" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="FreeRedis" Version="1.2.5" />
<PackageReference Include="ServiceStack.Redis" Version="6.11.0" />
</ItemGroup>

</Project>

+ 9376
- 0
backend/BPA.MES.Base.Application/BPA.MES.Base.Application.xml
Diferenças do arquivo suprimidas por serem muito extensas
Ver arquivo


+ 88
- 0
backend/BPA.MES.Base.Application/Const/ClaimConst.cs Ver arquivo

@@ -0,0 +1,88 @@
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>
/// 角色Id
/// </summary>
public const string CLAINM_ROLEID = "";
/// <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;
/// <summary>
/// 所有缓存关键字集合
/// </summary>
public const string CACHE_KEY_ALL = "allkey";
}

public class MQTTConfig
{
/// <summary>
/// 地址
/// </summary>
public static string Address { get; set; }
/// <summary>
/// 密码
/// </summary>
public static string Pwd { get; set; }
/// <summary>
/// 账号
/// </summary>
public static string Account { get; set; }
}
}

+ 40
- 0
backend/BPA.MES.Base.Application/Const/DeviceTypeEnum.cs Ver arquivo

@@ -0,0 +1,40 @@
namespace BPA.MES.Base.Application
{
/// <summary>
/// 名 称 :产线设备类型
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/24 16:56:13
/// 描 述 :
/// </summary>
public enum DeviceTypeEnum
{
/// <summary>
/// 锅
/// </summary>
Pot,
/// <summary>
/// 釜
/// </summary>
Kettle
}
/// <summary>
/// 配料状态
/// </summary>
public enum EBatchingStatus
{
None = 0,
等待配料 = 1,
正在配料 = 2,
配料完成 = 3
}
/// <summary>
/// 工艺状态
/// </summary>
public enum RecipeStatus
{
None = 0,
等待执行 = 1,
正在执行 = 2,
执行完成 = 3
}
}

+ 10
- 0
backend/BPA.MES.Base.Application/Const/ELogType.cs Ver arquivo

@@ -0,0 +1,10 @@
namespace BPA.MES.Base.Application
{
public enum ELogType
{
Error,
Info,
Warn,

}
}

+ 26
- 0
backend/BPA.MES.Base.Application/Const/OrderStatusEnum.cs Ver arquivo

@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BPA.MES.Base.Application.Const
{
public enum OrderStatusEnum
{
/// <summary>
/// 未开始
/// </summary>
NotStarted = 0,
/// <summary>
/// 进行中
/// </summary>
Ongoing = 1,
/// <summary>
/// 完成
/// </summary>
Completed = 2,


}
}

+ 40
- 0
backend/BPA.MES.Base.Application/Const/WorkOrderStatusEnum.cs Ver arquivo

@@ -0,0 +1,40 @@
namespace BPA.MES.Base.Application
{
/// <summary>
/// 名 称 :工单枚举
/// 创 建 人 :yangxiao
/// 创建时间 :2023/7/21 15:04:24
/// 描 述 :
/// </summary>
public enum WorkOrderStatusEnum
{
/// <summary>
/// 未知
/// </summary>
Unkown = -1,
/// <summary>
/// 草稿
/// </summary>
Draft = 0,
/// <summary>
/// 已下发
/// </summary>
Issued = 1,
/// <summary>
/// 已接受
/// </summary>
Receive = 2,
/// <summary>
/// 已启动
/// </summary>
Started = 3,
/// <summary>
/// 已完成
/// </summary>
Completed = 4,
/// <summary>
/// 废弃
/// </summary>
Obsolete = 5,
}
}

+ 33
- 0
backend/BPA.MES.Base.Application/Entitys/Agv/AgvLineEntity.cs Ver arquivo

@@ -0,0 +1,33 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/27 9:35:27
/// 描 述 :
/// </summary>
[SugarTable("agv_line")]
public class AgvLineEntity : DEntityBase
{
/// <summary>
/// 自定义编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 线路名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 开始点位
/// </summary>
public string StartPointId { get; set; }
/// <summary>
/// 结束点位
/// </summary>
public string EndPointId { get; set; }
/// <summary>
/// 描述
/// </summary>
public string Description { get; set; }
}
}

+ 21
- 0
backend/BPA.MES.Base.Application/Entitys/Agv/AgvPointEntity.cs Ver arquivo

@@ -0,0 +1,21 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/27 9:36:07
/// 描 述 :
/// </summary>
[SugarTable("agv_point")]
public class AgvPointEntity : DEntityBase
{
/// <summary>
/// 点位名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 点位编码
/// </summary>
public string Code { get; set; }
}
}

+ 22
- 0
backend/BPA.MES.Base.Application/Entitys/App/Pztj_BucketInfoEntity.cs Ver arquivo

@@ -0,0 +1,22 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :胖子天骄桶管理
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/14 11:33:10
/// 描 述 :
/// </summary>
[SugarTable("bucket_info")]
public class Pztj_BucketInfoEntity : DEntityBase
{
/// <summary>
/// 桶名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 桶编号
/// </summary>
public string Code { get; set; }

}
}

+ 38
- 0
backend/BPA.MES.Base.Application/Entitys/App/Pztj_BucketMaterialsRecordEntity.cs Ver arquivo

@@ -0,0 +1,38 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :桶原料记录
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/14 11:47:33
/// 描 述 :
/// </summary>
[SugarTable("bucket_material_record")]
public class Pztj_BucketMaterialsRecordEntity : DEntityBase
{
/// <summary>
/// 桶Id
/// </summary>
[SugarColumn(IsNullable = true)]
public string BucketId { get; set; }
/// <summary>
/// 物料Id
/// </summary>
[SugarColumn(IsNullable = true)]
public string MaterialId { get; set; }
/// <summary>
/// 添加时间
/// </summary>
[SugarColumn(IsNullable = true)]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 重量
/// </summary>
[SugarColumn(IsNullable = true)]
public string Weight { get; set; }
/// <summary>
/// 工单Id
/// </summary>
[SugarColumn(IsNullable = true)]
public string WorkId { get; set; }
}
}

+ 36
- 0
backend/BPA.MES.Base.Application/Entitys/App/Pztj_CraftStepsEntity.cs Ver arquivo

@@ -0,0 +1,36 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :工艺路线
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/17 17:01:26
/// 描 述 :
/// </summary>
[SugarTable("craft_Steps")]
public class Pztj_CraftStepsEntity : DEntityBase
{
/// <summary>
/// 工艺Id
/// </summary>
public string CraftId { get; set; }
/// <summary>
/// 步骤
/// </summary>
public int Step { get; set; }
/// <summary>
/// 功能描述
/// </summary>
[SugarColumn(IsNullable = true)]
public string Description { get; set; }
/// <summary>
/// 设备产品功能Id
/// </summary>
[SugarColumn(IsNullable = true)]
public string DeviceProductFunctionId { get; set; }
/// <summary>
/// 功能参数
/// </summary>
[SugarColumn(IsNullable = true, ColumnDataType= "longtext")]
public string Params { get; set; }
}
}

+ 25
- 0
backend/BPA.MES.Base.Application/Entitys/App/Pztj_CraftsInfoEntity.cs Ver arquivo

@@ -0,0 +1,25 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :胖子天骄工艺基础信息
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/14 14:43:37
/// 描 述 :
/// </summary>
[SugarTable("craft_info")]
public class Pztj_CraftsInfoEntity : DEntityBase
{
/// <summary>
/// 工艺名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 设备产品Id
/// </summary>
public string DeviceProductId { get; set; }
/// <summary>
/// 工艺描述
/// </summary>
public string Description { get; set; }
}
}

+ 43
- 0
backend/BPA.MES.Base.Application/Entitys/App/Pztj_DevicesInfoEntity.cs Ver arquivo

@@ -0,0 +1,43 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :胖子天骄设备基础表
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/14 11:26:34
/// 描 述 :
/// </summary>
[SugarTable("device_info")]
public class Pztj_DevicesInfoEntity: DEntityBase
{
/// <summary>
/// 名称
/// </summary>
[Required(ErrorMessage = "名称不能为空")]
public string Name { get; set; }
/// <summary>
/// 编码
/// </summary>
[Required(ErrorMessage = "编码不能为空")]
public string Code { get; set; }
/// <summary>
/// 设备类型
/// </summary>
[SugarColumn(IsNullable = true)]
public string DeviceType { get; set; }
/// <summary>
/// 设备描述
/// </summary>
[SugarColumn(IsNullable = true)]
public string Describe { get; set; }
/// <summary>
/// 设备维保时间
/// </summary>
[SugarColumn(IsNullable = true)]
public string RepairDate { get; set; }
/// <summary>
/// 设备创建时间
/// </summary>
[SugarColumn(IsNullable = true)]
public string CreateTime { get; set; }
}
}

+ 33
- 0
backend/BPA.MES.Base.Application/Entitys/App/Pztj_FinalsInfoEntity.cs Ver arquivo

@@ -0,0 +1,33 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :胖子天骄成品基础信息管理
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/14 14:07:56
/// 描 述 :
/// </summary>
[SugarTable("final_info")]
public class Pztj_FinalsInfoEntity : DEntityBase
{
/// <summary>
/// 成品编号
/// </summary>
public string Code { get; set; }
/// <summary>
/// 成品名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 配方Id
/// </summary>
public string RecipeId { get; set; }
/// <summary>
/// 工艺Id
/// </summary>
public string CraftId { get; set; }
/// <summary>
/// 添加时间
/// </summary>
public DateTime? CreateTime { get; set; }
}
}

+ 21
- 0
backend/BPA.MES.Base.Application/Entitys/App/Pztj_LineDevicesEntity.cs Ver arquivo

@@ -0,0 +1,21 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :产线设备
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/20 16:45:05
/// 描 述 :
/// </summary>
[SugarTable("productline_devices")]
public class Pztj_LineDevicesEntity : DEntityBase
{
/// <summary>
/// 产线Id
/// </summary>
public string LineId { get; set; }
/// <summary>
/// 产线设备
/// </summary>
public string DeviceId { get; set; }
}
}

+ 21
- 0
backend/BPA.MES.Base.Application/Entitys/App/Pztj_LineStocksEntity.cs Ver arquivo

@@ -0,0 +1,21 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :产线料仓
/// 创 建 人 :yangxiao
/// 创建时间 :2023/7/20 16:45:40
/// 描 述 :
/// </summary>
[SugarTable("productline_stocks")]
public class Pztj_LineStocksEntity : DEntityBase
{
/// <summary>
/// 产线Id
/// </summary>
public string LineId { get; set; }
/// <summary>
/// 产线料仓
/// </summary>
public string StockId { get; set; }
}
}

+ 34
- 0
backend/BPA.MES.Base.Application/Entitys/App/Pztj_MaterialsInfoEntity.cs Ver arquivo

@@ -0,0 +1,34 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :胖子天骄原料管理
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/14 11:32:06
/// 描 述 :
/// </summary>
[SugarTable("material_Info")]
public class Pztj_MaterialsInfoEntity : DEntityBase
{
/// <summary>
/// 原料名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 原料编号
/// </summary>
public string Code { get; set; }
/// <summary>
/// 原料单位
/// </summary>
public string Unit { get; set; }
/// <summary>
/// 原料分组
/// </summary>
public string Type { get; set; }
/// <summary>
/// 每升重量
/// </summary>
[SugarColumn(IsNullable = true)]
public string WeightPerLiter { get; set; }
}
}

+ 30
- 0
backend/BPA.MES.Base.Application/Entitys/App/Pztj_StockInfoEntity.cs Ver arquivo

@@ -0,0 +1,30 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :胖子天骄料仓管理
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/14 11:31:34
/// 描 述 :
/// </summary>
[SugarTable("stock_info")]
public class Pztj_StockInfoEntity : DEntityBase
{
/// <summary>
/// 料仓编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 料仓名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 物料Id
/// </summary>
public string MaterialId { get; set; }
/// <summary>
/// 料仓容积
/// </summary>
public string Volume { get; set; }

}
}

+ 48
- 0
backend/BPA.MES.Base.Application/Entitys/App/Pztj_WorkInfoEntity.cs Ver arquivo

@@ -0,0 +1,48 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :工单基础信息
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/18 17:54:43
/// 描 述 :
/// </summary>
[SugarTable("work_info")]
public class Pztj_WorkInfoEntity : DEntityBase
{
/// <summary>
/// 工单名称
/// </summary>
[SugarColumn(IsNullable = true)]
public string Name { get; set; }
/// <summary>
/// 产线Id
/// </summary>
public string LineId { get; set; }
/// <summary>
/// 成品Id
/// </summary>
public string FinalId { get; set; }
/// <summary>
/// 指定设备Id
/// </summary>
[SugarColumn(IsNullable = true)]
public string DeviceId { get; set; }
/// <summary>
/// 产量
/// </summary>
public string Number { get;set; }
/// <summary>
/// 批次号
/// </summary>
public string BatchId { get; set; }
/// <summary>
/// 工单当前状态
/// </summary>
[SugarColumn(IsNullable = true)]
public WorkOrderStatusEnum? Status { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
}
}

+ 21
- 0
backend/BPA.MES.Base.Application/Entitys/App/Pztj_WorkInfoItemEntity.cs Ver arquivo

@@ -0,0 +1,21 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :工单拆分
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/18 18:12:55
/// 描 述 :
/// </summary>
[SugarTable("work_info_item")]
public class Pztj_WorkInfoItemEntity : DEntityBase
{
/// <summary>
/// 工单名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 产量
/// </summary>
public string Number { get; set; }
}
}

+ 33
- 0
backend/BPA.MES.Base.Application/Entitys/App/Pztj_WorkInfoStatusEntity.cs Ver arquivo

@@ -0,0 +1,33 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :工单状态
/// 创 建 人 :yangxiao
/// 创建时间 :2023/7/18 18:07:21
/// 描 述 :
/// </summary>
[SugarTable("work_info_status")]
public class Pztj_WorkInfoStatusEntity : DEntityBase
{
/// <summary>
/// 工单Id
/// </summary>
[SugarColumn(IsNullable = true)]
public string WorkId { get; set; }
/// <summary>
/// 工单状态
/// </summary>
[SugarColumn(IsNullable = true)]
public WorkOrderStatusEnum? Status { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[SugarColumn(IsNullable = true)]
public DateTime CreateTime { get; set; }
/// <summary>
/// 备注
/// </summary>
[SugarColumn(IsNullable = true)]
public string Remark { get; set; }
}
}

+ 26
- 0
backend/BPA.MES.Base.Application/Entitys/App/WorkBatchEntity.cs Ver arquivo

@@ -0,0 +1,26 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/8/9 18:22:42
/// 描 述 :
/// </summary>
[SugarTable("work_batch")]
public class WorkBatchEntity : DEntityBase
{
/// <summary>
/// 批次名词
/// </summary>
public string Name { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 状态
/// </summary>
public WorkOrderStatusEnum? Status { get; set; }

}
}

+ 67
- 0
backend/BPA.MES.Base.Application/Entitys/App/WorkInfoCraftstepRecordEntity.cs Ver arquivo

@@ -0,0 +1,67 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/8/10 10:03:15
/// 描 述 :
/// </summary>
[SugarTable("work_info_craftstep_record")]
public class WorkInfoCraftstepRecordEntity : DEntityBase
{
/// <summary>
/// 工单Id
/// </summary>
public string WorkId { get; set; }
/// <summary>
/// 工艺Id
/// </summary>
public string CraftId { get; set; }
/// <summary>
/// 工艺名称
/// </summary>
public string CraftName { get; set; }
/// <summary>
/// 工艺步骤Id
/// </summary>
public string CraftstepId { get; set; }
/// <summary>
/// 步骤
/// </summary>
public int Step { get; set; }
/// <summary>
/// 工艺步骤名称
/// </summary>
[SugarColumn(IsNullable = true)]
public string CraftstepName { get; set; }
/// <summary>
/// 工艺参数
/// </summary>
[SugarColumn(IsNullable = true)]
public string CraftstepParms { get; set; }
/// <summary>
/// 设备类型功能Id
/// </summary>
[SugarColumn(IsNullable = true)]
public string DeviceProductFunctionId { get; set; }
/// <summary>
/// 设备类型功能名称
/// </summary>
[SugarColumn(IsNullable = true)]
public string DeviceProductFunctionName { get; set; }
/// <summary>
/// 执行状态
/// </summary>
[SugarColumn(IsNullable = true)]
public RecipeStatus Status { get; set; }
/// <summary>
/// 更新时间
/// </summary>
[SugarColumn(IsNullable = true)]
public DateTime? UpdateTime{ get;set;}
/// <summary>
/// 第几锅
/// </summary>
public string PotNum { get; set; }
}
}

+ 63
- 0
backend/BPA.MES.Base.Application/Entitys/App/WorkInfoMaterialsRecordEntity.cs Ver arquivo

@@ -0,0 +1,63 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/8/9 18:22:42
/// 描 述 :
/// </summary>
[SugarTable("work_info_materials_record")]
public class WorkInfoMaterialsRecordEntity : DEntityBase
{
/// <summary>
/// 物料名称
/// </summary>
[SugarColumn(IsNullable = true)]
public string MaterialName { get; set; }
/// <summary>
/// 物料id
/// </summary>
[SugarColumn(IsNullable = true)]
public string MaterialId { get; set; }
/// <summary>
/// 工单id
/// </summary>
[SugarColumn(IsNullable = true)]
public string WorkId { get; set; }
/// <summary>
/// 重量
/// </summary>
[SugarColumn(IsNullable = true)]
public string Weight { get; set; }
/// <summary>
/// 第几锅
/// </summary>
[SugarColumn(IsNullable = true)]
public string PotNum { get; set; }
/// <summary>
/// 配方Id
/// </summary>
[SugarColumn(IsNullable = true)]
public string RecipeId { get; set; }
/// <summary>
/// 配方名称
/// </summary>
[SugarColumn(IsNullable = true)]
public string RecipeName { get; set; }
/// <summary>
/// 物料状态
/// </summary>
[SugarColumn(IsNullable = true)]
public EBatchingStatus MaterialStatus { get; set; }
/// <summary>
/// 更新时间
/// </summary>
[SugarColumn(IsNullable = true)]
public DateTime? UpdateTime { get; set; }
/// <summary>
/// 误差
/// </summary>
[SugarColumn(IsNullable = true)]
public string ErrorWeight { get; set; }
}
}

+ 26
- 0
backend/BPA.MES.Base.Application/Entitys/Base/DeviceProductEntity.cs Ver arquivo

@@ -0,0 +1,26 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :设备产品
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/8/1 16:34:53
/// 描 述 :
/// </summary>
[SugarTable("devices_product")]
public class DeviceProductEntity : DEntityBase
{
/// <summary>
/// 设备产品名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 设备产品编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 设备产品描述
/// </summary>
[SugarColumn(IsNullable = true)]
public string Description { get; set; }
}
}

+ 38
- 0
backend/BPA.MES.Base.Application/Entitys/Base/DeviceProductFunctionEntity.cs Ver arquivo

@@ -0,0 +1,38 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :设备功能
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/8/2 16:03:10
/// 描 述 :
/// </summary>
[SugarTable("devices_product_function")]
public class DeviceProductFunctionEntity : DEntityBase
{
/// <summary>
/// 设备产品Id
/// </summary>
[SugarColumn(IsNullable = true)]
public string DeviceProductId { get; set; }
/// <summary>
/// 功能名称
/// </summary>
[SugarColumn(IsNullable = true)]
public string Name { get; set; }
/// <summary>
/// 功能编码
/// </summary>
[SugarColumn(IsNullable = true)]
public string Code { get; set; }
/// <summary>
/// 描述
/// </summary>
[SugarColumn(IsNullable = true)]
public string Description { get; set; }
/// <summary>
/// 方法参数
/// </summary>
[SugarColumn(IsNullable = true, ColumnDataType = "longtext")]
public string Params { get; set; }
}
}

+ 30
- 0
backend/BPA.MES.Base.Application/Entitys/Base/DeviceProductParmEntity.cs Ver arquivo

@@ -0,0 +1,30 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :设备属性
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/31 15:06:00
/// 描 述 :
/// </summary>
[SugarTable("devices_product_parm")]
public class DeviceProductParmEntity : DEntityBase
{
/// <summary>
/// 设备产品Id
/// </summary>
public string DeviceProductId { get; set; }
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 描述
/// </summary>
[SugarColumn(IsNullable = true)]
public string Description { get; set; }
}
}

+ 22
- 0
backend/BPA.MES.Base.Application/Entitys/Base/DeviceRecipeEntity.cs Ver arquivo

@@ -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; }
}
}

+ 33
- 0
backend/BPA.MES.Base.Application/Entitys/Base/DictDataEntity.cs Ver arquivo

@@ -0,0 +1,33 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :码表数据
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/8/9 9:47:53
/// 描 述 :
/// </summary>
[SugarTable("dict_data")]
public class DictDataEntity : DEntityBase
{
/// <summary>
/// 类型id
/// </summary>
public string TypeId { get; set; }
/// <summary>
/// 值
/// </summary>
public string Value { get; set; }
/// <summary>
/// 编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 排序
/// </summary>
public int Sort { get; set; }
/// <summary>
/// 添加时间
/// </summary>
public DateTime CreateTime { get; set; }
}
}

+ 26
- 0
backend/BPA.MES.Base.Application/Entitys/Base/DictTypeEntity.cs Ver arquivo

@@ -0,0 +1,26 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :数据码表
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/8/9 9:48:05
/// 描 述 :
/// </summary>
[SugarTable("dict_type")]
public class DictTypeEntity : DEntityBase
{
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 排序
/// </summary>
public int Sort { get; set; }
}
}

+ 21
- 0
backend/BPA.MES.Base.Application/Entitys/Base/GroupInfoEntity.cs Ver arquivo

@@ -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; }
}
}

+ 29
- 0
backend/BPA.MES.Base.Application/Entitys/Base/MQTTInfoEntity.cs Ver arquivo

@@ -0,0 +1,29 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/24 17:28:56
/// 描 述 :
/// </summary>
[SugarTable("mqtt")]
public class MQTTInfoEntity
{
/// <summary>
/// 地址
/// </summary>
public string Address { get; set; }
/// <summary>
/// 密码
/// </summary>
public string Pwd { get; set; }
/// <summary>
/// 账号
/// </summary>
public string Account { get; set; }
/// <summary>
/// 消息发布路由 4.0和5.0不一样
/// </summary>
public string MsgPublishRoute { get; set; }
}
}

+ 31
- 0
backend/BPA.MES.Base.Application/Entitys/Base/OperLogEntity.cs Ver arquivo

@@ -0,0 +1,31 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :操作日志
/// 创 建 人 :yangxiao
/// 创建时间 :2023/7/20 15:10:59
/// 描 述 :
/// </summary>
[SugarTable("oper_log")]
public class OperLogEntity : DEntityBase
{
/// <summary>
/// 操作标题
/// </summary>
public string Name { get; set; }
/// <summary>
/// 内容
/// </summary>
public string Context { get; set; }
/// <summary>
/// 返回值
/// </summary>
[SugarColumn(IsNullable = true)]
public string Result { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[SugarColumn(IsNullable = true)]
public DateTime? CreateTime { get; set; }
}
}

+ 13
- 0
backend/BPA.MES.Base.Application/Entitys/Base/OrderInfoEntity.cs Ver arquivo

@@ -0,0 +1,13 @@
namespace BPA.MES.Base.Application.Entitys.Base
{
/// <summary>
/// 名 称 :订单服务
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/18 18:11:48
/// 描 述 :
/// </summary>
public class OrderInfoEntity
{

}
}

+ 25
- 0
backend/BPA.MES.Base.Application/Entitys/Base/ProductLineEntity.cs Ver arquivo

@@ -0,0 +1,25 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :产线管理
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/18 10:42:35
/// 描 述 :
/// </summary>
[SugarTable("product_line")]
public class ProductLineEntity : DEntityBase
{
/// <summary>
/// 产线名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 产线编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 产线描述
/// </summary>
public string Describe { get; set; }
}
}

+ 36
- 0
backend/BPA.MES.Base.Application/Entitys/Base/RecipeMaterialEntity.cs Ver arquivo

@@ -0,0 +1,36 @@
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>
[SugarColumn(IsNullable = true)]
public string Weight { get; set; }
/// <summary>
/// 描述
/// </summary>
[SugarColumn(IsNullable = true)]
public string Describe { get; set; }
/// <summary>
/// 误差
/// </summary>
[SugarColumn(IsNullable = true)]
public string ErrorWeight { get; set; }
}
}

+ 21
- 0
backend/BPA.MES.Base.Application/Entitys/Base/RecipesGroupEntity.cs Ver arquivo

@@ -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; }
}
}

+ 22
- 0
backend/BPA.MES.Base.Application/Entitys/Base/RecipesInfoEntity.cs Ver arquivo

@@ -0,0 +1,22 @@
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; }
}
}

+ 30
- 0
backend/BPA.MES.Base.Application/Entitys/Base/StoreInfoEntity.cs Ver arquivo

@@ -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; }
}
}

+ 27
- 0
backend/BPA.MES.Base.Application/Entitys/KepData/AlarmLog.cs Ver arquivo

@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BPA.MES.Base.Application.Entitys.KepData
{
[SugarTable("DataVAlarmLog")]
public class AlarmLog: DEntityBase
{
public string Name { get; set; }
/// <summary>
/// 当前值
/// </summary>
public string Value { get; set; }

/// <summary>
/// 报警信息
/// </summary>
public string ValueStr{ get; set; }


public DateTime CreateTime { get; set; }
}
}

+ 33
- 0
backend/BPA.MES.Base.Application/Entitys/KepData/DataVAlarmLimit.cs Ver arquivo

@@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BPA.MES.Base.Application.Entitys.KepData
{
/// <summary>
/// 大屏报警限制
/// </summary>
[SugarTable("DataVAlarmLimit")]
public class DataVAlarmLimit: DEntityBase
{
/// <summary>
/// 限制名称
/// </summary>
public string Name { get; set; }

public string Code { get; set; }

/// <summary>
/// 最小限制值
/// </summary>
public decimal MinLimitValue { get; set; }

/// <summary>
/// 最大限制值
/// </summary>
public decimal MaxLimitValue { get; set; }

}
}

+ 20
- 0
backend/BPA.MES.Base.Application/Entitys/KepData/ch1_device1.cs Ver arquivo

@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BPA.MES.Base.Application.Entitys.KepData
{
// [SugarTable("ch1_device1")]
public class ch1_device1
{
[SugarColumn(IsPrimaryKey = true)]
public int id { get; set; }
public string _NAME { get; set; }
public int _NUMERICID { get; set; }
public string _VALUE { get; set; }
public DateTime _TIMESTAMP { get; set; }
public int _QUALITY { get; set; }
}
}

+ 54
- 0
backend/BPA.MES.Base.Application/Entitys/Logs/AlarmLogEntity.cs Ver arquivo

@@ -0,0 +1,54 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :报警日志
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/8/21 10:17:57
/// 描 述 :
/// </summary>
[SugarTable("alarm")]
public class AlarmLogEntity : DEntityBase
{
/// <summary>
/// 报警信息
/// </summary>
[SugarColumn(IsNullable = true)]
public string MsgInfo { get; set; }
/// <summary>
/// 报警值
/// </summary>
[SugarColumn(IsNullable = true)]
public string Value { get; set; }
/// <summary>
/// 报警等级
/// </summary>
[SugarColumn(IsNullable = true)]
public string Grade { get; set; }
/// <summary>
/// 设备名称
/// </summary>
[SugarColumn(IsNullable = true)]
public string DeviceName { get; set; }
/// <summary>
/// 日期
/// </summary>
[SugarColumn(IsNullable = true)]
public string Date { get; set; }
/// <summary>
/// 时间
/// </summary>
[SugarColumn(IsNullable = true)]
public string Time { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[SugarColumn(IsNullable = true)]
public DateTime CreateDate { get; set; }
/// <summary>
/// 类型
/// </summary>
[SugarColumn(IsNullable = true)]
public string LogType { get; set; }

}
}

+ 39
- 0
backend/BPA.MES.Base.Application/Entitys/Logs/ProgramLogEntity.cs Ver arquivo

@@ -0,0 +1,39 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :程序日志
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/8/21 10:18:13
/// 描 述 :
/// </summary>
[SugarTable("programlog")]
public class ProgramLogEntity : DEntityBase
{
/// <summary>
/// 日志类型
/// </summary>
[SugarColumn(IsNullable = true, ColumnDataType = "varchar",Length = 200)]
public string LogType { get; set; }
/// <summary>
/// 日志消息
/// </summary>
[SugarColumn(IsNullable = true, ColumnDataType = "longtext")]
public string MsgInfo { get; set; }
/// <summary>
/// 日期
/// </summary>
[SugarColumn(IsNullable = true)]
public string Date { get; set; }
/// <summary>
/// 时间
/// </summary>
[SugarColumn(IsNullable = true)]
public string Time { get; set; }
/// <summary>
/// 日志消息
/// </summary>
[SugarColumn(IsNullable = true)]
public DateTime CreateDate { get; set; }

}
}

+ 45
- 0
backend/BPA.MES.Base.Application/Entitys/Logs/RunLogEntity.cs Ver arquivo

@@ -0,0 +1,45 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :运行日志
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/8/21 10:18:34
/// 描 述 :
/// </summary>
[SplitTable(SplitType.Month)]
//[SugarTable("runlog_{year}{month}{day}")]
[SugarTable("runlog")]
public class RunLogEntity : DEntityBase
{
/// <summary>
/// 日志类别
/// </summary>
[SugarColumn(IsNullable = true)]
public string LogType { get; set; }
/// <summary>
/// 日志消息
/// </summary>
[SugarColumn(IsNullable = true, ColumnDataType = "longtext")]
public string MsgInfo { get; set; }
/// <summary>
/// 日期
/// </summary>
[SugarColumn(IsNullable = true)]
public string Date { get; set; }
/// <summary>
/// 时间
/// </summary>
[SugarColumn(IsNullable = true)]
public string Time { get; set; }
/// <summary>
/// 日志消息
/// </summary>
[SugarColumn(IsNullable = true),SplitField]
public DateTime CreateDate { get; set; }
/// <summary>
/// 更新时间
/// </summary>
[SugarColumn(IsNullable = true)]//设置为可空字段
public DateTime UpdateTime { get; set; }
}
}

+ 36
- 0
backend/BPA.MES.Base.Application/Entitys/Logs/UserLogEntity.cs Ver arquivo

@@ -0,0 +1,36 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :用户日志
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/8/21 10:18:50
/// 描 述 :
/// </summary>
[SugarTable("user_log")]
public class UserLogEntity : DEntityBase
{
/// <summary>
/// 权限
/// </summary>
[SugarColumn(IsNullable = true)]
public string Permission { get; set; }

/// <summary>
/// 用户名
/// </summary>
[SugarColumn(IsNullable = true)]
public string UserName { get; set; }

/// <summary>
/// 日志消息
/// </summary>
[SugarColumn(IsNullable = true)]
public string MsgInfo { get; set; }

/// <summary>
/// 日志时间
/// </summary>
[SugarColumn(IsNullable = true)]
public DateTime CreateDate { get; set; }
}
}

+ 24
- 0
backend/BPA.MES.Base.Application/Entitys/Order/OrderEntity.cs Ver arquivo

@@ -0,0 +1,24 @@
using BPA.MES.Base.Application.Const;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BPA.MES.Base.Application.Entitys.Order
{

[SugarTable("order")]
public class OrderEntity: DEntityBase
{

/// <summary>
/// 状态
/// </summary>
public OrderStatusEnum Status { get; set; }



public DateTime CreateTime { get; set; }
}
}

+ 30
- 0
backend/BPA.MES.Base.Application/Entitys/Order/OrderInfoEntity.cs Ver arquivo

@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BPA.MES.Base.Application.Entitys.Order
{

[SugarTable("order_info")]
public class OrderInfoEntity : DEntityBase
{
/// <summary>
/// 订单ID
/// </summary>
public string OrderId { get; set; }

/// <summary>
/// 成品Id
/// </summary>
public string FinalslId { get; set; }

/// <summary>
/// 数量
/// </summary>
public decimal Number { get; set; }

public DateTime CreateTime { get; set; }
}
}

+ 18
- 0
backend/BPA.MES.Base.Application/Entitys/Order/OrderWorkEntity.cs Ver arquivo

@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BPA.MES.Base.Application.Entitys.Order
{
/// <summary>
/// 订单关联工单
/// </summary>
[SugarTable("order_work")]
public class OrderWorkEntity: DEntityBase
{
public string OrderId { get; set; }
public string WorkId { get; set; }
}
}

+ 29
- 0
backend/BPA.MES.Base.Application/Entitys/Sys/AccountEntity.cs Ver arquivo

@@ -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; }
}
}

+ 38
- 0
backend/BPA.MES.Base.Application/Entitys/Sys/EmployeeEntity.cs Ver arquivo

@@ -0,0 +1,38 @@
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>
/// 1启用 2禁用
/// </summary>
[SugarColumn(IsNullable = false)]
public int Status { get; set; }
/// <summary>
/// 超管
/// </summary>
[SugarColumn(IsNullable = false)]
public bool IsAdmin { get; set; }
/// <summary>
/// 角色Id
/// </summary>
public string RoleId { get; set; }
}
}

+ 46
- 0
backend/BPA.MES.Base.Application/Entitys/Sys/ModuleEntity.cs Ver arquivo

@@ -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; }
}
}

+ 32
- 0
backend/BPA.MES.Base.Application/Entitys/Sys/RoleEntity.cs Ver arquivo

@@ -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; }
}
}

+ 26
- 0
backend/BPA.MES.Base.Application/Entitys/Sys/RoleModuleEntity.cs Ver arquivo

@@ -0,0 +1,26 @@
namespace BPA.MES.Base.Application.Entitys
{
/// <summary>
/// 名 称 :角色权限表
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/8/31 15:56:02
/// 描 述 :
/// </summary>
[SugarTable("sys_role_module")]
public class RoleModuleEntity : DEntityBase
{
/// <summary>
/// 角色Id
/// </summary>
public string RoleId { get; set; }
/// <summary>
/// 模块Id
/// </summary>
public string ModuleId { get; set; }
/// <summary>
/// 父级模块
/// </summary>
[SugarColumn(IsNullable =true)]
public string ParentId { get; set; }
}
}

+ 39
- 0
backend/BPA.MES.Base.Application/Filters/AGVAttribute.cs Ver arquivo

@@ -0,0 +1,39 @@
using BPA.MES.Base.Application.Services;
using BPA.MES.Base.Application.Services.AGVService.Dtos;
using Furion.JsonSerialization;
using Microsoft.AspNetCore.Mvc.Filters;
using System.Diagnostics;

namespace BPA.MES.Base.Application
{
public class AGVAttribute : ActionFilterAttribute
{
/// <summary>
/// 执行操作前后
/// </summary>
/// <param name="context"></param>
/// <param name="next"></param>
/// <returns></returns>
public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
// 获取 HttpContext 和 HttpRequest 对象
var httpContext = context.HttpContext;
var httpRequest = httpContext.Request;
var sw = new Stopwatch();
sw.Start();
var actionContext = await next();
sw.Stop();
var server = App.GetService<IAGVThirdPartyService>();
var contentstring = JSON.Serialize(context.ActionArguments["input"]);
AGVLoadAndUnloadRequest input = JSON.Deserialize<AGVLoadAndUnloadRequest>(contentstring);
Roller_JobRequest roller_Job = new()
{
AgvCode = input.Body.Event.agvCode,
Complete = true,
JobId = input.Body.Event.jobId,
MsgId = input.Body.Event.msgId
};
await server.RollerJobExecute(roller_Job);
}
}
}

+ 46
- 0
backend/BPA.MES.Base.Application/Filters/OperLogAttribute.cs Ver arquivo

@@ -0,0 +1,46 @@
using Furion.EventBus;
using Furion.JsonSerialization;
using Microsoft.AspNetCore.Mvc.Filters;
using System.Diagnostics;
using System.Security.Claims;

namespace BPA.MES.Base.Application
{
/// <summary>
/// 名 称 :接口AOP
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/20 15:04:06
/// 描 述 :
/// </summary>
public class OperLogAttribute : ActionFilterAttribute
{
public string _name;
public OperLogAttribute(string name)
{
_name = name;
}
/// <summary>
/// 执行操作前后
/// </summary>
/// <param name="context"></param>
/// <param name="next"></param>
/// <returns></returns>
public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
// 获取 HttpContext 和 HttpRequest 对象
var httpContext = context.HttpContext;
var httpRequest = httpContext.Request;
var sw = new Stopwatch();
sw.Start();
var actionContext = await next();
sw.Stop();
var userName = httpContext.User?.FindFirstValue(ClaimConst.CLAINM_NAME);
await MessageCenter.PublishAsync("ToDo:OperLog", new OperLogEntity()
{
Context = context.ActionArguments.Count < 1 ? string.Empty : JSON.Serialize(context.ActionArguments),
Name = $"[{userName}]{_name}",
Result = actionContext.Exception == null? "true" : EnhancedStackTrace.Current().ToString()
});
}
}
}

+ 19
- 0
backend/BPA.MES.Base.Application/GlobalUsings.cs Ver arquivo

@@ -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;

+ 21
- 0
backend/BPA.MES.Base.Application/MQTT/IMessage.cs Ver arquivo

@@ -0,0 +1,21 @@
namespace BPA.MES.Base.Application
{
/// <summary>
/// 名 称 :MQTT消息基类
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/21 10:24:24
/// 描 述 :
/// </summary>
public interface IMessage
{
/// <summary>
/// 消息ID
/// </summary>
public int MessageId { get; set; }

/// <summary>
/// 消息版本
/// </summary>
public Version MsgVersion { get; set; }
}
}

+ 145
- 0
backend/BPA.MES.Base.Application/MQTT/MQTTService.cs Ver arquivo

@@ -0,0 +1,145 @@
using Furion.JsonSerialization;
using Furion.RemoteRequest.Extensions;
using Newtonsoft.Json;
using System.Text;

namespace BPA.MES.Base.Application
{
/// <summary>
/// 名 称 :MQTT通信库
/// 创 建 人 :yangxiao
/// 创建时间 : 2022/11/18 15:38:40
/// 描 述 :
/// </summary>
public class MQTTService : IMQTTService, ITransient, IDynamicApiController
{
private readonly ISqlSugarClient _dbContext;
ISysCacheService _sysCacheService;
public MQTTService(ISqlSugarClient db, ISysCacheService sysCacheService)
{
_dbContext = db;
_sysCacheService = sysCacheService;
}
public async Task GetMQTTConfig()
{
var entity = await _dbContext.Queryable<MQTTInfoEntity>().FirstAsync();
if (entity != null)
{
MQTTConfig.Address = entity.Address;
MQTTConfig.Account = entity.Account;
MQTTConfig.Pwd = entity.Pwd;
await _sysCacheService.SetAsync("mqtt", entity);
}
}
/// <summary>
/// Mqtt通用服务
/// </summary>
public async Task<bool> MqttPublish(MqttPublishDto input)
{
bool result = false;
MQTTInfoEntity mqttentity = new();
mqttentity = await _sysCacheService.GetAsync<MQTTInfoEntity>("mqtt");
if (mqttentity==null)
{
mqttentity = await _dbContext.Queryable<MQTTInfoEntity>().FirstAsync();
await _sysCacheService.SetAsync("mqtt", mqttentity);
}
try
{
input.Payload.MessageId = input.MessageId;
input.Payload.MsgVersion = new Version(1, 0, 0, 0);
MsgPackage mp = new()
{
Message = input.Payload,
MessageLen = JSON.Serialize(input.Payload).Length
};
//组装MQTT消息
var tem = await $"http://{mqttentity.Address}{mqttentity.MsgPublishRoute}".SetHeaders(new
{
Authorization = "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes($"{mqttentity.Account}:{mqttentity.Pwd}"))
}).SetBody(new
{
input.Topic,
payload = JsonConvert.SerializeObject(mp),
qos = 2,
retain = false,
clientid = "pztj_service"
}).PostAsStringAsync();
var res = JSON.Deserialize<MqttResult>(tem);
if (res.Code == 0 || res.Reason_code<100 || !string.IsNullOrEmpty(res.Id))
{
result = true;
}
Console.WriteLine($"_____________________MQTT发消息:{JsonConvert.SerializeObject(mp)}");
}
catch
{
}
return result;
}
[AllowAnonymous]
public async Task<bool> MqttTestPublish(string topic, string msg)
{
bool result = false;
var mqttentity = await _dbContext.Queryable<MQTTInfoEntity>().FirstAsync();
string mqttAddress = mqttentity.Address;
try
{
//组装MQTT消息
var tem = await $"http://{mqttAddress}/api/v5/publish".SetHeaders(new
{
Authorization = "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes($"{mqttentity.Account}:{mqttentity.Pwd}"))
}).SetBody(new
{
topic,
payload = msg,
qos = 2,
retain = false,
clientid = "pztj_service"
}).PostAsStringAsync();
var res = JSON.Deserialize<MqttResult>(tem);
if (res.Code == 0 || res.Reason_code < 100 || !string.IsNullOrEmpty(res.Id))
{
result = true;
}
}
catch
{

}
return result;
}

}

public class MqttResult
{
/// <summary>
/// code
/// </summary>
public int Code { get; set; }
/// <summary>
/// reason_code
/// </summary>
public int Reason_code { get; set; }
/// <summary>
///
/// </summary>
public string Id { get; set; }
}

public class MqttPublishDto
{
public IMessage Payload { get; set; }
public string Topic { get; set; }
public int MessageId { get; set; }
}
public interface IMQTTService
{
Task<bool> MqttPublish(MqttPublishDto input);

Task GetMQTTConfig();
}
}

+ 14
- 0
backend/BPA.MES.Base.Application/MQTT/MessageID.cs Ver arquivo

@@ -0,0 +1,14 @@
namespace BPA.MES.Base.Application
{
public class MessageID
{
public const int DevcieControl = 1;//设备控制ID
public const int WorkOrderIssued = 2;//工单下发ID
public const int DeviceData = 3;//设备上报数据
public const int TaskState = 4;//AGV任务状态上报
public const int LoadAndUnload = 8;//AGV上下料上报
public const int PowerId = 12;// 权限验证
public const int StateChange = 13;//状态改变
}
}


+ 18
- 0
backend/BPA.MES.Base.Application/MQTT/MsgPackage.cs Ver arquivo

@@ -0,0 +1,18 @@
using Newtonsoft.Json;

namespace BPA.MES.Base.Application
{
public class MsgPackage
{
/// <summary>
/// 消息内容
/// </summary>
[JsonProperty(TypeNameHandling = TypeNameHandling.Auto)]
public IMessage Message { get; set; }
/// <summary>
/// 消息长度
/// </summary>
public int MessageLen { get; set; }
}
}

+ 42
- 0
backend/BPA.MES.Base.Application/MQTT/Topics.cs Ver arquivo

@@ -0,0 +1,42 @@
namespace BPA.MES.Base.Application
{
/// <summary>
/// 名 称 :
/// 创 建 人 :yangxiao
/// 创建时间 : 2022/11/18 15:37:07
/// 描 述 :
/// </summary>
public class Topics
{
/// <summary>
/// 设备控制主题,前端通过消息控制设备动作(客户端/前端 --> 设备)
/// </summary>
public const string DeviceControl = "BPAProline/Client/Device/Control";

/// <summary>
/// 工单推送主题,中控将创建的工单推送到对应的产线 (中控系统 --> 产线)
/// </summary>
public const string WorkOrderPush = "BPAPROLINE/MES/SERVER/WORKORDER/DOWN";

/// <summary>
/// 前端展示数据推送,数据服务将设备数据推送到前端界面展示 (数据中心服务 --> 客户端/前端)
/// </summary>
public const string DeviceDataPush = "BPAProline/DataServer/Client/Data";
/// <summary>
/// 工单状态(信息系统 --> 中控系统)
/// </summary>
public const string STWorkState = "BPAProline/CentralControl/Proline/WorkState";

/// <summary>
/// 任务下发成功 回调
/// </summary>
public const string ExecuteReplyTopic = "robotjob.report";

/// <summary>
/// 上下料回调
/// </summary>
public const string LoadAndUnloadTopic = "rollerjob.upstreamrequest";


}
}

+ 473
- 0
backend/BPA.MES.Base.Application/Services/AGVService/Dtos/AGVThirdPartyDto.cs Ver arquivo

@@ -0,0 +1,473 @@
using BPA.AGV;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BPA.MES.Base.Application.Services.AGVService.Dtos
{

public class Roller_JobRequest
{
public string Url { get; set; }

[Required(ErrorMessage = "[{0}]不能为空")]
[MaxLength(64, ErrorMessage = "[{0}]不能超过64字符")]
public string AgvCode { get; set; }

[Required(ErrorMessage = "[{0}]不能为空")]
[MaxLength(64, ErrorMessage = "[{0}]不能超过64字符")]
public string JobId { get; set; }

[Required(ErrorMessage = "[{0}]不能为空")]
[MaxLength(64, ErrorMessage = "[{0}]不能超过64字符")]
public string MsgId { get; set; }

public bool? Complete { get; set; }
}

public class AGVExecuteReplyRequest
{
public AgvHeader Header { get; set; }
public AgvReplyBody Body { get; set; }
}

public class AgvReplyBody
{
public AGVExecuteReplyDto Event { get; set; }
}


public class AGVExecuteReplyMQTT: IMessage
{
public AGVExecuteReplyDto Event { get; set; }
public int MessageId { get; set; }
public Version MsgVersion { get; set; }
}

public class AGVLoadAndUnloadRequest
{
public AgvHeader Header { get; set; }
public AGVLoadAndUnloadBody Body { get; set; }
}

public class AGVLoadAndUnloadBody
{
public AGVLoadAndUnloadDto Event { get; set; }
}

public class AGVLoadAndUnloadMQTT : IMessage
{
public AGVLoadAndUnloadDto Event { get; set; }
public int MessageId { get; set; }
public Version MsgVersion { get; set; }
}

public class AgvBody
{
public AgvHeader Header { get; set; }
public AgvRetrun Body { get; set; }
}
public class AgvHeader
{
public string RequestId { get; set; }
public string Timestamp { get; set; }
public string Version { get; set; }
}
public class AgvRetrun
{
public string Code { get; set; }

public bool Success { get; set; }

public string Message { get; set; }

public object? Data { get; set; }
}

/// <summary>
/// 任务完成回报Dto
/// </summary>
public class AGVExecuteReplyDto
{
/// <summary>
/// 上游系统任务号,全局唯一
/// </summary>
public string robotJobId { get; set; }

/// <summary>
/// 仓库编号
/// </summary>
public long warehouseId { get; set; }

/// <summary>
/// 任务快仓系统编号
/// </summary>
public string jobId { get; set; }

/// <summary>
/// 任务状态
/// </summary>
public string state { get; set; }

/// <summary>
/// 内部任务类型
/// </summary>
public string jobType { get; set; }

/// <summary>
/// 数据字段
/// </summary>
public PointToPoint jobData { get; set; }

}

/// <summary>
/// 上下料交互请求DTO
/// </summary>
public class AGVLoadAndUnloadDto
{
/// <summary>
/// AGV编号
/// </summary>
public string agvCode { get; set; }

/// <summary>
/// 容器编号,如果一次上/下多个容器,则多个容器用英文逗号分隔
/// </summary>
public string containerCode { get; set; }

/// <summary>
/// 上游设备ID
/// </summary>
public long equipmentId { get; set; }

/// <summary>
/// 上游设备ID,多个用英文逗号分隔
/// </summary>
public string equipmentIds { get; set; }

/// <summary>
/// 快仓任务编号
/// </summary>
public string jobId { get; set; }

/// <summary>
/// 消息ID
/// </summary>
public string msgId { get; set; }

/// <summary>
/// 交互阶段LOAD:上料阶段 UNLOAD:下料阶段
/// </summary>
public string command { get; set; }

/// <summary>
/// 上游任务号
/// </summary>
public string robotJobId { get; set; }

}


/// <summary>
/// 货到货
/// </summary>
public class GoodsToGoods
{
/// <summary>
/// AGV编号
/// </summary>
public string agvCode { get; set; }

/// <summary>
/// 容器编号
/// </summary>
public string containerCode { get; set; }

/// <summary>
/// 上料点位
/// </summary>
public string startPointCode { get; set; }

/// <summary>
/// 上料货位编号
/// </summary>
public string startSlotCode { get; set; }

/// <summary>
/// 下料点位
/// </summary>
public string targetPointCode { get; set; }

/// <summary>
/// 下料货位编号
/// </summary>
public string targetSlotCode { get; set; }

/// <summary>
/// 是否需要上料交互
/// </summary>
public bool loadInteractive { get; set; }
}

/// <summary>
/// 点到点
/// </summary>
public class PointToPoint
{
/// <summary>
/// AGV编号
/// </summary>
public string agvCode { get; set; }

/// <summary>
/// 容器编号
/// </summary>
public string containerCode { get; set; }

/// <summary>
/// 上料点位
/// </summary>
public string startPointCode { get; set; }

/// <summary>
/// 下料点位
/// </summary>
public string targetPointCode { get; set; }

/// <summary>
/// 是否需要上料交互
/// </summary>
public bool loadInteractive { get; set; }
}

public enum AGVState
{

//任务状态:
//1)货架/货位/点到点货架搬运任务枚举:
//LIFT_UP_DONE:顶升完成
//MOVE_BEGIN:开始移动
//PUT_DOWN_DONE:放下完成
//DONE:任务完成
//CANCEL:任务取消
//ABNORMAL_CANCEL:任务异常取消
//ABNORMAL_COMPLETED:任务异常完成
//2)货位到货位/点到点辊筒料箱搬运任务枚举:
//ROLLER_LOAD_DOING:正在上料
//ROLLER_LOAD_FINISH:上料完成
//ROLLER_UNLOAD_DOING:正在下料
//DONE:下料完成
//ABNORMAL_CANCEL:任务异常取消
//ABNORMAL_COMPLETED:任务异常完成
//3)AGV移动任务枚举:
//DONE:任务完成
//CANCEL:任务取消
//ABNORMAL_CANCEL:任务异常取消
//ABNORMAL_COMPLETED:任务异常完成
//4) 纯料箱任务枚举:
//MOVE_BEGIN:开始移动(仅单插臂或单夹报,2.8.1后)
//ENTER_STATION:到站
//DONE:任务完成
//LOAD_COMPLETED:取料完成
//UNLOAD_COMPLETED:放料完成
//ABNORMAL_CANCEL:任务异常取消ABNORMAL_COMPLETED:任务异常完成
//5) 小皮带任务枚举:
//DONE:任务完成
//6) QuickPick任务枚举:
//ENTER_STATION:到站
//DONE:任务完成
//CANCEL:任务取消
//LEAVE_STATION离站
//ROLLBACK 回滚(有其他任务,当前任务可不执行)


/// <summary>
/// 顶升完成
/// </summary>
LIFT_UP_DONE = 1,

/// <summary>
/// 开始移动
/// </summary>
MOVE_BEGIN = 2,

/// <summary>
/// 放下完成
/// </summary>
PUT_DOWN_DONE = 3,

/// <summary>
/// 任务完成
/// </summary>
DONE = 4,


/// <summary>
/// 任务取消
/// </summary>
CANCEL = 5,

/// <summary>
/// 任务异常取消
/// </summary>
ABNORMAL_CANCEL = 6,

/// <summary>
/// 任务异常完成
/// </summary>
ABNORMAL_COMPLETED = 7

}

public enum jobType
{
/// <summary>
/// 1) 辊筒货位到货位搬运
/// </summary>
SLOT_ROLLER_MOVE = 1,
POINT_ROLLER_MOVE=2
}

public class KC_Response
{
public KC_Response()
{
Data = new();
}
/// <summary>
/// 是否成功
/// </summary>
public bool Success { get; set; }
/// <summary>
/// 状态码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 消息
/// </summary>
public string Message { get; set; }
/// <summary>
/// 返回数据数组
/// </summary>
public List<KC_Response_Data> Data { get; set; }
}
public class KC_Response_Data
{
/// <summary>
/// 状态码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 消息体
/// </summary>
public string Message { get; set; }
/// <summary>
/// 任务编号
/// </summary>
public string RobotJobId { get; set; }
}
/// <summary>
/// AGV请求
/// </summary>
public class KC_ExecuteRequest
{
/// <summary>
/// 快仓api地址
/// </summary>
public string Url { get; set; }
/// <summary>
/// 任务编码
/// </summary>
public string RobotJobId { get; set; }
/// <summary>
/// 仓库编码 默认值1
/// </summary>
public long WarehouseId { get; set; } = 1;

public string RobotJobGroupId { get; set; }

public int? Sequence { get; set; }

public string RobotJobGroupNum { get; set; }
/// <summary>
/// 优先级 0-99 越高越先执行
/// </summary>
public int? JobPriority { get; set; }

public int? JobPriorityType { get; set; }

public string Deadline { get; set; }

public string AgvType { get; set; }

public string AgvEndPoint { get; set; }

public bool NeedOperation { get; set; }

public string AgvCode { get; set; }

public int? TaskCountDown { get; set; } = 0;
public string BusinessType { get; set; }
[Required(ErrorMessage = "[{0}]不能为空")]
[MaxLength(64, ErrorMessage = "[{0}]不能超过64字符")]
//任务类型 用来滚筒点对点 POINT_ROLLER_MOVE n8H7jX
public string JobType { get; set; } = "POINT_ROLLER_MOVE";
[Required(ErrorMessage = "[{0}]不能为空")]
public KC_JobDataRequest? JobData { get; set; }
}
/// <summary>
/// 任务下发起止点信息
/// </summary>
public class KC_JobDataRequest
{
/// <summary>
/// 用户自定义信息编号
/// </summary>
public string ContainerCode { get; set; }
/// <summary>
/// 起点点位
/// </summary>
[Required(ErrorMessage = "[{0}]不能为空")]
[MaxLength(64, ErrorMessage = "[{0}]不能超过64字符")]
public string StartPoint { get; set; }
/// <summary>
/// 终点点位
/// </summary>
[Required(ErrorMessage = "[{0}]不能为空")]
[MaxLength(64, ErrorMessage = "[{0}]不能超过64字符")]
public string EndPoint { get; set; }
/// <summary>
/// 上料方式 自动/人工
/// </summary>
public bool? AutoLoad { get; set; }
/// <summary>
/// 上料交互方式 //接口对接 false
/// </summary>
public bool? EnableIOLoad { get; set; } = false;
/// <summary>
/// 下料方式 true自动/false人工
/// </summary>
public bool? AutoUnload { get; set; }
/// <summary>
/// 接口对接 false
/// </summary>
public bool? EnableIOUnload { get; set; } = false;
/// <summary>
/// 起点设备ID
/// </summary>
public long LoadEquipmentId { get; set; }
/// <summary>
/// 目标设备ID
/// </summary>
public long UnloadEquipmentId { get; set; }

public long LoadInteractive { get; set; }

public long LoadHeight { get; set; }

public long UnloadHeight { get; set; }
}
}

+ 95
- 0
backend/BPA.MES.Base.Application/Services/AGVService/Dtos/AgvLineDto.cs Ver arquivo

@@ -0,0 +1,95 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/8/7 9:59:47
/// 描 述 :
/// </summary>
public class AgvLineDto
{
/// <summary>
/// 自定义编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 线路名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 开始点位
/// </summary>
public string StartPointId { get; set; }
/// <summary>
/// 结束点位
/// </summary>
public string EndPointId { get; set; }
/// <summary>
/// 描述
/// </summary>
public string Description { get; set; }
}
/// <summary>
/// 增加
/// </summary>
public class AgvLineAddInput : AgvLineDto
{

}
/// <summary>
/// 修改
/// </summary>
public class AgvLineUpdateInput : AgvLineDto
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
}
/// <summary>
/// 刪除
/// </summary>
public class AgvLineDelInput
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
}
/// <summary>
/// 普通查询条件
/// </summary>
public class AgvLineQueryInput
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
}
/// <summary>
/// 分页查询条件
/// </summary>
public class AgvLineQueryPageInput : RequestPage
{

/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 编码
/// </summary>
public string Code { get; set; }
}
/// <summary>
/// 输出
/// </summary>
public class AgvLineOutput : AgvLineDto
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
//下面增加多的数据
}
}

+ 83
- 0
backend/BPA.MES.Base.Application/Services/AGVService/Dtos/AgvPointDto.cs Ver arquivo

@@ -0,0 +1,83 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/8/7 10:00:01
/// 描 述 :
/// </summary>
public class AgvPointDto
{
/// <summary>
/// 点位名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 点位编码
/// </summary>
public string Code { get; set; }
}
/// <summary>
/// 增加
/// </summary>
public class AgvPointAddInput : AgvPointDto
{

}
/// <summary>
/// 修改
/// </summary>
public class AgvPointUpdateInput : AgvPointDto
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
}
/// <summary>
/// 刪除
/// </summary>
public class AgvPointDelInput
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
}
/// <summary>
/// 普通查询条件
/// </summary>
public class AgvPointQueryInput
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
}
/// <summary>
/// 分页查询条件
/// </summary>
public class AgvPointQueryPageInput : RequestPage
{

/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 编码
/// </summary>
public string Code { get; set; }
}
/// <summary>
/// 输出
/// </summary>
public class AgvPointOutput : AgvPointDto
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
//下面增加多的数据
}
}

+ 170
- 0
backend/BPA.MES.Base.Application/Services/AGVService/Services/AGVThirdPartyService.cs Ver arquivo

@@ -0,0 +1,170 @@
using BPA.AGV;
using BPA.MES.Base.Application.Services.AGVService.Dtos;
using Furion.EventBus;
using Furion.JsonSerialization;
using Furion.RemoteRequest.Extensions;

namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// AGV第三方api
/// </summary>
[AllowAnonymous, NonUnify]
[ApiDescriptionSettings("AGV管理", Name = "AgvThirdParty", Tag = "AGV第三方api", KeepName = true, SplitCamelCase = true, KeepVerb = true)]
public class AGVThirdPartyService : IAGVThirdPartyService, ITransient, IDynamicApiController
{
private readonly AGVHandler _aGVHandler;
private readonly IMQTTService _MQTTService;
public AGVThirdPartyService(AGVHandler aGVHandler, IMQTTService MQTTService)
{
_aGVHandler = aGVHandler;
_MQTTService = MQTTService;
}

/// <summary>
/// 下发任务
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<KC_Response> Execute(KC_ExecuteRequest input)
{
List<KC_ExecuteRequest> cExecuteRequests = new();
if (string.IsNullOrEmpty(input.RobotJobId))
{
throw Oops.Bah("任务编号不能为空");
}
if (input.JobData != null)
input = new KC_ExecuteRequest
{
Url = string.IsNullOrEmpty(input.Url) ? App.GetConfig<string>("AGVUrl")+"/api/quicktron/wcs/standardized.robot.job.submit": input.Url + "/api/quicktron/wcs/standardized.robot.job.submit",
RobotJobId = input.RobotJobId,//任务号
WarehouseId = input.WarehouseId,//仓库编码 默认值1
JobPriority = input.JobPriority, //优先级 0-99 越高越先执行
JobPriorityType = input.JobPriorityType, //优先级类型 0 普通和1 强制.
JobType = input.JobType,//任务类型 用来滚筒点对点 POINT_ROLLER_MOVE n8H7jX
JobData = new KC_JobDataRequest
{
StartPoint = input.JobData.StartPoint, //起点
EndPoint = input.JobData.EndPoint,//终点
ContainerCode = input.JobData.ContainerCode,//桶号
AutoLoad = input.JobData.AutoLoad,//上料方式 自动/人工
EnableIOLoad = input.JobData.EnableIOLoad,//上料交互方式 //接口对接 false
AutoUnload = input.JobData.AutoUnload,//下料方式 true自动/false人工
EnableIOUnload = input.JobData.EnableIOUnload,//接口对接 false
LoadEquipmentId = input.JobData.LoadEquipmentId,//起点设备ID
UnloadEquipmentId = input.JobData.UnloadEquipmentId,//目标设备ID
}
};
cExecuteRequests.Add(input);
try
{
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}:{input.RobotJobId}接收到下发任务!");
var res = await input.Url.SetBody(cExecuteRequests).PostAsStringAsync();
return JSON.Deserialize<KC_Response>(res);
}
catch (Exception ex)
{
throw Oops.Bah(ex.Message);
}
}
/// <summary>
/// 取消任务
/// </summary>
/// <param name="kCCancelRequest"></param>
/// <returns></returns>
[HttpPost]
public async Task<KCResponse> Cancel(KCCancelRequest kCCancelRequest)
{
kCCancelRequest.Url = string.IsNullOrEmpty(kCCancelRequest.Url) ? App.GetConfig<string>("AGVUrl") + "/api/quicktron/wcs/standardized.robot.job.cancel" : kCCancelRequest.Url + "/api/quicktron/wcs/standardized.robot.job.cancel";
return await _aGVHandler.CancelAsync(kCCancelRequest);
}
/// <summary>
/// 上下料反馈给AGV接口
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<RollerJobResponse> RollerJobExecute(Roller_JobRequest input)
{
//http://[IP:Port]/api/quicktron/wcs/standardized.roller.job.upstream.response
input.Url = string.IsNullOrEmpty(input.Url) ? App.GetConfig<string>("AGVUrl") + "/api/quicktron/wcs/standardized.roller.job.upstream.response": input.Url+ "/api/quicktron/wcs/standardized.roller.job.upstream.response";
try
{
var res = await input.Url.SetBody(input).PostAsStringAsync();
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}:{input.JobId}上下料反馈给AGV接口!{res}");
return JSON.Deserialize<RollerJobResponse>(res);
}
catch (Exception ex)
{
return new RollerJobResponse() { Success = false };
}
}
/// <summary>
/// 任务反馈(暴露给AGV厂商)
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<AgvBody> ExecuteReply(AGVExecuteReplyRequest input)
{
try
{
var data = new AGVExecuteReplyMQTT()
{
Event = input.Body.Event,
};
bool res = await _MQTTService.MqttPublish(new MqttPublishDto(){ Payload= data, Topic = Topics.ExecuteReplyTopic, MessageId = MessageID.TaskState });
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}:接收到AGV反馈请求!", res.ToString());
AgvBody agvBody = new()
{
Header = input.Header,
Body = new AgvRetrun { Code = "SUCCESS", Success = res, Message = "SUCCESS", Data = null }
};
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}:AGV反馈消息!{JSON.Serialize(agvBody)}");
return agvBody;
}
catch (Exception ex)
{
AgvBody agvBody = new()
{
Header = input.Header,
Body = new AgvRetrun { Code = "SUCCESS", Success = false, Message = ex.Message, Data = null }
};
return agvBody;
}
}
/// <summary>
/// AGV上下料交互请求 (暴露给AGV厂商)
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost, AGV]
public async Task<AgvBody> LoadAndUnload(AGVLoadAndUnloadRequest input)
{
try
{
var data = new AGVLoadAndUnloadMQTT()
{
Event = input.Body.Event,
};
bool res = await _MQTTService.MqttPublish(new MqttPublishDto() { Payload= data, Topic = Topics.LoadAndUnloadTopic, MessageId = MessageID.LoadAndUnload });
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}:接收到AGV上下料交互请求!{res.ToString()}");
AgvBody agvBody = new()
{
Header = input.Header,
Body = new AgvRetrun { Code = "SUCCESS", Success = res, Message = "SUCCESS", Data = null }
};
return agvBody;
}
catch (Exception ex)
{
AgvBody agvBody = new()
{
Header = input.Header,
Body = new AgvRetrun { Code = "SUCCESS", Success = false, Message = ex.Message, Data = null }
};
return agvBody;
}
}
}
}

+ 115
- 0
backend/BPA.MES.Base.Application/Services/AGVService/Services/AgvLineService.cs Ver arquivo

@@ -0,0 +1,115 @@
namespace BPA.MES.Base.Application.Services.AGVService.Services
{
/// <summary>
/// 名 称 :AGV线路管理
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/8/7 10:03:21
/// 描 述 :
/// </summary>
[ApiDescriptionSettings("AGV管理", Name = "AgvLine", Tag = "AGV线路", KeepName = true, SplitCamelCase = true, KeepVerb = true)]
public class AgvLineService : IAgvLineService, ITransient, IDynamicApiController
{
private readonly ISqlSugarClient _dbContext;
public AgvLineService(ISqlSugarClient db)
{
_dbContext = db;
}
/// <summary>
/// 增加
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<bool> Add(AgvLineAddInput input)
{
var r_entity = await _dbContext.Queryable<AgvLineEntity>().FirstAsync(x => x.Name == input.Name);
if (r_entity != null)
{
throw Oops.Bah("名称已存在!");
}
AgvLineEntity entity = input.Adapt<AgvLineEntity>();
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(AgvLineDelInput input)
{
var res = await _dbContext.Deleteable<AgvLineEntity>().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<AgvLineOutput> Detail(string Id)
{
var entity = await _dbContext.Queryable<AgvLineEntity>().FirstAsync(x => x.Id == Id);
AgvLineOutput output = entity.Adapt<AgvLineOutput>();
return output;
}
/// <summary>
/// 列表
/// </summary>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
[HttpPost]
public async Task<List<AgvLineOutput>> List(AgvLineQueryInput input)
{
var entity = await _dbContext.Queryable<AgvLineEntity>().ToListAsync();
List<AgvLineOutput> output = entity.Adapt<List<AgvLineOutput>>();
return output;
}
/// <summary>
/// 分页
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<SqlSugarPagedList<AgvLineOutput>> PagedList(AgvLineQueryPageInput input)
{
var entity = await _dbContext.Queryable<AgvLineEntity>()
.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<AgvLineOutput> output = entity.Adapt<SqlSugarPagedList<AgvLineOutput>>();
return output;
}
/// <summary>
/// 下拉
/// </summary>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
[HttpGet]
public async Task<dynamic> SelectList()
{
var entity = await _dbContext.Queryable<AgvLineEntity>().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(AgvLineUpdateInput input)
{
var entity = await _dbContext.Queryable<AgvLineEntity>().Where(x => x.Id == input.Id).FirstAsync();
entity = input.Adapt<AgvLineEntity>();
var res = await _dbContext.Updateable(entity).IgnoreColumns(true).ExecuteCommandHasChangeAsync();
return res;
}
}
}

+ 115
- 0
backend/BPA.MES.Base.Application/Services/AGVService/Services/AgvPointService.cs Ver arquivo

@@ -0,0 +1,115 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :AGV点位管理
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/8/7 10:03:37
/// 描 述 :
/// </summary>
[ApiDescriptionSettings("AGV管理", Name = "AgvPoint", Tag = "AGV点位", KeepName = true, SplitCamelCase = true, KeepVerb = true)]
public class AgvPointService : IAgvPointService, ITransient, IDynamicApiController
{
private readonly ISqlSugarClient _dbContext;
public AgvPointService(ISqlSugarClient db)
{
_dbContext = db;
}
/// <summary>
/// 增加
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<bool> Add(AgvPointAddInput input)
{
var r_entity = await _dbContext.Queryable<AgvPointEntity>().FirstAsync(x => x.Name == input.Name);
if (r_entity != null)
{
throw Oops.Bah("名称已存在!");
}
AgvPointEntity entity = input.Adapt<AgvPointEntity>();
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(AgvPointDelInput input)
{
var res = await _dbContext.Deleteable<AgvPointEntity>().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<AgvPointOutput> Detail(string Id)
{
var entity = await _dbContext.Queryable<AgvPointEntity>().FirstAsync(x => x.Id == Id);
AgvPointOutput output = entity.Adapt<AgvPointOutput>();
return output;
}
/// <summary>
/// 列表
/// </summary>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
[HttpPost]
public async Task<List<AgvPointOutput>> List(AgvPointQueryInput input)
{
var entity = await _dbContext.Queryable<AgvPointEntity>().ToListAsync();
List<AgvPointOutput> output = entity.Adapt<List<AgvPointOutput>>();
return output;
}
/// <summary>
/// 分页
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<SqlSugarPagedList<AgvPointOutput>> PagedList(AgvPointQueryPageInput input)
{
var entity = await _dbContext.Queryable<AgvPointEntity>()
.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<AgvPointOutput> output = entity.Adapt<SqlSugarPagedList<AgvPointOutput>>();
return output;
}
/// <summary>
/// 下拉
/// </summary>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
[HttpGet]
public async Task<dynamic> SelectList()
{
var entity = await _dbContext.Queryable<AgvPointEntity>().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(AgvPointUpdateInput input)
{
var entity = await _dbContext.Queryable<AgvPointEntity>().Where(x => x.Id == input.Id).FirstAsync();
entity = input.Adapt<AgvPointEntity>();
var res = await _dbContext.Updateable(entity).IgnoreColumns(true).ExecuteCommandHasChangeAsync();
return res;
}
}
}

+ 40
- 0
backend/BPA.MES.Base.Application/Services/AGVService/Services/IAGVThirdPartyService.cs Ver arquivo

@@ -0,0 +1,40 @@
using BPA.AGV;
using BPA.MES.Base.Application.Services.AGVService.Dtos;

namespace BPA.MES.Base.Application.Services
{
public interface IAGVThirdPartyService
{

/// <summary>
/// 下发任务
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task<KC_Response> Execute(KC_ExecuteRequest input);
/// <summary>
/// 取消任务
/// </summary>
/// <param name="kCCancelRequest"></param>
/// <returns></returns>
Task<KCResponse> Cancel(KCCancelRequest kCCancelRequest);
/// <summary>
/// 任务回调
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task<AgvBody> ExecuteReply(AGVExecuteReplyRequest input);
/// <summary>
/// AGV上下料交互请求
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task<AgvBody> LoadAndUnload(AGVLoadAndUnloadRequest input);
/// <summary>
/// 上下料反馈给AGV接口
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task<RollerJobResponse> RollerJobExecute(Roller_JobRequest input);
}
}

+ 43
- 0
backend/BPA.MES.Base.Application/Services/AGVService/Services/IAgvLineService.cs Ver arquivo

@@ -0,0 +1,43 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/8/7 10:02:54
/// 描 述 :
/// </summary>
public interface IAgvLineService
{
/// <summary>
/// 增加
/// </summary>
/// <returns></returns>
Task<bool> Add(AgvLineAddInput input);
/// <summary>
/// 移除
/// </summary>
/// <returns></returns>
Task<bool> Del(AgvLineDelInput input);
/// <summary>
/// 更新
/// </summary>
/// <returns></returns>
Task<bool> Update(AgvLineUpdateInput input);
/// <summary>
/// 不分页列表
/// </summary>
/// <returns></returns>
Task<List<AgvLineOutput>> List(AgvLineQueryInput input);
/// <summary>
/// 分页列表
/// </summary>
/// <returns></returns>
Task<SqlSugarPagedList<AgvLineOutput>> PagedList(AgvLineQueryPageInput input);
/// <summary>
/// 查询单条
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
Task<AgvLineOutput> Detail(string Id);
}
}

+ 43
- 0
backend/BPA.MES.Base.Application/Services/AGVService/Services/IAgvPointService.cs Ver arquivo

@@ -0,0 +1,43 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :AVG点位
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/8/7 10:03:06
/// 描 述 :
/// </summary>
public interface IAgvPointService
{
/// <summary>
/// 增加
/// </summary>
/// <returns></returns>
Task<bool> Add(AgvPointAddInput input);
/// <summary>
/// 移除
/// </summary>
/// <returns></returns>
Task<bool> Del(AgvPointDelInput input);
/// <summary>
/// 更新
/// </summary>
/// <returns></returns>
Task<bool> Update(AgvPointUpdateInput input);
/// <summary>
/// 不分页列表
/// </summary>
/// <returns></returns>
Task<List<AgvPointOutput>> List(AgvPointQueryInput input);
/// <summary>
/// 分页列表
/// </summary>
/// <returns></returns>
Task<SqlSugarPagedList<AgvPointOutput>> PagedList(AgvPointQueryPageInput input);
/// <summary>
/// 查询单条
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
Task<AgvPointOutput> Detail(string Id);
}
}

+ 50
- 0
backend/BPA.MES.Base.Application/Services/BaseService.cs Ver arquivo

@@ -0,0 +1,50 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/17 16:13:10
/// 描 述 :
/// </summary>
public class BaseService: ITransient, IDynamicApiController
{
private readonly ISqlSugarClient _dbContext;
public BaseService(ISqlSugarClient db)
{
_dbContext = db;
}
/// <summary>
/// 初始化数据库
/// </summary>
/// <returns></returns>
public string CreateDB()
{
var types = Assembly.Load("BPA.MES.Base.Application").GetTypes()
.Where(x => x.GetCustomAttribute<SugarTable>() != null
&& x.Namespace == "BPA.MES.Base.Application.Entitys").ToArray();
_dbContext.CodeFirst.InitTables(types);
return "成功";
}
/// <summary>
/// 测试
/// </summary>
[AllowAnonymous]
public void Test()
{
//Type personType = Type.GetType("BPA.MES.Base.Application, DictDataAddInput");
//object person = Activator.CreateInstance(personType);
Type type = Type.GetType("BPA.MES.Base.Application.Services.DictService.Dtos");
string fullName = "BPA.MES.Base.Application.Services.DictDataAddInput";
Type? instanceClass = Assembly.Load("BPA.MES.Base.Application").GetType(fullName);
var myInstance = instanceClass?.Assembly.CreateInstance(fullName);
}
}
}

+ 75
- 0
backend/BPA.MES.Base.Application/Services/BucketInfoService/Dtos/BucketInfoDto.cs Ver arquivo

@@ -0,0 +1,75 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/17 15:43:00
/// 描 述 :
/// </summary>
public class BucketInfoDto
{
/// <summary>
/// 桶名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 桶编号
/// </summary>
public string Code { get; set; }
}
/// <summary>
/// 增加
/// </summary>
public class BucketInfoAddInput : BucketInfoDto
{

}
/// <summary>
/// 更新
/// </summary>
public class BucketInfoUpdateInput : BucketInfoDto
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
}
/// <summary>
/// 删除
/// </summary>
public class BucketInfoDelInput
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
}
/// <summary>
/// 分页
/// </summary>
public class BucketInfoQueryPageInput : RequestPage
{
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 编码
/// </summary>
public string Code { get; set; }
}
/// <summary>
/// 输出
/// </summary>
public class BucketInfoOutput : BucketInfoDto
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
/// <summary>
/// 当前原料名称
/// </summary>
public string MaterialName { get; set; }
}
}

+ 135
- 0
backend/BPA.MES.Base.Application/Services/BucketInfoService/Dtos/BucketMaterialsRecordDto.cs Ver arquivo

@@ -0,0 +1,135 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/17 17:29:52
/// 描 述 :
/// </summary>
public class BucketMaterialsRecordDto
{
/// <summary>
/// 桶Id
/// </summary>
public string BucketId { get; set; }
/// <summary>
/// 物料Id
/// </summary>
public string MaterialId { get; set; }
/// <summary>
/// 添加时间
/// </summary>
public DateTime? CreateTime { get; set; }
/// <summary>
/// 物料重量
/// </summary>
public string Weight { get; set; }
/// <summary>
/// 工单Id
/// </summary>
public string WorkId { get; set; }
}
public class BucketMaterialsRecordAddInput : BucketMaterialsRecordDto
{

}
/// <summary>
/// 更新
/// </summary>
public class BucketMaterialsRecordUpdateInput : BucketMaterialsRecordDto
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
}
/// <summary>
/// 删除
/// </summary>
public class BucketMaterialsRecordDelInput
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
}
/// <summary>
/// 不分页
/// </summary>
public class BucketMaterialsRecordQueryInput
{
/// <summary>
/// 工单Id
/// </summary>
public string WorkId { get; set; }
/// <summary>
/// 桶Id
/// </summary>
public string BucketId { get; set; }
/// <summary>
/// 桶编号
/// </summary>
public string BucketCode { get; set; }
}
/// <summary>
/// 分页
/// </summary>
public class BucketMaterialsRecordQueryPageInput : RequestPage
{
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 桶Id
/// </summary>
public string BucketId { get; set; }
}

/// <summary>
/// 清空桶
/// </summary>
public class BucketClearInput
{
public string BucketId { get; set; }
}

/// <summary>
/// 输出
/// </summary>
public class BucketMaterialsRecordOutput : BucketMaterialsRecordDto
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
/// <summary>
/// 原料名称
/// </summary>
public string MaterialName { get; set; }
/// <summary>
/// 桶名称
/// </summary>
public string BucketName { get; set; }
/// <summary>
/// 工单名称
/// </summary>
public string WorkName { get; set; }
/// <summary>
/// 桶编码
/// </summary>
public string BucketCode { get; set; }
/// <summary>
/// 计划重量
/// </summary>
public string SchemeWeight { get; set; }
/// <summary>
/// 第几锅
/// </summary>
public string PotNum { get; set; }
}
}

+ 168
- 0
backend/BPA.MES.Base.Application/Services/BucketInfoService/Services/BucketInfoService.cs Ver arquivo

@@ -0,0 +1,168 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :桶服务
/// 创 建 人 :yangxiao
/// 创建时间 :2023/3/2 16:11:04
/// 描 述 :基础数据管理
/// </summary>
[ApiDescriptionSettings("基础数据管理", Order = 3, Tag = "桶服务", Name = "BucketInfo", KeepName = true, SplitCamelCase = true, KeepVerb = true)]
public class BucketInfoService : IBucketInfoService, ITransient, IDynamicApiController
{
private readonly ISqlSugarClient _dbContext;
public BucketInfoService(ISqlSugarClient db)
{
_dbContext = db;
}
/// <summary>
/// 增加
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<bool> Add(BucketInfoAddInput input)
{
var r_entity = await _dbContext.Queryable<Pztj_BucketInfoEntity>().FirstAsync(x => x.Name == input.Name || x.Code == input.Code);
if (r_entity != null)
{
throw Oops.Bah("名称已存在!");
}
Pztj_BucketInfoEntity entity = input.Adapt<Pztj_BucketInfoEntity>();
return await _dbContext.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandIdentityIntoEntityAsync();
}
/// <summary>
/// 新增并返回
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<Pztj_BucketInfoEntity> AddRetrun(BucketInfoAddInput input)
{
var r_entity = await _dbContext.Queryable<Pztj_BucketInfoEntity>().FirstAsync(x => x.Name == input.Name || x.Code == input.Code);
if (r_entity != null)
{
throw Oops.Bah("名称已存在!");
}
Pztj_BucketInfoEntity entity = input.Adapt<Pztj_BucketInfoEntity>();
var res = await _dbContext.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandIdentityIntoEntityAsync();
if (!res)
{
throw Oops.Bah("新增桶失败!");
}
return entity;
}
/// <summary>
/// 删除
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="input"></exception>
[HttpPost]
public async Task<bool> Del(BucketInfoDelInput input)
{
var res = await _dbContext.Deleteable<Pztj_BucketInfoEntity>().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<BucketInfoOutput> Detail(string Id)
{
var entity = await _dbContext.Queryable<Pztj_BucketInfoEntity>().FirstAsync(x => x.Id == Id);
BucketInfoOutput output = entity.Adapt<BucketInfoOutput>();
return output;
}
/// <summary>
/// 列表
/// </summary>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
[HttpGet]
public async Task<List<BucketInfoOutput>> List()
{
var entity = await _dbContext.Queryable<Pztj_BucketInfoEntity>().ToListAsync();
List<BucketInfoOutput> output = entity.Adapt<List<BucketInfoOutput>>();
return output;
}
/// <summary>
/// 分页
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<SqlSugarPagedList<BucketInfoOutput>> PagedList(BucketInfoQueryPageInput input)
{
var entity = await _dbContext.Queryable<Pztj_BucketInfoEntity>()
.LeftJoin<Pztj_BucketMaterialsRecordEntity>((a,b)=>a.Id==b.BucketId && b.Id == SqlFunc.Subqueryable<Pztj_BucketMaterialsRecordEntity>().Where(s => s.BucketId == a.Id).OrderByDesc(s => s.CreateTime).Select(s => s.Id))
.LeftJoin<Pztj_MaterialsInfoEntity>((a,b,c)=>b.MaterialId==c.Id)
.Select((a,b,c)=>new BucketInfoOutput
{
Id = a.Id.SelectAll(),
MaterialName = c.Name
})
.ToPagedListAsync(input.PageIndex, input.PageSize);
SqlSugarPagedList<BucketInfoOutput> output = entity.Adapt<SqlSugarPagedList<BucketInfoOutput>>();
return output;
}




/// <summary>
/// 下拉
/// </summary>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
[HttpGet]
public async Task<dynamic> SelectList()
{
var entity = await _dbContext.Queryable<Pztj_BucketInfoEntity>().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(BucketInfoUpdateInput input)
{
var isExit =await _dbContext.Queryable<Pztj_BucketInfoEntity>().Where(x => x.Id != input.Id && (x.Name == input.Name || x.Code == input.Code)).FirstAsync();
if (isExit != null)
{
throw Oops.Bah("名称或编码已存在!");
}
Pztj_BucketInfoEntity entity = input.Adapt<Pztj_BucketInfoEntity>();
var res = await _dbContext.Updateable(entity).IgnoreColumns(true).ExecuteCommandHasChangeAsync();
return res;
}
///// <summary>
///// 根据桶Id查询记录
///// </summary>
///// <param name="bucketId"></param>
///// <returns></returns>
//public async Task<BucketMaterialsRecordOutput> RecordList(string bucketId)
//{
// var entity = await _dbContext.Queryable<Pztj_BucketMaterialsRecordEntity>()
// .LeftJoin<Pztj_MaterialsInfoEntity>((a, b) => a.MaterialId == b.Id)
// .Select((a, b) => new BucketMaterialsRecordOutput
// {
// Id = a.Id.SelectAll(),
// MaterialName = b.Name
// })
// .ToListAsync();
// SqlSugarPagedList<BucketMaterialsRecordOutput> output = entity.Adapt<SqlSugarPagedList<BucketMaterialsRecordOutput>>();
// return output;
//}
}
}


+ 140
- 0
backend/BPA.MES.Base.Application/Services/BucketInfoService/Services/BucketMaterialsRecordServcie.cs Ver arquivo

@@ -0,0 +1,140 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :桶记录
/// 创 建 人 :yangxiao
/// 创建时间 :2023/3/2 16:11:04
/// 描 述 :基础数据管理
/// </summary>
[ApiDescriptionSettings("基础数据管理", Order = 3, Tag = "桶服务", Name = "BucketMaterialsRecord", KeepName = true, SplitCamelCase = true, KeepVerb = true)]
public class BucketMaterialsRecordServcie : IBucketMaterialsRecordService, ITransient, IDynamicApiController
{
private readonly ISqlSugarClient _dbContext;
public BucketMaterialsRecordServcie(ISqlSugarClient db)
{
_dbContext = db;
}
/// <summary>
/// 增加
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<bool> Add(BucketMaterialsRecordAddInput input)
{
Pztj_BucketMaterialsRecordEntity entity = input.Adapt<Pztj_BucketMaterialsRecordEntity>();
var work_entity =await _dbContext.Queryable<WorkInfoMaterialsRecordEntity>().FirstAsync(x => x.Id == input.MaterialId);
if (work_entity==null)
{
throw Oops.Bah("没有找到此物料信息!");
}
entity.WorkId = work_entity.WorkId;
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(BucketMaterialsRecordDelInput input)
{
var res = await _dbContext.Deleteable<Pztj_BucketMaterialsRecordEntity>().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<BucketMaterialsRecordOutput> Detail(string Id)
{
var entity = await _dbContext.Queryable<Pztj_BucketMaterialsRecordEntity>().FirstAsync(x => x.Id == Id);
BucketMaterialsRecordOutput output = entity.Adapt<BucketMaterialsRecordOutput>();
return output;
}
/// <summary>
/// 列表
/// </summary>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
[HttpPost]
public async Task<List<BucketMaterialsRecordOutput>> List(BucketMaterialsRecordQueryInput input)
{
var output = await _dbContext.Queryable<Pztj_BucketMaterialsRecordEntity>()
.LeftJoin<WorkInfoMaterialsRecordEntity>((a, b) => a.MaterialId == b.Id)
.LeftJoin<Pztj_BucketInfoEntity>((a, b, c) => a.BucketId == c.Id)
.LeftJoin<Pztj_WorkInfoEntity>((a,b,c,d)=>b.WorkId==d.Id)
.WhereIF(!string.IsNullOrEmpty(input.BucketId), (a, b, c) => a.BucketId == input.BucketId)
.WhereIF(!string.IsNullOrEmpty(input.WorkId), (a, b, c) => b.WorkId == b.WorkId)
.WhereIF(!string.IsNullOrEmpty(input.BucketCode),(a,b,c)=>c.Code==input.BucketCode)
.Select((a, b, c, d) => new BucketMaterialsRecordOutput
{
Id = a.Id,
MaterialId = a.MaterialId,
BucketId = a.BucketId,
Weight = a.Weight,
CreateTime = a.CreateTime,
SchemeWeight = b.Weight,
WorkId = d.Id,
MaterialName = b.MaterialName,
BucketName = c.Name,
WorkName = b.RecipeName,
PotNum = b.PotNum,
BucketCode = c.Code
})
.ToListAsync();
return output;
}
/// <summary>
/// 分页
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<SqlSugarPagedList<BucketMaterialsRecordOutput>> PagedList(BucketMaterialsRecordQueryPageInput input)
{
var entity = await _dbContext.Queryable<Pztj_BucketMaterialsRecordEntity>()
.LeftJoin<Pztj_BucketInfoEntity>((a,b)=>a.BucketId==b.Id)
.LeftJoin<Pztj_MaterialsInfoEntity>((a,b,c)=>a.MaterialId==c.Id)
.WhereIF(!string.IsNullOrEmpty(input.BucketId),(a,b,c)=>a.BucketId==input.BucketId)
.OrderByDescending((a,b,c)=>a.CreateTime)
.Select((a,b,c)=>new BucketMaterialsRecordOutput
{
Id = a.Id.SelectAll(),
MaterialName = c.Name,
BucketName = b.Name
})
.ToPagedListAsync(input.PageIndex, input.PageSize);
SqlSugarPagedList<BucketMaterialsRecordOutput> output = entity.Adapt<SqlSugarPagedList<BucketMaterialsRecordOutput>>();
return output;
}
/// <summary>
/// 更新
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
[HttpPost]
public async Task<bool> Update(BucketMaterialsRecordUpdateInput input)
{
Pztj_BucketMaterialsRecordEntity entity = input.Adapt<Pztj_BucketMaterialsRecordEntity>();
var res = await _dbContext.Updateable(entity).IgnoreColumns(true).ExecuteCommandHasChangeAsync();
return res;
}
/// <summary>
/// 清空桶
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<bool> Clear(BucketClearInput input)
{
var res = await _dbContext.Deleteable<Pztj_BucketMaterialsRecordEntity>().Where(x => x.BucketId == input.BucketId).ExecuteCommandHasChangeAsync();
return res;
}
}
}

+ 53
- 0
backend/BPA.MES.Base.Application/Services/BucketInfoService/Services/IBucketInfoService.cs Ver arquivo

@@ -0,0 +1,53 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/17 15:43:10
/// 描 述 :
/// </summary>
public interface IBucketInfoService
{
/// <summary>
/// 增加
/// </summary>
/// <returns></returns>
Task<bool> Add(BucketInfoAddInput input);
/// <summary>
/// 增加并返回数据
/// </summary>
/// <returns></returns>
Task<Pztj_BucketInfoEntity> AddRetrun(BucketInfoAddInput input);
/// <summary>
/// 移除
/// </summary>
/// <returns></returns>
Task<bool> Del(BucketInfoDelInput input);
/// <summary>
/// 更新
/// </summary>
/// <returns></returns>
Task<bool> Update(BucketInfoUpdateInput input);
/// <summary>
/// 不分页列表
/// </summary>
/// <returns></returns>
Task<List<BucketInfoOutput>> List();
/// <summary>
/// 分页列表
/// </summary>
/// <returns></returns>
Task<SqlSugarPagedList<BucketInfoOutput>> PagedList(BucketInfoQueryPageInput input);
/// <summary>
/// 下拉列表
/// </summary>
/// <returns></returns>
Task<dynamic> SelectList();
/// <summary>
/// 查询单条
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
Task<BucketInfoOutput> Detail(string Id);
}
}

+ 49
- 0
backend/BPA.MES.Base.Application/Services/BucketInfoService/Services/IBucketMaterialsRecordService.cs Ver arquivo

@@ -0,0 +1,49 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :桶记录
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/17 17:37:03
/// 描 述 :
/// </summary>
public interface IBucketMaterialsRecordService
{
/// <summary>
/// 增加
/// </summary>
/// <returns></returns>
Task<bool> Add(BucketMaterialsRecordAddInput input);
/// <summary>
/// 移除
/// </summary>
/// <returns></returns>
Task<bool> Del(BucketMaterialsRecordDelInput input);
/// <summary>
/// 更新
/// </summary>
/// <returns></returns>
Task<bool> Update(BucketMaterialsRecordUpdateInput input);
/// <summary>
/// 不分页列表
/// </summary>
/// <returns></returns>
Task<List<BucketMaterialsRecordOutput>> List(BucketMaterialsRecordQueryInput input);
/// <summary>
/// 分页列表
/// </summary>
/// <returns></returns>
Task<SqlSugarPagedList<BucketMaterialsRecordOutput>> PagedList(BucketMaterialsRecordQueryPageInput input);
/// <summary>
/// 查询单条
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
Task<BucketMaterialsRecordOutput> Detail(string Id);
/// <summary>
/// 清空桶
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task<bool> Clear(BucketClearInput input);
}
}

+ 83
- 0
backend/BPA.MES.Base.Application/Services/CraftsInfoService/Dtos/CraftsInfoDto.cs Ver arquivo

@@ -0,0 +1,83 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :产品分组
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/3/10 13:59:43
/// 描 述 :
/// </summary>
public class CraftsInfoDto
{
/// <summary>
/// 工艺名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 设备类型 0:炒锅 1:反应釜
/// </summary>
public string DeviceProductId { get; set; }
/// <summary>
/// 工艺描述
/// </summary>
public string Description { get; set; }
}
/// <summary>
/// 增加
/// </summary>
public class CraftsInfoAddInput : CraftsInfoDto
{

}
/// <summary>
/// 更新
/// </summary>
public class CraftsInfoUpdateInput : CraftsInfoDto
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
}
/// <summary>
/// 删除
/// </summary>
public class CraftsInfoDelInput
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
}
/// <summary>
/// 分页
/// </summary>
public class CraftsInfoQueryPageInput : RequestPage
{
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 设备类型 0:炒锅 1:反应釜
/// </summary>
public string DeviceProductId { get; set; }
}
/// <summary>
/// 不分页
/// </summary>
public class CraftsInfoQueryInput
{

}
/// <summary>
/// 输出
/// </summary>
public class CraftsInfoOutput : CraftsInfoDto
{
/// <summary>
/// 主键
/// </summary>
/// <example></example>
public string Id { get; set; }
}
}

+ 100
- 0
backend/BPA.MES.Base.Application/Services/CraftsInfoService/Dtos/CraftsStepsDto.cs Ver arquivo

@@ -0,0 +1,100 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :产线管理
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/18 14:03:27
/// 描 述 :
/// </summary>
public class CraftsStepsDto
{
/// <summary>
/// 工艺Id
/// </summary>
public string CraftId { get; set; }
/// <summary>
/// 步骤
/// </summary>
public int Step { get; set; }
/// <summary>
/// 功能描述
/// </summary>
public string Description { get; set; }
/// <summary>
/// 设备产品功能Id
/// </summary>
public string DeviceProductFunctionId { get; set; }
/// <summary>
/// 功能参数
/// </summary>
public string Params { get; set; }
}
/// <summary>
/// 增加
/// </summary>
public class CraftsStepsAddInput : CraftsStepsDto
{

}
/// <summary>
/// 更新
/// </summary>
public class CraftsStepsUpdateInput : CraftsStepsDto
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
}
/// <summary>
/// 删除
/// </summary>
public class CraftsStepsDelInput
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
}
/// <summary>
/// 分页
/// </summary>
public class CraftsStepsQueryPageInput : RequestPage
{
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 工艺Id
/// </summary>
public string CraftId { get; set; }
}
/// <summary>
/// 输出
/// </summary>
public class CraftsStepsOutput : CraftsStepsDto
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
/// <summary>
/// 工艺名称
/// </summary>
public string CraftName { get; set; }
/// <summary>
/// 设备产品功能名称
/// </summary>
public string DeviceProductFunctionName { get; set; }
/// <summary>
/// 设备产品Id
/// </summary>
public string DeviceProductId { get; set; }
}
}

+ 130
- 0
backend/BPA.MES.Base.Application/Services/CraftsInfoService/Services/CraftsInfoService.cs Ver arquivo

@@ -0,0 +1,130 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :工艺信息
/// 创 建 人 :yangxiao
/// 创建时间 :2023/3/10 14:03:06
/// 描 述 :配方工艺管理
/// </summary>
[ApiDescriptionSettings("配方工艺管理", Order = 0, Tag = "工艺服务", Name = "CraftsInfo", KeepName = true, SplitCamelCase = true, KeepVerb = true)]
public class CraftsInfoService : ICraftsInfoService, ITransient, IDynamicApiController
{
private readonly ISqlSugarClient _dbContext;
public CraftsInfoService(ISqlSugarClient db)
{
_dbContext = db;
}
/// <summary>
/// 增加
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<bool> Add(CraftsInfoAddInput input)
{
Pztj_CraftsInfoEntity entity = await _dbContext.Queryable<Pztj_CraftsInfoEntity>().FirstAsync(x => x.Name ==input.Name);
if (entity != null)
{
throw Oops.Bah("名称已存在!");
}
entity = input.Adapt<Pztj_CraftsInfoEntity>();
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(CraftsInfoDelInput input)
{
//事务,删除所有子表
try
{
_dbContext.Ado.BeginTran();
await _dbContext.Deleteable<Pztj_CraftsInfoEntity>().Where(x => x.Id == input.Id).ExecuteCommandAsync();
await _dbContext.Deleteable<Pztj_CraftStepsEntity>().Where(x => x.CraftId == input.Id).ExecuteCommandAsync();
_dbContext.Ado.CommitTran();
}
catch (Exception ex)
{
_dbContext.Ado.RollbackTran();
throw Oops.Bah("删除失败!");
}
return true;
}
/// <summary>
/// 详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
[HttpGet]
public async Task<CraftsInfoOutput> Detail(string Id)
{
var entity = await _dbContext.Queryable<Pztj_CraftsInfoEntity>().FirstAsync();
CraftsInfoOutput output = entity.Adapt<CraftsInfoOutput>();
return output;
}
/// <summary>
/// 列表
/// </summary>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
[HttpPost, AllowAnonymous]
public async Task<List<CraftsInfoOutput>> List(CraftsInfoQueryInput input)
{
var entity = await _dbContext.Queryable<Pztj_CraftsInfoEntity>().ToListAsync();
List<CraftsInfoOutput> output = entity.Adapt<List<CraftsInfoOutput>>();
return output;
}
/// <summary>
/// 分页
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<SqlSugarPagedList<CraftsInfoOutput>> PagedList(CraftsInfoQueryPageInput input)
{
var entity = await _dbContext.Queryable<Pztj_CraftsInfoEntity>()
.WhereIF(!string.IsNullOrEmpty(input.DeviceProductId), x => x.DeviceProductId == input.DeviceProductId)
.WhereIF(!string.IsNullOrEmpty(input.Name),x=>x.Name.Contains(input.Name))
.ToPagedListAsync(input.PageIndex, input.PageSize);
SqlSugarPagedList<CraftsInfoOutput> output = entity.Adapt<SqlSugarPagedList<CraftsInfoOutput>>();
return output;
}
/// <summary>
/// 下拉
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task<dynamic> SelectList()
{
var entity = await _dbContext.Queryable<Pztj_CraftsInfoEntity>().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(CraftsInfoUpdateInput input)
{
var entity = await _dbContext.Queryable<Pztj_CraftsInfoEntity>().FirstAsync(x => x.Id != input.Id && x.Name == input.Name);
if (entity != null)
{
throw Oops.Bah("名称已存在!");
}
entity = input.Adapt<Pztj_CraftsInfoEntity>();
var res = await _dbContext.Updateable(entity).IgnoreColumns(true).ExecuteCommandHasChangeAsync();
return res;
}
}
}

+ 144
- 0
backend/BPA.MES.Base.Application/Services/CraftsInfoService/Services/CraftsStepsService.cs Ver arquivo

@@ -0,0 +1,144 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :工艺路线服务
/// 创 建 人 :yangxiao
/// 创建时间 :2023/3/2 16:11:04
/// 描 述 :CraftsInfo 工艺管理 CraftsSteps工艺步骤管理
/// </summary>
[ApiDescriptionSettings("配方工艺管理", Order = 0, Tag = "工艺服务", Name = "CraftsSteps", KeepName = true, SplitCamelCase = true, KeepVerb = true)]
public class CraftsStepsService : ICraftsStepsService, ITransient, IDynamicApiController
{
private readonly ISqlSugarClient _dbContext;
public CraftsStepsService(ISqlSugarClient db)
{
_dbContext = db;
}
/// <summary>
/// 增加
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<bool> Add(CraftsStepsAddInput input)
{
var step = await _dbContext.Queryable<Pztj_CraftStepsEntity>().Where(x=>x.CraftId==input.CraftId).MaxAsync(x => x.Step);
Pztj_CraftStepsEntity entity = input.Adapt<Pztj_CraftStepsEntity>();
entity.Step = step+1;
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(CraftsStepsDelInput input)
{
var stepItem = await _dbContext.Queryable<Pztj_CraftStepsEntity>().Where(x => x.Id == input.Id).FirstAsync();
string craftsId = stepItem.CraftId;
int step = stepItem.Step;
var res = await _dbContext.Deleteable<Pztj_CraftStepsEntity>().Where(x => x.Id == input.Id).ExecuteCommandHasChangeAsync();
if (res)
{
var stepList = await _dbContext.Queryable<Pztj_CraftStepsEntity>().Where(x => x.CraftId == craftsId).OrderBy(x=>x.Step).ToListAsync();
for (int i = 0; i < stepList.Count; i++)
{
stepList[i].Step = i + 1;
}
await _dbContext.Updateable(stepList).ExecuteCommandAsync();
}
return res;
}
/// <summary>
/// 详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
[HttpGet]
public async Task<CraftsStepsOutput> Detail(string Id)
{
var entity = await _dbContext.Queryable<Pztj_CraftStepsEntity>().FirstAsync(x => x.Id == Id);
CraftsStepsOutput output = entity.Adapt<CraftsStepsOutput>();
return output;
}
/// <summary>
/// 列表
/// </summary>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
[HttpGet]
public async Task<List<CraftsStepsOutput>> List()
{
var entity = await _dbContext.Queryable<Pztj_CraftStepsEntity>().ToListAsync();
List<CraftsStepsOutput> output = entity.Adapt<List<CraftsStepsOutput>>();
return output;
}
/// <summary>
/// 分页
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<SqlSugarPagedList<CraftsStepsOutput>> PagedList(CraftsStepsQueryPageInput input)
{
var output = await _dbContext.Queryable<Pztj_CraftStepsEntity>()
.LeftJoin<DeviceProductFunctionEntity>((a,b)=>a.DeviceProductFunctionId==b.Id)
.WhereIF(!string.IsNullOrEmpty(input.CraftId), (a, b) => a.CraftId == input.CraftId)
.OrderBy((a, b) => a.Step)
.Select((a,b)=>new CraftsStepsOutput
{
Id = a.Id.SelectAll(),
DeviceProductFunctionName = b.Name,
DeviceProductFunctionId = a.DeviceProductFunctionId,
DeviceProductId = b.DeviceProductId
})
.ToPagedListAsync(input.PageIndex, input.PageSize);
return output;
}
/// <summary>
/// 下拉
/// </summary>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
[HttpGet]
public async Task<dynamic> SelectList()
{
var entity = await _dbContext.Queryable<Pztj_CraftStepsEntity>().Select(x => new
{
key = x.Id,
value = x.Description
}).ToListAsync();
return entity;
}
/// <summary>
/// 更新
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
[HttpPost]
public async Task<bool> Update(CraftsStepsUpdateInput input)
{
Pztj_CraftStepsEntity entity = input.Adapt<Pztj_CraftStepsEntity>();
var res = await _dbContext.Updateable(entity).IgnoreColumns(it => it.Step).IgnoreColumns(true).ExecuteCommandHasChangeAsync();
return res;
}
/// <summary>
/// 批量更新
/// </summary>
/// <param name="inputs"></param>
/// <returns></returns>
[HttpPost]
public async Task<bool> BatchUpdate(List<CraftsStepsUpdateInput> inputs)
{
List<Pztj_CraftStepsEntity> entity = inputs.Adapt<List<Pztj_CraftStepsEntity>>();
var res = await _dbContext.Updateable(entity).ExecuteCommandHasChangeAsync();
return res;
}
}
}


+ 48
- 0
backend/BPA.MES.Base.Application/Services/CraftsInfoService/Services/ICraftsInfoService.cs Ver arquivo

@@ -0,0 +1,48 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :工艺信息
/// 创 建 人 :yangxiao
/// 创建时间 :2023/3/10 14:03:21
/// 描 述 :
/// </summary>
public interface ICraftsInfoService
{
/// <summary>
/// 增加
/// </summary>
/// <returns></returns>
Task<bool> Add(CraftsInfoAddInput input);
/// <summary>
/// 移除
/// </summary>
/// <returns></returns>
Task<bool> Del(CraftsInfoDelInput input);
/// <summary>
/// 更新
/// </summary>
/// <returns></returns>
Task<bool> Update(CraftsInfoUpdateInput input);
/// <summary>
/// 不分页列表
/// </summary>
/// <returns></returns>
Task<List<CraftsInfoOutput>> List(CraftsInfoQueryInput Input);
/// <summary>
/// 分页列表
/// </summary>
/// <returns></returns>
Task<SqlSugarPagedList<CraftsInfoOutput>> PagedList(CraftsInfoQueryPageInput input);
/// <summary>
/// 下拉列表
/// </summary>
/// <returns></returns>
Task<dynamic> SelectList();
/// <summary>
/// 查询单条
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
Task<CraftsInfoOutput> Detail(string Id);
}
}

+ 54
- 0
backend/BPA.MES.Base.Application/Services/CraftsInfoService/Services/ICraftsStepsService.cs Ver arquivo

@@ -0,0 +1,54 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :产线管理
/// 创 建 人 :yangxiao
/// 创建时间 :2023/7/18 14:05:16
/// 描 述 :
/// </summary>
public interface ICraftsStepsService
{
/// <summary>
/// 增加
/// </summary>
/// <returns></returns>
Task<bool> Add(CraftsStepsAddInput input);
/// <summary>
/// 移除
/// </summary>
/// <returns></returns>
Task<bool> Del(CraftsStepsDelInput input);
/// <summary>
/// 更新
/// </summary>
/// <returns></returns>
Task<bool> Update(CraftsStepsUpdateInput input);
/// <summary>
/// 批量更新
/// </summary>
/// <param name="inputs"></param>
/// <returns></returns>
Task<bool> BatchUpdate(List<CraftsStepsUpdateInput> inputs);
/// <summary>
/// 不分页列表
/// </summary>
/// <returns></returns>
Task<List<CraftsStepsOutput>> List();
/// <summary>
/// 分页列表
/// </summary>
/// <returns></returns>
Task<SqlSugarPagedList<CraftsStepsOutput>> PagedList(CraftsStepsQueryPageInput input);
/// <summary>
/// 下拉列表
/// </summary>
/// <returns></returns>
Task<dynamic> SelectList();
/// <summary>
/// 查询单条
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
Task<CraftsStepsOutput> Detail(string Id);
}
}

+ 87
- 0
backend/BPA.MES.Base.Application/Services/DeviceProductService/Dtos/DeviceProductDto.cs Ver arquivo

@@ -0,0 +1,87 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :设备产品信息
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/8/2 16:19:15
/// 描 述 :
/// </summary>
public class DeviceProductDto
{
/// <summary>
/// 设备产品名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 设备产品编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 设备产品描述
/// </summary>
public string Description { get; set; }
}
/// <summary>
/// 增加
/// </summary>
public class DeviceProductAddInput : DeviceProductDto
{

}
/// <summary>
/// 修改
/// </summary>
public class DeviceProductUpdateInput : DeviceProductDto
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
}
/// <summary>
/// 刪除
/// </summary>
public class DeviceProductDelInput
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
}
/// <summary>
/// 普通查询条件
/// </summary>
public class DeviceProductQueryInput
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
}
/// <summary>
/// 分页查询条件
/// </summary>
public class DeviceProductQueryPageInput : RequestPage
{

/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 编码
/// </summary>
public string Code { get; set; }
}
/// <summary>
/// 输出
/// </summary>
public class DeviceProductOutput : DeviceProductDto
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
//下面增加多的数据
}
}

+ 111
- 0
backend/BPA.MES.Base.Application/Services/DeviceProductService/Dtos/DeviceProductFunctionDto.cs Ver arquivo

@@ -0,0 +1,111 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :设备产品模型功能
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/31 18:04:53
/// 描 述 :
/// </summary>
public class DeviceProductFunctionDto
{
/// <summary>
/// 设备产品Id
/// </summary>
public string DeviceProductId { get; set; }
/// <summary>
/// 功能名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 功能编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 描述
/// </summary>
public string Description { get; set; }
/// <summary>
/// 方法参数
/// </summary>
public string Params { get; set; }
}
/// <summary>
/// 增加
/// </summary>
public class DeviceProductFunctionAddInput : DeviceProductFunctionDto
{

}
/// <summary>
/// 修改
/// </summary>
public class DeviceProductFunctionUpdateInput : DeviceProductFunctionDto
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
}
/// <summary>
/// 刪除
/// </summary>
public class DeviceProductFunctionDelInput
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
}
/// <summary>
/// 普通查询条件
/// </summary>
public class DeviceProductFunctionQueryInput
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
/// <summary>
/// 设备产品Id
/// </summary>
public string DeviceProductId { get; set; }
/// <summary>
/// 设备产品名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 设备产品编号
/// </summary>
public string Code { get; set; }
}
/// <summary>
/// 分页查询条件
/// </summary>
public class DeviceProductFunctionQueryPageInput : RequestPage
{

/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 设备产品Id
/// </summary>
public string DeviceProductId { get; set; }
}
/// <summary>
/// 输出
/// </summary>
public class DeviceProductFunctionOutput : DeviceProductFunctionDto
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
//下面增加多的数据
}
}

+ 91
- 0
backend/BPA.MES.Base.Application/Services/DeviceProductService/Dtos/DeviceProductParmDto.cs Ver arquivo

@@ -0,0 +1,91 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :设备产品参数
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/31 18:04:53
/// 描 述 :
/// </summary>
public class DeviceProductParmDto
{
/// <summary>
/// 设备产品Id
/// </summary>
public string DeviceProductId { get; set; }
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 描述
/// </summary>
public string Description { get; set; }
}
/// <summary>
/// 增加
/// </summary>
public class DeviceProductParmAddInput : DeviceProductParmDto
{

}
/// <summary>
/// 修改
/// </summary>
public class DeviceProductParmUpdateInput : DeviceProductParmDto
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
}
/// <summary>
/// 刪除
/// </summary>
public class DeviceProductParmDelInput
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
}
/// <summary>
/// 普通查询条件
/// </summary>
public class DeviceProductParmQueryInput
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
}
/// <summary>
/// 分页查询条件
/// </summary>
public class DeviceProductParmQueryPageInput : RequestPage
{

/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 编码
/// </summary>
public string Code { get; set; }
}
/// <summary>
/// 输出
/// </summary>
public class DeviceProductParmOutput : DeviceProductParmDto
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
//下面增加多的数据
}
}

+ 128
- 0
backend/BPA.MES.Base.Application/Services/DeviceProductService/Services/DeviceProductFunctionService.cs Ver arquivo

@@ -0,0 +1,128 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :设备产品功能服务
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/31 18:03:25
/// 描 述 :
/// </summary>
[ApiDescriptionSettings("设备产品模型", Name = "DeviceProductFunction", Tag = "设备产品功能", KeepName = true, SplitCamelCase = true, KeepVerb = true)]
public class DeviceProductFunctionService : IDeviceProductFunctionService, ITransient, IDynamicApiController
{
private readonly ISqlSugarClient _dbContext;
public DeviceProductFunctionService(ISqlSugarClient db)
{
_dbContext = db;
}
/// <summary>
/// 增加
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<bool> Add(DeviceProductFunctionAddInput input)
{
var r_entity = await _dbContext.Queryable<DeviceProductFunctionEntity>().Where(x=>x.DeviceProductId==input.DeviceProductId && x.Name == input.Name).FirstAsync();
if (r_entity != null)
{
throw Oops.Bah("名称已存在!");
}
DeviceProductFunctionEntity entity = input.Adapt<DeviceProductFunctionEntity>();
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(DeviceProductFunctionDelInput input)
{
var res = await _dbContext.Deleteable<DeviceProductFunctionEntity>().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<DeviceProductFunctionOutput> Detail(string Id)
{
var entity = await _dbContext.Queryable<DeviceProductFunctionEntity>().FirstAsync(x => x.Id == Id);
DeviceProductFunctionOutput output = entity.Adapt<DeviceProductFunctionOutput>();
return output;
}
/// <summary>
/// 列表
/// </summary>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
[HttpPost]
public async Task<List<DeviceProductFunctionOutput>> List(DeviceProductFunctionQueryInput input)
{
var entity = await _dbContext.Queryable<DeviceProductFunctionEntity>()
.WhereIF(!string.IsNullOrEmpty(input.DeviceProductId), x => x.DeviceProductId==input.DeviceProductId)
.WhereIF(!string.IsNullOrEmpty(input.Name), x => x.Name.Contains(input.Name))
.WhereIF(!string.IsNullOrEmpty(input.Code), x => x.Code.Contains(input.Code))
.ToListAsync();
List<DeviceProductFunctionOutput> output = entity.Adapt<List<DeviceProductFunctionOutput>>();
return output;
}
/// <summary>
/// 分页
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<SqlSugarPagedList<DeviceProductFunctionOutput>> PagedList(DeviceProductFunctionQueryPageInput input)
{
var entity = await _dbContext.Queryable<DeviceProductFunctionEntity>()
.WhereIF(!string.IsNullOrEmpty(input.Name), x => x.Name.Contains(input.Name))
.WhereIF(!string.IsNullOrEmpty(input.Code), x => x.Code.Contains(input.Code))
.WhereIF(!string.IsNullOrEmpty(input.DeviceProductId),x=>x.DeviceProductId==input.DeviceProductId)
.ToPagedListAsync(input.PageIndex, input.PageSize);
SqlSugarPagedList<DeviceProductFunctionOutput> output = entity.Adapt<SqlSugarPagedList<DeviceProductFunctionOutput>>();
return output;
}
/// <summary>
/// 下拉
/// </summary>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
[HttpGet]
public async Task<dynamic> SelectList()
{
var entity = await _dbContext.Queryable<DeviceProductFunctionEntity>().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(DeviceProductFunctionUpdateInput input)
{

var isEntity = await _dbContext.Queryable<DeviceProductFunctionEntity>()
.Where(x =>x.Id != input.Id && x.DeviceProductId == input.DeviceProductId && x.Name == input.Name).FirstAsync();
if (isEntity != null)
{
throw Oops.Bah("名称已存在!");
}
var entity = await _dbContext.Queryable<DeviceProductFunctionEntity>().Where(x => x.Id == input.Id).FirstAsync();
entity = input.Adapt<DeviceProductFunctionEntity>();
var res = await _dbContext.Updateable(entity).IgnoreColumns(true).ExecuteCommandHasChangeAsync();
return res;
}
}
}

+ 115
- 0
backend/BPA.MES.Base.Application/Services/DeviceProductService/Services/DeviceProductParmService.cs Ver arquivo

@@ -0,0 +1,115 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :设备参数
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/31 18:03:25
/// 描 述 :
/// </summary>
[ApiDescriptionSettings("设备产品模型", Name = "DeviceProductParm", Tag = "设备产品参数", KeepName = true, SplitCamelCase = true, KeepVerb = true)]
public class DeviceProductParmService : IDeviceProductParmService, ITransient, IDynamicApiController
{
private readonly ISqlSugarClient _dbContext;
public DeviceProductParmService(ISqlSugarClient db)
{
_dbContext = db;
}
/// <summary>
/// 增加
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<bool> Add(DeviceProductParmAddInput input)
{
var r_entity = await _dbContext.Queryable<DeviceProductParmEntity>().FirstAsync(x => x.Name == input.Name);
if (r_entity != null)
{
throw Oops.Bah("名称已存在!");
}
DeviceProductParmEntity entity = input.Adapt<DeviceProductParmEntity>();
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(DeviceProductParmDelInput input)
{
var res = await _dbContext.Deleteable<DeviceProductParmEntity>().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<DeviceProductParmOutput> Detail(string Id)
{
var entity = await _dbContext.Queryable<DeviceProductParmEntity>().FirstAsync(x => x.Id == Id);
DeviceProductParmOutput output = entity.Adapt<DeviceProductParmOutput>();
return output;
}
/// <summary>
/// 列表
/// </summary>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
[HttpPost]
public async Task<List<DeviceProductParmOutput>> List(DeviceProductParmQueryInput input)
{
var entity = await _dbContext.Queryable<DeviceProductParmEntity>().ToListAsync();
List<DeviceProductParmOutput> output = entity.Adapt<List<DeviceProductParmOutput>>();
return output;
}
/// <summary>
/// 分页
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<SqlSugarPagedList<DeviceProductParmOutput>> PagedList(DeviceProductParmQueryPageInput input)
{
var entity = await _dbContext.Queryable<DeviceProductParmEntity>()
.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<DeviceProductParmOutput> output = entity.Adapt<SqlSugarPagedList<DeviceProductParmOutput>>();
return output;
}
/// <summary>
/// 下拉
/// </summary>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
[HttpGet]
public async Task<dynamic> SelectList()
{
var entity = await _dbContext.Queryable<DeviceProductParmEntity>().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(DeviceProductParmUpdateInput input)
{
var entity = await _dbContext.Queryable<DeviceProductParmEntity>().Where(x => x.Id == input.Id).FirstAsync();
entity = input.Adapt<DeviceProductParmEntity>();
var res = await _dbContext.Updateable(entity).IgnoreColumns(true).ExecuteCommandHasChangeAsync();
return res;
}
}
}

+ 127
- 0
backend/BPA.MES.Base.Application/Services/DeviceProductService/Services/DeviceProductService.cs Ver arquivo

@@ -0,0 +1,127 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :设备产品
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/31 18:03:25
/// 描 述 :
/// </summary>
[ApiDescriptionSettings("设备产品模型", Name = "DeviceProduct", Tag = "设备产品管理", KeepName = true, SplitCamelCase = true, KeepVerb = true)]
public class DeviceProductService : IDeviceProductService, ITransient, IDynamicApiController
{
private readonly ISqlSugarClient _dbContext;
public DeviceProductService(ISqlSugarClient db)
{
_dbContext = db;
}
/// <summary>
/// 增加
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<bool> Add(DeviceProductAddInput input)
{
var r_entity = await _dbContext.Queryable<DeviceProductEntity>().FirstAsync(x => x.Name == input.Name);
if (r_entity != null)
{
throw Oops.Bah("名称已存在!");
}
DeviceProductEntity entity = input.Adapt<DeviceProductEntity>();
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(DeviceProductDelInput input)
{
//事务,删除所有子表
try
{
_dbContext.Ado.BeginTran();
await _dbContext.Deleteable<DeviceProductEntity>().Where(x => x.Id == input.Id).ExecuteCommandAsync();
await _dbContext.Deleteable<DeviceProductFunctionEntity>().Where(x => x.DeviceProductId == input.Id).ExecuteCommandAsync();
_dbContext.Ado.CommitTran();
}
catch (Exception ex)
{
_dbContext.Ado.RollbackTran();
throw Oops.Bah("删除失败!");
}
return true;
}
/// <summary>
/// 详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
[HttpGet]
public async Task<DeviceProductOutput> Detail(string Id)
{
var entity = await _dbContext.Queryable<DeviceProductEntity>().FirstAsync(x => x.Id == Id);
DeviceProductOutput output = entity.Adapt<DeviceProductOutput>();
return output;
}
/// <summary>
/// 列表
/// </summary>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
[HttpPost]
public async Task<List<DeviceProductOutput>> List(DeviceProductQueryInput input)
{
var entity = await _dbContext.Queryable<DeviceProductEntity>().ToListAsync();
List<DeviceProductOutput> output = entity.Adapt<List<DeviceProductOutput>>();
return output;
}
/// <summary>
/// 分页
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<SqlSugarPagedList<DeviceProductOutput>> PagedList(DeviceProductQueryPageInput input)
{
var entity = await _dbContext.Queryable<DeviceProductEntity>()
.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<DeviceProductOutput> output = entity.Adapt<SqlSugarPagedList<DeviceProductOutput>>();
return output;
}
/// <summary>
/// 下拉
/// </summary>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
[HttpGet]
public async Task<dynamic> SelectList()
{
var entity = await _dbContext.Queryable<DeviceProductEntity>().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(DeviceProductUpdateInput input)
{
var entity = await _dbContext.Queryable<DeviceProductEntity>().Where(x => x.Id == input.Id).FirstAsync();
entity = input.Adapt<DeviceProductEntity>();
var res = await _dbContext.Updateable(entity).IgnoreColumns(true).ExecuteCommandHasChangeAsync();
return res;
}
}
}

+ 48
- 0
backend/BPA.MES.Base.Application/Services/DeviceProductService/Services/IDeviceProductFunctionService.cs Ver arquivo

@@ -0,0 +1,48 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :设备产品功能
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/31 18:02:57
/// 描 述 :
/// </summary>
public interface IDeviceProductFunctionService
{
/// <summary>
/// 增加
/// </summary>
/// <returns></returns>
Task<bool> Add(DeviceProductFunctionAddInput input);
/// <summary>
/// 删除
/// </summary>
/// <returns></returns>
Task<bool> Del(DeviceProductFunctionDelInput input);
/// <summary>
/// 更新
/// </summary>
/// <returns></returns>
Task<bool> Update(DeviceProductFunctionUpdateInput input);
/// <summary>
/// 不分页列表
/// </summary>
/// <returns></returns>
Task<List<DeviceProductFunctionOutput>> List(DeviceProductFunctionQueryInput input);
/// <summary>
/// 分页列表
/// </summary>
/// <returns></returns>
Task<SqlSugarPagedList<DeviceProductFunctionOutput>> PagedList(DeviceProductFunctionQueryPageInput input);
/// <summary>
/// 下拉列表
/// </summary>
/// <returns></returns>
Task<dynamic> SelectList();
/// <summary>
/// 查询单条
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
Task<DeviceProductFunctionOutput> Detail(string Id);
}
}

+ 48
- 0
backend/BPA.MES.Base.Application/Services/DeviceProductService/Services/IDeviceProductParmService.cs Ver arquivo

@@ -0,0 +1,48 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :设备产品参数
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/7/31 18:02:57
/// 描 述 :
/// </summary>
public interface IDeviceProductParmService
{
/// <summary>
/// 增加
/// </summary>
/// <returns></returns>
Task<bool> Add(DeviceProductParmAddInput input);
/// <summary>
/// 删除
/// </summary>
/// <returns></returns>
Task<bool> Del(DeviceProductParmDelInput input);
/// <summary>
/// 更新
/// </summary>
/// <returns></returns>
Task<bool> Update(DeviceProductParmUpdateInput input);
/// <summary>
/// 不分页列表
/// </summary>
/// <returns></returns>
Task<List<DeviceProductParmOutput>> List(DeviceProductParmQueryInput input);
/// <summary>
/// 分页列表
/// </summary>
/// <returns></returns>
Task<SqlSugarPagedList<DeviceProductParmOutput>> PagedList(DeviceProductParmQueryPageInput input);
/// <summary>
/// 下拉列表
/// </summary>
/// <returns></returns>
Task<dynamic> SelectList();
/// <summary>
/// 查询单条
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
Task<DeviceProductParmOutput> Detail(string Id);
}
}

+ 48
- 0
backend/BPA.MES.Base.Application/Services/DeviceProductService/Services/IDeviceProductService.cs Ver arquivo

@@ -0,0 +1,48 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :设备产品基础信息
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/8/2 16:19:35
/// 描 述 :
/// </summary>
public interface IDeviceProductService
{
/// <summary>
/// 增加
/// </summary>
/// <returns></returns>
Task<bool> Add(DeviceProductAddInput input);
/// <summary>
/// 删除
/// </summary>
/// <returns></returns>
Task<bool> Del(DeviceProductDelInput input);
/// <summary>
/// 更新
/// </summary>
/// <returns></returns>
Task<bool> Update(DeviceProductUpdateInput input);
/// <summary>
/// 不分页列表
/// </summary>
/// <returns></returns>
Task<List<DeviceProductOutput>> List(DeviceProductQueryInput input);
/// <summary>
/// 分页列表
/// </summary>
/// <returns></returns>
Task<SqlSugarPagedList<DeviceProductOutput>> PagedList(DeviceProductQueryPageInput input);
/// <summary>
/// 下拉列表
/// </summary>
/// <returns></returns>
Task<dynamic> SelectList();
/// <summary>
/// 查询单条
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
Task<DeviceProductOutput> Detail(string Id);
}
}

+ 99
- 0
backend/BPA.MES.Base.Application/Services/DeviceService/Dtos/DeviceRecipeDto.cs Ver arquivo

@@ -0,0 +1,99 @@
namespace BPA.MES.Base.Application.Services
{
/// <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; }
}
}

+ 88
- 0
backend/BPA.MES.Base.Application/Services/DeviceService/Dtos/DevicesInfoDto.cs Ver arquivo

@@ -0,0 +1,88 @@
namespace BPA.MES.Base.Application.Services
{
/// <summary>
/// 名 称 :设备Dto类
/// 创 建 人 :yangxiao
/// 创建时间 : 2023/3/2 16:12:06
/// 描 述 :
/// </summary>
public class DevicesInfoDto
{
/// <summary>
/// 名称
/// </summary>
/// <example>设备名称</example>
[Required(ErrorMessage = "名称不能为空")]
public string Name { get; set; }
/// <summary>
/// 编码
/// </summary>
[Required(ErrorMessage = "编码不能为空")]
public string Code { get; set; }
/// <summary>
/// 设备类型
/// </summary>
public string DeviceType { get; set; }
/// <summary>
/// 设备描述
/// </summary>
/// <example>设备描述</example>
public string Describe { get; set; }
/// <summary>
/// 设备维保时间
/// </summary>
/// <example>2023-7-17</example>
public string RepairDate { get; set; }
}
/// <summary>
/// 增加
/// </summary>
public class DevicesInfoAddInput : DevicesInfoDto
{

}
/// <summary>
/// 更新
/// </summary>
public class DevicesInfoUpdateInput : DevicesInfoDto
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
}
/// <summary>
/// 删除
/// </summary>
public class DevicesInfoDelInput
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
}
/// <summary>
/// 分页
/// </summary>
public class DevicesInfoQueryPageInput : RequestPage
{
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 编码
/// </summary>
public string Code { get; set; }
}
/// <summary>
/// 输出
/// </summary>
public class DevicesInfoOutput : DevicesInfoDto
{
/// <summary>
/// 主键
/// </summary>
public string Id { get; set; }
}
}

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff

Carregando…
Cancelar
Salvar