diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/EdiReceive/Interfaces/IImportRecordAppService.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/EdiReceive/Interfaces/IImportRecordAppService.cs
index b835209..2217244 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/EdiReceive/Interfaces/IImportRecordAppService.cs
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/EdiReceive/Interfaces/IImportRecordAppService.cs
@@ -60,9 +60,10 @@ namespace WY.NewJit.EdiReceive.Interfaces
///
/// 导入信息
///
- /// 导入文件流
+ /// 导入文件流
+ /// 是否强制执行
/// 执行成功返回真
- Task ImportAsync([FromForm] IFormFileCollection files);
+ Task ImportAsync([FromForm] IFormFileCollection files, bool forceExecute = false);
#endregion
}
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/AssemblyCfgs/Dtos/AssemblyCfgErpDto.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/AssemblyCfgs/Dtos/AssemblyCfgErpDto.cs
index a066c3d..6887f7d 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/AssemblyCfgs/Dtos/AssemblyCfgErpDto.cs
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/AssemblyCfgs/Dtos/AssemblyCfgErpDto.cs
@@ -46,6 +46,22 @@ namespace WY.NewJit.MsgBaseData
[ImporterHeader(Name = "长描述")]
public virtual string GroupCode { get; set; }
+
+ ///
+ /// 规格说明
+ ///
+ [ExporterHeader(DisplayName = "规格说明")]
+ [ImporterHeader(Name = "规格说明")]
+ public virtual string SpecExplain { get; set; }
+
+
+ ///
+ /// 颜色说明
+ ///
+ [ExporterHeader(DisplayName = "颜色说明")]
+ [ImporterHeader(Name = "颜色说明")]
+ public virtual string ColorExplain { get; set; }
+
///
/// 车型
///
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/AssemblyCfgs/Dtos/ExportErpAssemblyDto.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/AssemblyCfgs/Dtos/ExportErpAssemblyDto.cs
index 605acd6..84ac6ef 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/AssemblyCfgs/Dtos/ExportErpAssemblyDto.cs
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/AssemblyCfgs/Dtos/ExportErpAssemblyDto.cs
@@ -39,6 +39,21 @@ namespace WY.NewJit.MsgBaseData
[ImporterHeader(Name = "ERP总成名称")]
public string ErpAssemblyName { get; set; }
+ ///
+ /// 规格说明
+ ///
+ [ExporterHeader(DisplayName = "规格说明")]
+ [ImporterHeader(Name = "规格说明")]
+ public string SpecExplain { get; set; }
+
+
+ ///
+ /// 颜色说明
+ ///
+ [ExporterHeader(DisplayName = "颜色说明")]
+ [ImporterHeader(Name = "颜色说明")]
+ public string ColorExplain { get; set; }
+
///
/// 客户零件代码
///
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/AssemblyCfgs/Dtos/ImportErpAssemblyGroupDto.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/AssemblyCfgs/Dtos/ImportErpAssemblyGroupDto.cs
new file mode 100644
index 0000000..280b57b
--- /dev/null
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/AssemblyCfgs/Dtos/ImportErpAssemblyGroupDto.cs
@@ -0,0 +1,39 @@
+using Magicodes.ExporterAndImporter.Core;
+using Magicodes.ExporterAndImporter.Excel;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Text;
+
+namespace WY.NewJit.MsgBaseData
+{
+ ///
+ /// 总成组
+ ///
+ [ExcelExporter(Name = "总成组表", AutoFitAllColumn = true, MaxRowNumberOnASheet = 50000)] //一个Sheet最大允许的行数,设置了之后将输出多个Sheet
+ [Serializable]
+ public class ImportErpAssemblyGroupDto
+ {
+ ///
+ /// 规格说明
+ ///
+ [ExporterHeader(DisplayName = "规格说明")]
+ [ImporterHeader(Name = "规格说明")]
+ [Required(ErrorMessage = "{0}是必填项")]
+ public virtual string SpecExplain { get; set; }
+ ///
+ /// 颜色说明
+ ///
+ [ExporterHeader(DisplayName = "颜色说明")]
+ [ImporterHeader(Name = "颜色说明")]
+ [Required(ErrorMessage = "{0}是必填项")]
+ public virtual string ColorExplain { get; set; }
+ ///
+ /// 物料号
+ ///
+ [ExporterHeader(DisplayName = "物料号")]
+ [ImporterHeader(Name = "物料号")]
+ [Required(ErrorMessage = "{0}是必填项")]
+ public virtual string MaterialNum { get; set; }
+ }
+}
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/AssemblyCfgs/Dtos/QueryAssemblyCfgErpDto.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/AssemblyCfgs/Dtos/QueryAssemblyCfgErpDto.cs
index d75015c..d802f15 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/AssemblyCfgs/Dtos/QueryAssemblyCfgErpDto.cs
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/AssemblyCfgs/Dtos/QueryAssemblyCfgErpDto.cs
@@ -18,12 +18,21 @@ namespace WY.NewJit.MsgBaseData
/// 总成名称
///
public string ErpAssemblyName { get; set; }
-
///
/// 车型代码
///
public string VehicleModelCode { get; set; }
+ ///
+ /// 规格说明
+ ///
+ public string SpecExplain { get; set; }
+
+ ///
+ /// 颜色说明
+ ///
+ public string ColorExplain { get; set; }
+
public DateTime? BeginCreateTime { get; set; }
public DateTime? EndCreateTime { get; set; }
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/BaseConfig/Dto/BaseConfigCreateDto.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/BaseConfig/Dto/BaseConfigCreateDto.cs
new file mode 100644
index 0000000..77c616c
--- /dev/null
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/BaseConfig/Dto/BaseConfigCreateDto.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace WY.NewJit.MsgBaseData
+{
+ public class BaseConfigCreateDto
+ {
+ ///
+ /// 参数名称
+ ///
+ public virtual string ParamName { get; set; }
+ ///
+ /// 参数值
+ ///
+ public virtual string ParamValue { get; set; }
+ ///
+ /// 状态
+ ///
+ public virtual bool State { get; set; }
+ ///
+ /// 备注
+ ///
+ public virtual string Remark { get; set; }
+ }
+}
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/BaseConfig/Dto/BaseConfigDto.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/BaseConfig/Dto/BaseConfigDto.cs
index cd10af3..5785fe7 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/BaseConfig/Dto/BaseConfigDto.cs
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/BaseConfig/Dto/BaseConfigDto.cs
@@ -22,10 +22,10 @@ namespace WY.NewJit.MsgBaseData
///
/// 状态
///
- public virtual int State { get; set; }
+ public virtual bool State { get; set; }
///
/// 备注
///
- public virtual int Remark { get; set; }
+ public virtual string Remark { get; set; }
}
}
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/BaseConfig/Dto/QueryBaseConfigDto.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/BaseConfig/Dto/QueryBaseConfigDto.cs
new file mode 100644
index 0000000..cad20f0
--- /dev/null
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/BaseConfig/Dto/QueryBaseConfigDto.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using WY.NewJit.Common;
+
+namespace WY.NewJit.MsgBaseData
+{
+ public class QueryBaseConfigDto : PagedAndSortedBase
+ {
+ ///
+ /// 参数名称
+ ///
+ public virtual string ParamName { get; set; }
+ ///
+ /// 参数值
+ ///
+ public virtual string ParamValue { get; set; }
+ ///
+ /// 状态
+ ///
+ public virtual List State { get; set; } = new List();
+ ///
+ /// 备注
+ ///
+ public virtual string Remark { get; set; }
+ }
+}
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/BaseConfig/Interfaces/IBaseGonfigService.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/BaseConfig/Interfaces/IBaseGonfigService.cs
new file mode 100644
index 0000000..1d42642
--- /dev/null
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/BaseConfig/Interfaces/IBaseGonfigService.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Dtos;
+
+namespace WY.NewJit.MsgBaseData
+{
+ public interface IBaseGonfigService
+ {
+ Task> CreateAsync(BaseConfigCreateDto input);
+ Task DeleteAsync(string id);
+ Task> GetListAsync(QueryBaseConfigDto input);
+ Task UpdateAsync(Guid id, BaseConfigCreateDto input);
+ }
+}
\ No newline at end of file
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/MaterialExt/Dto/MaterialExtDto.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/MaterialExt/Dto/MaterialExtDto.cs
new file mode 100644
index 0000000..9d30c82
--- /dev/null
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/MaterialExt/Dto/MaterialExtDto.cs
@@ -0,0 +1,49 @@
+using Magicodes.ExporterAndImporter.Core;
+using Magicodes.ExporterAndImporter.Excel;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Volo.Abp.Application.Dtos;
+
+namespace WY.NewJit.MsgBaseData
+{
+ [ExcelExporter(Name = "物料信息", AutoFitAllColumn = true, MaxRowNumberOnASheet = 1000)] //一个Sheet最大允许的行数,设置了之后将输出多个Sheet
+ [Serializable]
+ public class MaterialExtDto : AuditedEntityDto
+ {
+ ///
+ /// SAP物料号
+ ///
+ [ExporterHeader(DisplayName = "SAP物料号")]
+ [ImporterHeader(Name = "SAP物料号")]
+ public string MaterialNum { get; set; }
+
+ ///
+ /// 物料描述(大小量纲、物料描述字段值同时存在时,优先显示大小量纲)
+ ///
+ [ExporterHeader(DisplayName = "物料描述")]
+ [ImporterHeader(Name = "物料描述")]
+ public string MaterialDescription { get; set; }
+
+ ///
+ /// 大小量纲(大小量纲、物料描述字段值同时存在时,优先显示大小量纲)
+ ///
+ [ExporterHeader(DisplayName = "大小量纲")]
+ [ImporterHeader(Name = "大小量纲")]
+ public string MaterialDescription2 { get; set; }
+
+ ///
+ /// 补充备注(车型、门板代码)
+ ///
+ [ExporterHeader(DisplayName = "补充备注")]
+ [ImporterHeader(Name = "补充备注")]
+ public string MaterialMemo { get; set; }
+
+ ///
+ /// 物料组:例如 门板成品-C8
+ ///
+ [ExporterHeader(DisplayName = "物料组")]
+ [ImporterHeader(Name = "物料组")]
+ public string MaterialGroup { get; set; }
+ }
+}
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/MaterialExt/Dto/QueryMaterialExtDto.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/MaterialExt/Dto/QueryMaterialExtDto.cs
new file mode 100644
index 0000000..f59df76
--- /dev/null
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/MaterialExt/Dto/QueryMaterialExtDto.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using WY.NewJit.Common;
+
+namespace WY.NewJit.MsgBaseData
+{
+ [Serializable]
+ public class QueryMaterialExtDto : PagedAndSortedBase
+ {
+ ///
+ /// SAP物料号
+ ///
+ public string MaterialNum { get; set; }
+
+ ///
+ /// 物料描述(大小量纲、物料描述字段值同时存在时,优先显示大小量纲)
+ ///
+ public string MaterialDescription { get; set; }
+
+ ///
+ /// 物料组:例如 门板成品-C8
+ ///
+ public string MaterialGroup { get; set; }
+ ///
+ /// 物料类型 0 空 1 控制件 2 柱护板 3 门板
+ ///
+ public string MaterialType { get; set; }
+ }
+}
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/MaterialExt/Interfaces/IMaterialExtAppService.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/MaterialExt/Interfaces/IMaterialExtAppService.cs
new file mode 100644
index 0000000..2047d57
--- /dev/null
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/MaterialExt/Interfaces/IMaterialExtAppService.cs
@@ -0,0 +1,11 @@
+using System.Threading.Tasks;
+using Volo.Abp.Application.Dtos;
+
+namespace WY.NewJit.MsgBaseData
+{
+ public interface IMaterialExtAppService
+ {
+ Task> ExportAsync(QueryMaterialExtDto input);
+ Task> GetListAsync(QueryMaterialExtDto input);
+ }
+}
\ No newline at end of file
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/WY.NewJit.Application.Contracts.csproj b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/WY.NewJit.Application.Contracts.csproj
index c0fdf36..345f5f8 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/WY.NewJit.Application.Contracts.csproj
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/WY.NewJit.Application.Contracts.csproj
@@ -32,8 +32,4 @@
-
-
-
-
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/WY.NewJit.Application.Contracts.xml b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/WY.NewJit.Application.Contracts.xml
index 1832b26..8412411 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/WY.NewJit.Application.Contracts.xml
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/WY.NewJit.Application.Contracts.xml
@@ -556,11 +556,12 @@
导出查询条件
执行成功返回真
-
+
导入信息
- 导入文件流
+ 导入文件流
+ 是否强制执行
执行成功返回真
@@ -1252,6 +1253,16 @@
长描述
+
+
+ 规格说明
+
+
+
+
+ 颜色说明
+
+
车型
@@ -1377,6 +1388,16 @@
ERP总成名称
+
+
+ 规格说明
+
+
+
+
+ 颜色说明
+
+
客户零件代码
@@ -1402,6 +1423,26 @@
创建时间
+
+
+ 总成组
+
+
+
+
+ 规格说明
+
+
+
+
+ 颜色说明
+
+
+
+
+ 物料号
+
+
ERP总成编码
@@ -1417,6 +1458,16 @@
车型代码
+
+
+ 规格说明
+
+
+
+
+ 颜色说明
+
+
根据筛选条件获取分页实体列表
@@ -1504,6 +1555,26 @@
整车总成Id
Erp总成列表
+
+
+ 参数名称
+
+
+
+
+ 参数值
+
+
+
+
+ 状态
+
+
+
+
+ 备注
+
+
基础参数配置表
@@ -1529,6 +1600,26 @@
备注
+
+
+ 参数名称
+
+
+
+
+ 参数值
+
+
+
+
+ 状态
+
+
+
+
+ 备注
+
+
通用字典信息DTO
@@ -1782,6 +1873,51 @@
主键
执行成功返回真
+
+
+ SAP物料号
+
+
+
+
+ 物料描述(大小量纲、物料描述字段值同时存在时,优先显示大小量纲)
+
+
+
+
+ 大小量纲(大小量纲、物料描述字段值同时存在时,优先显示大小量纲)
+
+
+
+
+ 补充备注(车型、门板代码)
+
+
+
+
+ 物料组:例如 门板成品-C8
+
+
+
+
+ SAP物料号
+
+
+
+
+ 物料描述(大小量纲、物料描述字段值同时存在时,优先显示大小量纲)
+
+
+
+
+ 物料组:例如 门板成品-C8
+
+
+
+
+ 物料类型 0 空 1 控制件 2 柱护板 3 门板
+
+
零件编码
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/EdiReceive/ImportRecordAppService.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/EdiReceive/ImportRecordAppService.cs
index 6a7f24f..12e9e0c 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/EdiReceive/ImportRecordAppService.cs
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/EdiReceive/ImportRecordAppService.cs
@@ -20,8 +20,10 @@ using WY.NewJit.Common;
using WY.NewJit.EdiReceive.Dtos;
using WY.NewJit.EdiReceive.Entitys;
using WY.NewJit.EdiReceive.Interfaces;
+using WY.NewJit.EdiReceive.Services;
using WY.NewJit.EntityFrameworkCore;
using WY.NewJit.MsgBaseData;
+using WY.NewJit.MsgCheck;
namespace WY.NewJit.EdiReceive
{
@@ -58,6 +60,13 @@ namespace WY.NewJit.EdiReceive
///
private readonly DicDomainService _dicDomainService;
+ private readonly EdiParseDomainService _ediParseDomainService;
+
+ ///
+ /// 配置
+ ///
+ private readonly Microsoft.Extensions.Configuration.IConfiguration _configuration;
+
///
/// 错误信息前缀
///
@@ -80,14 +89,17 @@ namespace WY.NewJit.EdiReceive
ILogger logger,
NewJitDapperRepository newJitDapperRepository,
IBlobContainer blobContainer,
- DicDomainService dicDomainService
- )
+ DicDomainService dicDomainService,
+ EdiParseDomainService ediParseDomainService,
+ Microsoft.Extensions.Configuration.IConfiguration configuration)
{
_importRecordRepository = importRecordRepository;
_logger = logger;
_newJitDapperRepository = newJitDapperRepository;
_blobContainer = blobContainer;
_dicDomainService = dicDomainService;
+ _ediParseDomainService = ediParseDomainService;
+ _configuration = configuration;
}
#region 私有方法
@@ -257,8 +269,6 @@ namespace WY.NewJit.EdiReceive
}
}
-
-
///
/// 按主键获取唯一实体
///
@@ -411,11 +421,13 @@ namespace WY.NewJit.EdiReceive
/// 导入
///
/// 导入文件
+ /// 校验出错时,是否强制执行
/// 执行成功返回真
+ [UnitOfWork]
[HttpPost]
[Route("import")]
[DisableRequestSizeLimit]
- public virtual async Task ImportAsync([FromForm] IFormFileCollection files)
+ public virtual async Task ImportAsync([FromForm] IFormFileCollection files, bool forceExecute = false)
{
_logger.LogDebug(_errorMessagePrefix + "ImportAsync 进入");
@@ -432,34 +444,44 @@ namespace WY.NewJit.EdiReceive
//StreamReader sr = new StreamReader(memoryStream, Encoding.Default);
IImporter importer = new ExcelImporter();
impResult = await importer.Import(memoryStream);
- if (impResult.HasError)
+ }
+
+ if (impResult.HasError)
+ {
+ string rowErrStr = "";
+ foreach (var rowErr in impResult.RowErrors)
{
- string rowErrStr = "";
- foreach (var rowErr in impResult.RowErrors)
- {
- string fieldErr = string.Concat(rowErr.FieldErrors.Select(itm => $"字段:{itm.Key},错误信息:{itm.Value}"));
- rowErrStr += $"行号:{rowErr.RowIndex},{fieldErr}\r\n";
- }
- string templateErrStr = "";
- foreach (var templateErr in impResult.TemplateErrors)
- {
- string errorLevel = templateErr.ErrorLevel == ErrorLevels.Error ? "错误" : "警告";
- templateErrStr += $"错误等级:{errorLevel},列名:{templateErr.ColumnName},需要列:{templateErr.RequireColumnName},错误消息:{templateErr.Message}\r\n";
- }
- ret.Message = rowErrStr + templateErrStr;
- ret.Status = false;
- return ret;
+ string fieldErr = string.Concat(rowErr.FieldErrors.Select(itm => $"字段:{itm.Key},错误信息:{itm.Value}"));
+ rowErrStr += $"行号:{rowErr.RowIndex},{fieldErr}\r\n";
}
+ string templateErrStr = "";
+ foreach (var templateErr in impResult.TemplateErrors)
+ {
+ string errorLevel = templateErr.ErrorLevel == ErrorLevels.Error ? "错误" : "警告";
+ templateErrStr += $"错误等级:{errorLevel},列名:{templateErr.ColumnName},需要列:{templateErr.RequireColumnName},错误消息:{templateErr.Message}\r\n";
+ }
+ ret.Message = rowErrStr + templateErrStr;
+ ret.Status = false;
+ return ret;
}
+
var srcLst = impResult.Data.AsEnumerable().ToList();
var tarLst = ObjectMapper.Map, List>(srcLst);
foreach (var tar in tarLst)
{
- tar.CreatePerson = "导入";
+ //tar.CreatePerson = "导入";
tar.CreateTime = ServerHelper.CurrentDateTime;
}
- //插入“导入记录表”
- await _importRecordRepository.InsertManyAsync(tarLst);
+ //报文解析
+ ObjectResultDto ret2 = await _ediParseDomainService.ParseEdi(tarLst, forceExecute);
+ if (ret2.Status == false)
+ {
+ return ret2;
+ }
+ if (ret2.Status == true && ret2.Message.HasValue())
+ {
+ return ret2;
+ }
ret.Status = true;
return ret;
}
@@ -471,6 +493,32 @@ namespace WY.NewJit.EdiReceive
return ret;
}
}
+
+ ///
+ /// 打印时间提醒
+ ///
+ ///
+ ///
+ [UnitOfWork]
+ [HttpPost]
+ [Route("print-timeout-remind")]
+ public virtual async Task PrintTimeoutRemind()
+ {
+ TimeOutRemindResultDto retObj = new TimeOutRemindResultDto();
+ retObj.ConfigMinutes = _configuration[$"ConfigDic:ProductLineTimeoutRemind_New:{"Record"}"].TryToInt() ?? 40;
+ var qry = await _importRecordRepository.MaxAsync(itm => itm.CreateTime);
+ retObj.LastReceiveTime = qry != null ? Convert.ToDateTime(qry) : ServerHelper.CurrentDateTime;
+ retObj.TimeoutMinutes = MinuteDiff(retObj.LastReceiveTime, ServerHelper.CurrentDateTime);
+ return retObj;
+ }
+
+ private int MinuteDiff(DateTime beginTime, DateTime endTime)
+ {
+ TimeSpan beginSpan = new TimeSpan(beginTime.Ticks);
+ TimeSpan endSpan = new TimeSpan(endTime.Ticks);
+ TimeSpan diffSpan = endSpan.Subtract(beginSpan).Duration();
+ return (int)(diffSpan.TotalMinutes);
+ }
#endregion
}
}
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgBaseData/AssemblyCfgs/AssemblyCfgErpAppService.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgBaseData/AssemblyCfgs/AssemblyCfgErpAppService.cs
index ff04062..97e70c0 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgBaseData/AssemblyCfgs/AssemblyCfgErpAppService.cs
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgBaseData/AssemblyCfgs/AssemblyCfgErpAppService.cs
@@ -23,6 +23,7 @@ using System.Data;
using Microsoft.AspNetCore.Authorization;
using WY.NewJit.Extends.PaiGe;
using Volo.Abp;
+using Magicodes.ExporterAndImporter.Core.Models;
namespace WY.NewJit.MsgBaseData
{
@@ -33,6 +34,10 @@ namespace WY.NewJit.MsgBaseData
[ApiExplorerSettings(GroupName = SwaggerGroupConsts.基础数据)]
public class AssemblyCfgErpAppService : ApplicationService, IAssemblyCfgErpAppService
{
+ ///
+ /// 总成组
+ ///
+ private readonly IRepository _assemblyCfgGroupRepository;
///
/// ERP总成仓储
///
@@ -112,7 +117,8 @@ SELECT top 1 v.Id
AssemblyDomainService assemblyDomainService,
IRepository partCfgRepository,
IRepository materialExtRepository,
- GlobalSettingsDomainService globalSettingsDomainService
+ GlobalSettingsDomainService globalSettingsDomainService,
+ IRepository assemblyCfgGroupRepository
)
{
_assemblyCfgErpRepository = assemblyCfgErpRepository;
@@ -124,6 +130,7 @@ SELECT top 1 v.Id
_partCfgRepository = partCfgRepository;
_materialExtRepository = materialExtRepository;
_globalSettingsDomainService = globalSettingsDomainService;
+ _assemblyCfgGroupRepository = assemblyCfgGroupRepository;
}
@@ -150,7 +157,7 @@ SELECT top 1 v.Id
(
select ROW_NUMBER() OVER(order by a.[CreationTime]) as row_number,
a.Id, a.ErpAssemblyCode, a.ErpAssemblyName, a.ErpAssemblyVersion,
- g.GroupCode, g.VehicleModel, g.IsDisable, g.CreationTime
+ g.GroupCode, g.VehicleModel, g.IsDisable, g.CreationTime ,g.SpecExplain,g.ColorExplain
from FisAssemblyCfgErp a
join FisAssemblyCfgGroup g on g.Id = a.GroupId
where g.IsDeleted = 0 and g.IsDisable <> 1 {0}
@@ -183,10 +190,10 @@ SELECT top 1 v.Id
select ROW_NUMBER() OVER(order by a.[CreationTime]) as row_number,
a.Id, g.GroupCode, a.ErpAssemblyCode, a.ErpAssemblyName,
p.PartCode, pc.PartName, p.PartNum,
- g.VehicleModel, g.IsDisable, g.CreationTime
+ g.VehicleModel, g.IsDisable, g.CreationTime,g.SpecExplain,g.ColorExplain
from FisAssemblyCfgErp a
join FisAssemblyCfgGroup g on g.Id = a.GroupId
- join FisAssemblyCfgPart p on a.Id = p.AssemblyCfgErpId
+ left join FisAssemblyCfgPart p on a.Id = p.AssemblyCfgErpId
left join FisPartCfg pc on p.PartCode = pc.PartCode
where g.IsDeleted = 0 and g.IsDisable <> 1 {0}
";
@@ -211,6 +218,14 @@ SELECT top 1 v.Id
{
where += string.Format(" and g.VehicleModel = '{0}'", input.VehicleModelCode);
}
+ if (!string.IsNullOrEmpty(input.SpecExplain))
+ {
+ where += string.Format(" and g.SpecExplain = '{0}'", input.SpecExplain);
+ }
+ if (!string.IsNullOrEmpty(input.ColorExplain))
+ {
+ where += string.Format(" and g.ColorExplain = '{0}'", input.ColorExplain);
+ }
if (input.BeginCreateTime != null)
{
where += string.Format(" and g.CreationTime >= '{0}'", ((DateTime)input.BeginCreateTime).ToString("yyyy-MM-dd HH:mm:ss"));
@@ -668,11 +683,159 @@ SELECT top 1 v.Id
}
}
+
///
- /// 校验ERP总成:是否版本覆盖
+ /// 总成组导入
///
- ///
+ ///
///
+ [HttpPost]
+ [Route("import-erp-assembly-group")]
+ [DisableRequestSizeLimit]
+ public virtual async Task ImportErpAssemblyGroupAsync([FromForm] IFormFileCollection files)
+ {
+
+ _logger.LogDebug(_errorMessagePrefix + "ImportErpAssemblyGroupAsync 进入");
+ ObjectResultDto ret = new ObjectResultDto();
+ try
+ {
+ #region 导入文件处理
+ ImportResult impResult;
+ using (var memoryStream = new MemoryStream())
+ {
+ //保存到内存流
+ IFormFile file = files[0];
+ await file.CopyToAsync(memoryStream);
+ memoryStream.Seek(0, SeekOrigin.Begin);
+ //StreamReader sr = new StreamReader(memoryStream, Encoding.Default);
+ IImporter importer = new ExcelImporter();
+ impResult = await importer.Import(memoryStream);
+ if (impResult.HasError)
+ {
+ string rowErrStr = "";
+ foreach (var rowErr in impResult.RowErrors)
+ {
+ string fieldErr = string.Concat(rowErr.FieldErrors.Select(itm => $"字段:{itm.Key},错误信息:{itm.Value}"));
+ rowErrStr += $"行号:{rowErr.RowIndex},{fieldErr}\r\n";
+ }
+ string templateErrStr = "";
+ foreach (var templateErr in impResult.TemplateErrors)
+ {
+ string errorLevel = templateErr.ErrorLevel == ErrorLevels.Error ? "错误" : "警告";
+ templateErrStr += $"错误等级:{errorLevel},列名:{templateErr.ColumnName},需要列:{templateErr.RequireColumnName},错误消息:{templateErr.Message}\r\n";
+ }
+ ret.Message = rowErrStr + templateErrStr;
+ ret.Status = false;
+ return ret;
+ }
+ }
+ #endregion
+ #region 数据验证
+ var srcLst = impResult.Data.AsEnumerable().ToList();
+ List material3Lst = await _materialExtRepository.Where(itm => itm.MaterialType == "3").ToListAsync();
+
+ var error= CheckGroup(srcLst, material3Lst);
+ if (!string.IsNullOrEmpty(error))
+ {
+ ret.Message = error;
+ ret.Status = false;
+ return ret;
+ }
+ #endregion
+ #region 插入数据
+ List assemblyCfgGroups = new List();
+ List deleteAssemblyCfgGroups = new List();
+ List assemblyCfgErps = new List();
+ var groups = srcLst.GroupBy(r => new { r.SpecExplain, r.ColorExplain }).ToList();
+ foreach (var group in groups)
+ {
+
+ var olditem= await _assemblyCfgGroupRepository.FirstOrDefaultAsync(r=>r.IsDisable==false&&r.SpecExplain== group.Key.SpecExplain.Trim()&& r.ColorExplain == group.Key.ColorExplain.Trim());
+ if (olditem != null)
+ {
+ olditem.IsDisable = true;
+ deleteAssemblyCfgGroups.Add(olditem);
+ }
+ string groupCode = group.Key.SpecExplain + group.Key.ColorExplain;
+ AssemblyCfgGroup assemblyCfgGroup = new AssemblyCfgGroup(GuidGenerator.Create() , groupCode,"",true);
+ assemblyCfgGroup.SpecExplain = group.Key.SpecExplain.Trim();
+ assemblyCfgGroup.ColorExplain = group.Key.ColorExplain.Trim();
+ assemblyCfgGroup.IsDisable = false;
+ foreach (var item in group)
+ {
+ var material3 = material3Lst.FirstOrDefault(r => r.MaterialNum == item.MaterialNum.Trim());
+ AssemblyCfgErp assemblyCfgErp = new AssemblyCfgErp(GuidGenerator.Create());
+ assemblyCfgErp.ErpAssemblyCode = item.MaterialNum.Trim();
+ assemblyCfgErp.ErpAssemblyName = material3.MaterialDescription;
+ assemblyCfgErp.ErpAssemblyVersion = 1;
+ assemblyCfgErp.GroupCode = groupCode;
+ assemblyCfgErp.GroupId = assemblyCfgGroup.Id;
+ assemblyCfgErp.SpecExplain = item.SpecExplain.Trim();
+ assemblyCfgErp.ColorExplain = item.ColorExplain.Trim();
+ assemblyCfgErps.Add(assemblyCfgErp);
+ }
+ assemblyCfgGroups.Add(assemblyCfgGroup);
+ }
+
+ //插入“导入记录表”
+ await _assemblyCfgGroupRepository.UpdateManyAsync(deleteAssemblyCfgGroups);//更新总成组
+ await _assemblyCfgGroupRepository.InsertManyAsync(assemblyCfgGroups);
+ await _assemblyCfgErpRepository.InsertManyAsync(assemblyCfgErps);
+ #endregion
+ ret.Status = true;
+ return ret;
+ }
+ catch (Exception ex)
+ {
+ ret.Status = false;
+ ret.Message = _errorMessagePrefix + "ImportErpAssemblyGroupAsync 执行出错:" + ex.Message;
+ _logger.LogError(ret.Message);
+ return ret;
+ }
+ }
+
+ private string CheckGroup(List srcLst, List material3Lst)
+ {
+ //验证是否有重复项
+ string error = "";
+ var disitem = srcLst.Distinct();
+ if (disitem.Count() != srcLst.Count())
+ {
+ error = "导入数据有重复项,检查后在导入!";
+ }
+ if (!string.IsNullOrEmpty(error)) return error;
+
+
+ #region 验证分组是否符合分组规
+
+ var checkGroups = srcLst.GroupBy(r => new { r.SpecExplain, r.ColorExplain }).Select(r => new { SpecExplain = r.Key.SpecExplain, ColorExplain = r.Key.ColorExplain, Count = r.Count() });
+ var errorgroups = checkGroups.Where(r => r.Count != 4).ToList();
+ foreach (var item in errorgroups)
+ {
+ error += $"规格说明【{item.SpecExplain}】,颜色说明【{item.ColorExplain}】,零件数【{item.Count}】不符合分组规则\r\n";
+ }
+ if (!string.IsNullOrEmpty(error)) return error;
+
+ #endregion
+
+ #region 验证零件是否存在(门板)
+
+
+ var partdists = srcLst.Select(r => r.MaterialNum).Distinct();
+ foreach (var material in partdists)
+ {
+ var material3 = material3Lst.FirstOrDefault(r => r.MaterialNum == material);
+ if (material3 == null)
+ {
+ error += $"零件编号【{material}】系统同不存在,请检查后再导入\r\n";
+ }
+ }
+
+ #endregion
+ return error;
+ }
+
+
//[UnitOfWork]
//[HttpPost]
//[Route("check")]
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgBaseData/BaseConfig/BaseGonfigService.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgBaseData/BaseConfig/BaseGonfigService.cs
index 9a7980e..dc69e8a 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgBaseData/BaseConfig/BaseGonfigService.cs
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgBaseData/BaseConfig/BaseGonfigService.cs
@@ -1,10 +1,13 @@
using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Linq.Dynamic.Core;
using System.Text;
using System.Threading.Tasks;
+using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Uow;
@@ -17,9 +20,11 @@ namespace WY.NewJit.MsgBaseData
///
[Route("api/newjit/baseconfig")]
[ApiExplorerSettings(GroupName = SwaggerGroupConsts.基础数据)]
- public class BaseGonfigService : ApplicationService
+ public class BaseGonfigService : ApplicationService, IBaseGonfigService
{
- private readonly IRepository _repository;
+ public readonly IRepository _repository;
+
+ private readonly BaseGonfigDomainService _baseConfigDomainService;
///
/// 日志
///
@@ -41,11 +46,13 @@ namespace WY.NewJit.MsgBaseData
///
public BaseGonfigService(
IRepository repository,
- ILogger logger
+ ILogger logger,
+ BaseGonfigDomainService baseConfigDomainService
)
{
_repository = repository;
_logger = logger;
+ _baseConfigDomainService = baseConfigDomainService;
}
@@ -57,25 +64,171 @@ namespace WY.NewJit.MsgBaseData
[HttpGet]
[UnitOfWork(false)]
[Route("list")]
- public virtual async Task> GetBaseConfigListAsync()
+ public virtual async Task> GetListAsync(QueryBaseConfigDto input)
{
- _logger.LogDebug(_errorMessagePrefix + "GetBaseConfigListAsync 进入");
+ _logger.LogDebug(_errorMessagePrefix + "GetListAsync 进入");
try
{
- var lst = await _repository.GetListAsync();
+ var page = (PagedAndSortedBase)input;
+ IQueryable qry1 = QueryByCondition(input);
+ if (string.IsNullOrEmpty(page.Sorting))
+ {
+ page.Sorting = "ParamName";
+ }
+
+ int totalCount = await qry1.CountAsync(); //返回总记录数而不是当前页记录数
+ if (totalCount == 0)
+ {
+ return new PagedResultDto(0, new List());
+ }
+
+ var query = qry1.OrderBy(page.Sorting).Skip(page.SkipCount).Take(page.MaxResultCount);
+
+ List lst = await query.ToListAsync();
- var items = ObjectMapper.Map, List>(lst);
+ var items = ObjectMapper.Map, List>(lst);
- return new ListResultDto(items);
+ return new PagedResultDto(totalCount, items);
}
catch (Exception ex)
{
- string errMsg = _errorMessagePrefix + "GetBaseConfigListAsync 执行出错:" + ex.Message;
+ string errMsg = _errorMessagePrefix + "GetListAsync 执行出错:" + ex.Message;
_logger.LogError(errMsg);
- return new ListResultDto(new List());
+ return new PagedResultDto(0, new List());
+ }
+ }
+
+
+
+ ///
+ /// 添加实体
+ ///
+ /// 添加内容
+ /// 执行成功返回真
+ [HttpPost]
+ [UnitOfWork]
+ [Route("create")]
+ public async Task> CreateAsync(BaseConfigCreateDto input)
+ {
+ _logger.LogDebug(_errorMessagePrefix + "CreateAsync 进入");
+ ObjectResultDto ret = new ObjectResultDto();
+ try
+ {
+ var checkitem = await _repository.FirstOrDefaultAsync(r => r.ParamName == input.ParamName);
+
+ if (checkitem != null)
+ {
+ ret.Status = false;
+ ret.Message = $"参数名称【{input.ParamName}】已存,在无法添加!";
+ return ret;
+ }
+ BaseConfig obj = ObjectMapper.Map(input);
+ var obj2 = await _repository.InsertAsync(obj);
+ ret.Item = obj2.Id; //返回添加对象的主键
+ await _baseConfigDomainService.UpdateBaseConfigCache();
+ return ret;
+ }
+ catch (Exception ex)
+ {
+ ret.Status = false;
+ ret.Message = _errorMessagePrefix + "CreateAsync 执行出错:" + ex.Message;
+ _logger.LogError(ret.Message);
+ return ret;
}
}
- #endregion
+ ///
+ /// 修改实体
+ ///
+ /// 更新主键
+ /// 修改内容
+ /// 执行成功返回真
+ [HttpPut]
+ [UnitOfWork]
+ [Route("update/{id}")]
+ public async Task UpdateAsync(Guid id, BaseConfigCreateDto input)
+ {
+ _logger.LogDebug(_errorMessagePrefix + "UpdateAsync 进入");
+ ObjectResultDto ret = new ObjectResultDto();
+ try
+ {
+ var checkitem = await _repository.FirstOrDefaultAsync(r => r.ParamName == input.ParamName && r.Id != id);
+ if (checkitem != null)
+ {
+ ret.Status = false;
+ ret.Message = $"参数名称【{input.ParamName}】已存,在无法添加!";
+ return ret;
+ }
+ var item = await _repository.GetAsync(id);
+ ObjectMapper.Map(input, item);
+ await _repository.UpdateAsync(item);
+ await _baseConfigDomainService.UpdateBaseConfigCache();
+ return ret;
+ }
+ catch (Exception ex)
+ {
+ ret.Status = false;
+ ret.Message = _errorMessagePrefix + "UpdateAsync 执行出错:" + ex.Message;
+ _logger.LogError(ret.Message);
+ return ret;
+ }
+ }
+
+ ///
+ /// 删除实体
+ ///
+ /// 删除主键
+ /// 执行成功返回真
+ [UnitOfWork]
+ [HttpDelete]
+ [Route("delete/{id}")]//delete/
+ public async Task DeleteAsync(string id)
+ {
+ _logger.LogDebug(_errorMessagePrefix + "DeleteAsync 进入");
+ ObjectResultDto ret = new ObjectResultDto();
+ try
+ {
+ Guid guid = Guid.Parse(id);
+ await _repository.DeleteAsync(guid);
+ await _baseConfigDomainService.UpdateBaseConfigCache();
+ return ret;
+ }
+ catch (Exception ex)
+ {
+ ret.Status = false;
+ ret.Message = _errorMessagePrefix + "DeleteAsync 执行出错:" + ex.Message;
+ _logger.LogError(ret.Message);
+ return ret;
+ }
+ }
+ #endregion
+ #region 私有方法
+ ///
+ /// 根据筛选条件获取实体列表
+ ///
+ ///
+ ///
+ private IQueryable QueryByCondition(QueryBaseConfigDto input)
+ {
+ IQueryable ret = _repository.Where(itm => 1 == 1);
+ if (!string.IsNullOrEmpty(input.ParamName))
+ {
+ ret = ret.Where(itm => itm.ParamName.Contains(input.ParamName));
+ }
+ if (!string.IsNullOrEmpty(input.ParamValue))
+ {
+ ret = ret.Where(itm => itm.ParamValue.Contains(input.ParamValue));
+ }
+ if (input.State.Count > 0)
+ {
+ ret = ret.Where(itm => input.State.Contains(itm.State));
+ }
+ if (!string.IsNullOrEmpty(input.Remark))
+ {
+ ret = ret.Where(itm => itm.Remark.Contains(input.Remark));
+ }
+ return ret;
+ }
+ #endregion
}
}
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgBaseData/MaterialExt/IMaterialExtAppService.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgBaseData/MaterialExt/IMaterialExtAppService.cs
new file mode 100644
index 0000000..2047d57
--- /dev/null
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgBaseData/MaterialExt/IMaterialExtAppService.cs
@@ -0,0 +1,11 @@
+using System.Threading.Tasks;
+using Volo.Abp.Application.Dtos;
+
+namespace WY.NewJit.MsgBaseData
+{
+ public interface IMaterialExtAppService
+ {
+ Task> ExportAsync(QueryMaterialExtDto input);
+ Task> GetListAsync(QueryMaterialExtDto input);
+ }
+}
\ No newline at end of file
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgBaseData/MaterialExt/MaterialExtAppService.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgBaseData/MaterialExt/MaterialExtAppService.cs
new file mode 100644
index 0000000..08582f2
--- /dev/null
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgBaseData/MaterialExt/MaterialExtAppService.cs
@@ -0,0 +1,161 @@
+using Magicodes.ExporterAndImporter.Core;
+using Magicodes.ExporterAndImporter.Excel;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Logging;
+using Shouldly;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Dynamic.Core;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.Application.Services;
+using Volo.Abp.BlobStoring;
+using Volo.Abp.Domain.Repositories;
+using Volo.Abp.Uow;
+using WY.NewJit.Common;
+using WY.NewJit.Extends.PaiGe;
+
+namespace WY.NewJit.MsgBaseData
+{
+ [Route("api/newjit/material")]
+ [ApiExplorerSettings(GroupName = SwaggerGroupConsts.基础数据)]
+ public class MaterialExtAppService : ApplicationService, IMaterialExtAppService
+ {
+ private readonly IRepository _materialExtRepository;
+ private ILogger _logger;
+ ///
+ /// BLOB存储
+ ///
+ private readonly IBlobContainer _blobContainer;
+
+ ///
+ /// 错误信息前缀
+ ///
+ private string _errorMessagePrefix
+ {
+ get
+ {
+ return System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + ".";
+ }
+ }
+ public MaterialExtAppService(IRepository materialExtRepository, ILogger logger, IBlobContainer blobContainer)
+ {
+ _materialExtRepository = materialExtRepository;
+ _logger = logger;
+ _blobContainer = blobContainer;
+ }
+ ///
+ /// 获取数据
+ ///
+ ///
+ ///
+ [HttpGet]
+ [UnitOfWork(false)]
+ [Route("list")]
+ public virtual async Task> GetListAsync(QueryMaterialExtDto input)
+ {
+ _logger.LogDebug(_errorMessagePrefix + "GetListAsync 进入");
+ try
+ {
+ var page = (PagedAndSortedBase)input;
+ IQueryable qry1 = QueryByCondition(input);
+ if (string.IsNullOrEmpty(page.Sorting))
+ {
+ page.Sorting = "MaterialNum";
+ }
+
+ int totalCount = await qry1.CountAsync(); //返回总记录数而不是当前页记录数
+ if (totalCount == 0)
+ {
+ return new PagedResultDto(0, new List());
+ }
+
+ var query = qry1
+ .OrderBy(page.Sorting)
+ .Skip(page.SkipCount)
+ .Take(page.MaxResultCount);
+
+ List lst = await query.ToListAsync();
+
+ List items =
+ ObjectMapper.Map, List>(lst);
+
+ return new PagedResultDto(totalCount, items);
+ }
+ catch (Exception ex)
+ {
+ string errMsg = _errorMessagePrefix + "GetListAsync 执行出错:" + ex.Message;
+ _logger.LogError(errMsg);
+ return new PagedResultDto(0, new List());
+ }
+ }
+ ///
+ /// 导出信息
+ ///
+ /// 导出查询条件
+ /// 执行成功返回真
+ [UnitOfWork(false)]
+ [HttpPost]
+ [Route("export")]
+ public virtual async Task> ExportAsync(QueryMaterialExtDto input)
+ {
+ _logger.LogDebug(_errorMessagePrefix + "ExportAsync 进入");
+ ObjectResultDto ret = new ObjectResultDto();
+ try
+ {
+ IQueryable query = QueryByCondition(input);
+ List lst = await query.ToListAsync();
+ List items =
+ ObjectMapper.Map, List>(lst);
+ //将实体列表转换成excel文件流
+ IExporter exporter = new ExcelExporter();
+ byte[] byteArr = await exporter.ExportAsByteArray(items);
+ byteArr.ShouldNotBeNull();
+ //将excel文件流保存到服务器端文件系统
+ string fileName = string.Format("物料信息_{0}.xlsx", Guid.NewGuid().ToString());
+ await _blobContainer.SaveAsync(fileName, byteArr);
+
+ ret.Item = fileName;
+ return ret;
+ }
+ catch (Exception ex)
+ {
+ ret.Status = false;
+ ret.Message = _errorMessagePrefix + "ExportAsync 执行出错:" + ex.Message;
+ _logger.LogError(ret.Message);
+ return ret;
+ }
+ }
+ #region 私有方法
+ ///
+ /// 根据筛选条件获取实体列表
+ ///
+ ///
+ ///
+ private IQueryable QueryByCondition(QueryMaterialExtDto input)
+ {
+ IQueryable ret = _materialExtRepository.Where(itm => 1 == 1);
+ if (!string.IsNullOrEmpty(input.MaterialNum))
+ {
+ ret = ret.Where(itm => itm.MaterialNum.Contains(input.MaterialNum));
+ }
+ if (!string.IsNullOrEmpty(input.MaterialDescription))
+ {
+ ret = ret.Where(itm => itm.MaterialDescription.Contains(input.MaterialDescription));
+ }
+ if (!string.IsNullOrEmpty(input.MaterialGroup))
+ {
+ ret = ret.Where(itm => itm.MaterialGroup == input.MaterialGroup);
+ }
+ if (!string.IsNullOrEmpty(input.MaterialType))
+ {
+ ret = ret.Where(itm => itm.MaterialType == input.MaterialType);
+ }
+ return ret;
+ }
+ #endregion
+ }
+}
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/NewJitApplicationAutoMapperProfile.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/NewJitApplicationAutoMapperProfile.cs
index af465c3..e807c4c 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/NewJitApplicationAutoMapperProfile.cs
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/NewJitApplicationAutoMapperProfile.cs
@@ -5,6 +5,7 @@ using WY.NewJit.Books;
using WY.NewJit.EdiReceive.Dtos;
using WY.NewJit.EdiReceive.Entitys;
using WY.NewJit.Extends;
+using WY.NewJit.Extends.PaiGe;
using WY.NewJit.MsgBaseData;
using WY.NewJit.MsgCheck;
using WY.NewJit.MsgCheck.UnknownAssemblys;
@@ -21,6 +22,7 @@ namespace WY.NewJit
CreateMap();
#region 基础数据
+ CreateMap().ReverseMap();
CreateMap().ReverseMap();
CreateMap().ReverseMap();
@@ -46,6 +48,9 @@ namespace WY.NewJit
CreateMap().ReverseMap();
CreateMap().ReverseMap();
+
+ CreateMap().ReverseMap();
+ CreateMap().ReverseMap();
#endregion
#region 报文解析及校验
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/PrintTable/WaitPrintAppService.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/PrintTable/WaitPrintAppService.cs
index 4bd1794..68f6af9 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/PrintTable/WaitPrintAppService.cs
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/PrintTable/WaitPrintAppService.cs
@@ -116,6 +116,9 @@ namespace WY.NewJit.PrintTable
/// BLOB存储
///
private readonly IBlobContainer _blobContainer;
+
+ private readonly BaseGonfigDomainService _baseConfigDomainService;
+
#endregion
public WaitPrintAppService(
@@ -136,7 +139,8 @@ namespace WY.NewJit.PrintTable
IRepository printTemplateConfigurationRepository,
M100DomainService m100DomainService,
IBlobContainer blobContainer,
- IRepository billR100Repository
+ IRepository billR100Repository,
+ BaseGonfigDomainService baseConfigDomainService
)
{
_waitPrintRepository = waitPrintRepository;
@@ -157,6 +161,7 @@ namespace WY.NewJit.PrintTable
_m100DomainService = m100DomainService;
_blobContainer = blobContainer;
_billR100Repository = billR100Repository;
+ _baseConfigDomainService = baseConfigDomainService;
}
#region 私有方法
@@ -872,12 +877,14 @@ namespace WY.NewJit.PrintTable
Stopwatch sw = new Stopwatch();
sw.Start();
_logger.LogDebug(_errorMessagePrefix + "SaveMenBanReport 进入");
-
+ var baseConfigCache= _baseConfigDomainService.GetCachesByName("打印条数");
+ var printCount = baseConfigCache == null ? 10 : Convert.ToInt32(baseConfigCache.ParamValue);
MenBanPrintResultDto retObj = new MenBanPrintResultDto();
ObjectResultDto ret = new ObjectResultDto(retObj);
using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true, isolationLevel: System.Data.IsolationLevel.Unspecified))
{
+
try
{
List reportMainLst = new List();
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/WY.NewJit.Application.xml b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/WY.NewJit.Application.xml
index cc6ce29..67dfb75 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/WY.NewJit.Application.xml
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/WY.NewJit.Application.xml
@@ -39,12 +39,17 @@
字典领域服务
+
+
+ 配置
+
+
错误信息前缀
-
+
构造函数
@@ -117,13 +122,21 @@
导出查询条件
执行成功返回真
-
+
导入
导入文件
+ 校验出错时,是否强制执行
执行成功返回真
+
+
+ 打印时间提醒
+
+
+
+
生产线权限管理应用服务实现
@@ -264,6 +277,11 @@
总成配置应用服务实现
+
+
+ 总成组
+
+
ERP总成仓储
@@ -314,7 +332,7 @@
错误信息前缀
-
+
构造函数
@@ -389,6 +407,13 @@
导入文件
执行成功返回真
+
+
+ 总成组导入
+
+
+
+
系统初始化时使用,去掉重复的ERP总成
@@ -544,17 +569,46 @@
错误信息前缀
-
+
构造函数
-
+
获取所有基本参数数据
+
+
+ 添加实体
+
+ 添加内容
+ 执行成功返回真
+
+
+
+ 修改实体
+
+ 更新主键
+ 修改内容
+ 执行成功返回真
+
+
+
+ 删除实体
+
+ 删除主键
+ 执行成功返回真
+
+
+
+ 根据筛选条件获取实体列表
+
+
+
+
通用字典应用服务实现
@@ -795,6 +849,37 @@
主键
执行成功返回真
+
+
+ BLOB存储
+
+
+
+
+ 错误信息前缀
+
+
+
+
+ 获取数据
+
+
+
+
+
+
+ 导出信息
+
+ 导出查询条件
+ 执行成功返回真
+
+
+
+ 根据筛选条件获取实体列表
+
+
+
+
零件管理应用服务实现
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain.Shared/Common/ServerHelper.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain.Shared/Common/ServerHelper.cs
index 0282148..c9e3bc8 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain.Shared/Common/ServerHelper.cs
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain.Shared/Common/ServerHelper.cs
@@ -146,7 +146,7 @@ namespace WY.NewJit
{
throw new Exception("ToSerialNumStr大众顺序号不能为空!");
}
- return ((DateTime)onlineTime).ToString("yyyyMMddHHmm") + "00" + hostSN.ToString().PadLeft(5, '0');
+ return ((DateTime)onlineTime).ToString("yyyyMMddHHmmss") + hostSN.ToString().PadLeft(5, '0');
}
///
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/EdiReceive/Entitys/LastImportHostSN.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/EdiReceive/Entitys/LastImportHostSN.cs
index 8038136..549a1ba 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/EdiReceive/Entitys/LastImportHostSN.cs
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/EdiReceive/Entitys/LastImportHostSN.cs
@@ -13,5 +13,9 @@ namespace WY.NewJit.EdiReceive.Entitys
public int HostSN { get; set; }
+ public LastImportHostSN(Guid id)
+ :base(id)
+ {
+ }
}
}
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/EdiReceive/Services/EdiParseDomainService.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/EdiReceive/Services/EdiParseDomainService.cs
new file mode 100644
index 0000000..959d1ab
--- /dev/null
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/EdiReceive/Services/EdiParseDomainService.cs
@@ -0,0 +1,460 @@
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Logging;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp;
+using Volo.Abp.Domain.Repositories;
+using Volo.Abp.Domain.Services;
+using WY.NewJit.EdiReceive.Entitys;
+using WY.NewJit.IRepositories;
+using WY.NewJit.MsgBaseData;
+using WY.NewJit.MsgCheck;
+using WY.NewJit.Common;
+using WY.NewJit.MsgBaseData.Entitys;
+
+namespace WY.NewJit.EdiReceive.Services
+{
+ ///
+ /// 红旗报文接收
+ ///
+ public class EdiParseDomainService : DomainService
+ {
+ #region 成员
+ ///
+ /// 日志
+ ///
+ private readonly ILogger _logger;
+
+ ///
+ /// Dapper仓储
+ ///
+ private readonly INewJitDapperRepository _newJitDapperRepository;
+
+ ///
+ /// 字典领域服务
+ ///
+ private readonly DicDomainService _dicDomainService;
+
+ ///
+ /// 导入记录仓储
+ ///
+ private readonly IRepository _importRecordRepository;
+
+ ///
+ /// M100单据
+ ///
+ private readonly IRepository _billM100Repository;
+
+ ///
+ /// ERP总成分组仓库
+ ///
+ //private readonly IRepository _assemblyCfgGroupRepository;
+
+ ///
+ /// ERP总成仓储
+ ///
+ //private readonly IRepository _assemblyCfgErpRepository;
+
+ ///
+ /// 整车总成配置仓库
+ ///
+ private readonly IRepository _assemblyCfgVehicleRepository;
+
+ ///
+ /// 导入最大流水号 领域服务
+ ///
+ private readonly LastImportHostSNDomainService _lastImportHostSNDomainService;
+
+ ///
+ /// 缓存管理 领域服务
+ ///
+ private readonly HQ_CacheManagerDomainService _hqCacheManagerDomainService;
+
+ ///
+ /// 插入M100、未打印表 领域服务
+ ///
+ private readonly HQ_M100DomainService _hqM100DomainServie;
+
+ ///
+ /// 重复报文仓库
+ ///
+ private readonly IRepository _repeatM100Repository;
+
+ ///
+ /// 未知总成仓库
+ ///
+ private readonly IRepository _unknownAssemblyRepository;
+
+
+ ///
+ /// 报文车型对应零件生产工厂车型
+ ///
+ //private static List _msgToPaiGeVehicleModelList = new List();
+
+ ///
+ /// M100零件生产工厂车型对应生产线
+ ///
+ //private static List _m100VehicleModelProductLineList = new List();
+
+ ///
+ /// 根据车型代码中的前两位(HS),过滤属于派格的订单;只针对派格的订单进行报文解析
+ ///
+ private const string _vehicleModelPrefix = "HS";
+
+ ///
+ /// 错误信息前缀
+ ///
+ private string _errorMessagePrefix
+ {
+ get
+ {
+ return System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + ".";
+ }
+ }
+
+
+ #endregion
+ public EdiParseDomainService(ILogger logger, INewJitDapperRepository newJitDapperRepository, DicDomainService dicDomainService, IRepository importRecordRepository, IRepository billM100Repository, LastImportHostSNDomainService lastImportHostSNDomainService, IRepository assemblyCfgGroupRepository = null, IRepository assemblyCfgErpRepository = null, IRepository assemblyCfgVehicleRepository = null, HQ_CacheManagerDomainService hqCacheManagerDomainService = null, HQ_M100DomainService hqM100DomainServie = null, IRepository repeatM100Repository = null, IRepository unknownAssemblyRepository = null)
+ {
+ _logger = logger;
+ _newJitDapperRepository = newJitDapperRepository;
+ _dicDomainService = dicDomainService;
+ _importRecordRepository = importRecordRepository;
+ _billM100Repository = billM100Repository;
+ _lastImportHostSNDomainService = lastImportHostSNDomainService;
+
+ //_msgToPaiGeVehicleModelList = _dicDomainService.GetDicItems(DicTypeName.报文车型对应派格车型);
+ //_m100VehicleModelProductLineList = _dicDomainService.GetDicItems(DicTypeName.M100派格车型对应生产线);
+ //_assemblyCfgGroupRepository = assemblyCfgGroupRepository;
+ //_assemblyCfgErpRepository = assemblyCfgErpRepository;
+ _assemblyCfgVehicleRepository = assemblyCfgVehicleRepository;
+ _hqCacheManagerDomainService = hqCacheManagerDomainService;
+ _hqM100DomainServie = hqM100DomainServie;
+ _repeatM100Repository = repeatM100Repository;
+ _unknownAssemblyRepository = unknownAssemblyRepository;
+ }
+
+ ///
+ /// 解析报文
+ /// 一、导入记录表
+ /// 1. 从客户网站导出EXCEL格式的订单列表
+ /// 2. 校验 本次导入的最小HostSN必须<= 上次导入的最大HostSN + 1 (上次是10, 本次可以是 9 10 11,不能是12)
+ /// 3. 根据VIN和HostSN,扣除重复导入的记录
+ /// 4. 断号提醒:导入Excel时,如果系统中的流水号不能顺序连接,需要给出提醒,是否继续导入,如果选择继续导入,仍可以导入到系统中
+ /// 5. 最后导入到本系统中 impRecLst
+ ///
+ /// 二、插入M100
+ /// 1. 根据车型代码中的前两位(HS),过滤属于派格的订单;只针对派格的订单进行报文解析
+ /// 2. 根据VIN判断是否重复报文,将重复报文放到“重复报文表”
+ /// 3. 通过车型描述中的颜色(条件一)和规格说明(条件二)两个字段能够定位到该底盘对应哪个总成组(4个总成一组)。如果匹配将订单和总成组进行绑定;如果不匹配将订单放入未知总成
+ /// 4. 插入M100 (更新派格车型、 生产线)
+ /// 5. 插入WaitPrint
+ ///
+ /// 导入Excel内容
+ /// 校验不通过时,是否强制执行通过
+ public async Task ParseEdi(List input, bool forceExecute = false)
+ {
+ ObjectResultDto ret = new ObjectResultDto();
+
+ //扣除重复导入的订单
+ List notRepeatOrder = await GetNotRepeatOrder(input);
+ if (notRepeatOrder.Count == 0)
+ {
+ ret.Status = true;
+ ret.Message = "根据Vin和HostSN,排除在数据库中重复的Excel订单后,已经没有不重复的订单!";
+ return ret;
+ }
+ #region 断号提醒
+ //校验两次导入之间是否断号
+ string betweenBreakNumMsg = await CheckBetweenBreakNum(input);
+ //校验本次导入数据是否断号
+ string breakNumMsg = CheckBreakNum(ref notRepeatOrder);
+ if (betweenBreakNumMsg.HasValue() || breakNumMsg.HasValue())
+ {
+ if (forceExecute == false)
+ {
+ //断号提醒
+ ret.Status = true;
+ ret.Message = betweenBreakNumMsg + breakNumMsg;
+ return ret;
+ }
+ }
+ #endregion
+
+ //初始化缓存
+ _hqCacheManagerDomainService.InitLoadCache();
+
+ //批量插入 导入记录
+ await _importRecordRepository.InsertManyAsync(notRepeatOrder);
+
+ //过滤掉其它厂家的订单,只取派格订单
+ var paigeOrderLst = notRepeatOrder.Where(itm => itm.VehicleModelCode.Substring(0, 2) == _vehicleModelPrefix).OrderBy(itm => itm.HostSN).ToList();
+ foreach (ImportRecord orderItem in paigeOrderLst)
+ {
+ //构建M100实体
+ BillM100 m100Obj = BuildM100Entity(orderItem);
+ //更新车型、产线
+ UpdateProductLine(m100Obj);
+
+ //重复报文
+ bool isRepeat = await _billM100Repository.AnyAsync(itm => itm.HostSN == orderItem.HostSN && itm.VIN == orderItem.Vin);
+ if (isRepeat == true)
+ {
+ #region 重复报文
+ var succObj = InsertM100RepeatBill(orderItem, m100Obj);
+ _logger.LogDebug(_errorMessagePrefix + $"流水号{orderItem.HostSN}是重复报文");
+ ret.Status = (succObj != null);
+ return ret;
+ #endregion
+ }
+
+ //绑定总成分组
+ string colorExplain = orderItem.VehicleModelDesc.Trim().Right(7);
+ Group_Assembly groupAssemblyObj = HQ_CacheManagerDomainService._groupAssemblyList.FirstOrDefault(itm => itm.SpecExplain == orderItem.SpecDesc && itm.ColorExplain == colorExplain);
+ if (groupAssemblyObj != null)
+ {
+ #region 插入整车总成
+ Guid vehicleAssemblyId = GuidGenerator.Create();
+ AssemblyCfgVehicle vehicleAssemblyCfgObj = new AssemblyCfgVehicle(vehicleAssemblyId, null, m100Obj.VehicleModelCode, null, true);
+ foreach (OnlyAssemblyInfo assemblyItem in groupAssemblyObj.AssemblyDetails) //插入子表
+ {
+ vehicleAssemblyCfgObj.AddChildObj(GuidGenerator.Create(), assemblyItem.Id);
+ }
+ var vehicleAssemblyResu = await _assemblyCfgVehicleRepository.InsertAsync(vehicleAssemblyCfgObj, true);
+ if (vehicleAssemblyResu == null)
+ {
+ throw new Exception("插入整车总成返回结果为空InsertAsync!");
+ }
+ #endregion
+
+ //插入M100、未打印表
+ m100Obj.SetAssemblyID(vehicleAssemblyResu.Id);
+ m100Obj.SetBillStatus(BillStatusEnum.Match);
+ var insM100Ret = await _hqM100DomainServie.InsertM100(m100Obj, true);
+ }
+ else
+ {
+ //未知总成
+ _logger.LogDebug(_errorMessagePrefix + $"未匹配总成,插入未知总成开始:{orderItem.HostSN}");
+ //更新单据表
+ m100Obj.SetAssemblyID(null);
+ m100Obj.SetBillStatus(BillStatusEnum.NotMatch);
+ var succObj1 = await _hqM100DomainServie.InsertM100(m100Obj, true);
+
+ //不匹配时,插入未知总成
+ var succObj2 = await InsertUnknownAssembly(m100Obj);
+ _logger.LogDebug(_errorMessagePrefix + $"未匹配总成,插入未知总成完成:{orderItem.HostSN}");
+ ret.Status = (succObj1 != null && succObj2 != null);
+ }
+
+ } //foreach
+
+ //更新本次导入的最大HostSN
+ int curMaxHostSN = input.Max(itm => itm.HostSN);
+ await _lastImportHostSNDomainService.SetCurrentImportMaxHostSN(curMaxHostSN);
+ ret.Status = true;
+ return ret;
+ }
+
+ ///
+ /// 上次导入和本次导入之间的流水号是否连续
+ ///
+ ///
+ ///
+ private async Task CheckBetweenBreakNum(List input)
+ {
+ string ret = "";
+ //取本次导入的最小HostSN
+ int curMinHostSN = input.Min(itm => itm.HostSN);
+ //上次导入的最大HostSN
+ int priorMaxHostSN = await _lastImportHostSNDomainService.GetLastImportMaxHostSN();
+ if (priorMaxHostSN > 0) //第一次导入时(priorMaxHostSN = 0),不需要校验两次导入之间的断号
+ {
+ if (curMinHostSN <= priorMaxHostSN + 1)
+ {
+ }
+ else
+ {
+ //两次导入断号提醒
+ ret = $"两次导入断号提醒:本次导入的最小流水号是:{curMinHostSN},上次导入的最大流水号是:{priorMaxHostSN},两者不连续\r\n";
+ }
+ }
+
+ return ret;
+ }
+
+ private BillM100 BuildM100Entity(ImportRecord orderItem)
+ {
+ BillM100 m100Obj = new BillM100(GuidGenerator.Create());
+ m100Obj.MessageFileReceiveID = orderItem.Id;
+ m100Obj.SerialNum = ServerHelper.VinToSN(orderItem.Vin);
+ m100Obj.SerialNumStr = ServerHelper.ToSerialNumStr(orderItem.OnlineTime, orderItem.HostSN);
+ m100Obj.HostSN = orderItem.HostSN;
+ m100Obj.HostSN2 = orderItem.HostSN; //流水号
+ m100Obj.KNR = orderItem.VehicleBodyCode;
+ m100Obj.VIN = orderItem.Vin;
+ m100Obj.AssemblyID = null;
+ m100Obj.OnlineTime = orderItem.OnlineTime;
+ m100Obj.VehicleModelCode = orderItem.VehicleModelCode.Substring(0, 2);
+ m100Obj.ProductLine = null;
+ m100Obj.Version = "";
+ m100Obj.ReceiveTime = ServerHelper.CurrentDateTime;
+ m100Obj.BillStatus = BillStatusEnum.NotMatch;
+ m100Obj.Description = "";
+ //m100Obj.OperationType = operationType;
+ //m100Obj.Operator = @operator;
+ //m100Obj.OperationTime = operationTime;
+ m100Obj.CanNotPrint = false;
+ m100Obj.NeedReplenishPrint = 0;
+ m100Obj.IsPartSwitch = false;
+ return m100Obj;
+ }
+
+ ///
+ /// 校验本次导入数据断号
+ ///
+ ///
+ ///
+ private static string CheckBreakNum(ref List notRepeatOrder)
+ {
+ StringBuilder sb = new StringBuilder();
+ notRepeatOrder = notRepeatOrder.OrderBy(itm => itm.HostSN).ToList();
+ for (int curIdx = 1; curIdx < notRepeatOrder.Count; curIdx++)
+ {
+ int curVal = notRepeatOrder[curIdx].HostSN;
+ int priorIdx = curIdx - 1;
+ int priorVal = notRepeatOrder[priorIdx].HostSN;
+ if (curVal - priorVal != 1)
+ {
+ sb.AppendLine($"流水号{priorVal}和{curVal}之间存在断号");
+ }
+ }
+ return sb.ToString();
+ }
+
+ ///
+ /// 根据流水号、VIN 扣除重复导入的订单
+ ///
+ ///
+ ///
+ private async Task> GetNotRepeatOrder(List input)
+ {
+ List notRepeatLst = new List();
+ List importHistoryLst = await _importRecordRepository.GetPagedListAsync(0, 10000, "HostSN desc");
+
+ foreach (ImportRecord item in input)
+ {
+ bool hasData = importHistoryLst.Any(itm => itm.HostSN == item.HostSN && itm.Vin == item.Vin);
+ if (hasData)
+ {
+ }
+ else
+ {
+ notRepeatLst.Add(item);
+ }
+ }
+ return notRepeatLst;
+ }
+
+ ///
+ /// 更新车型、生产线
+ ///
+ ///
+ private void UpdateProductLine(BillM100 bill)
+ {
+ string ediVehicleModel = bill.VehicleModelCode; //报文车型
+ //车型转换:3H 转 CC
+ var obj1 = HQ_CacheManagerDomainService._msgToPaiGeVehicleModelList.FirstOrDefault(itm => itm.DicItemCode == ediVehicleModel);
+ if (obj1 != null)
+ {
+ string paigeVehicleModel = obj1.DicItemName; // CC
+ if (paigeVehicleModel.Contains('-')) //去掉B8L-PHEV中的-PHEV
+ {
+ paigeVehicleModel = paigeVehicleModel.Split('-')[0];
+ }
+ bill.SetVehicleModelCode(paigeVehicleModel);
+ //根据车型取对应生产线
+ var obj2 = HQ_CacheManagerDomainService._m100VehicleModelProductLineList.FirstOrDefault(itm => itm.DicItemCode == paigeVehicleModel);
+ if (obj2 != null)
+ {
+ string productLine = obj2.DicItemName;
+ bill.SetProductLine(productLine);
+ }
+ else
+ {
+ string errorMsg = $"零件生产工厂车型{paigeVehicleModel}没有对应的生产线!";
+ _logger.LogError(errorMsg);
+ }
+ }
+ else //报文车型 没有对应的 派格车型
+ {
+ string errorMsg = $"报文车型{ediVehicleModel}没有对应的零件生产工厂车型!";
+ _logger.LogError(errorMsg);
+ }
+ }
+
+ private async Task InsertM100RepeatBill(ImportRecord impordRec, BillM100 m100Bill)
+ {
+ RepeatM100 ret = null;
+ int newSN = ServerHelper.VinToSN(m100Bill.VIN);
+ RepeatM100 repeatBill = new RepeatM100(
+ GuidGenerator.Create(),
+ impordRec.Id,
+ newSN,
+ m100Bill.HostSN,
+ m100Bill.KNR,
+ m100Bill.VIN,
+ null,
+ m100Bill.OnlineTime,
+ ServerHelper.CurrentDateTime,
+ m100Bill.VehicleModelCode,
+ m100Bill.ProductLine,
+ ((DateTime)m100Bill.OnlineTime).ToString("yyyyMM"),
+ BillStatusEnum.None
+ );
+
+ //零件子表赋值
+ foreach (BillM100Part m100Part in m100Bill.BillM100Parts)
+ {
+ repeatBill.AddChildObj(GuidGenerator.Create(), m100Part.PartCode, m100Part.PartNum, m100Part.Description);
+ }
+ //插入重复单据
+ ret = await _repeatM100Repository.InsertAsync(repeatBill, true);
+ return ret;
+ }
+
+ ///
+ /// 不匹配时,插入未知总成,写提醒日志
+ ///
+ ///
+ private async Task InsertUnknownAssembly(BillM100 bill)
+ {
+ UnknownAssembly ret = null;
+ try
+ {
+ //插入未知总成
+ UnknownAssembly unknownAssemblyObj = new UnknownAssembly(GuidGenerator.Create(), bill.Id, "M100");
+ //预批量赋值
+ unknownAssemblyObj.Description = bill.Description; //描述字段保存预批量信息
+
+ //foreach (BillM100Part billPart in bill.BillM100Parts)
+ //{
+ // unknownAssemblyObj.AddChildObj(GuidGenerator.Create(), billPart.PartCode, billPart.PartNum, billPart.Description);
+ //}
+ //var partNumSum = unknownAssemblyObj.UnknownAssemblyParts.Sum(itm => (int)itm.PartNum);
+ //unknownAssemblyObj.SetPartNum(partNumSum);
+ ret = await _unknownAssemblyRepository.InsertAsync(unknownAssemblyObj);
+ return ret;
+ }
+ catch (Exception ex)
+ {
+ throw new Exception($"InsertUnknownAssembly方法报错:" + ex.Message);
+ }
+ }
+
+
+ }
+}
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/EdiReceive/Services/HQ_CacheManagerDomainService.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/EdiReceive/Services/HQ_CacheManagerDomainService.cs
new file mode 100644
index 0000000..7314114
--- /dev/null
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/EdiReceive/Services/HQ_CacheManagerDomainService.cs
@@ -0,0 +1,239 @@
+using Microsoft.Extensions.Logging;
+using System;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Domain.Repositories;
+using Volo.Abp.Guids;
+using Volo.Abp.Uow;
+using WY.NewJit.Common;
+using WY.NewJit.MsgBaseData;
+using WY.NewJit.MsgCheck;
+using WY.NewJit.IRepositories;
+using WY.NewJit.MsgBaseData.Entitys;
+
+namespace WY.NewJit.EdiReceive.Services
+{
+ public partial class HQ_CacheManagerDomainService : ITransientDependency
+ {
+ #region 仓储
+
+ ///
+ /// 日志
+ ///
+ private ILogger _logger;
+
+ ///
+ /// 配置
+ ///
+ private readonly Microsoft.Extensions.Configuration.IConfiguration _configuration;
+
+ ///
+ /// Dapper仓储
+ ///
+ private readonly INewJitDapperRepository _newJitDapperRepository;
+
+ ///
+ /// 字典领域服务
+ ///
+ private readonly DicDomainService _dicDomainService;
+
+ ///
+ /// 跨进程全局配置领域服务
+ ///
+ private readonly GlobalSettingsDomainService _globalSettingsDomainService;
+ #endregion
+
+ #region 缓存
+
+ ///
+ /// 分组对应多个总成 清单-
+ ///
+ public static List _groupAssemblyList = new List();
+
+
+ ///
+ /// 结算件切换列表
+ ///
+ public static List _partSwitchList = new List();
+
+ ///
+ /// 报文车型VS派格车型
+ ///
+ public static List _msgToPaiGeVehicleModelList = new List();
+
+ ///
+ /// R100派格车型VS生产线
+ ///
+ public static List _r100VehicleModelProductLineList = new List();
+
+ ///
+ /// M100派格车型VS生产线
+ ///
+ public static List _m100VehicleModelProductLineList = new List();
+
+ ///
+ /// 结算件信息列表
+ ///
+ public static List _partCfgList = new List();
+
+ #endregion
+
+ #region 变量
+ ///
+ /// 错误信息前缀
+ ///
+ private string _errorMessagePrefix
+ {
+ get
+ {
+ return System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + ".";
+ }
+ }
+
+ ///
+ /// 上一次缓存刷新时间,和配置文件中RefreshCacheIntervalInMinutes一起使用
+ ///
+ private DateTime _lastRefreshCacheTime = DateTime.Now;
+
+ #endregion
+
+ #region 构造函数
+ ///
+ /// 构造函数
+ ///
+ public HQ_CacheManagerDomainService(
+ ILogger logger,
+ Microsoft.Extensions.Configuration.IConfiguration configuration,
+ INewJitDapperRepository newJitDapperRepository,
+ DicDomainService dicDomainService,
+ GlobalSettingsDomainService globalSettingsDomainService
+ )
+ {
+ _logger = logger;
+ _configuration = configuration;
+ _newJitDapperRepository = newJitDapperRepository;
+ _dicDomainService = dicDomainService;
+ _globalSettingsDomainService = globalSettingsDomainService;
+ }
+ #endregion
+
+
+ #region 方法
+ public bool InitLoadCache(bool forceRefresh = false)
+ {
+ bool ret = false;
+ try
+ {
+ if (forceRefresh == true)
+ {
+ DoInitLoadCache();
+ //结算件信息列表,库存系统同步过来,无法缓存
+ DoInitPartCfg();
+ ret = true;
+ }
+ else
+ {
+ bool isFirstRun = (_partCfgList.Any() == false); //第一次执行
+ if (isFirstRun)
+ {
+ DoInitLoadCache();
+ ret = true;
+ }
+ else //不是第一次执行
+ {
+ //判断是否需要刷新
+ bool isRefresh = _globalSettingsDomainService.GetSetting(GlobalSettingsNameEnum.刷新报文解析缓存);
+ if (isRefresh)
+ {
+ DoInitLoadCache();
+ _globalSettingsDomainService.SetSetting(GlobalSettingsNameEnum.刷新报文解析缓存, false);
+ }
+ else
+ {
+ #region 10分钟自动刷新一次缓存
+ int refCacheInterval = _configuration["ConfigDic:RefreshCacheIntervalInMinutes"]?.TryToInt() ?? 10;
+ DateTime nowRefreshCacheTime = DateTime.Now;
+ TimeSpan ts = nowRefreshCacheTime - _lastRefreshCacheTime;
+ if (ts.TotalMinutes >= refCacheInterval)
+ {
+ DoInitLoadCache();
+ _lastRefreshCacheTime = DateTime.Now;
+ }
+ #endregion
+ ret = true;
+ }
+ }
+ //结算件信息列表,库存系统同步过来,无法缓存
+ DoInitPartCfg();
+ }
+ return ret;
+ }
+ catch (Exception ex)
+ {
+ string errorMsg = _errorMessagePrefix + "调用InitLoadCache方法时报错:" + ex.Message;
+ throw new Exception(errorMsg);
+ }
+ }
+
+ ///
+ /// 报文解析前加载缓存
+ ///
+ public void DoInitLoadCache()
+ {
+ //取ERP总成的零件
+ string group2assemblySql = @"
+ select g.Id as GroupId, g.GroupCode, g.VehicleModel, e.Id as ErpAssemblyId, e.ErpAssemblyCode, e.ErpAssemblyName,
+ g.SpecExplain, g.ColorExplain
+ from FisAssemblyCfgGroup g
+ join FisAssemblyCfgErp e on g.Id = e.GroupId
+ where g.IsDisable = 0 and g.IsDeleted = 0
+ order by g.CreationTime desc
+ ";
+ var group2assemblyList = _newJitDapperRepository.GetListBySql(group2assemblySql, true);
+ //转换成分组、总成 两层结构
+ _groupAssemblyList = group2assemblyList.GroupBy(itm => itm.GroupId).Select(itm => new Group_Assembly
+ {
+ Id = itm.Key,
+ GroupCode = itm.ElementAt(0).GroupCode,
+ SpecExplain = itm.ElementAt(0).SpecExplain,
+ ColorExplain = itm.ElementAt(0).ColorExplain,
+
+ AssemblyDetails = itm.Select(itm2 => new OnlyAssemblyInfo
+ {
+ Id = itm2.ErpAssemblyId,
+ ErpAssemblyCode = itm2.ErpAssemblyCode,
+ ErpAssemblyName = itm2.ErpAssemblyName
+ }).ToList()
+
+ }).ToList();
+
+
+ //结算件切换列表
+ string partSwitchSql = "select SourcePartCode, TargetPartCode, ActiveBeginTime, ActiveEndTime from FisPartSwitch";
+ _partSwitchList = _newJitDapperRepository.GetListBySql(partSwitchSql, true);
+
+ _msgToPaiGeVehicleModelList = _dicDomainService.GetDicItems(DicTypeName.报文车型对应派格车型);
+ _r100VehicleModelProductLineList = _dicDomainService.GetDicItems(DicTypeName.R100派格车型对应生产线);
+ _m100VehicleModelProductLineList = _dicDomainService.GetDicItems(DicTypeName.M100派格车型对应生产线);
+ _logger.LogDebug("重新刷新报文解析缓存!");
+ }
+
+ ///
+ /// 初始化零件基本信息
+ ///
+ private void DoInitPartCfg()
+ {
+ //结算件信息列表,库存系统同步过来,无法缓存
+ string partCfgSql = @"select Id, PartCode, PartName, PartType, Description, PartType2, PartType3, RelationKey from FisPartCfg where 1=1"; //,DaXiaoLiangGang,DoorPlankCode,MaterialDescription,SAPMaterialNum
+ _partCfgList = _newJitDapperRepository.GetListBySql(partCfgSql, true);
+
+ }
+ #endregion
+ }
+}
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/EdiReceive/Services/HQ_M100DomainService.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/EdiReceive/Services/HQ_M100DomainService.cs
new file mode 100644
index 0000000..b0be7e4
--- /dev/null
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/EdiReceive/Services/HQ_M100DomainService.cs
@@ -0,0 +1,209 @@
+using Microsoft.Extensions.Logging;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.Domain.Repositories;
+using Volo.Abp.Domain.Services;
+using WY.NewJit.PrintTable;
+using WY.NewJit.Common;
+
+namespace WY.NewJit.MsgCheck
+{
+ public class HQ_M100DomainService : DomainService
+ {
+ ///
+ /// M100单据
+ ///
+ private readonly IRepository _billM100Repository;
+
+ ///
+ /// 日志
+ ///
+ private ILogger _logger;
+
+ ///
+ /// 未打印表
+ ///
+ private readonly IRepository _waitPrintRepository;
+
+ public HQ_M100DomainService(
+ IRepository billM100Repository,
+ ILogger logger,
+ IRepository waitPrintRepository
+ )
+ {
+ _billM100Repository = billM100Repository;
+ _logger = logger;
+ _waitPrintRepository = waitPrintRepository;
+ }
+
+ public async Task InsertM100(BillM100 m100Obj, bool autoSave = false, bool isBatchImportBreakNum = false)
+ {
+ BillM100 m100Ret = null;
+
+ if (isBatchImportBreakNum) //批量导入断号模块调用
+ {
+ //更新M100
+ m100Obj.HostSN2 = 0;
+ //M100转换成WaitPrint:一个底盘、08产线插入3条记录,其它产线插入1条记录
+ WaitPrint[] wpArr2 = M100ConvertToWaitPrint(m100Obj);
+
+ foreach (var wp in wpArr2)
+ {
+ wp.PrintType = PrintTypeEnum.ReplenishPrint;
+ //wp.HostSN2 = 0; //WaitPrint的HostSN2从m100的HostSN2取值
+ }
+ m100Ret = await _billM100Repository.InsertAsync(m100Obj, autoSave); //插入M100
+ await _waitPrintRepository.InsertManyAsync(wpArr2, autoSave); //插入未打印表
+ return m100Ret;
+ }
+
+ //M100转换成WaitPrint:一个底盘、08产线插入3条记录,其它产线插入1条记录
+ WaitPrint[] wpArr = M100ConvertToWaitPrint(m100Obj);
+
+ m100Ret = await _billM100Repository.InsertAsync(m100Obj, autoSave); //插入M100
+ await _waitPrintRepository.InsertManyAsync(wpArr, autoSave); //插入未打印表
+ return m100Ret;
+ }
+
+ private WaitPrint[] M100ConvertToWaitPrint(BillM100 m100Obj)
+ {
+ WaitPrint[] wpArr;
+ WaitPrint mbRec = ConvertWaitPrint(m100Obj, BusinessTypeEnum.MenBan);
+ wpArr = new WaitPrint[1] { mbRec };
+ return wpArr;
+ }
+
+ public async Task UpdateM100(BillM100 m100Obj, bool autoSave = false)
+ {
+ var m100Ret = await _billM100Repository.UpdateAsync(m100Obj, autoSave);
+ if (m100Ret != null)
+ {
+
+ //更新已解析状态时,只涉及门板、不涉及柱护板【柱护板一对一解析成功】
+ List wpLst = await _waitPrintRepository.GetListAsync(itm => itm.M100Id == m100Ret.Id && itm.BusinessType == BusinessTypeEnum.MenBan);
+ foreach (var wp in wpLst)
+ {
+ wp.AssemblyID = m100Ret.AssemblyID;
+ wp.BillStatus = m100Ret.BillStatus;
+ }
+ await _waitPrintRepository.UpdateManyAsync(wpLst, autoSave);
+
+
+ return m100Ret;
+ }
+ return null;
+ }
+
+ private WaitPrint ConvertWaitPrint(BillM100 m100Ret, BusinessTypeEnum businessType)
+ {
+ WaitPrint waitPrint = new WaitPrint(GuidGenerator.Create());
+ ConvertWaitPrint(m100Ret, businessType, waitPrint);
+ return waitPrint;
+ }
+
+ private void ConvertWaitPrint(BillM100 m100Ret, BusinessTypeEnum businessType, WaitPrint waitPrint)
+ {
+ waitPrint.M100Id = m100Ret.Id;
+ waitPrint.BusinessType = businessType;
+ waitPrint.ProductLine = m100Ret.ProductLine;
+ waitPrint.OnlineTime = (DateTime)m100Ret.OnlineTime;
+ waitPrint.HostSN = (int)m100Ret.HostSN;
+ waitPrint.KNR = m100Ret.KNR;
+ waitPrint.VIN = m100Ret.VIN;
+ waitPrint.VehicleModelCode = m100Ret.VehicleModelCode;
+ waitPrint.AssemblyID = m100Ret.AssemblyID;
+ if (businessType == BusinessTypeEnum.MenBan)
+ {
+ waitPrint.BillStatus = m100Ret.BillStatus;
+ }
+ else
+ {
+ waitPrint.BillStatus = BillStatusEnum.Match; //柱护板默认是匹配状态
+ }
+ waitPrint.PrintType = PrintTypeEnum.OrderPrint;
+ waitPrint.HostSN2 = (int)m100Ret.HostSN2;
+ waitPrint.Description = m100Ret.Description;
+ waitPrint.ReceiveTime = m100Ret.ReceiveTime;
+ waitPrint.CreationTime = ServerHelper.CurrentDateTime; //m100Ret.CreationTime;
+ waitPrint.CreatorId = m100Ret.CreatorId;
+ waitPrint.LastModificationTime = m100Ret.LastModificationTime;
+ waitPrint.LastModifierId = m100Ret.LastModifierId;
+ }
+
+ private void Set_WaitPrint(WaitPrint sourceWaitPrint, WaitPrint targetWaitPrint)
+ {
+ targetWaitPrint.M100Id = sourceWaitPrint.M100Id;
+ targetWaitPrint.BusinessType = sourceWaitPrint.BusinessType;
+ targetWaitPrint.ProductLine = sourceWaitPrint.ProductLine;
+ targetWaitPrint.OnlineTime = sourceWaitPrint.OnlineTime;
+ targetWaitPrint.HostSN = sourceWaitPrint.HostSN;
+ targetWaitPrint.KNR = sourceWaitPrint.KNR;
+ targetWaitPrint.VIN = sourceWaitPrint.VIN;
+ targetWaitPrint.VehicleModelCode = sourceWaitPrint.VehicleModelCode;
+ targetWaitPrint.AssemblyID = sourceWaitPrint.AssemblyID;
+ targetWaitPrint.BillStatus = sourceWaitPrint.BillStatus;
+ targetWaitPrint.PrintType = sourceWaitPrint.PrintType;
+ targetWaitPrint.HostSN2 = sourceWaitPrint.HostSN2;
+ targetWaitPrint.Description = sourceWaitPrint.Description;
+ targetWaitPrint.ReceiveTime = sourceWaitPrint.ReceiveTime;
+ targetWaitPrint.CreationTime = sourceWaitPrint.CreationTime;
+ targetWaitPrint.CreatorId = sourceWaitPrint.CreatorId;
+ targetWaitPrint.LastModificationTime = sourceWaitPrint.LastModificationTime;
+ targetWaitPrint.LastModifierId = sourceWaitPrint.LastModifierId;
+ }
+
+ public async Task>> GetM100PartDic(List m100IdLst)
+ {
+ List m100Lst = await _billM100Repository.GetListAsync(itm => m100IdLst.Contains(itm.Id), true);
+ Dictionary> ret = m100Lst.ToDictionary(itm => itm.Id, itm2 => itm2.BillM100Parts);
+ return ret;
+ }
+
+ ///
+ /// 根据M100插入或更新未打印表,【未知总成重新解析时调用】
+ ///
+ ///
+ ///
+ public async Task InsertOrUpdateWaitPrintByM100(BillM100 m100Obj, bool autoSave = false)
+ {
+ ObjectResultDto ret = new ObjectResultDto(true, "");
+ List wpLst = await _waitPrintRepository.GetListAsync(itm => itm.VIN == m100Obj.VIN && itm.BusinessType == BusinessTypeEnum.MenBan);
+ bool hasData = wpLst.Count > 0;
+ if (hasData) //未打印表有数据
+ {
+ foreach (WaitPrint wp in wpLst)
+ {
+ wp.AssemblyID = m100Obj.AssemblyID;
+ wp.BillStatus = m100Obj.BillStatus;
+ }
+ await _waitPrintRepository.UpdateManyAsync(wpLst, autoSave);
+ }
+ else //未打印表没有数据
+ {
+ WaitPrint[] wpArr;
+ if (m100Obj.ProductLine == "08")
+ {
+ WaitPrint mbRec = ConvertWaitPrint(m100Obj, BusinessTypeEnum.MenBan);
+ //WaitPrint zhbOtherRec = ConvertWaitPrint(m100Obj, BusinessTypeEnum.OtherZhuHuBan);
+ //WaitPrint zhbRec = ConvertWaitPrint(m100Obj, BusinessTypeEnum.AC_ZhuHuBan);
+ //wpArr = new WaitPrint[3] { mbRec, zhbOtherRec, zhbRec };
+ wpArr = new WaitPrint[1] { mbRec };
+ }
+ else
+ {
+ WaitPrint mbRec = ConvertWaitPrint(m100Obj, BusinessTypeEnum.MenBan);
+ wpArr = new WaitPrint[1] { mbRec };
+ }
+ foreach (WaitPrint wp in wpArr)
+ {
+ wp.PrintType = PrintTypeEnum.ReplenishPrint;
+ }
+ await _waitPrintRepository.InsertManyAsync(wpArr, autoSave); //插入未打印表
+ }
+ return ret;
+ }
+ }
+}
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/EdiReceive/Services/LastImportHostSNDomainService.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/EdiReceive/Services/LastImportHostSNDomainService.cs
new file mode 100644
index 0000000..d3b9d22
--- /dev/null
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/EdiReceive/Services/LastImportHostSNDomainService.cs
@@ -0,0 +1,102 @@
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Logging;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.Domain.Repositories;
+using Volo.Abp.Domain.Services;
+using WY.NewJit.EdiReceive.Entitys;
+using WY.NewJit.IRepositories;
+using WY.NewJit.MsgBaseData;
+using WY.NewJit.MsgCheck;
+
+namespace WY.NewJit.EdiReceive.Services
+{
+ public class LastImportHostSNDomainService : DomainService
+ {
+ #region 成员
+ ///
+ /// 日志
+ ///
+ private readonly ILogger _logger;
+
+ ///
+ /// Dapper仓储
+ ///
+ private readonly INewJitDapperRepository _newJitDapperRepository;
+
+ ///
+ /// 字典领域服务
+ ///
+ private readonly DicDomainService _dicDomainService;
+
+ ///
+ /// 零件仓储
+ ///
+ private readonly IRepository _importRecordRepository;
+
+ ///
+ /// M100单据
+ ///
+ private readonly IRepository _billM100Repository;
+
+ private readonly IRepository _lastImportHostSNRepository;
+
+ #endregion
+ public LastImportHostSNDomainService(ILogger logger, INewJitDapperRepository newJitDapperRepository, DicDomainService dicDomainService, IRepository importRecordRepository, IRepository billM100Repository, IRepository lastImportHostSNRepository)
+ {
+ _logger = logger;
+ _newJitDapperRepository = newJitDapperRepository;
+ _dicDomainService = dicDomainService;
+ _importRecordRepository = importRecordRepository;
+ _billM100Repository = billM100Repository;
+ _lastImportHostSNRepository = lastImportHostSNRepository;
+ }
+
+ ///
+ /// 假设:产线之间的流水号都是唯一的
+ ///
+ ///
+ ///
+ public async Task GetLastImportMaxHostSN()
+ {
+ var lst = await _lastImportHostSNRepository.GetListAsync();
+ if (lst.Count > 0)
+ {
+ return lst[0].HostSN;
+ }
+ else
+ {
+ bool hasData = await _importRecordRepository.AnyAsync();
+ if (hasData)
+ {
+ int maxSN = await _importRecordRepository.MaxAsync(itm => itm.HostSN);
+ return maxSN;
+ }
+ else
+ {
+ return 0;
+ }
+ }
+ }
+
+ public async Task SetCurrentImportMaxHostSN(int maxHostSN)
+ {
+ var obj = await _lastImportHostSNRepository.FirstOrDefaultAsync();
+ if (obj != null)
+ {
+ obj.HostSN = maxHostSN;
+ await _lastImportHostSNRepository.UpdateAsync(obj, true);
+ }
+ else
+ {
+ LastImportHostSN newObj = new LastImportHostSN(GuidGenerator.Create());
+ newObj.HostSN = maxHostSN;
+ var insRet = await _lastImportHostSNRepository.InsertAsync(newObj);
+ }
+ }
+
+ }
+}
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/AssemblyCfgErp.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/AssemblyCfgErp.cs
index 9e1d59d..8d4eefd 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/AssemblyCfgErp.cs
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/AssemblyCfgErp.cs
@@ -52,6 +52,16 @@ namespace WY.NewJit.MsgBaseData
///
public virtual Guid GroupId { get; set; }
+ ///
+ /// 规格说明
+ ///
+ public virtual string SpecExplain { get; set; }
+
+ ///
+ /// 颜色说明
+ ///
+ public virtual string ColorExplain { get; set; }
+
///
/// 结算件列表
///
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/AssemblyCfgGroup.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/AssemblyCfgGroup.cs
index f197491..02ae18f 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/AssemblyCfgGroup.cs
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/AssemblyCfgGroup.cs
@@ -27,6 +27,17 @@ namespace WY.NewJit.MsgBaseData
///
public virtual bool IsDisable { get; set; }
+ ///
+ /// 规格说明
+ ///
+ public virtual string SpecExplain { get; set; }
+
+ ///
+ /// 颜色说明
+ ///
+ public virtual string ColorExplain { get; set; }
+
+
private AssemblyCfgGroup()
{
}
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/BaseConfig.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/BaseConfig.cs
index e6754cd..c598468 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/BaseConfig.cs
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/BaseConfig.cs
@@ -12,6 +12,19 @@ namespace WY.NewJit.MsgBaseData
///
public class BaseConfig : AggregateRoot
{
+ public BaseConfig()
+ {
+
+ }
+
+ public BaseConfig(Guid id ,string paramName, string paramValue, bool state, string remark):base(id)
+ {
+ ParamName = paramName;
+ ParamValue = paramValue;
+ State = state;
+ Remark = remark;
+ }
+
///
/// 参数名称
///
@@ -21,9 +34,9 @@ namespace WY.NewJit.MsgBaseData
///
public virtual string ParamValue { get; set; }
///
- /// 状态
+ /// 是否启用
///
- public virtual int State { get; set; }
+ public virtual bool State { get; set; }
///
/// 备注
///
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/Group_Assembly_Part.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/Group_Assembly_Part.cs
index 023ebd9..10dfbd4 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/Group_Assembly_Part.cs
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/Group_Assembly_Part.cs
@@ -28,6 +28,34 @@ namespace WY.NewJit.MsgBaseData.Entitys
}
+ public class Group_Assembly
+ {
+ public virtual Guid Id { get; set; }
+ ///
+ /// SAP分组编码(对应SAP的长描述或补充备注)
+ ///
+ public virtual string GroupCode { get; set; }
+
+ ///
+ /// 规格说明
+ ///
+ public virtual string SpecExplain { get; set; }
+
+ ///
+ /// 颜色说明
+ ///
+ public virtual string ColorExplain { get; set; }
+
+ public List AssemblyDetails;
+
+ public Group_Assembly()
+ {
+ AssemblyDetails = new List();
+ }
+
+ }
+
+
public class AssemblyInfo
{
///
@@ -49,6 +77,30 @@ namespace WY.NewJit.MsgBaseData.Entitys
}
+ public class OnlyAssemblyInfo
+ {
+ ///
+ /// Erp总成ID
+ ///
+ public Guid Id { get; set; }
+
+ ///
+ /// Erp总成编码
+ ///
+ public string ErpAssemblyCode { get; set; }
+
+ ///
+ /// Erp总成编码
+ ///
+ public string ErpAssemblyName { get; set; }
+
+ public OnlyAssemblyInfo()
+ {
+ }
+
+ }
+
+
public class PartInfo
{
///
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Services/BaseGonfigDomainService.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Services/BaseGonfigDomainService.cs
index 30c2ff6..c1e3067 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Services/BaseGonfigDomainService.cs
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Services/BaseGonfigDomainService.cs
@@ -10,6 +10,8 @@ namespace WY.NewJit.MsgBaseData
{
public class BaseGonfigDomainService : DomainService
{
+
+ private static List _baseConfigdCaches = new List();//记录缓存
private readonly IRepository _repository;
public BaseGonfigDomainService(IRepository repository)
@@ -17,6 +19,27 @@ namespace WY.NewJit.MsgBaseData
_repository = repository;
}
+ ///
+ /// 更新记录和内存
+ ///
+ ///
+ public async Task UpdateBaseConfigCache()
+ {
+ ObjectResultDto ret = new ObjectResultDto(true, null);
+ _baseConfigdCaches.Clear();//清空缓存
+ _baseConfigdCaches = await _repository.GetListAsync();
+ return ret;
+ }
+ ///
+ /// 根据名称获取参数
+ ///
+ ///
+ ///
+ public BaseConfig GetCachesByName(string name)
+ {
+ var item = _baseConfigdCaches.FirstOrDefault(r => r.ParamName == name);
+ return item;
+ }
}
}
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Entitys/BillM100.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Entitys/BillM100.cs
index cc7474d..e45f905 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Entitys/BillM100.cs
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Entitys/BillM100.cs
@@ -17,7 +17,7 @@ namespace WY.NewJit.MsgCheck
///
/// 报文接收ID,对应报文接收表主键
///
- public virtual Guid? MessageFileReceiveID { get; protected set; }
+ public virtual Guid? MessageFileReceiveID { get; set; }
///
/// 流水号#
@@ -49,7 +49,7 @@ namespace WY.NewJit.MsgCheck
///
/// 车型代码(取通用字典)
///
- public virtual string VehicleModelCode { get; protected set; }
+ public virtual string VehicleModelCode { get; set; }
///
/// 生产线(派格按生产线分类)
@@ -59,17 +59,17 @@ namespace WY.NewJit.MsgCheck
///
/// 版本
///
- public virtual string Version { get; protected set; }
+ public virtual string Version { get; set; }
///
/// 接收时间
///
- public virtual DateTime? ReceiveTime { get; protected set; }
+ public virtual DateTime? ReceiveTime { get; set; }
///
/// 单据状态(0 空;1 未匹配;2 已匹配未打印;3 已打印)
///
- public virtual BillStatusEnum BillStatus { get; protected set; }
+ public virtual BillStatusEnum BillStatus { get; set; }
///
/// 描述
@@ -142,9 +142,9 @@ namespace WY.NewJit.MsgCheck
//因为它会被来自数据库的值覆盖.可能不适用于私有构造函数.
}
- //protected BillM100(Guid id)
- // :base(id)
- //{ }
+ public BillM100(Guid id)
+ : base(id)
+ { }
//public BillM100(Guid id, Guid? messageFileReceiveID, int? serialNum, int? hostSN, string kNR, string vIN, Guid? assemblyID, DateTime? onlineTime, string vehicleModelCode, string version, DateTime? receiveTime, BillStatusEnum billStatus)
// : base(id)
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Services/BillNumberRecordDomainService.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Services/BillNumberRecordDomainService.cs
index 478d69f..4606cb3 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Services/BillNumberRecordDomainService.cs
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Services/BillNumberRecordDomainService.cs
@@ -15,6 +15,9 @@ using WY.NewJit.PrintTable;
namespace WY.NewJit.MsgCheck
{
+ ///
+ /// 吕志斌开发的生成断号数据
+ ///
[Dependency(Microsoft.Extensions.DependencyInjection.ServiceLifetime.Singleton, ReplaceServices = true)]
public class BillNumberRecordDomainService : DomainService
{
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Services/CacheManagerDomainService.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Services/CacheManagerDomainService.cs
index 4018b63..869158b 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Services/CacheManagerDomainService.cs
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Services/CacheManagerDomainService.cs
@@ -1,4 +1,5 @@
-using Microsoft.Extensions.Logging;
+/*
+using Microsoft.Extensions.Logging;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
@@ -22,7 +23,7 @@ using WY.NewJit.MsgBaseData.Entitys;
namespace WY.NewJit.MsgCheck
{
- public partial class CacheManagerDomainService : ITransientDependency
+ public partial class CacheManagerDomainService : ITransientDependency
{
#region 仓储
@@ -301,6 +302,8 @@ namespace WY.NewJit.MsgCheck
}
}
+*/
+
/* 调用缓存管理领域服务的代码
private readonly CacheManagerDomainService _cacheManagerDomainService;
CacheManagerDomainService cacheManagerDomainService
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Services/M100DomainService.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Services/M100DomainService.cs
index 758b74c..7eca2df 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Services/M100DomainService.cs
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Services/M100DomainService.cs
@@ -43,102 +43,7 @@ namespace WY.NewJit.MsgCheck
_billNumRecDomainSrv = billNumRecDomainSrv;
}
- public async Task InsertM100(BillM100 m100Obj, bool autoSave = false, bool isBatchImportBreakNum = false)
- {
- BillM100 m100Ret = null;
-
- if (isBatchImportBreakNum) //批量导入断号模块调用
- {
- //更新M100
- m100Obj.HostSN2 = 0;
- //M100转换成WaitPrint:一个底盘、08产线插入3条记录,其它产线插入1条记录
- WaitPrint[] wpArr2 = M100ConvertToWaitPrint(m100Obj);
-
- foreach (var wp in wpArr2)
- {
- wp.PrintType = PrintTypeEnum.ReplenishPrint;
- //wp.HostSN2 = 0; //WaitPrint的HostSN2从m100的HostSN2取值
- }
- m100Ret = await _billM100Repository.InsertAsync(m100Obj, autoSave); //插入M100
- await _waitPrintRepository.InsertManyAsync(wpArr2, autoSave); //插入未打印表
- return m100Ret;
- }
-
- //调用HostSN2方法
- BillNumberRecord billNumRec = await _billNumRecDomainSrv.GetBillNumber(m100Obj.HostSN.TryToIntNotNull(), m100Obj.ProductLine);
- var normalObj = billNumRec.Datas.FirstOrDefault(itm => itm.BillNumberType == BillNumberTypeEnum.正常);
- var lateObj = billNumRec.Datas.FirstOrDefault(itm => itm.BillNumberType == BillNumberTypeEnum.迟到);
- var breakNumLst = billNumRec.Datas.Where(itm => itm.BillNumberType == BillNumberTypeEnum.断号).ToList();
- //更新M100
- m100Obj.HostSN2 = normalObj != null ? normalObj.HostSN2 : lateObj.HostSN2;
- //M100转换成WaitPrint:一个底盘、08产线插入3条记录,其它产线插入1条记录
- WaitPrint[] wpArr = M100ConvertToWaitPrint(m100Obj);
-
- //处理断号
- if (breakNumLst.Count > 0)
- {
- List waitPrintBreakNumLst = new List();
- foreach (var sourceWaitPrint in wpArr) //遍历门板、柱护板、其它柱护板
- {
- foreach (var breaknum in breakNumLst) //遍历断号
- {
- WaitPrint targetWaitPrint = new WaitPrint(GuidGenerator.Create());
- targetWaitPrint.M100Id = Guid.Parse("00000000-0000-0000-0000-000000000000");
- targetWaitPrint.BusinessType = sourceWaitPrint.BusinessType;
- targetWaitPrint.ProductLine = sourceWaitPrint.ProductLine;
- targetWaitPrint.OnlineTime = sourceWaitPrint.OnlineTime;
- targetWaitPrint.HostSN = breaknum.HostSN;
- targetWaitPrint.KNR = null;
- targetWaitPrint.VIN = null;
- targetWaitPrint.VehicleModelCode = null;
- targetWaitPrint.AssemblyID = null;
- targetWaitPrint.BillStatus = BillStatusEnum.BreakNum;
- targetWaitPrint.PrintType = PrintTypeEnum.OrderPrint;
- targetWaitPrint.HostSN2 = breaknum.HostSN2;
- targetWaitPrint.Description = null;
- targetWaitPrint.ReceiveTime = null;
- targetWaitPrint.CreationTime = ServerHelper.CurrentDateTime;
- //targetWaitPrint.CreatorId = null;
- //targetWaitPrint.LastModificationTime = null;
- //targetWaitPrint.LastModifierId = null;
- waitPrintBreakNumLst.Add(targetWaitPrint);
- }
- }
- await _waitPrintRepository.InsertManyAsync(waitPrintBreakNumLst, autoSave); //插入断号
- }
- //处理正常、迟到
- if (normalObj != null) //正常
- {
- m100Ret = await _billM100Repository.InsertAsync(m100Obj, autoSave); //插入M100
- await _waitPrintRepository.InsertManyAsync(wpArr, autoSave); //插入未打印表
- }
- else if (lateObj != null) //迟到
- {
- m100Ret = await _billM100Repository.InsertAsync(m100Obj, autoSave); //插入M100
-
- foreach (var item in wpArr) //遍历门板、柱护板、其它柱护板
- {
- var insObj = await _waitPrintRepository.FirstOrDefaultAsync(itm =>
- itm.HostSN2 == m100Obj.HostSN2
- && itm.BillStatus == BillStatusEnum.BreakNum
- && itm.BusinessType == item.BusinessType);
- if (insObj != null)
- {
- //如果未打印表有对应断号记录,将迟到记录与之合并
- Set_WaitPrint(item, insObj);
- var updateRet = await _waitPrintRepository.UpdateAsync(insObj);
- }
- else
- {
- //如果未打印表没有----对应断号记录,则插入
- item.PrintType = PrintTypeEnum.ReplenishPrint;
- var insertRet = await _waitPrintRepository.InsertAsync(item, autoSave);
- }
- }
- }
- return m100Ret;
- }
-
+ /*
private WaitPrint[] M100ConvertToWaitPrint(BillM100 m100Obj)
{
WaitPrint[] wpArr;
@@ -158,40 +63,6 @@ namespace WY.NewJit.MsgCheck
return wpArr;
}
- public async Task UpdateM100(BillM100 m100Obj, bool autoSave = false)
- {
- var m100Ret = await _billM100Repository.UpdateAsync(m100Obj, autoSave);
- if (m100Ret != null)
- {
- //if (m100Obj.ProductLine == "08")
- //{
- // //更新已解析状态时,只涉及门板、2条柱护板
- // WaitPrint mbRec = await _waitPrintRepository.GetAsync(itm => itm.M100Id == m100Ret.Id && itm.BusinessType == BusinessTypeEnum.MenBan);
- // ConvertWaitPrint(m100Ret, BusinessTypeEnum.MenBan, mbRec);
- // await _waitPrintRepository.UpdateAsync(mbRec);
- //}
- //else
- //{
- // WaitPrint mbRec = await _waitPrintRepository.GetAsync(itm => itm.M100Id == m100Ret.Id && itm.BusinessType == BusinessTypeEnum.MenBan);
- // ConvertWaitPrint(m100Ret, BusinessTypeEnum.MenBan, mbRec);
- // await _waitPrintRepository.UpdateAsync(mbRec);
- //}
-
- //更新已解析状态时,只涉及门板、不涉及柱护板【柱护板一对一解析成功】
- List wpLst = await _waitPrintRepository.GetListAsync(itm => itm.M100Id == m100Ret.Id && itm.BusinessType == BusinessTypeEnum.MenBan);
- foreach (var wp in wpLst)
- {
- wp.AssemblyID = m100Ret.AssemblyID;
- wp.BillStatus = m100Ret.BillStatus;
- }
- await _waitPrintRepository.UpdateManyAsync(wpLst, autoSave);
-
-
- return m100Ret;
- }
- return null;
- }
-
private WaitPrint ConvertWaitPrint(BillM100 m100Ret, BusinessTypeEnum businessType)
{
WaitPrint waitPrint = new WaitPrint(GuidGenerator.Create());
@@ -249,12 +120,148 @@ namespace WY.NewJit.MsgCheck
targetWaitPrint.LastModificationTime = sourceWaitPrint.LastModificationTime;
targetWaitPrint.LastModifierId = sourceWaitPrint.LastModifierId;
}
+ */
+
+ public async Task InsertM100(BillM100 m100Obj, bool autoSave = false, bool isBatchImportBreakNum = false)
+ {
+ throw new NotImplementedException();
+ //BillM100 m100Ret = null;
+
+ //if (isBatchImportBreakNum) //批量导入断号模块调用
+ //{
+ // //更新M100
+ // m100Obj.HostSN2 = 0;
+ // //M100转换成WaitPrint:一个底盘、08产线插入3条记录,其它产线插入1条记录
+ // WaitPrint[] wpArr2 = M100ConvertToWaitPrint(m100Obj);
+
+ // foreach (var wp in wpArr2)
+ // {
+ // wp.PrintType = PrintTypeEnum.ReplenishPrint;
+ // //wp.HostSN2 = 0; //WaitPrint的HostSN2从m100的HostSN2取值
+ // }
+ // m100Ret = await _billM100Repository.InsertAsync(m100Obj, autoSave); //插入M100
+ // await _waitPrintRepository.InsertManyAsync(wpArr2, autoSave); //插入未打印表
+ // return m100Ret;
+ //}
+
+ ////调用HostSN2方法
+ //BillNumberRecord billNumRec = await _billNumRecDomainSrv.GetBillNumber(m100Obj.HostSN.TryToIntNotNull(), m100Obj.ProductLine);
+ //var normalObj = billNumRec.Datas.FirstOrDefault(itm => itm.BillNumberType == BillNumberTypeEnum.正常);
+ //var lateObj = billNumRec.Datas.FirstOrDefault(itm => itm.BillNumberType == BillNumberTypeEnum.迟到);
+ //var breakNumLst = billNumRec.Datas.Where(itm => itm.BillNumberType == BillNumberTypeEnum.断号).ToList();
+ ////更新M100
+ //m100Obj.HostSN2 = normalObj != null ? normalObj.HostSN2 : lateObj.HostSN2;
+ ////M100转换成WaitPrint:一个底盘、08产线插入3条记录,其它产线插入1条记录
+ //WaitPrint[] wpArr = M100ConvertToWaitPrint(m100Obj);
+
+ ////处理断号
+ //if (breakNumLst.Count > 0)
+ //{
+ // List waitPrintBreakNumLst = new List();
+ // foreach (var sourceWaitPrint in wpArr) //遍历门板、柱护板、其它柱护板
+ // {
+ // foreach (var breaknum in breakNumLst) //遍历断号
+ // {
+ // WaitPrint targetWaitPrint = new WaitPrint(GuidGenerator.Create());
+ // targetWaitPrint.M100Id = Guid.Parse("00000000-0000-0000-0000-000000000000");
+ // targetWaitPrint.BusinessType = sourceWaitPrint.BusinessType;
+ // targetWaitPrint.ProductLine = sourceWaitPrint.ProductLine;
+ // targetWaitPrint.OnlineTime = sourceWaitPrint.OnlineTime;
+ // targetWaitPrint.HostSN = breaknum.HostSN;
+ // targetWaitPrint.KNR = null;
+ // targetWaitPrint.VIN = null;
+ // targetWaitPrint.VehicleModelCode = null;
+ // targetWaitPrint.AssemblyID = null;
+ // targetWaitPrint.BillStatus = BillStatusEnum.BreakNum;
+ // targetWaitPrint.PrintType = PrintTypeEnum.OrderPrint;
+ // targetWaitPrint.HostSN2 = breaknum.HostSN2;
+ // targetWaitPrint.Description = null;
+ // targetWaitPrint.ReceiveTime = null;
+ // targetWaitPrint.CreationTime = ServerHelper.CurrentDateTime;
+ // //targetWaitPrint.CreatorId = null;
+ // //targetWaitPrint.LastModificationTime = null;
+ // //targetWaitPrint.LastModifierId = null;
+ // waitPrintBreakNumLst.Add(targetWaitPrint);
+ // }
+ // }
+ // await _waitPrintRepository.InsertManyAsync(waitPrintBreakNumLst, autoSave); //插入断号
+ //}
+ ////处理正常、迟到
+ //if (normalObj != null) //正常
+ //{
+ // m100Ret = await _billM100Repository.InsertAsync(m100Obj, autoSave); //插入M100
+ // await _waitPrintRepository.InsertManyAsync(wpArr, autoSave); //插入未打印表
+ //}
+ //else if (lateObj != null) //迟到
+ //{
+ // m100Ret = await _billM100Repository.InsertAsync(m100Obj, autoSave); //插入M100
+
+ // foreach (var item in wpArr) //遍历门板、柱护板、其它柱护板
+ // {
+ // var insObj = await _waitPrintRepository.FirstOrDefaultAsync(itm =>
+ // itm.HostSN2 == m100Obj.HostSN2
+ // && itm.BillStatus == BillStatusEnum.BreakNum
+ // && itm.BusinessType == item.BusinessType);
+ // if (insObj != null)
+ // {
+ // //如果未打印表有对应断号记录,将迟到记录与之合并
+ // Set_WaitPrint(item, insObj);
+ // var updateRet = await _waitPrintRepository.UpdateAsync(insObj);
+ // }
+ // else
+ // {
+ // //如果未打印表没有----对应断号记录,则插入
+ // item.PrintType = PrintTypeEnum.ReplenishPrint;
+ // var insertRet = await _waitPrintRepository.InsertAsync(item, autoSave);
+ // }
+ // }
+ //}
+ //return m100Ret;
+ }
+
+ public async Task UpdateM100(BillM100 m100Obj, bool autoSave = false)
+ {
+ throw new NotImplementedException();
+ //var m100Ret = await _billM100Repository.UpdateAsync(m100Obj, autoSave);
+ //if (m100Ret != null)
+ //{
+ // //if (m100Obj.ProductLine == "08")
+ // //{
+ // // //更新已解析状态时,只涉及门板、2条柱护板
+ // // WaitPrint mbRec = await _waitPrintRepository.GetAsync(itm => itm.M100Id == m100Ret.Id && itm.BusinessType == BusinessTypeEnum.MenBan);
+ // // ConvertWaitPrint(m100Ret, BusinessTypeEnum.MenBan, mbRec);
+ // // await _waitPrintRepository.UpdateAsync(mbRec);
+ // //}
+ // //else
+ // //{
+ // // WaitPrint mbRec = await _waitPrintRepository.GetAsync(itm => itm.M100Id == m100Ret.Id && itm.BusinessType == BusinessTypeEnum.MenBan);
+ // // ConvertWaitPrint(m100Ret, BusinessTypeEnum.MenBan, mbRec);
+ // // await _waitPrintRepository.UpdateAsync(mbRec);
+ // //}
+
+ // //更新已解析状态时,只涉及门板、不涉及柱护板【柱护板一对一解析成功】
+ // List wpLst = await _waitPrintRepository.GetListAsync(itm => itm.M100Id == m100Ret.Id && itm.BusinessType == BusinessTypeEnum.MenBan);
+ // foreach (var wp in wpLst)
+ // {
+ // wp.AssemblyID = m100Ret.AssemblyID;
+ // wp.BillStatus = m100Ret.BillStatus;
+ // }
+ // await _waitPrintRepository.UpdateManyAsync(wpLst, autoSave);
+
+
+ // return m100Ret;
+ //}
+ //return null;
+ }
+
public async Task>> GetM100PartDic(List m100IdLst)
{
- List m100Lst = await _billM100Repository.GetListAsync(itm => m100IdLst.Contains(itm.Id), true);
- Dictionary> ret = m100Lst.ToDictionary(itm => itm.Id, itm2 => itm2.BillM100Parts);
- return ret;
+ throw new NotImplementedException();
+
+ //List m100Lst = await _billM100Repository.GetListAsync(itm => m100IdLst.Contains(itm.Id), true);
+ //Dictionary> ret = m100Lst.ToDictionary(itm => itm.Id, itm2 => itm2.BillM100Parts);
+ //return ret;
}
///
@@ -264,41 +271,43 @@ namespace WY.NewJit.MsgCheck
///
public async Task InsertOrUpdateWaitPrintByM100(BillM100 m100Obj, bool autoSave = false)
{
- ObjectResultDto ret = new ObjectResultDto(true, "");
- List wpLst = await _waitPrintRepository.GetListAsync(itm => itm.VIN == m100Obj.VIN && itm.BusinessType == BusinessTypeEnum.MenBan);
- bool hasData = wpLst.Count > 0;
- if (hasData) //未打印表有数据
- {
- foreach (WaitPrint wp in wpLst)
- {
- wp.AssemblyID = m100Obj.AssemblyID;
- wp.BillStatus = m100Obj.BillStatus;
- }
- await _waitPrintRepository.UpdateManyAsync(wpLst, autoSave);
- }
- else //未打印表没有数据
- {
- WaitPrint[] wpArr;
- if (m100Obj.ProductLine == "08")
- {
- WaitPrint mbRec = ConvertWaitPrint(m100Obj, BusinessTypeEnum.MenBan);
- //WaitPrint zhbOtherRec = ConvertWaitPrint(m100Obj, BusinessTypeEnum.OtherZhuHuBan);
- //WaitPrint zhbRec = ConvertWaitPrint(m100Obj, BusinessTypeEnum.AC_ZhuHuBan);
- //wpArr = new WaitPrint[3] { mbRec, zhbOtherRec, zhbRec };
- wpArr = new WaitPrint[1] { mbRec };
- }
- else
- {
- WaitPrint mbRec = ConvertWaitPrint(m100Obj, BusinessTypeEnum.MenBan);
- wpArr = new WaitPrint[1] { mbRec };
- }
- foreach (WaitPrint wp in wpArr)
- {
- wp.PrintType = PrintTypeEnum.ReplenishPrint;
- }
- await _waitPrintRepository.InsertManyAsync(wpArr, autoSave); //插入未打印表
- }
- return ret;
+ throw new NotImplementedException();
+
+ //ObjectResultDto ret = new ObjectResultDto(true, "");
+ //List wpLst = await _waitPrintRepository.GetListAsync(itm => itm.VIN == m100Obj.VIN && itm.BusinessType == BusinessTypeEnum.MenBan);
+ //bool hasData = wpLst.Count > 0;
+ //if (hasData) //未打印表有数据
+ //{
+ // foreach (WaitPrint wp in wpLst)
+ // {
+ // wp.AssemblyID = m100Obj.AssemblyID;
+ // wp.BillStatus = m100Obj.BillStatus;
+ // }
+ // await _waitPrintRepository.UpdateManyAsync(wpLst, autoSave);
+ //}
+ //else //未打印表没有数据
+ //{
+ // WaitPrint[] wpArr;
+ // if (m100Obj.ProductLine == "08")
+ // {
+ // WaitPrint mbRec = ConvertWaitPrint(m100Obj, BusinessTypeEnum.MenBan);
+ // //WaitPrint zhbOtherRec = ConvertWaitPrint(m100Obj, BusinessTypeEnum.OtherZhuHuBan);
+ // //WaitPrint zhbRec = ConvertWaitPrint(m100Obj, BusinessTypeEnum.AC_ZhuHuBan);
+ // //wpArr = new WaitPrint[3] { mbRec, zhbOtherRec, zhbRec };
+ // wpArr = new WaitPrint[1] { mbRec };
+ // }
+ // else
+ // {
+ // WaitPrint mbRec = ConvertWaitPrint(m100Obj, BusinessTypeEnum.MenBan);
+ // wpArr = new WaitPrint[1] { mbRec };
+ // }
+ // foreach (WaitPrint wp in wpArr)
+ // {
+ // wp.PrintType = PrintTypeEnum.ReplenishPrint;
+ // }
+ // await _waitPrintRepository.InsertManyAsync(wpArr, autoSave); //插入未打印表
+ //}
+ //return ret;
}
}
}
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Services/R100CheckDomainService.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Services/R100CheckDomainService.cs
index 005006e..f85566e 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Services/R100CheckDomainService.cs
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Services/R100CheckDomainService.cs
@@ -991,6 +991,48 @@ namespace WY.NewJit.MsgCheck
}
+
+ [Serializable]
+ public class Group2Assembly
+ {
+ ///
+ /// 分组Id, 对应总成分组表Id
+ ///
+ public Guid GroupId { get; set; }
+
+ ///
+ /// 分组代码
+ ///
+ public string GroupCode { get; set; }
+
+ ///
+ /// Erp总成ID
+ ///
+ public Guid ErpAssemblyId { get; set; }
+
+ ///
+ /// Erp总成编码
+ ///
+ public string ErpAssemblyCode { get; set; }
+
+ ///
+ /// Erp总成名称
+ ///
+ public string ErpAssemblyName { get; set; }
+
+ ///
+ /// 规格说明
+ ///
+ public virtual string SpecExplain { get; set; }
+
+ ///
+ /// 颜色说明
+ ///
+ public virtual string ColorExplain { get; set; }
+
+ }
+
+
public class ErpAssemblyMain
{
public Guid Id { get; set; }
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/WY.NewJit.Domain.csproj b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/WY.NewJit.Domain.csproj
index 55f387a..7fda79f 100644
--- a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/WY.NewJit.Domain.csproj
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/WY.NewJit.Domain.csproj
@@ -30,7 +30,6 @@
-
diff --git a/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.EntityFrameworkCore.DbMigrations/Migrations/20240110033428_NewJitPG_HQ_0110.Designer.cs b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.EntityFrameworkCore.DbMigrations/Migrations/20240110033428_NewJitPG_HQ_0110.Designer.cs
new file mode 100644
index 0000000..c2d1124
--- /dev/null
+++ b/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.EntityFrameworkCore.DbMigrations/Migrations/20240110033428_NewJitPG_HQ_0110.Designer.cs
@@ -0,0 +1,6126 @@
+//
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Volo.Abp.EntityFrameworkCore;
+using WY.NewJit.EntityFrameworkCore;
+
+namespace WY.NewJit.Migrations
+{
+ [DbContext(typeof(NewJitMigrationsDbContext))]
+ [Migration("20240110033428_NewJitPG_HQ_0110")]
+ partial class NewJitPG_HQ_0110
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer)
+ .HasAnnotation("Relational:MaxIdentifierLength", 128)
+ .HasAnnotation("ProductVersion", "5.0.17")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ApplicationName")
+ .HasMaxLength(96)
+ .HasColumnType("nvarchar(96)")
+ .HasColumnName("ApplicationName");
+
+ b.Property("BrowserInfo")
+ .HasMaxLength(512)
+ .HasColumnType("nvarchar(512)")
+ .HasColumnName("BrowserInfo");
+
+ b.Property("ClientId")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)")
+ .HasColumnName("ClientId");
+
+ b.Property("ClientIpAddress")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)")
+ .HasColumnName("ClientIpAddress");
+
+ b.Property("ClientName")
+ .HasMaxLength(128)
+ .HasColumnType("nvarchar(128)")
+ .HasColumnName("ClientName");
+
+ b.Property("Comments")
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)")
+ .HasColumnName("Comments");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("nvarchar(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("CorrelationId")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)")
+ .HasColumnName("CorrelationId");
+
+ b.Property("Exceptions")
+ .HasMaxLength(4000)
+ .HasColumnType("nvarchar(4000)")
+ .HasColumnName("Exceptions");
+
+ b.Property("ExecutionDuration")
+ .HasColumnType("int")
+ .HasColumnName("ExecutionDuration");
+
+ b.Property("ExecutionTime")
+ .HasColumnType("datetime2");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("nvarchar(max)")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("HttpMethod")
+ .HasMaxLength(16)
+ .HasColumnType("nvarchar(16)")
+ .HasColumnName("HttpMethod");
+
+ b.Property("HttpStatusCode")
+ .HasColumnType("int")
+ .HasColumnName("HttpStatusCode");
+
+ b.Property("ImpersonatorTenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("ImpersonatorTenantId");
+
+ b.Property("ImpersonatorUserId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("ImpersonatorUserId");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.Property("TenantName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Url")
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)")
+ .HasColumnName("Url");
+
+ b.Property("UserId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("UserId");
+
+ b.Property("UserName")
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)")
+ .HasColumnName("UserName");
+
+ b.HasKey("Id");
+
+ b.HasIndex("TenantId", "ExecutionTime");
+
+ b.HasIndex("TenantId", "UserId", "ExecutionTime");
+
+ b.ToTable("AbpAuditLogs");
+ });
+
+ modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AuditLogId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("AuditLogId");
+
+ b.Property("ExecutionDuration")
+ .HasColumnType("int")
+ .HasColumnName("ExecutionDuration");
+
+ b.Property("ExecutionTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("ExecutionTime");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("nvarchar(max)")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("MethodName")
+ .HasMaxLength(128)
+ .HasColumnType("nvarchar(128)")
+ .HasColumnName("MethodName");
+
+ b.Property("Parameters")
+ .HasMaxLength(2000)
+ .HasColumnType("nvarchar(2000)")
+ .HasColumnName("Parameters");
+
+ b.Property("ServiceName")
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)")
+ .HasColumnName("ServiceName");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AuditLogId");
+
+ b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime");
+
+ b.ToTable("AbpAuditLogActions");
+ });
+
+ modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AuditLogId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("AuditLogId");
+
+ b.Property("ChangeTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("ChangeTime");
+
+ b.Property("ChangeType")
+ .HasColumnType("tinyint")
+ .HasColumnName("ChangeType");
+
+ b.Property("EntityId")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("nvarchar(128)")
+ .HasColumnName("EntityId");
+
+ b.Property("EntityTenantId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("EntityTypeFullName")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("nvarchar(128)")
+ .HasColumnName("EntityTypeFullName");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("nvarchar(max)")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AuditLogId");
+
+ b.HasIndex("TenantId", "EntityTypeFullName", "EntityId");
+
+ b.ToTable("AbpEntityChanges");
+ });
+
+ modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("EntityChangeId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("NewValue")
+ .HasMaxLength(512)
+ .HasColumnType("nvarchar(512)")
+ .HasColumnName("NewValue");
+
+ b.Property("OriginalValue")
+ .HasMaxLength(512)
+ .HasColumnType("nvarchar(512)")
+ .HasColumnName("OriginalValue");
+
+ b.Property("PropertyName")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("nvarchar(128)")
+ .HasColumnName("PropertyName");
+
+ b.Property("PropertyTypeFullName")
+ .IsRequired()
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)")
+ .HasColumnName("PropertyTypeFullName");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("EntityChangeId");
+
+ b.ToTable("AbpEntityPropertyChanges");
+ });
+
+ modelBuilder.Entity("Volo.Abp.BackgroundJobs.BackgroundJobRecord", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("nvarchar(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("CreationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("CreationTime");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("nvarchar(max)")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("IsAbandoned")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bit")
+ .HasDefaultValue(false);
+
+ b.Property("JobArgs")
+ .IsRequired()
+ .HasMaxLength(1048576)
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("JobName")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("LastTryTime")
+ .HasColumnType("datetime2");
+
+ b.Property("NextTryTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Priority")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("tinyint")
+ .HasDefaultValue((byte)15);
+
+ b.Property("TryCount")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("smallint")
+ .HasDefaultValue((short)0);
+
+ b.HasKey("Id");
+
+ b.HasIndex("IsAbandoned", "NextTryTime");
+
+ b.ToTable("AbpBackgroundJobs");
+ });
+
+ modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("ProviderKey")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("ProviderName")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("Value")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("nvarchar(128)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Name", "ProviderName", "ProviderKey");
+
+ b.ToTable("AbpFeatureValues");
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("nvarchar(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("Description")
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("nvarchar(max)")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("IsStatic")
+ .HasColumnType("bit");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)");
+
+ b.Property("Regex")
+ .HasMaxLength(512)
+ .HasColumnType("nvarchar(512)");
+
+ b.Property("RegexDescription")
+ .HasMaxLength(128)
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("Required")
+ .HasColumnType("bit");
+
+ b.Property("ValueType")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.ToTable("AbpClaimTypes");
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("SourceTenantId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("SourceUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TargetTenantId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TargetUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId")
+ .IsUnique()
+ .HasFilter("[SourceTenantId] IS NOT NULL AND [TargetTenantId] IS NOT NULL");
+
+ b.ToTable("AbpLinkUsers");
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("nvarchar(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("nvarchar(max)")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("IsDefault")
+ .HasColumnType("bit")
+ .HasColumnName("IsDefault");
+
+ b.Property("IsPublic")
+ .HasColumnType("bit")
+ .HasColumnName("IsPublic");
+
+ b.Property("IsStatic")
+ .HasColumnType("bit")
+ .HasColumnName("IsStatic");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)");
+
+ b.Property("NormalizedName")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("NormalizedName");
+
+ b.ToTable("AbpRoles");
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ClaimType")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)");
+
+ b.Property("ClaimValue")
+ .HasMaxLength(1024)
+ .HasColumnType("nvarchar(1024)");
+
+ b.Property("RoleId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("RoleId");
+
+ b.ToTable("AbpRoleClaims");
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Action")
+ .HasMaxLength(96)
+ .HasColumnType("nvarchar(96)");
+
+ b.Property("ApplicationName")
+ .HasMaxLength(96)
+ .HasColumnType("nvarchar(96)");
+
+ b.Property("BrowserInfo")
+ .HasMaxLength(512)
+ .HasColumnType("nvarchar(512)");
+
+ b.Property("ClientId")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("ClientIpAddress")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("nvarchar(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("CorrelationId")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("CreationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("nvarchar(max)")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("Identity")
+ .HasMaxLength(96)
+ .HasColumnType("nvarchar(96)");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.Property("TenantName")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("UserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("UserName")
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("TenantId", "Action");
+
+ b.HasIndex("TenantId", "ApplicationName");
+
+ b.HasIndex("TenantId", "Identity");
+
+ b.HasIndex("TenantId", "UserId");
+
+ b.ToTable("AbpSecurityLogs");
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AccessFailedCount")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasDefaultValue(0)
+ .HasColumnName("AccessFailedCount");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("nvarchar(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("CreationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("CreatorId");
+
+ b.Property("DeleterId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("DeleterId");
+
+ b.Property("DeletionTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("DeletionTime");
+
+ b.Property("Email")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)")
+ .HasColumnName("Email");
+
+ b.Property("EmailConfirmed")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bit")
+ .HasDefaultValue(false)
+ .HasColumnName("EmailConfirmed");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("nvarchar(max)")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bit")
+ .HasDefaultValue(false)
+ .HasColumnName("IsDeleted");
+
+ b.Property("IsExternal")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bit")
+ .HasDefaultValue(false)
+ .HasColumnName("IsExternal");
+
+ b.Property("LastModificationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("LastModificationTime");
+
+ b.Property("LastModifierId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("LastModifierId");
+
+ b.Property("LockoutEnabled")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bit")
+ .HasDefaultValue(false)
+ .HasColumnName("LockoutEnabled");
+
+ b.Property("LockoutEnd")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("Name")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)")
+ .HasColumnName("Name");
+
+ b.Property("NormalizedEmail")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)")
+ .HasColumnName("NormalizedEmail");
+
+ b.Property("NormalizedUserName")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)")
+ .HasColumnName("NormalizedUserName");
+
+ b.Property("PasswordHash")
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)")
+ .HasColumnName("PasswordHash");
+
+ b.Property("PhoneNumber")
+ .HasMaxLength(16)
+ .HasColumnType("nvarchar(16)")
+ .HasColumnName("PhoneNumber");
+
+ b.Property("PhoneNumberConfirmed")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bit")
+ .HasDefaultValue(false)
+ .HasColumnName("PhoneNumberConfirmed");
+
+ b.Property("SecurityStamp")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)")
+ .HasColumnName("SecurityStamp");
+
+ b.Property("Surname")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)")
+ .HasColumnName("Surname");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.Property("TwoFactorEnabled")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bit")
+ .HasDefaultValue(false)
+ .HasColumnName("TwoFactorEnabled");
+
+ b.Property("UserName")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)")
+ .HasColumnName("UserName");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Email");
+
+ b.HasIndex("NormalizedEmail");
+
+ b.HasIndex("NormalizedUserName");
+
+ b.HasIndex("UserName");
+
+ b.ToTable("AbpUsers");
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ClaimType")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)");
+
+ b.Property("ClaimValue")
+ .HasMaxLength(1024)
+ .HasColumnType("nvarchar(1024)");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.Property("UserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("AbpUserClaims");
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("LoginProvider")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("ProviderDisplayName")
+ .HasMaxLength(128)
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("ProviderKey")
+ .IsRequired()
+ .HasMaxLength(196)
+ .HasColumnType("nvarchar(196)");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.HasKey("UserId", "LoginProvider");
+
+ b.HasIndex("LoginProvider", "ProviderKey");
+
+ b.ToTable("AbpUserLogins");
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b =>
+ {
+ b.Property("OrganizationUnitId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("UserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("CreatorId");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.HasKey("OrganizationUnitId", "UserId");
+
+ b.HasIndex("UserId", "OrganizationUnitId");
+
+ b.ToTable("AbpUserOrganizationUnits");
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("RoleId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.HasKey("UserId", "RoleId");
+
+ b.HasIndex("RoleId", "UserId");
+
+ b.ToTable("AbpUserRoles");
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("LoginProvider")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("Name")
+ .HasMaxLength(128)
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.Property("Value")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("UserId", "LoginProvider", "Name");
+
+ b.ToTable("AbpUserTokens");
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Code")
+ .IsRequired()
+ .HasMaxLength(95)
+ .HasColumnType("nvarchar(95)")
+ .HasColumnName("Code");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("nvarchar(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("CreationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("CreatorId");
+
+ b.Property("DeleterId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("DeleterId");
+
+ b.Property("DeletionTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("DeletionTime");
+
+ b.Property("DisplayName")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("nvarchar(128)")
+ .HasColumnName("DisplayName");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("nvarchar(max)")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bit")
+ .HasDefaultValue(false)
+ .HasColumnName("IsDeleted");
+
+ b.Property("LastModificationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("LastModificationTime");
+
+ b.Property("LastModifierId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("LastModifierId");
+
+ b.Property("ParentId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Code");
+
+ b.HasIndex("ParentId");
+
+ b.ToTable("AbpOrganizationUnits");
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b =>
+ {
+ b.Property("OrganizationUnitId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("RoleId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("CreatorId");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.HasKey("OrganizationUnitId", "RoleId");
+
+ b.HasIndex("RoleId", "OrganizationUnitId");
+
+ b.ToTable("AbpOrganizationUnitRoles");
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResource", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AllowedAccessTokenSigningAlgorithms")
+ .HasMaxLength(100)
+ .HasColumnType("nvarchar(100)");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("nvarchar(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("CreationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("CreatorId");
+
+ b.Property("DeleterId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("DeleterId");
+
+ b.Property("DeletionTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("DeletionTime");
+
+ b.Property("Description")
+ .HasMaxLength(1000)
+ .HasColumnType("nvarchar(1000)");
+
+ b.Property("DisplayName")
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
+
+ b.Property("Enabled")
+ .HasColumnType("bit");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("nvarchar(max)")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bit")
+ .HasDefaultValue(false)
+ .HasColumnName("IsDeleted");
+
+ b.Property("LastModificationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("LastModificationTime");
+
+ b.Property("LastModifierId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("LastModifierId");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
+
+ b.Property("ShowInDiscoveryDocument")
+ .HasColumnType("bit");
+
+ b.HasKey("Id");
+
+ b.ToTable("IdentityServerApiResources");
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b =>
+ {
+ b.Property("ApiResourceId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Type")
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
+
+ b.HasKey("ApiResourceId", "Type");
+
+ b.ToTable("IdentityServerApiResourceClaims");
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceProperty", b =>
+ {
+ b.Property("ApiResourceId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Key")
+ .HasMaxLength(250)
+ .HasColumnType("nvarchar(250)");
+
+ b.Property("Value")
+ .HasMaxLength(2000)
+ .HasColumnType("nvarchar(2000)");
+
+ b.HasKey("ApiResourceId", "Key", "Value");
+
+ b.ToTable("IdentityServerApiResourceProperties");
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceScope", b =>
+ {
+ b.Property("ApiResourceId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Scope")
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
+
+ b.HasKey("ApiResourceId", "Scope");
+
+ b.ToTable("IdentityServerApiResourceScopes");
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceSecret", b =>
+ {
+ b.Property("ApiResourceId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Type")
+ .HasMaxLength(250)
+ .HasColumnType("nvarchar(250)");
+
+ b.Property("Value")
+ .HasMaxLength(4000)
+ .HasColumnType("nvarchar(4000)");
+
+ b.Property("Description")
+ .HasMaxLength(1000)
+ .HasColumnType("nvarchar(1000)");
+
+ b.Property