安虹睿 5 days ago
parent
commit
fafbc26c8d
  1. 5
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/Extends/MenBanReports/MenBanPackingListDto.cs
  2. 128
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Dtos/BillM110Dto.cs
  3. 38
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Dtos/BillM110PartDto.cs
  4. 104
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Dtos/CreateUpdateBillM110Dto.cs
  5. 32
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Dtos/CreateUpdateBillM110PartDto.cs
  6. 127
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Dtos/QueryBillM110Dto.cs
  7. 157
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Dtos/ResultBillM110Dto.cs
  8. 115
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Interfaces/IBillM110AppService.cs
  9. 85
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/RepeatMessages/M110Repeat/Dtos/CreateUpdateRepeatM110Dto.cs
  10. 35
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/RepeatMessages/M110Repeat/Dtos/CreateUpdateRepeatM110PartDto.cs
  11. 87
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/RepeatMessages/M110Repeat/Dtos/QueryRepeatM110Dto.cs
  12. 115
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/RepeatMessages/M110Repeat/Dtos/RepeatM110Dto.cs
  13. 38
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/RepeatMessages/M110Repeat/Dtos/RepeatM110PartDto.cs
  14. 58
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/RepeatMessages/M110Repeat/Interfaces/IRepeatM110AppService.cs
  15. 1082
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/WY.NewJit.Application.Contracts.xml
  16. 175
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM100s/BillM100AppService.cs
  17. 5088
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM110s/BillM110AppService.cs
  18. 2
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/RepeatMessages/RepeatM100AppService.cs
  19. 375
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/RepeatMessages/RepeatM110AppService.cs
  20. 2
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/RepeatMessages/RepeatR100AppService.cs
  21. 17
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/NewJitApplicationAutoMapperProfile.cs
  22. 310
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/WY.NewJit.Application.xml
  23. 8
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain.Shared/MsgBaseData/LogTypeEnum.cs
  24. 4
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Entitys/BillM100.cs
  25. 187
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Entitys/BillM110.cs
  26. 49
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Entitys/BillM110Part.cs
  27. 40
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Entitys/RepeatM110.cs
  28. 12
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Entitys/RepeatM110Part.cs
  29. 704
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Services/M110CheckDomainService.cs
  30. 49
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.EntityFrameworkCore/EntityFrameworkCore/NewJitDbContextModelCreatingExtensions.cs
  31. 195
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Job.ConsoleApp/Messages/MsgTransmissionService.cs

5
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/Extends/MenBanReports/MenBanPackingListDto.cs

@ -90,7 +90,10 @@ namespace WY.NewJit.Extends
/// </summary>
public virtual List<MenBanPackingRecDto> Details { get; set; }
/// <summary>
/// 报表状态
/// </summary>
public virtual ReportStatusEnum ReportStatus { get; set; }

128
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Dtos/BillM110Dto.cs

@ -0,0 +1,128 @@
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.MsgCheck
{
/// <summary>
/// 零件查询结果DTO
/// </summary>
[ExcelExporter(Name = "M110单据", AutoFitAllColumn = true, MaxRowNumberOnASheet = 1000)] //一个Sheet最大允许的行数,设置了之后将输出多个Sheet
[Serializable]
public class BillM110Dto: AuditedEntityDto<Guid>
{
/// <summary>
/// 流水号#
/// </summary>
[ExporterHeader(DisplayName = "流水号")]
[ImporterHeader(Name = "流水号")]
public int? SerialNum { get; set; }
/// <summary>
/// 大众顺序号
/// </summary>
[ExporterHeader(DisplayName = "大众顺序号")]
[ImporterHeader(Name = "大众顺序号")]
public int? HostSN { get; set; }
/// <summary>
/// KNR
/// </summary>
[ExporterHeader(DisplayName = "KNR")]
[ImporterHeader(Name = "KNR")]
public string KNR { get; set; }
/// <summary>
/// 底牌号#
/// </summary>
[ExporterHeader(DisplayName = "底牌号")]
[ImporterHeader(Name = "底牌号")]
public string VIN { get; set; }
/// <summary>
/// 总成ID
/// </summary>
[ExporterHeader(DisplayName = "总成ID")]
[ImporterHeader(Name = "总成ID")]
public Guid? AssemblyID { get; set; }
/// <summary>
/// 上线时间
/// </summary>
[ExporterHeader(DisplayName = "上线时间")]
[ImporterHeader(Name = "上线时间")]
public DateTime? OnlineTime { get; set; }
/// <summary>
/// 车型代码(取通用字典)
/// </summary>
[ExporterHeader(DisplayName = "车型代码")]
[ImporterHeader(Name = "车型代码")]
public string VehicleModelCode { get; set; }
/// <summary>
/// 生产线(派格按生产线分类)
/// </summary>
[ExporterHeader(DisplayName = " 生产线")]
[ImporterHeader(Name = " 生产线")]
public virtual string ProductLine { get; set; }
/// <summary>
/// 版本
/// </summary>
[ExporterHeader(DisplayName = "版本")]
[ImporterHeader(Name = "版本")]
public string Version { get; set; }
/// <summary>
/// 接收时间
/// </summary>
[ExporterHeader(DisplayName = "接收时间")]
[ImporterHeader(Name = "接收时间")]
public DateTime? ReceiveTime { get; set; }
/// <summary>
/// 单据状态(0 空;1 未匹配;2 已匹配未打印;3 已打印)
/// </summary>
[ExporterHeader(DisplayName = "单据状态")]
[ImporterHeader(Name = "单据状态")]
public BillStatusEnum BillStatus { get; set; }
/// <summary>
/// 描述
/// </summary>
[ExporterHeader(DisplayName = "描述")]
[ImporterHeader(Name = "描述")]
public string Description { get; set; }
/// <summary>
/// 涂装重复单据包含的零件列表
/// </summary>
public List<BillM110PartDto> BillM110Parts { get; set; }
/// <summary>
/// 手工操作类型:0 none,1 手工添加,2 手工修改
/// </summary>
[ExporterHeader(DisplayName = "手工操作类型")]
[ImporterHeader(Name = "手工操作类型")]
public ManualOperationTypeEnum OperationType { get; set; }
/// <summary>
/// 手工操作员
/// </summary>
[ExporterHeader(DisplayName = "手工操作员")]
[ImporterHeader(Name = "手工操作员")]
public string Operator { get; set; }
/// <summary>
/// 手工操作日期
/// </summary>
[ExporterHeader(DisplayName = "手工操作日期")]
[ImporterHeader(Name = "手工操作日期")]
public DateTime? OperationTime { get; set; }
}
}

38
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Dtos/BillM110PartDto.cs

@ -0,0 +1,38 @@
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.MsgCheck
{
/// <summary>
/// 零件查询结果DTO
/// </summary>
[ExcelExporter(Name = "M110单据包含的零件信息", AutoFitAllColumn = true, MaxRowNumberOnASheet = 1000)] //一个Sheet最大允许的行数,设置了之后将输出多个Sheet
[Serializable]
public class BillM110PartDto : EntityDto<Guid>
{
/// <summary>
/// 客户零件代码
/// </summary>
[ExporterHeader(DisplayName = "客户零件代码")]
[ImporterHeader(Name = "客户零件代码")]
public string PartCode { get; set; }
/// <summary>
/// 客户零件数量
/// </summary>
[ExporterHeader(DisplayName = "客户零件数量")]
[ImporterHeader(Name = "客户零件数量")]
public double? PartNum { get; set; }
/// <summary>
/// 描述
/// </summary>
[ExporterHeader(DisplayName = "描述")]
[ImporterHeader(Name = "描述")]
public string Description { get; set; }
}
}

104
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Dtos/CreateUpdateBillM110Dto.cs

@ -0,0 +1,104 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;
using Volo.Abp.Application.Dtos;
namespace WY.NewJit.MsgCheck
{
[Serializable]
public class CreateUpdateBillM110Dto
{
/// <summary>
/// 流水号#
/// </summary>
public int? SerialNum { get; set; }
/// <summary>
/// 大众顺序号
/// </summary>
[Required]
public int? HostSN { get; set; }
/// <summary>
/// KNR
/// </summary>
[Required]
[StringLength(100)]
public string KNR { get; set; }
/// <summary>
/// 底牌号#
/// </summary>
[Required]
[StringLength(100)]
public string VIN { get; set; }
/// <summary>
/// 总成ID
/// </summary>
public Guid? AssemblyID { get; set; }
/// <summary>
/// 上线时间
/// </summary>
[Required]
public DateTime? OnlineTime { get; set; }
/// <summary>
/// 车型代码(取通用字典)
/// </summary>
[Required]
public string VehicleModelCode { get; set; }
/// <summary>
/// 生产线(派格按生产线分类)
/// </summary>
public virtual string ProductLine { get; set; }
/// <summary>
/// 版本
/// </summary>
public string Version { get; set; }
/// <summary>
/// 接收时间
/// </summary>
[Required]
public DateTime? ReceiveTime { get; set; }
/// <summary>
/// 单据状态(0 空;1 未匹配;2 已匹配未打印;3 已打印)
/// </summary>
[Required]
public BillStatusEnum BillStatus { get; set; }
/// <summary>
/// 描述
/// </summary>
[StringLength(200)]
public string Description { get; set; }
/// <summary>
/// 涂装重复单据包含的零件列表
/// </summary>
public virtual List<CreateUpdateBillM110PartDto> BillM110Parts { get; set; }
/// <summary>
/// 手工操作类型:0 none,1 手工添加,2 手工修改
/// </summary>
public ManualOperationTypeEnum OperationType { get; set; }
/// <summary>
/// 手工操作员
/// </summary>
public string Operator { get; set; }
/// <summary>
/// 手工操作日期
/// </summary>
public DateTime? OperationTime { get; set; }
}
}

32
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Dtos/CreateUpdateBillM110PartDto.cs

@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;
using Volo.Abp.Application.Dtos;
namespace WY.NewJit.MsgCheck
{
[Serializable]
public class CreateUpdateBillM110PartDto
{
/// <summary>
/// 客户零件代码
/// </summary>
[Required]
[StringLength(100)]
public string PartCode { get; set; }
/// <summary>
/// 客户零件数量
/// </summary>
[Required]
public double? PartNum { get; set; }
/// <summary>
/// 描述
/// </summary>
[StringLength(200)]
public string Description { get; set; }
}
}

127
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Dtos/QueryBillM110Dto.cs

@ -0,0 +1,127 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using Volo.Abp.Application.Dtos;
using WY.NewJit.Common;
namespace WY.NewJit.MsgCheck
{
[Serializable]
public class QueryBillM110Dto : PagedAndSortedBase
{
/// <summary>
/// 流水号起
/// </summary>
public int? SerialNumBegin { get; set; }
/// <summary>
/// 流水号止
/// </summary>
public int? SerialNumEnd { get; set; }
/// <summary>
/// 大众顺序号起
/// </summary>
public int? HostSNBegin { get; set; }
/// <summary>
/// 大众顺序号止
/// </summary>
public int? HostSNEnd { get; set; }
/// <summary>
/// KNR起
/// </summary>
public string KNRBegin { get; set; }
/// <summary>
/// KNR止
/// </summary>
public string KNREnd { get; set; }
/// <summary>
/// 底牌号起
/// </summary>
public string VINBegin { get; set; }
/// <summary>
/// 底牌号止
/// </summary>
public string VINEnd { get; set; }
/// <summary>
/// 总成ID
/// </summary>
public Guid? AssemblyID { get; set; }
/// <summary>
/// 上线时间起
/// </summary>
public DateTime? OnlineTimeBegin { get; set; }
/// <summary>
/// 上线时间止
/// </summary>
public DateTime? OnlineTimeEnd { get; set; }
/// <summary>
/// 车型代码(取通用字典)
/// </summary>
public string VehicleModelCode { get; set; }
/// <summary>
/// 生产线(派格按生产线分类)
/// </summary>
public virtual string ProductLine { get; set; }
/// <summary>
/// 版本
/// </summary>
public string Version { get; set; }
/// <summary>
/// 接收时间起
/// </summary>
public DateTime? ReceiveTimeBegin { get; set; }
/// <summary>
/// 接收时间止
/// </summary>
public DateTime? ReceiveTimeEnd { get; set; }
/// <summary>
/// 单据状态(0 空;1 未匹配;2 未打印;3 已打印)
/// </summary>
public BillStatusEnum? BillStatus { get; set; }
/// <summary>
/// 是否单据维护
/// </summary>
public bool? IsBillMaintenance { get; set; }
/// <summary>
/// 不可打印
/// </summary>
public bool? CanNotPrint { get; set; }
/// <summary>
/// 柱护板单据状态(0 空;1 未匹配;2 未打印;3 已打印)
/// </summary>
public ZHBBillStatusEnum? ZHBBillStatus { get; set; }
/// <summary>
/// 为真时只显示需要补打的记录
/// </summary>
public bool IsNeedReplenishPrint { get; set; }
public string GroupName { get; set; } = "";
/// <summary>
/// 是否查询M110归档数据
/// </summary>
public bool IsQueryArchive { get; set; } = false;
}
}

157
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Dtos/ResultBillM110Dto.cs

@ -0,0 +1,157 @@
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.MsgCheck
{
/// <summary>
/// 零件查询结果DTO
/// </summary>
[ExcelExporter(Name = "M110单据查询结果", AutoFitAllColumn = true, MaxRowNumberOnASheet = 1000)] //一个Sheet最大允许的行数,设置了之后将输出多个Sheet
[Serializable]
public class ResultBillM110Dto : EntityDto<Guid>
{
/// <summary>
/// 流水号#
/// </summary>
[ExporterHeader(DisplayName = "流水号")]
[ImporterHeader(Name = "流水号")]
public int? SerialNum { get; set; }
/// <summary>
/// 大众顺序号
/// </summary>
[ExporterHeader(DisplayName = "大众顺序号")]
[ImporterHeader(Name = "大众顺序号")]
public int? HostSN { get; set; }
/// <summary>
/// KNR
/// </summary>
[ExporterHeader(DisplayName = "KNR")]
[ImporterHeader(Name = "KNR")]
public string KNR { get; set; }
/// <summary>
/// 底牌号#
/// </summary>
[ExporterHeader(DisplayName = "底牌号")]
[ImporterHeader(Name = "底牌号")]
public string VIN { get; set; }
/// <summary>
/// 总成ID
/// </summary>
[ExporterHeader(DisplayName = "总成ID")]
[ImporterHeader(Name = "总成ID")]
public Guid? AssemblyID { get; set; }
/// <summary>
/// 上线时间
/// </summary>
[ExporterHeader(DisplayName = "上线时间")]
[ImporterHeader(Name = "上线时间")]
public DateTime? OnlineTime { get; set; }
/// <summary>
/// 车型代码(取通用字典)
/// </summary>
[ExporterHeader(DisplayName = "车型代码")]
[ImporterHeader(Name = "车型代码")]
public string VehicleModelCode { get; set; }
/// <summary>
/// 生产线(派格按生产线分类)
/// </summary>
public virtual string ProductLine { get; set; }
/// <summary>
/// 版本
/// </summary>
[ExporterHeader(DisplayName = "版本")]
[ImporterHeader(Name = "版本")]
public string Version { get; set; }
/// <summary>
/// 接收时间
/// </summary>
[ExporterHeader(DisplayName = "接收时间")]
[ImporterHeader(Name = "接收时间")]
public DateTime? ReceiveTime { get; set; }
/// <summary>
/// 单据状态(0 空;1 未匹配;2 已匹配未打印;3 已打印)
/// </summary>
[ExporterHeader(DisplayName = "单据状态")]
[ImporterHeader(Name = "单据状态")]
public BillStatusEnum BillStatus { get; set; }
/// <summary>
/// 描述
/// </summary>
[ExporterHeader(DisplayName = "描述")]
[ImporterHeader(Name = "描述")]
public string Description { get; set; }
///// <summary>
///// 涂装重复单据包含的零件列表
///// </summary>
//public List<BillM110PartDto> M110BillParts { get; set; }
/// <summary>
/// 总成名称
/// </summary>
[ExporterHeader(DisplayName = "总成名称")]
[ImporterHeader(Name = "总成名称")]
public string AssemblyName { get; set; }
/// <summary>
/// 车型名称(取通用字典)
/// </summary>
[ExporterHeader(DisplayName = "车型名称")]
[ImporterHeader(Name = "车型名称")]
public string VehicleModelName { get; set; }
/// <summary>
/// R100总成名称
/// </summary>
[ExporterHeader(DisplayName = "R100总成名称")]
[ImporterHeader(Name = "R100总成名称")]
public string R100AssemblyName { get; set; }
/// <summary>
/// R100上线时间
/// </summary>
[ExporterHeader(DisplayName = "R100上线时间")]
[ImporterHeader(Name = "R100上线时间")]
public DateTime? R100OnlineTime { get; set; }
/// <summary>
/// 打印时间
/// </summary>
[ExporterHeader(DisplayName = "打印时间")]
[ImporterHeader(Name = "打印时间")]
public virtual DateTime? PrintTime { get; set; }
/// <summary>
/// 不可打印
/// </summary>
[ExporterHeader(IsIgnore =true)]
[ImporterHeader(IsIgnore = true)]
public virtual bool? CanNotPrint { get; set; }
/// <summary>
/// 柱护板打印状态(不为空时表示已打印)
/// </summary>
[ExporterHeader(IsIgnore = true)]
[ImporterHeader(IsIgnore = true)]
public virtual string PrintBillNum { get; set; }
}
}

115
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Interfaces/IBillM110AppService.cs

@ -0,0 +1,115 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using WY.NewJit.Extends;
namespace WY.NewJit.MsgCheck
{
public interface IBillM110AppService
{
#region 接口方法
/// 根据筛选条件获取分页实体列表
/// </summary>
/// <param name="input">输入查询条件</param>
/// <param name="page">输入分页条件</param>
/// <returns>返回符合条件的排序分页列表</returns>
Task<PagedResultDto<ResultBillM110Dto>> GetListAsync(QueryBillM110Dto input);
/// <summary>
/// 按主键获取唯一实体
/// </summary>
/// <param name="id">主键</param>
/// <returns>实体信息</returns>
Task<ObjectResultDto<BillM110Dto>> GetAsync(Guid id);
/// <summary>
/// 添加实体
/// </summary>
/// <param name="input">添加内容</param>
/// <returns>执行成功返回真</returns>
Task<ObjectResultDto<Guid>> CreateAsync(CreateUpdateBillM110Dto input);
/// <summary>
/// 修改实体
/// </summary>
/// <param name="id">更新主键</param>
/// <param name="input">修改内容</param>
/// <returns>执行成功返回真</returns>
Task<ObjectResultDto> UpdateAsync(Guid id, CreateUpdateBillM110Dto input);
/// <summary>
/// 删除实体
/// </summary>
/// <param name="id">删除主键</param>
/// <returns>执行成功返回真</returns>
Task<ObjectResultDto> DeleteAsync(string id);
/// <summary>
/// 导出信息
/// </summary>
/// <param name="input">导出查询条件</param>
/// <returns>执行成功返回真</returns>
Task<ObjectResultDto<string>> ExportAsync(QueryBillM110Dto input);
/// <summary>
/// 导入信息
/// </summary>
/// <param name="input">导入文件流</param>
/// <returns>执行成功返回真</returns>
Task<ObjectResultDto> ImportAsync(Byte[] input);
/// <summary>
/// 根据生产线获取正常打印单据的起始大众顺序号
/// </summary>
/// <param name="productLine">生产线</param>
/// <returns>起始大众顺序号</returns>
Task<ObjectResultDto<int?>> GetPrintStartHostSN2(string productLine, string isZhuHuBan,string GroupName = null);
/// <summary>
/// 打印前检查门板大众顺序号是否断号
/// </summary>
/// <param name="input"></param>
/// <returns>断号时Item不为空</returns>
Task<ListResultDto<string>> CheckMBHostSNBreakNum(MenBanPrintInputDto input);
/// <summary>
/// 打印前检查柱护板大众顺序号是否断号
/// </summary>
/// <param name="input"></param>
/// <returns>断号时Item不为空</returns>
//Task<ListResultDto<string>> CheckZHBHostSNBreakNum(ZhuHuBanPrintInputDto input);
/// <summary>
/// 打印门板装箱单
/// </summary>
/// <param name="input"></param>
/// <returns>执行成功返回真</returns>
//Task<ObjectResultDto<MenBanPrintResultDto>> PrintMenBanPackingList(MenBanPrintInputDto input);
/// <summary>
/// 打印柱护板装箱单
/// </summary>
/// <param name="input"></param>
/// <returns>执行成功返回真</returns>
//Task<ObjectResultDto<ZhuHuBanPrintResultDto>> PrintZhuHuBanPackingList(ZhuHuBanPrintInputDto input);
#endregion
/// <summary>
/// 生产线超时提醒
/// </summary>
/// <param name="input">生产线编号列表</param>
/// <returns>生产线超时情况</returns>
Task<ListResultDto<TimeOutRemindResultDto>> ProductLineTimeoutRemind(TimeOutRemindInputDto input);
//Task<PagedResultDto<ResultBillM110Dto>> GetReplenishPrintListAsync(QueryBillM110Dto input);
}
}

85
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/RepeatMessages/M110Repeat/Dtos/CreateUpdateRepeatM110Dto.cs

@ -0,0 +1,85 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Domain.Entities.Auditing;
namespace WY.NewJit.MsgCheck
{
/// <summary>
/// 涂装重复单据
/// </summary>
[Serializable]
public class CreateUpdateRepeatM110Dto
{
/// <summary>
/// 报文接收ID,对应报文接收表主键
/// </summary>
public Guid MessageFileReceiveID { get; set; }
/// <summary>
/// 流水号#
/// </summary>
public int? SerialNum { get; set; }
/// <summary>
/// 大众顺序号
/// </summary>
public int? HostSN { get; set; }
/// <summary>
/// KNR
/// </summary>
public string KNR { get; set; }
/// <summary>
/// 底牌号#
/// </summary>
public string VIN { get; set; }
/// <summary>
/// 总成ID
/// </summary>
public Guid? AssemblyID { get; set; }
/// <summary>
/// 上线时间
/// </summary>
public DateTime? OnlineTime { get; set; }
/// <summary>
/// 接收时间
/// </summary>
public DateTime? ReceiveTime { get; set; }
/// <summary>
/// 车型代码(取通用字典)
/// </summary>
public string VehicleModelCode { get; set; }
/// <summary>
/// 生产线(派格按生产线分类)
/// </summary>
public virtual string ProductLine { get; set; }
/// <summary>
/// 版本
/// </summary>
public string Version { get; set; }
/// <summary>
/// 单据状态(0 空;1 未匹配;2 已匹配未打印;3 已打印)
/// </summary>
public BillStatusEnum BillStatus { get; set; }
/// <summary>
/// 描述
/// </summary>
public virtual string Description { get; set; }
/// <summary>
/// 涂装重复单据包含的零件列表
/// </summary>
public virtual List<CreateUpdateRepeatM110PartDto> M110RepeatParts { get; set; }
public CreateUpdateRepeatM110Dto()
{ }
}
}

35
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/RepeatMessages/M110Repeat/Dtos/CreateUpdateRepeatM110PartDto.cs

@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Domain.Entities.Auditing;
namespace WY.NewJit.MsgCheck
{
/// <summary>
/// 涂装重复单据和零件关系表
/// </summary>
[Serializable]
public class CreateUpdateRepeatM110PartDto
{
/// <summary>
/// 客户零件代码
/// </summary>
public string PartCode { get; set; }
/// <summary>
/// 客户零件数量
/// </summary>
public double? PartNum { get; set; }
/// <summary>
/// 描述
/// </summary>
public string Description { get; set; }
public CreateUpdateRepeatM110PartDto()
{ }
}
}

87
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/RepeatMessages/M110Repeat/Dtos/QueryRepeatM110Dto.cs

@ -0,0 +1,87 @@
using System;
using System.Collections.Generic;
using System.Text;
using Volo.Abp.Application.Dtos;
using WY.NewJit.Common;
namespace WY.NewJit.MsgCheck
{
[Serializable]
public class QueryRepeatM110Dto : PagedAndSortedBase
{
/// <summary>
/// 大众顺序号起
/// </summary>
public int? HostSNBegin { get; set; }
/// <summary>
/// 大众顺序号止
/// </summary>
public int? HostSNEnd { get; set; }
/// <summary>
/// KNR起
/// </summary>
public string KNRBegin { get; set; }
/// <summary>
/// KNR止
/// </summary>
public string KNREnd { get; set; }
/// <summary>
/// 底牌号起
/// </summary>
public string VINBegin { get; set; }
/// <summary>
/// 底牌号止
/// </summary>
public string VINEnd { get; set; }
/// <summary>
/// 总成ID
/// </summary>
//public Guid? AssemblyID { get; set; }
/// <summary>
/// 上线时间起
/// </summary>
public DateTime? OnlineTimeBegin { get; set; }
/// <summary>
/// 上线时间止
/// </summary>
public DateTime? OnlineTimeEnd { get; set; }
/// <summary>
/// 车型代码(取通用字典)
/// </summary>
public string VehicleModelCode { get; set; }
/// <summary>
/// 生产线(派格按生产线分类)
/// </summary>
public virtual string ProductLine { get; set; }
/// <summary>
/// 版本
/// </summary>
public string Version { get; set; }
/// <summary>
/// 接收时间起
/// </summary>
public DateTime? ReceiveTimeBegin { get; set; }
/// <summary>
/// 接收时间止
/// </summary>
public DateTime? ReceiveTimeEnd { get; set; }
}
}

115
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/RepeatMessages/M110Repeat/Dtos/RepeatM110Dto.cs

@ -0,0 +1,115 @@
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.MsgCheck
{
/// <summary>
/// 零件查询结果DTO
/// </summary>
[ExcelExporter(Name = "M110重复报文", AutoFitAllColumn = true, MaxRowNumberOnASheet = 1000)] //一个Sheet最大允许的行数,设置了之后将输出多个Sheet
[Serializable]
public class RepeatM110Dto: AuditedEntityDto<Guid>
{
/// <summary>
/// 流水号#
/// </summary>
[ExporterHeader(DisplayName = "流水号")]
[ImporterHeader(Name = "流水号")]
public int? SerialNum { get; set; }
/// <summary>
/// 大众顺序号
/// </summary>
[ExporterHeader(DisplayName = "大众顺序号")]
[ImporterHeader(Name = "大众顺序号")]
public int? HostSN { get; set; }
/// <summary>
/// KNR
/// </summary>
[ExporterHeader(DisplayName = "KNR")]
[ImporterHeader(Name = "KNR")]
public string KNR { get; set; }
/// <summary>
/// 底牌号#
/// </summary>
[ExporterHeader(DisplayName = "底牌号")]
[ImporterHeader(Name = "底牌号")]
public string VIN { get; set; }
/// <summary>
/// 总成ID
/// </summary>
[ExporterHeader(DisplayName = "总成ID")]
[ImporterHeader(Name = "总成ID")]
public Guid? AssemblyID { get; set; }
/// <summary>
/// 上线时间
/// </summary>
[ExporterHeader(DisplayName = "上线时间")]
[ImporterHeader(Name = "上线时间")]
public DateTime? OnlineTime { get; set; }
/// <summary>
/// 接收时间
/// </summary>
[ExporterHeader(DisplayName = "接收时间")]
[ImporterHeader(Name = "接收时间")]
public DateTime? ReceiveTime { get; set; }
/// <summary>
/// 车型代码(取通用字典)
/// </summary>
[ExporterHeader(DisplayName = "车型代码")]
[ImporterHeader(Name = "车型代码")]
public string VehicleModelCode { get; set; }
/// <summary>
/// 生产线(派格按生产线分类)
/// </summary>
[ExporterHeader(DisplayName = "生产线")]
[ImporterHeader(Name = "生产线")]
public virtual string ProductLine { get; set; }
/// <summary>
/// 版本
/// </summary>
[ExporterHeader(DisplayName = "版本")]
[ImporterHeader(Name = "版本")]
public string Version { get; set; }
/// <summary>
/// 单据状态(0 空;1 未匹配;2 已匹配未打印;3 已打印)
/// </summary>
[ExporterHeader(DisplayName = "单据状态")]
[ImporterHeader(Name = "单据状态")]
public BillStatusEnum BillStatus { get; set; }
/// <summary>
/// 描述
/// </summary>
[ExporterHeader(DisplayName = "描述")]
[ImporterHeader(Name = "描述")]
public string Description { get; set; }
/// <summary>
/// 涂装重复单据包含的零件列表
/// </summary>
public List<RepeatM110PartDto> M110RepeatParts { get; set; }
/// <summary>
/// 总成名称
/// </summary>
[ExporterHeader(DisplayName = "总成名称")]
[ImporterHeader(Name = "总成名称")]
public string AssemblyName { get; set; }
/// <summary>
/// 车型名称(取通用字典)
/// </summary>
[ExporterHeader(DisplayName = "车型名称")]
[ImporterHeader(Name = "车型名称")]
public string VehicleModelName { get; set; }
}
}

38
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/RepeatMessages/M110Repeat/Dtos/RepeatM110PartDto.cs

@ -0,0 +1,38 @@
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.MsgCheck
{
/// <summary>
/// 零件查询结果DTO
/// </summary>
[ExcelExporter(Name = "M110重复报文包含的零件信息", AutoFitAllColumn = true, MaxRowNumberOnASheet = 1000)] //一个Sheet最大允许的行数,设置了之后将输出多个Sheet
[Serializable]
public class RepeatM110PartDto : EntityDto<Guid>
{
/// <summary>
/// 客户零件代码
/// </summary>
[ExporterHeader(DisplayName = "客户零件代码")]
[ImporterHeader(Name = "客户零件代码")]
public string PartCode { get; set; }
/// <summary>
/// 客户零件数量
/// </summary>
[ExporterHeader(DisplayName = "客户零件数量")]
[ImporterHeader(Name = "客户零件数量")]
public double? PartNum { get; set; }
/// <summary>
/// 描述
/// </summary>
[ExporterHeader(DisplayName = "描述")]
[ImporterHeader(Name = "描述")]
public string Description { get; set; }
}
}

58
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/RepeatMessages/M110Repeat/Interfaces/IRepeatM110AppService.cs

@ -0,0 +1,58 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
namespace WY.NewJit.MsgCheck
{
public interface IRepeatM110AppService
{
#region 接口方法
/// 根据筛选条件获取分页实体列表
/// </summary>
/// <param name="input">输入查询条件</param>
/// <param name="page">输入分页条件</param>
/// <returns>返回符合条件的排序分页列表</returns>
Task<PagedResultDto<RepeatM110Dto>> GetListAsync(QueryRepeatM110Dto input);
/// <summary>
/// 按主键获取唯一实体
/// </summary>
/// <param name="id">主键</param>
/// <returns>实体信息</returns>
Task<ObjectResultDto<RepeatM110Dto>> GetAsync(Guid id);
/// <summary>
/// 添加实体
/// </summary>
/// <param name="input">添加内容</param>
/// <returns>执行成功返回真</returns>
Task<ObjectResultDto<Guid>> CreateAsync(CreateUpdateRepeatM110Dto input);
/// <summary>
/// 删除实体
/// </summary>
/// <param name="id">删除主键</param>
/// <returns>执行成功返回真</returns>
Task<ObjectResultDto> DeleteAsync(string id);
/// <summary>
/// 导出信息
/// </summary>
/// <param name="input">导出查询条件</param>
/// <returns>执行成功返回真</returns>
Task<ObjectResultDto<string>> ExportAsync(QueryRepeatM110Dto input);
/// <summary>
/// 导入信息
/// </summary>
/// <param name="input">导入文件流</param>
/// <returns>执行成功返回真</returns>
Task<ObjectResultDto> ImportAsync(Byte[] input);
#endregion
}
}

1082
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/WY.NewJit.Application.Contracts.xml

File diff suppressed because it is too large

175
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM100s/BillM100AppService.cs

@ -42,6 +42,8 @@ namespace WY.NewJit.MsgCheck
/// </summary>
private readonly IRepository<BillM100, Guid> _billM100Repository;
private readonly IRepository<BillM110, Guid> _billM110_Repository;
private readonly IRepository<BillM100Part, Guid> _billM100PartRepository;
private readonly IRepository<PrintTemplateConfiguration, Guid> _printTemplateConfigurationRepository;
@ -183,11 +185,10 @@ namespace WY.NewJit.MsgCheck
IRepository<FisTS_SORT_DETAIL> tsSortDetailRepository,
IRepository<FisTB_BILL_HIS> tbBillHisRepository,
IRepository<FisTS_SORT_DETAIL_HIS> tsSortDetailHisRepository,
IRepository<PrintTemplateConfiguration,Guid> printTemplateConfigurationRepository,
IRepository<PrintTemplateConfiguration, Guid> printTemplateConfigurationRepository,
IRepository<ZHBPrintStatus, Guid> zHBPrintStatusRepository,
IRepository<DicItem> dicItemRepository
IRepository<DicItem> dicItemRepository,
IRepository<BillM110, Guid> billM110_Repository
)
{
_billM100Repository = BillM100Repository;
@ -216,6 +217,7 @@ namespace WY.NewJit.MsgCheck
_zHBPrintStatusRepository = zHBPrintStatusRepository;
_topBoxPositionNumPrefix = _configuration["ConfigDic:TopBoxPositionNumPrefix"];
_dicItemRepository = dicItemRepository;
_billM110_Repository = billM110_Repository;
}
#endregion
@ -237,7 +239,7 @@ with d as
)
, r as
(
select rr.KNR, aa.AssemblyName, rr.OnlineTime from FisBillR100 rr left join FisAssemblyCfgVehicle aa on rr.AssemblyID = aa.Id
select rr.KNR, '' as AssemblyName, rr.OnlineTime from FisBillR100 rr left join FisAssemblyCfgVehicle aa on rr.AssemblyID = aa.Id
)
select * from
(
@ -257,7 +259,7 @@ with d as
)
, r as
(
select rr.KNR, aa.AssemblyName, rr.OnlineTime from FisBillR100 rr left join FisAssemblyCfgVehicle aa on rr.AssemblyID = aa.Id
select rr.KNR, '' as AssemblyName, rr.OnlineTime from FisBillR100 rr left join FisAssemblyCfgVehicle aa on rr.AssemblyID = aa.Id
)
select * from
(
@ -270,11 +272,11 @@ select * from
where 1=1 {0}
) t where row_number between {1} and {2} order by SerialNumStr
";
if (input.IsQueryArchive == true)
{
sqlCnt = sqlCnt.Replace("FisBillM100", "FisBillM100_His");
sql = sql.Replace("FisBillM100", "FisBillM100_His");
}
//if (input.IsQueryArchive == true)
//{
// sqlCnt = sqlCnt.Replace("FisBillM100", "FisBillM100_His");
// sql = sql.Replace("FisBillM100", "FisBillM100_His");
//}
string where = "";
@ -3009,6 +3011,143 @@ select min(SerialNumStr) from FisBillM100 a left join d on a.VIN=d.VIN
}
}
[HttpGet]
[UnitOfWork(false)]
[Route("list2")]
public virtual async Task<M100_M110_Result> GetList2Async(QueryBillM100Dto input)
{
_logger.LogDebug(_errorMessagePrefix + "GetList2Async 进入");
M100_M110_Result ret = new M100_M110_Result();
try
{
var query = await _billM100Repository.GetQueryableAsync();
var includeQry = query.Include(itm => itm.BillM100Parts);
var m100Query = includeQry.Where(itm => itm.IsReceiveM110 == false || itm.IsReceiveM110 == null);
if (input.SerialNumBegin != null)
{
m100Query = m100Query.Where(itm => itm.SerialNum >= input.SerialNumBegin);
}
if (input.SerialNumEnd != null)
{
m100Query = m100Query.Where(itm => itm.SerialNum <= input.SerialNumBegin);
}
if (input.HostSNBegin != null)
{
m100Query = m100Query.Where(itm => itm.HostSN >= input.HostSNBegin);
}
if (input.HostSNEnd != null)
{
m100Query = m100Query.Where(itm => itm.HostSN <= input.HostSNEnd);
}
if (!string.IsNullOrEmpty(input.KNRBegin))
{
m100Query = m100Query.Where(itm => itm.KNR.CompareTo(input.KNRBegin) >= 0);
}
if (!string.IsNullOrEmpty(input.KNREnd))
{
m100Query = m100Query.Where(itm => itm.KNR.CompareTo(input.KNREnd) <= 0);
}
if (!string.IsNullOrEmpty(input.VINBegin))
{
m100Query = m100Query.Where(itm => itm.VIN.CompareTo(input.VINBegin) >= 0);
}
if (!string.IsNullOrEmpty(input.VINEnd))
{
m100Query = m100Query.Where(itm => itm.VIN.CompareTo(input.VINEnd) <= 0);
}
if (input.AssemblyID != null)
{
m100Query = m100Query.Where(itm => itm.AssemblyID != null);
}
if (input.OnlineTimeBegin != null)
{
m100Query = m100Query.Where(itm => itm.OnlineTime >= input.OnlineTimeBegin);
}
if (input.OnlineTimeEnd != null)
{
m100Query = m100Query.Where(itm => itm.OnlineTime <= input.OnlineTimeEnd);
}
if (input.VehicleModelCode != null)
{
m100Query = m100Query.Where(itm => itm.VehicleModelCode == input.VehicleModelCode);
}
if (input.ProductLine != null)
{
m100Query = m100Query.Where(itm => itm.ProductLine == input.ProductLine);
}
if (input.Version != null)
{
m100Query = m100Query.Where(itm => itm.Version == input.Version);
}
if (input.ReceiveTimeBegin != null)
{
m100Query = m100Query.Where(itm => itm.ReceiveTime >= input.ReceiveTimeBegin);
}
if (input.ReceiveTimeEnd != null)
{
m100Query = m100Query.Where(itm => itm.ReceiveTime <= input.ReceiveTimeEnd);
}
//if (input.IsBillMaintenance == true) //M100单据信息维护模块使用
//{
// where += " and b.Operator is not null";
//}
if (input.CanNotPrint == true)
{
m100Query = m100Query.Where(itm => itm.CanNotPrint == true);
}
else if (input.CanNotPrint == false)
{
m100Query = m100Query.Where(itm => itm.CanNotPrint == false || itm.CanNotPrint == null);
}
if (input.ZHBBillStatus != null && input.ZHBBillStatus != ZHBBillStatusEnum.None)
{
if (input.ZHBBillStatus == ZHBBillStatusEnum.Print) //柱护板已打印
{
m100Query = m100Query.Where(itm => itm.PrintBillNum != "" && itm.PrintBillNum != null);
}
else if (input.ZHBBillStatus == ZHBBillStatusEnum.NotPrint) //柱护板未打印
{
m100Query = m100Query.Where(itm => itm.PrintBillNum == "" || itm.PrintBillNum == null);
}
}
else if (input.BillStatus != null && input.BillStatus != BillStatusEnum.None)
{
m100Query = m100Query.Where(itm => itm.BillStatus == input.BillStatus);
}
else
{
//m100Query = m100Query.Where(itm => itm.BillStatus == BillStatusEnum.Match || itm.BillStatus == BillStatusEnum.Publish); //单据状态是已匹配、已打印
}
if (input.IsNeedReplenishPrint == true) //只显示需要补打的记录
{
m100Query = m100Query.Where(itm => itm.NeedReplenishPrint == 1);
}
//M100
var m100Lst = m100Query.OrderBy(itm => itm.SerialNumStr).Skip(input.SkipCount).Take(input.MaxResultCount).OrderByDescending(itm => itm.SerialNumStr).ToList();
ret.M100_TotalCount = await m100Query.CountAsync();
ret.BillM100s = m100Lst;
//M110
string serialNumStr = await _billM110_Repository.Where(itm => itm.ProductLine == input.ProductLine).MaxAsync(itm => itm.SerialNumStr);
var m110_Lst = await _billM110_Repository.GetListAsync(itm => itm.SerialNumStr == serialNumStr, true);
ret.Bill_M110s = m110_Lst;
return ret;
}
catch (Exception ex)
{
string errMsg = _errorMessagePrefix + "GetList2Async 执行出错:" + ex.Message;
_logger.LogError(errMsg);
return ret;
}
}
/// <summary>
/// 按主键获取唯一实体
/// </summary>
@ -5085,4 +5224,18 @@ select min(SerialNumStr) from FisBillM100 a left join d on a.VIN=d.VIN
//}
}
public class M100_M110_Result
{
public List<BillM100> BillM100s { get; set; }
public List<BillM110> Bill_M110s { get; set; }
public int M100_TotalCount { get; set; }
public M100_M110_Result()
{
BillM100s = new List<BillM100>();
Bill_M110s = new List<BillM110>();
}
}
}

5088
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM110s/BillM110AppService.cs

File diff suppressed because it is too large

2
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/RepeatMessages/RepeatM100AppService.cs

@ -110,7 +110,7 @@ with d as
)
select * from
(
select ROW_NUMBER() OVER(order by r.SerialNumStr) as row_number,
select ROW_NUMBER() OVER(order by r.OnlineTime, r.HostSN) as row_number,
r.*, d.DicItemName as VehicleModelName, a.AssemblyName
from FisRepeatM100 r
left join d on r.VehicleModelCode = d.DicItemCode

375
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/RepeatMessages/RepeatM110AppService.cs

@ -0,0 +1,375 @@
using Magicodes.ExporterAndImporter.Core;
using Magicodes.ExporterAndImporter.Excel;
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;
using Volo.Abp.Domain.Repositories.Dapper;
using WY.NewJit.EntityFrameworkCore;
using WY.NewJit.Common;
using Shouldly;
using Volo.Abp.BlobStoring;
using Microsoft.AspNetCore.Mvc;
namespace WY.NewJit.MsgCheck
{
/// <summary>
/// M110重复报文应用服务实现
/// </summary>
[Route("api/newjit/repeat-M110")]
[ApiExplorerSettings(GroupName = SwaggerGroupConsts.报文解析及校验)]
public class RepeatM110AppService : ApplicationService, IRepeatM110AppService
{
/// <summary>
/// 仓储
/// </summary>
private readonly IRepository<RepeatM110, Guid> _repeatM110Repository;
private readonly IRepository<RepeatM110Part, Guid> _repeatM110PartRepository;
/// <summary>
/// 日志
/// </summary>
private ILogger<RepeatM110AppService> _logger;
/// <summary>
/// Dapper仓储
/// </summary>
private readonly NewJitDapperRepository _newJitDapperRepository;
/// <summary>
/// BLOB存储
/// </summary>
private readonly IBlobContainer<OurFileContainer> _blobContainer;
/// <summary>
/// 错误信息前缀
/// </summary>
private string _errorMessagePrefix
{
get
{
return System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + ".";
}
}
/// <summary>
/// 构造函数
/// </summary>
public RepeatM110AppService(
IRepository<RepeatM110, Guid> repeatM110Repository,
IRepository<RepeatM110Part, Guid> repeatM110PartRepository,
ILogger<RepeatM110AppService> logger,
NewJitDapperRepository newJitDapperRepository,
IBlobContainer<OurFileContainer> blobContainer
)
{
_repeatM110Repository = repeatM110Repository;
_repeatM110PartRepository = repeatM110PartRepository;
_logger = logger;
_newJitDapperRepository = newJitDapperRepository;
_blobContainer = blobContainer;
}
#region 私有方法
/// <summary>
/// 根据筛选条件获取实体列表
/// </summary>
private async Task<PagedResultDto<RepeatM110Dto>> QueryByConditionAsync(QueryRepeatM110Dto input, PagedAndSortedBase page)
{
PagedResultDto<RepeatM110Dto> ret = new PagedResultDto<RepeatM110Dto>();
string sqlCnt = @"
with d as
(
select * from FisDicItem where DicTypeCode in (select DicTypeCode from FisDicType where DicTypeName = '')
)
select * from
(
select count(*) as cnt
from FisRepeatM110 r
left join d on r.VehicleModelCode = d.DicItemCode
left join FisAssemblyCfgVehicle a on r.AssemblyID = a.Id
where 1=1 {0}
) t
";
string sql = @"
with d as
(
select * from FisDicItem where DicTypeCode in (select DicTypeCode from FisDicType where DicTypeName = '')
)
select * from
(
select ROW_NUMBER() OVER(order by r.OnlineTime, r.HostSN) as row_number,
r.*, d.DicItemName as VehicleModelName, a.AssemblyName
from FisRepeatM110 r
left join d on r.VehicleModelCode = d.DicItemCode
left join FisAssemblyCfgVehicle a on r.AssemblyID = a.Id
where 1=1 {0}
) t where row_number between {1} and {2}
";
string where = "";
if (input.HostSNBegin != null)
{
where += string.Format(" and r.HostSN >= {0}", input.HostSNBegin);
}
if (input.HostSNEnd != null)
{
where += string.Format(" and r.HostSN <= {0}", input.HostSNEnd);
}
if (!string.IsNullOrEmpty(input.KNRBegin))
{
where += string.Format(" and r.KNR >= '{0}'", input.KNRBegin);
}
if (!string.IsNullOrEmpty(input.KNREnd))
{
where += string.Format(" and r.KNR <= '{0}'", input.KNREnd);
}
if (!string.IsNullOrEmpty(input.VINBegin))
{
where += string.Format(" and r.VIN >= '{0}'", input.VINBegin);
}
if (!string.IsNullOrEmpty(input.VINEnd))
{
where += string.Format(" and r.VIN <= '{0}'", input.VINEnd);
}
if (input.OnlineTimeBegin != null)
{
where += string.Format(" and r.OnlineTime >= '{0}'", ((DateTime)input.OnlineTimeBegin).ToString("yyyy-MM-dd HH:mm:ss"));
}
if (input.OnlineTimeEnd != null)
{
where += string.Format(" and r.OnlineTime <= '{0}'", ((DateTime)input.OnlineTimeEnd).ToString("yyyy-MM-dd HH:mm:ss"));
}
if (!string.IsNullOrEmpty(input.VehicleModelCode))
{
where += string.Format(" and r.VehicleModelCode = '{0}'", input.VehicleModelCode);
}
if (input.ProductLine != null)
{
where += string.Format(" and r.ProductLine = '{0}'", input.ProductLine);
}
if (input.Version != null)
{
where += string.Format(" and r.Version like '%{0}%'", input.Version);
}
if (input.ReceiveTimeBegin != null)
{
where += string.Format(" and r.ReceiveTime >= '{0}'", ((DateTime)input.ReceiveTimeBegin).ToString("yyyy-MM-dd HH:mm:ss"));
}
if (input.ReceiveTimeEnd != null)
{
where += string.Format(" and r.ReceiveTime <= '{0}'", ((DateTime)input.ReceiveTimeEnd).ToString("yyyy-MM-dd HH:mm:ss"));
}
sqlCnt = string.Format(sqlCnt, where);
ret.TotalCount = await _newJitDapperRepository.GetSingleBySqlAsync<int>(sqlCnt);
//计算分页
int fromRec = page.SkipCount + 1;
int ToRec = page.SkipCount + page.MaxResultCount;
sql = string.Format(sql, where, fromRec, ToRec);
var lst = await _newJitDapperRepository.GetListBySqlAsync<RepeatM110Dto>(sql);
ret.Items = lst;
return ret;
}
#endregion
#region 公共方法
/// <summary>
/// 根据筛选条件获取分页实体列表
/// </summary>
/// <param name="input">输入查询条件</param>
/// <param name="page">输入分页条件</param>
/// <returns>返回符合条件的排序分页列表</returns>
[HttpGet]
[UnitOfWork(false)]
[Route("list")]
public virtual async Task<PagedResultDto<RepeatM110Dto>> GetListAsync(QueryRepeatM110Dto input)
{
_logger.LogDebug(_errorMessagePrefix + "GetListAsync 进入");
try
{
PagedResultDto<RepeatM110Dto> ret = await QueryByConditionAsync(input, (PagedAndSortedBase)input);
return ret;
}
catch (Exception ex)
{
string errMsg = _errorMessagePrefix + "GetListAsync 执行出错:" + ex.Message;
_logger.LogError(errMsg);
return new PagedResultDto<RepeatM110Dto>(0, new List<RepeatM110Dto>());
}
}
/// <summary>
/// 按主键获取唯一实体
/// </summary>
/// <param name="id">主键</param>
/// <returns>实体信息</returns>
[HttpGet]
[Route("{id}")]//obj/
public virtual async Task<ObjectResultDto<RepeatM110Dto>> GetAsync(Guid id)
{
_logger.LogDebug(_errorMessagePrefix + "GetAsync 进入");
ObjectResultDto<RepeatM110Dto> ret = new ObjectResultDto<RepeatM110Dto>();
try
{
RepeatM110 sourceObj = await _repeatM110Repository.GetAsync(id);
RepeatM110Dto targetObj = ObjectMapper.Map<RepeatM110, RepeatM110Dto>(sourceObj);
ret.Item = targetObj;
return ret;
}
catch (Exception ex)
{
ret.Status = false;
ret.Message = _errorMessagePrefix + "GetAsync 执行出错:" + ex.Message;
_logger.LogError(ret.Message);
return ret;
}
}
/// <summary>
/// 添加实体
/// </summary>
/// <param name="input">添加内容</param>
/// <returns>执行成功返回真</returns>
[HttpPost]
[UnitOfWork]
[Route("")]//create
public virtual async Task<ObjectResultDto<Guid>> CreateAsync(CreateUpdateRepeatM110Dto input)
{
_logger.LogDebug(_errorMessagePrefix + "CreateAsync 进入");
ObjectResultDto<Guid> ret = new ObjectResultDto<Guid>();
try
{
//取重复报文 最大流水号
//int repeatMaxSN = _repeatM110Repository.Max(itm => itm.SerialNum) ?? 0;
RepeatM110 obj = ObjectMapper.Map<CreateUpdateRepeatM110Dto, RepeatM110>(input);
obj.SetSerialNum(ServerHelper.VinToSN(obj.VIN)); //++repeatMaxSN
#region 主子表主键Id赋值
foreach (var item in obj.M110RepeatParts)
{
item.SetId(GuidGenerator.Create());
}
#endregion
RepeatM110 obj2 = await _repeatM110Repository.InsertAsync(obj);
ret.Item = obj2.Id; //返回添加对象的主键
return ret;
}
catch (Exception ex)
{
ret.Status = false;
ret.Message = _errorMessagePrefix + "CreateAsync 执行出错:" + ex.Message;
_logger.LogError(ret.Message);
return ret;
}
}
/// <summary>
/// 删除实体
/// </summary>
/// <param name="id">删除主键</param>
/// <returns>执行成功返回真</returns>
[UnitOfWork]
[HttpDelete]
[Route("{id}")]//delete/
public virtual async Task<ObjectResultDto> DeleteAsync(string id)
{
_logger.LogDebug(_errorMessagePrefix + "DeleteAsync 进入");
ObjectResultDto ret = new ObjectResultDto();
try
{
List<Guid> idLst = ServerHelper.GetGuidListByStr(id);
foreach (Guid item in idLst)
{
RepeatM110 sourceObj = await _repeatM110Repository.GetAsync(item);
if (sourceObj != null)
{
await _repeatM110PartRepository.DeleteManyAsync(sourceObj.M110RepeatParts);
await _repeatM110Repository.DeleteAsync(item);
}
}
return ret;
}
catch (Exception ex)
{
ret.Status = false;
ret.Message = _errorMessagePrefix + "DeleteAsync 执行出错:" + ex.Message;
_logger.LogError(ret.Message);
return ret;
}
}
/// <summary>
/// 导出信息
/// </summary>
/// <param name="input">导出查询条件</param>
/// <returns>执行成功返回真</returns>
[UnitOfWork(false)]
[HttpPost]
[Route("export")]
public virtual async Task<ObjectResultDto<string>> ExportAsync(QueryRepeatM110Dto input)
{
_logger.LogDebug(_errorMessagePrefix + "ExportAsync 进入");
ObjectResultDto<string> ret = new ObjectResultDto<string>();
try
{
input.SkipCount = 0;
input.MaxResultCount = 50000;
PagedResultDto<RepeatM110Dto> query = await QueryByConditionAsync(input, (PagedAndSortedBase)input);
List<RepeatM110Dto> items = query.Items.ToList();
//将实体列表转换成excel文件流
IExporter exporter = new ExcelExporter();
byte[] byteArr = await exporter.ExportAsByteArray<RepeatM110Dto>(items);
byteArr.ShouldNotBeNull();
//将excel文件流保存到服务器端文件系统
string fileName = string.Format("重复报文M110_{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;
}
}
/// <summary>
/// 导入信息
/// </summary>
/// <param name="input">导入文件流</param>
/// <returns>执行成功返回真</returns>
[UnitOfWork]
[HttpPost]
[Route("import")]
public virtual async Task<ObjectResultDto> ImportAsync(byte[] input)
{
throw new NotImplementedException("暂不实现所有导入");
}
#endregion
}
}

2
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/RepeatMessages/RepeatR100AppService.cs

@ -110,7 +110,7 @@ with d as
)
select * from
(
select ROW_NUMBER() OVER(order by r.SerialNumStr) as row_number,
select ROW_NUMBER() OVER(order by r.OnlineTime, r.HostSN) as row_number,
r.*, d.DicItemName as VehicleModelName, a.AssemblyName
from FisRepeatR100 r
left join d on r.VehicleModelCode = d.DicItemCode

17
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/NewJitApplicationAutoMapperProfile.cs

@ -75,6 +75,23 @@ namespace WY.NewJit
.ForMember(dest => dest.UnknownAssemblyParts, option => option.MapFrom(src => src.UnknownAssemblyParts)).ReverseMap();
CreateMap<UnknownAssemblyPart, UnknownAssemblyPartDto>().ReverseMap();
#region M110
CreateMap<RepeatM110, RepeatM110Dto>()
.ForMember(dest => dest.M110RepeatParts, option => option.MapFrom(src => src.M110RepeatParts)).ReverseMap();
CreateMap<RepeatM110Part, RepeatM110PartDto>().ReverseMap();
CreateMap<RepeatM110, CreateUpdateRepeatM110Dto>()
.ForMember(dest => dest.M110RepeatParts, option => option.MapFrom(src => src.M110RepeatParts)).ReverseMap();
CreateMap<RepeatM110Part, CreateUpdateRepeatM110PartDto>().ReverseMap();
CreateMap<BillM110, BillM110Dto>()
.ForMember(dest => dest.BillM110Parts, option => option.MapFrom(src => src.BillM110Parts)).ReverseMap();
CreateMap<BillM110Part, BillM110PartDto>().ReverseMap();
CreateMap<BillM110, CreateUpdateBillM110Dto>()
.ForMember(dest => dest.BillM110Parts, option => option.MapFrom(src => src.BillM110Parts)).ReverseMap();
CreateMap<BillM110Part, CreateUpdateBillM110PartDto>().ReverseMap();
#endregion
//未知总成 没加//!!
#endregion

310
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/WY.NewJit.Application.xml

@ -988,7 +988,7 @@
柱护板缓存列表(打印柱护板时用到)
</summary>
</member>
<member name="M:WY.NewJit.MsgCheck.BillM100AppService.#ctor(Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgCheck.BillM100,System.Guid},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgCheck.BillM100Part,System.Guid},Microsoft.Extensions.Logging.ILogger{WY.NewJit.MsgCheck.BillM100AppService},WY.NewJit.EntityFrameworkCore.NewJitDapperRepository,Volo.Abp.BlobStoring.IBlobContainer{WY.NewJit.Common.OurFileContainer},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.MenBanPackingList,System.Guid},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.ZhuHuBanPackingList,System.Guid},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgBaseData.AssemblyCfgErp,System.Guid},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgBaseData.AssemblyCfgVehicle,System.Guid},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgBaseData.PartCfg,System.Guid},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.PaiGe.MaterialExt,System.Guid},WY.NewJit.EntityFrameworkCore.WMSDapperRepository,Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.MenBanPackingRec,System.Guid},WY.NewJit.MsgBaseData.LineSNDomianService,Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.ZhuHuBanPackingRec,System.Guid},WY.NewJit.Commons.SequenceDomainService,Microsoft.Extensions.Configuration.IConfiguration,Volo.Abp.Uow.IUnitOfWorkManager,Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.PaiGe.WMS.FisTB_BILL},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.PaiGe.WMS.FisTS_SORT_DETAIL},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.PaiGe.WMS.FisTB_BILL_HIS},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.PaiGe.WMS.FisTS_SORT_DETAIL_HIS},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgBaseData.PrintTemplateConfiguration,System.Guid},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgCheck.ZHBPrintStatus,System.Guid},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgBaseData.DicItem})">
<member name="M:WY.NewJit.MsgCheck.BillM100AppService.#ctor(Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgCheck.BillM100,System.Guid},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgCheck.BillM100Part,System.Guid},Microsoft.Extensions.Logging.ILogger{WY.NewJit.MsgCheck.BillM100AppService},WY.NewJit.EntityFrameworkCore.NewJitDapperRepository,Volo.Abp.BlobStoring.IBlobContainer{WY.NewJit.Common.OurFileContainer},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.MenBanPackingList,System.Guid},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.ZhuHuBanPackingList,System.Guid},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgBaseData.AssemblyCfgErp,System.Guid},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgBaseData.AssemblyCfgVehicle,System.Guid},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgBaseData.PartCfg,System.Guid},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.PaiGe.MaterialExt,System.Guid},WY.NewJit.EntityFrameworkCore.WMSDapperRepository,Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.MenBanPackingRec,System.Guid},WY.NewJit.MsgBaseData.LineSNDomianService,Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.ZhuHuBanPackingRec,System.Guid},WY.NewJit.Commons.SequenceDomainService,Microsoft.Extensions.Configuration.IConfiguration,Volo.Abp.Uow.IUnitOfWorkManager,Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.PaiGe.WMS.FisTB_BILL},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.PaiGe.WMS.FisTS_SORT_DETAIL},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.PaiGe.WMS.FisTB_BILL_HIS},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.PaiGe.WMS.FisTS_SORT_DETAIL_HIS},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgBaseData.PrintTemplateConfiguration,System.Guid},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgCheck.ZHBPrintStatus,System.Guid},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgBaseData.DicItem},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgCheck.BillM110,System.Guid})">
<summary>
构造函数
</summary>
@ -1254,6 +1254,231 @@
<param name="knr"></param>
<returns></returns>
</member>
<member name="T:WY.NewJit.MsgCheck.BillM110AppService">
<summary>
M110单据管理应用服务实现
</summary>
</member>
<member name="F:WY.NewJit.MsgCheck.BillM110AppService._billM110Repository">
<summary>
仓储
</summary>
</member>
<member name="F:WY.NewJit.MsgCheck.BillM110AppService._logger">
<summary>
日志
</summary>
</member>
<member name="F:WY.NewJit.MsgCheck.BillM110AppService._newJitDapperRepository">
<summary>
Dapper仓储
</summary>
</member>
<member name="F:WY.NewJit.MsgCheck.BillM110AppService._blobContainer">
<summary>
BLOB存储
</summary>
</member>
<member name="F:WY.NewJit.MsgCheck.BillM110AppService._menBanPackingListRepository">
<summary>
门板装箱单仓储
</summary>
</member>
<member name="F:WY.NewJit.MsgCheck.BillM110AppService._menBanPackingRecRepository">
<summary>
门板装箱单仓储明细
</summary>
</member>
<member name="F:WY.NewJit.MsgCheck.BillM110AppService._zhuHuBanPackingListRepository">
<summary>
柱护板装箱单仓储
</summary>
</member>
<member name="F:WY.NewJit.MsgCheck.BillM110AppService._zhuHuBanPackingRecRepository">
<summary>
柱护板装箱单仓储明细
</summary>
</member>
<member name="F:WY.NewJit.MsgCheck.BillM110AppService._assemblyCfgErpRepository">
<summary>
ERP总成仓储
</summary>
</member>
<member name="F:WY.NewJit.MsgCheck.BillM110AppService._assemblyCfgVehicleRepository">
<summary>
整车总成配置仓库
</summary>
</member>
<member name="F:WY.NewJit.MsgCheck.BillM110AppService._partCfgRepository">
<summary>
零件配置
</summary>
</member>
<member name="F:WY.NewJit.MsgCheck.BillM110AppService._materialExtRepository">
<summary>
派格版本物料库扩展
</summary>
</member>
<member name="F:WY.NewJit.MsgCheck.BillM110AppService._lineSNDomianService">
<summary>
最大右边号的领域方法
</summary>
</member>
<member name="F:WY.NewJit.MsgCheck.BillM110AppService._wmsDapperRepository">
<summary>
库存系统Dapper仓储
</summary>
</member>
<member name="F:WY.NewJit.MsgCheck.BillM110AppService._sequenceDomainService">
<summary>
序列领域服务
</summary>
</member>
<member name="F:WY.NewJit.MsgCheck.BillM110AppService._configuration">
<summary>
配置
</summary>
</member>
<member name="P:WY.NewJit.MsgCheck.BillM110AppService._errorMessagePrefix">
<summary>
错误信息前缀
</summary>
</member>
<member name="F:WY.NewJit.MsgCheck.BillM110AppService._zhbCacheList">
<summary>
柱护板缓存列表(打印柱护板时用到)
</summary>
</member>
<member name="M:WY.NewJit.MsgCheck.BillM110AppService.#ctor(Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgCheck.BillM110,System.Guid},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgCheck.BillM110Part,System.Guid},Microsoft.Extensions.Logging.ILogger{WY.NewJit.MsgCheck.BillM110AppService},WY.NewJit.EntityFrameworkCore.NewJitDapperRepository,Volo.Abp.BlobStoring.IBlobContainer{WY.NewJit.Common.OurFileContainer},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.MenBanPackingList,System.Guid},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.ZhuHuBanPackingList,System.Guid},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgBaseData.AssemblyCfgErp,System.Guid},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgBaseData.AssemblyCfgVehicle,System.Guid},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgBaseData.PartCfg,System.Guid},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.PaiGe.MaterialExt,System.Guid},WY.NewJit.EntityFrameworkCore.WMSDapperRepository,Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.MenBanPackingRec,System.Guid},WY.NewJit.MsgBaseData.LineSNDomianService,Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.ZhuHuBanPackingRec,System.Guid},WY.NewJit.Commons.SequenceDomainService,Microsoft.Extensions.Configuration.IConfiguration,Volo.Abp.Uow.IUnitOfWorkManager,Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.PaiGe.WMS.FisTB_BILL},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.PaiGe.WMS.FisTS_SORT_DETAIL},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.PaiGe.WMS.FisTB_BILL_HIS},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.Extends.PaiGe.WMS.FisTS_SORT_DETAIL_HIS},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgBaseData.PrintTemplateConfiguration,System.Guid},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgCheck.ZHBPrintStatus,System.Guid},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgBaseData.DicItem})">
<summary>
构造函数
</summary>
</member>
<member name="M:WY.NewJit.MsgCheck.BillM110AppService.QueryZHBByConditionAsync(WY.NewJit.MsgCheck.QueryBillM110Dto,WY.NewJit.Common.PagedAndSortedBase)">
<summary>
查询柱护板
</summary>
<param name="input"></param>
<param name="page"></param>
<returns></returns>
</member>
<member name="M:WY.NewJit.MsgCheck.BillM110AppService.GetMenBanLastPrintNum(WY.NewJit.Extends.MenBanPrintInputDto)">
<summary>
从M110中取当前产线、已经打印的最大大众顺序号
</summary>
<param name="input"></param>
<returns></returns>
</member>
<member name="M:WY.NewJit.MsgCheck.BillM110AppService.QueryByConditionAsync(WY.NewJit.MsgCheck.QueryBillM110Dto,WY.NewJit.Common.PagedAndSortedBase)">
<summary>
根据筛选条件获取实体列表
</summary>
</member>
<member name="M:WY.NewJit.MsgCheck.BillM110AppService.GetMBReportDetailList(WY.NewJit.Extends.MenBanPrintInputDto,System.Boolean)">
<summary>
根据条件取用于打印的门板单据列表
</summary>
<param name="input"></param>
<param name="isFillBreakNum">断号时是否填充</param>
<param name="isZhuHuBan">是否柱护板装箱单调用</param>
<returns></returns>
</member>
<member name="M:WY.NewJit.MsgCheck.BillM110AppService.DoBreakNumOperation(System.Int32,System.Int32,System.Collections.Generic.List{WY.NewJit.MsgCheck.BillM110})">
<summary>
补充断号数据
</summary>
<param name="beginHostSN"></param>
<param name="endHostSN"></param>
<param name="billLst"></param>
<returns></returns>
</member>
<member name="M:WY.NewJit.MsgCheck.BillM110AppService.DoMBPrint(WY.NewJit.Extends.MenBanPrintInputDto,System.Int32,System.Double,System.Collections.Generic.List{WY.NewJit.MsgCheck.BillM110},System.String,System.String[])">
<summary>
打印左侧或右侧门板
</summary>
<param name="input"></param>
<param name="pageIdx"></param>
<param name="maxBillNum"></param>
<param name="maxSN"></param>
<param name="printTime"></param>
<param name="billLst"></param>
<param name="partLargeType"></param>
<returns></returns>
</member>
<member name="M:WY.NewJit.MsgCheck.BillM110AppService.CheckMBHostSNBreakNum(WY.NewJit.Extends.MenBanPrintInputDto)">
<summary>
打印前检查大众顺序号是否断号
</summary>
<param name="input"></param>
<returns>断号时Item不为空</returns>
</member>
<member name="M:WY.NewJit.MsgCheck.BillM110AppService.GetPrintStartHostSN2(System.String,System.String,System.String)">
<summary>
根据生产线获取正常打印单据的起始大众顺序号2
</summary>
<param name="productLine">生产线</param>
<param name="isZhuHuBan">柱护板是1 门板是非1</param>
<param name="groupName">柱护板分组类型</param>
<returns>起始大众顺序号</returns>
</member>
<member name="M:WY.NewJit.MsgCheck.BillM110AppService.GetListAsync(WY.NewJit.MsgCheck.QueryBillM110Dto)">
<summary>
根据筛选条件获取分页实体列表
</summary>
<param name="input">输入查询条件</param>
<param name="page">输入分页条件</param>
<returns>返回符合条件的排序分页列表</returns>
</member>
<member name="M:WY.NewJit.MsgCheck.BillM110AppService.GetAsync(System.Guid)">
<summary>
按主键获取唯一实体
</summary>
<param name="id">主键</param>
<returns>实体信息</returns>
</member>
<member name="M:WY.NewJit.MsgCheck.BillM110AppService.CreateAsync(WY.NewJit.MsgCheck.CreateUpdateBillM110Dto)">
<summary>
添加实体
</summary>
<param name="input">添加内容</param>
<returns>执行成功返回真</returns>
</member>
<member name="M:WY.NewJit.MsgCheck.BillM110AppService.UpdateAsync(System.Guid,WY.NewJit.MsgCheck.CreateUpdateBillM110Dto)">
<summary>
修改实体
</summary>
<param name="id">更新主键</param>
<param name="input">修改内容</param>
<returns>执行成功返回真</returns>
</member>
<member name="M:WY.NewJit.MsgCheck.BillM110AppService.DeleteAsync(System.String)">
<summary>
删除实体
</summary>
<param name="id">删除主键</param>
<returns>执行成功返回真</returns>
</member>
<member name="M:WY.NewJit.MsgCheck.BillM110AppService.ExportAsync(WY.NewJit.MsgCheck.QueryBillM110Dto)">
<summary>
导出信息
</summary>
<param name="input">导出查询条件</param>
<returns>执行成功返回真</returns>
</member>
<member name="M:WY.NewJit.MsgCheck.BillM110AppService.ImportAsync(System.Byte[])">
<summary>
导入信息
</summary>
<param name="input">导入文件流</param>
<returns>执行成功返回真</returns>
</member>
<member name="M:WY.NewJit.MsgCheck.BillM110AppService.ProductLineTimeoutRemind(WY.NewJit.MsgCheck.TimeOutRemindInputDto)">
<summary>
生产线超时提醒
</summary>
<param name="input">生产线编号列表</param>
<returns>生产线超时情况</returns>
</member>
<member name="T:WY.NewJit.MsgCheck.BillR100AppService">
<summary>
R100单据管理应用服务实现
@ -1501,6 +1726,89 @@
<param name="input">导入文件流</param>
<returns>执行成功返回真</returns>
</member>
<member name="T:WY.NewJit.MsgCheck.RepeatM110AppService">
<summary>
M110重复报文应用服务实现
</summary>
</member>
<member name="F:WY.NewJit.MsgCheck.RepeatM110AppService._repeatM110Repository">
<summary>
仓储
</summary>
</member>
<member name="F:WY.NewJit.MsgCheck.RepeatM110AppService._logger">
<summary>
日志
</summary>
</member>
<member name="F:WY.NewJit.MsgCheck.RepeatM110AppService._newJitDapperRepository">
<summary>
Dapper仓储
</summary>
</member>
<member name="F:WY.NewJit.MsgCheck.RepeatM110AppService._blobContainer">
<summary>
BLOB存储
</summary>
</member>
<member name="P:WY.NewJit.MsgCheck.RepeatM110AppService._errorMessagePrefix">
<summary>
错误信息前缀
</summary>
</member>
<member name="M:WY.NewJit.MsgCheck.RepeatM110AppService.#ctor(Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgCheck.RepeatM110,System.Guid},Volo.Abp.Domain.Repositories.IRepository{WY.NewJit.MsgCheck.RepeatM110Part,System.Guid},Microsoft.Extensions.Logging.ILogger{WY.NewJit.MsgCheck.RepeatM110AppService},WY.NewJit.EntityFrameworkCore.NewJitDapperRepository,Volo.Abp.BlobStoring.IBlobContainer{WY.NewJit.Common.OurFileContainer})">
<summary>
构造函数
</summary>
</member>
<member name="M:WY.NewJit.MsgCheck.RepeatM110AppService.QueryByConditionAsync(WY.NewJit.MsgCheck.QueryRepeatM110Dto,WY.NewJit.Common.PagedAndSortedBase)">
<summary>
根据筛选条件获取实体列表
</summary>
</member>
<member name="M:WY.NewJit.MsgCheck.RepeatM110AppService.GetListAsync(WY.NewJit.MsgCheck.QueryRepeatM110Dto)">
<summary>
根据筛选条件获取分页实体列表
</summary>
<param name="input">输入查询条件</param>
<param name="page">输入分页条件</param>
<returns>返回符合条件的排序分页列表</returns>
</member>
<member name="M:WY.NewJit.MsgCheck.RepeatM110AppService.GetAsync(System.Guid)">
<summary>
按主键获取唯一实体
</summary>
<param name="id">主键</param>
<returns>实体信息</returns>
</member>
<member name="M:WY.NewJit.MsgCheck.RepeatM110AppService.CreateAsync(WY.NewJit.MsgCheck.CreateUpdateRepeatM110Dto)">
<summary>
添加实体
</summary>
<param name="input">添加内容</param>
<returns>执行成功返回真</returns>
</member>
<member name="M:WY.NewJit.MsgCheck.RepeatM110AppService.DeleteAsync(System.String)">
<summary>
删除实体
</summary>
<param name="id">删除主键</param>
<returns>执行成功返回真</returns>
</member>
<member name="M:WY.NewJit.MsgCheck.RepeatM110AppService.ExportAsync(WY.NewJit.MsgCheck.QueryRepeatM110Dto)">
<summary>
导出信息
</summary>
<param name="input">导出查询条件</param>
<returns>执行成功返回真</returns>
</member>
<member name="M:WY.NewJit.MsgCheck.RepeatM110AppService.ImportAsync(System.Byte[])">
<summary>
导入信息
</summary>
<param name="input">导入文件流</param>
<returns>执行成功返回真</returns>
</member>
<member name="T:WY.NewJit.MsgCheck.RepeatR100AppService">
<summary>
R100重复报文应用服务实现

8
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain.Shared/MsgBaseData/LogTypeEnum.cs

@ -25,9 +25,13 @@ namespace WY.NewJit.MsgBaseData
/// 总成接口
/// </summary>
[Description("总成接口")]
AssemblyInterface = 3
AssemblyInterface = 3,
/// <summary>
/// M100
/// </summary>
[Description("M100")]
M110 = 4,
}
public enum LogStatusEnum

4
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Entitys/BillM100.cs

@ -134,6 +134,10 @@ namespace WY.NewJit.MsgCheck
/// </summary>
public virtual bool? IsPartSwitch { get; set; }
/// <summary>
/// 是否接收到M110
/// </summary>
public virtual bool? IsReceiveM110 { get; set; }
public BillM100()
{

187
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Entitys/BillM110.cs

@ -1,4 +1,5 @@
using System;
using JetBrains.Annotations;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
@ -16,36 +17,34 @@ namespace WY.NewJit.MsgCheck
/// <summary>
/// 报文接收ID,对应报文接收表主键
/// </summary>
public virtual Guid MessageFileReceiveID { get; protected set; }
public virtual Guid? MessageFileReceiveID { get; protected set; }
/// <summary>
/// 流水号#
/// </summary>
public virtual int? SerialNum { get; protected set; }
public virtual int? SerialNum { get; set; }
/// <summary>
/// 大众顺序号
/// </summary>
public virtual int? HostSN { get; protected set; }
public virtual int? HostSN { get; set; }
/// <summary>
/// KNR
/// KNR订单号
/// </summary>
public virtual string KNR { get; protected set; }
public virtual string KNR { get; set; }
/// <summary>
/// 底牌号#
/// </summary>
public virtual string VIN { get; protected set; }
public virtual string VIN { get; set; }
/// <summary>
/// 总成ID
/// </summary>
public virtual Guid? AssemblyID { get; protected set; }
public virtual Guid? AssemblyID { get; set; }
/// <summary>
/// 上线时间
/// </summary>
public virtual DateTime? OnlineTime { get; protected set; }
public virtual DateTime? OnlineTime { get; set; }
/// <summary>
/// 车型代码(取通用字典)
@ -78,21 +77,79 @@ namespace WY.NewJit.MsgCheck
public virtual string Description { get; set; }
/// <summary>
/// 总装单据包含的零件列表
/// 打印时间
/// </summary>
public virtual DateTime? PrintTime { get; set; }
/// <summary>
/// 打印单号【派格版本:不为空时表示已打印柱护板】
/// </summary>
public virtual string PrintBillNum { get; set; }
/// <summary>
/// 打印时间2【派格版本:柱护板打印时间】
/// </summary>
public virtual DateTime? PrintTime2 { get; set; }
/// <summary>
/// 字符类型流水号
/// </summary>
public virtual string SerialNumStr { get; set; }
/// <summary>
/// 涂装单据包含的零件列表
/// </summary>
public virtual List<BillM110Part> BillM110Parts { get; protected set; }
protected BillM110()
/// <summary>
/// 手工操作类型:0 none,1 手工添加,2 手工修改
/// </summary>
public virtual ManualOperationTypeEnum OperationType { get; protected set; }
/// <summary>
/// 手工操作员
/// </summary>
public virtual string Operator { get; protected set; }
/// <summary>
/// 手工操作日期
/// </summary>
public virtual DateTime? OperationTime { get; protected set; }
/// <summary>
/// 不可打印
/// </summary>
public virtual bool? CanNotPrint { get; set; } = false;
/// <summary>
/// 为1时需要补打:正常打印门板时,将解析的单据设置为1
/// </summary>
public virtual int? NeedReplenishPrint { get; set; }
public virtual int? HostSN2 { get; set; }
/// <summary>
/// 通过零件切换实现总成匹配时,设置为真
/// </summary>
public virtual bool? IsPartSwitch { get; set; }
public BillM110()
{
//此构造函数是提供给ORM用来从数据库中获取实体.
//无需初始化子集合
//因为它会被来自数据库的值覆盖.可能不适用于私有构造函数.
}
public BillM110(Guid id, Guid messageFileReceiveID, int? serialNum, int? hostSN, string kNR, string vIN, Guid? assemblyID, DateTime? onlineTime, string vehicleModelCode, string version, DateTime? receiveTime, BillStatusEnum billStatus)
public BillM110(Guid id, Guid? messageFileReceiveID, int? serialNum, string serialNumStr, int? hostSN, string kNR, string vIN, Guid? assemblyID, DateTime? onlineTime, string vehicleModelCode, string version, DateTime? receiveTime, BillStatusEnum billStatus, ManualOperationTypeEnum operationType = ManualOperationTypeEnum.None, string @operator = null, DateTime? operationTime = null)
: base(id)
{
MessageFileReceiveID = messageFileReceiveID;
SerialNum = serialNum;
SerialNumStr = serialNumStr;
HostSN = hostSN;
KNR = kNR;
VIN = vIN;
@ -103,7 +160,109 @@ namespace WY.NewJit.MsgCheck
ReceiveTime = receiveTime;
BillStatus = billStatus;
BillM110Parts = new List<BillM110Part>();
OperationType = operationType;
Operator = @operator;
OperationTime = operationTime;
}
public virtual void AddChildObj(Guid id, [NotNull] string partCode, double? partNum, string description = null)
{
BillM110Parts.Add(new BillM110Part(id, partCode, partNum, description));
}
public virtual void AddChildObj(Guid id, [NotNull] string partCode, double? partNum, string description, string partType, string partType2, string partType3)
{
BillM110Parts.Add(new BillM110Part(id, partCode, partNum, description, partType, partType2, partType3));
}
public virtual void SetSerialNum(int serialNum)
{
this.SerialNum = serialNum;
}
public virtual void SetAssemblyID(Guid? assemblyId)
{
this.AssemblyID = assemblyId;
}
public virtual void SetBillStatus(BillStatusEnum billStatus)
{
this.BillStatus = billStatus;
}
public virtual void SetZHBBillStatus(ZHBBillStatusEnum zhbBillStatus)
{
if (zhbBillStatus == ZHBBillStatusEnum.Print)
{
this.PrintBillNum = "柱护板已打印";
}
else if (zhbBillStatus == ZHBBillStatusEnum.NotPrint)
{
this.PrintBillNum = null;
}
else
{
this.PrintBillNum = null;
}
}
public virtual void SetId(Guid id)
{
this.Id = id;
}
public virtual void SetVehicleModelCode(string vehicleModelCode)
{
this.VehicleModelCode = vehicleModelCode;
}
public virtual void SetProductLine(string productLine)
{
this.ProductLine = productLine;
}
public virtual void SetSerialNumStr(string snStr)
{
this.SerialNumStr = snStr;
}
//public virtual void SetSerialNumStr(DateTime? onlineTime, int? hostSN)
//{
// if (hostSN == null)
// {
// throw new Exception("SetSerialNumStr大众顺序号不能为空:" + this.VIN);
// }
// if (onlineTime == null)
// {
// throw new Exception("SetSerialNumStr上线时间不能为空:" + this.VIN);
// }
// this.SerialNumStr = ((DateTime)onlineTime).ToString("yyyyMMddHHmm") + hostSN.ToString().PadLeft(5, '0');
//}
public static BillM110 Clone(BillM110 soureObj)
{
BillM110 targetObj = new BillM110();
targetObj.MessageFileReceiveID = soureObj.MessageFileReceiveID;
targetObj.SerialNum = soureObj.SerialNum;
targetObj.SerialNumStr = soureObj.SerialNumStr;
targetObj.HostSN = soureObj.HostSN;
targetObj.KNR = soureObj.KNR;
targetObj.VIN = soureObj.VIN;
targetObj.AssemblyID = soureObj.AssemblyID;
targetObj.OnlineTime = soureObj.OnlineTime;
targetObj.VehicleModelCode = soureObj.VehicleModelCode;
targetObj.Version = soureObj.Version;
targetObj.ReceiveTime = soureObj.ReceiveTime;
targetObj.BillStatus = soureObj.BillStatus;
targetObj.BillM110Parts = new List<BillM110Part>();
targetObj.OperationType = soureObj.OperationType;
targetObj.Operator = soureObj.Operator;
targetObj.OperationTime = soureObj.OperationTime;
targetObj.CreationTime = soureObj.CreationTime;
return targetObj;
}
}
}

49
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Entitys/BillM110Part.cs

@ -1,4 +1,5 @@
using System;
using JetBrains.Annotations;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
@ -9,7 +10,7 @@ using Volo.Abp.Domain.Entities.Auditing;
namespace WY.NewJit.MsgCheck
{
/// <summary>
/// 装单据和零件关系表
/// 装单据和零件关系表
/// </summary>
public class BillM110Part : AuditedEntity<Guid>
{
@ -26,7 +27,24 @@ namespace WY.NewJit.MsgCheck
/// <summary>
/// 描述
/// </summary>
public virtual string Description { get; protected set; }
public virtual string Description { get; set; }
/// <summary>
/// 零件类型:产线
/// </summary>
public virtual string PartType { get; set; }
/// <summary>
/// 零件类型:分组
/// </summary>
public virtual string PartType2 { get; set; }
/// <summary>
/// 零件类型:零件大类
/// </summary>
public virtual string PartType3 { get; set; }
protected BillM110Part()
{
//此构造函数是提供给ORM用来从数据库中获取实体.
@ -34,13 +52,36 @@ namespace WY.NewJit.MsgCheck
//因为它会被来自数据库的值覆盖.可能不适用于私有构造函数.
}
public BillM110Part(Guid id, string partCode, double? partNum, string description)
public BillM110Part(Guid id)
: base(id)
{
}
public BillM110Part(Guid id, [NotNull] string partCode, double? partNum, string description = null)
: base(id)
{
PartCode = partCode;
PartNum = partNum;
Description = description;
}
public BillM110Part(Guid id, [NotNull] string partCode, double? partNum, string description, string partType, string partType2, string partType3)
: base(id)
{
PartCode = partCode;
PartNum = partNum;
Description = description;
this.PartType = partType;
this.PartType2 = partType2;
this.PartType3 = partType3;
}
public virtual void SetId(Guid id)
{
this.Id = id;
}
}
}

40
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Entitys/RepeatM110.cs

@ -9,14 +9,19 @@ using Volo.Abp.Domain.Entities.Auditing;
namespace WY.NewJit.MsgCheck
{
/// <summary>
/// 装重复单据
/// 装重复单据
/// </summary>
public class RepeatM110 : AuditedAggregateRoot<Guid>
{
/// <summary>
/// 报文接收ID,对应报文接收表主键
/// </summary>
public virtual Guid MessageFileReceiveID { get; protected set; }
public virtual Guid? MessageFileReceiveID { get; protected set; }
/// <summary>
/// 流水号#
/// </summary>
public virtual int? SerialNum { get; protected set; }
/// <summary>
/// 大众顺序号
@ -31,7 +36,10 @@ namespace WY.NewJit.MsgCheck
/// 底牌号#
/// </summary>
public virtual string VIN { get; protected set; }
/// <summary>
/// 总成ID
/// </summary>
public virtual Guid? AssemblyID { get; protected set; }
/// <summary>
/// 上线时间
/// </summary>
@ -66,9 +74,10 @@ namespace WY.NewJit.MsgCheck
public virtual string Description { get; set; }
/// <summary>
/// 装重复单据包含的零件列表
/// 装重复单据包含的零件列表
/// </summary>
public List<RepeatM110Part> M110RepeatParts { get; protected set; }
public virtual List<RepeatM110Part> M110RepeatParts { get; protected set; }
protected RepeatM110()
{
//此构造函数是提供给ORM用来从数据库中获取实体.
@ -76,18 +85,37 @@ namespace WY.NewJit.MsgCheck
//因为它会被来自数据库的值覆盖.可能不适用于私有构造函数.
}
public RepeatM110(Guid id, Guid messageFileReceiveID, int? hostSN, string kNR, string vIN, DateTime? onlineTime, DateTime? receiveTime, string vehicleModelCode, string version)
protected RepeatM110(Guid id)
: base(id)
{ }
public RepeatM110(Guid id, Guid? messageFileReceiveID, int? serialNum, int? hostSN, string kNR, string vIN, Guid? assemblyID, DateTime? onlineTime, DateTime? receiveTime, string vehicleModelCode, string productLine, string version, BillStatusEnum billStatus)
: base(id)
{
MessageFileReceiveID = messageFileReceiveID;
SerialNum = serialNum;
HostSN = hostSN;
KNR = kNR;
VIN = vIN;
AssemblyID = assemblyID;
OnlineTime = onlineTime;
ReceiveTime = receiveTime;
VehicleModelCode = vehicleModelCode;
ProductLine = productLine;
Version = version;
BillStatus = billStatus;
M110RepeatParts = new List<RepeatM110Part>();
}
public virtual void SetSerialNum(int serialNum)
{
this.SerialNum = serialNum;
}
public virtual void AddChildObj(Guid id, string partCode, double? partNum, string description)
{
M110RepeatParts.Add(new RepeatM110Part(id, partCode, partNum, description));
}
}
}

12
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Entitys/RepeatM110Part.cs

@ -8,7 +8,7 @@ using Volo.Abp.Domain.Entities.Auditing;
namespace WY.NewJit.MsgCheck
{
/// <summary>
/// 装重复单据和零件关系表
/// 装重复单据和零件关系表
/// </summary>
public class RepeatM110Part : AuditedEntity<Guid>
{
@ -26,6 +26,7 @@ namespace WY.NewJit.MsgCheck
/// 描述
/// </summary>
public virtual string Description { get; protected set; }
protected RepeatM110Part()
{
//此构造函数是提供给ORM用来从数据库中获取实体.
@ -33,6 +34,10 @@ namespace WY.NewJit.MsgCheck
//因为它会被来自数据库的值覆盖.可能不适用于私有构造函数.
}
public RepeatM110Part(Guid id)
: base(id)
{ }
public RepeatM110Part(Guid id, string partCode, double? partNum, string description)
: base(id)
{
@ -40,5 +45,10 @@ namespace WY.NewJit.MsgCheck
PartNum = partNum;
Description = description;
}
public virtual void SetId(Guid id)
{
this.Id = id;
}
}
}

704
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Services/M110CheckDomainService.cs

@ -0,0 +1,704 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json.Linq;
using NPOI.SS.Formula.Functions;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Linq.Dynamic.Core;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Domain.Services;
using Volo.Abp.ObjectMapping;
using Volo.Abp.Uow;
using WY.NewJit.Common;
using WY.NewJit.IRepositories;
using WY.NewJit.MsgBaseData;
using WY.NewJit.MsgCheck;
using WY.NewJit.MsgConversion;
using WY.NewJit.MsgTransmission;
namespace WY.NewJit.MsgCheck
{
/// <summary>
/// 报文校验领域服务实现
/// </summary>
public class M110CheckDomainService : DomainService
{
/// <summary>
/// M110单据
/// </summary>
private readonly IRepository<BillM110, Guid> _billM110Repository;
/// <summary>
/// 日志
/// </summary>
private ILogger<M110CheckDomainService> _logger;
/// <summary>
/// 日志提醒
/// </summary>
private readonly LogRemindDomainService _logRemindDomainService;
/// <summary>
/// 对象映射
/// </summary>
private readonly IObjectMapper _objectMapper;
/// <summary>
/// 重复M110
/// </summary>
private readonly IRepository<RepeatM110, Guid> _repeatM110Repository;
/// <summary>
/// 排除零件配置
/// </summary>
private readonly IRepository<ExcludePartCfg, Guid> _excludePartCfgRepository;
/// <summary>
/// 未知总成维护
/// </summary>
private readonly IRepository<UnknownAssembly, Guid> _unknownAssemblyRepository;
/// <summary>
/// 配置文件
/// </summary>
private readonly Microsoft.Extensions.Configuration.IConfiguration _configuration;
/// <summary>
/// Dapper仓储
/// </summary>
private readonly INewJitDapperRepository _newJitDapperRepository;
/// <summary>
/// 整车总成配置仓库
/// </summary>
private readonly IRepository<AssemblyCfgVehicle, Guid> _assemblyCfgVehicleRepository;
/// <summary>
/// 零件配置
/// </summary>
private readonly IRepository<PartCfg, Guid> _partCfgRepository;
/// <summary>
/// 错误信息前缀
/// </summary>
private string _errorMessagePrefix
{
get
{
return System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + ".";
}
}
int? _hostSN = 0;
/// <summary>
/// 单据号,写日志时用(R100时是KNR,M110是时VIN)
/// </summary>
private string _billNumber = "";
string _fileName = "";
private int _parseAssemblyCycleCount = 0;
/// <summary>
/// 解析Erp总成时的循环数量
/// </summary>
public int ParseAssemblyCycleCount
{
get
{
if (_parseAssemblyCycleCount == 0)
{
_parseAssemblyCycleCount = _configuration["ConfigDic:ParseAssemblyCycleCount"].TryToInt() ?? 4;
}
return _parseAssemblyCycleCount;
}
}
/// <summary>
/// 整车总成Id列表
/// </summary>
static List<VehicleAssemblyMainList> _vehicleAssemblyIdList = new List<VehicleAssemblyMainList>();
/// <summary>
/// 整车vs零件列表
/// </summary>
//static List<AssemblyCfgVehicle2Part> _vehicle2partList = new List<AssemblyCfgVehicle2Part>();
static Dictionary<Guid, List<AssemblyCfgVehicle2Part>> _vehicle2partDict
= new Dictionary<Guid, List<AssemblyCfgVehicle2Part>>();
/// <summary>
/// Erp总成Id列表
/// </summary>
static List<ErpAssemblyMain> _erpAssemblyMainList = new List<ErpAssemblyMain>();
/// <summary>
/// Erp总成vs零件列表
/// </summary>
static List<AssemblyCfgErp2Part> _erp2partList = new List<AssemblyCfgErp2Part>();
/// <summary>
/// 结算件切换列表
/// </summary>
static List<PartSwitch> _partSwitchList = new List<PartSwitch>();
/// <summary>
/// 切换目标零件编码
/// </summary>
static List<string> _switchTargetPartCodeList = new List<string>();
public M110CheckDomainService()
{ }
/// <summary>
/// 构造函数
/// </summary>
public M110CheckDomainService(
IRepository<BillM110, Guid> billM110Repository,
ILogger<M110CheckDomainService> logger,
LogRemindDomainService logRemindDomainService,
IObjectMapper objectMapper,
IRepository<RepeatM110, Guid> repeatM110Repository,
IRepository<ExcludePartCfg, Guid> excludePartCfgRepository,
IRepository<UnknownAssembly, Guid> unknownAssemblyRepository,
Microsoft.Extensions.Configuration.IConfiguration configuration,
INewJitDapperRepository newJitDapperRepository,
IRepository<AssemblyCfgVehicle, Guid> assemblyCfgVehicleRepository,
IRepository<PartCfg, Guid> partCfgRepository
)
{
_billM110Repository = billM110Repository;
_logger = logger;
_logRemindDomainService = logRemindDomainService;
_objectMapper = objectMapper;
_repeatM110Repository = repeatM110Repository;
_excludePartCfgRepository = excludePartCfgRepository;
_unknownAssemblyRepository = unknownAssemblyRepository;
_configuration = configuration;
_newJitDapperRepository = newJitDapperRepository;
_assemblyCfgVehicleRepository = assemblyCfgVehicleRepository;
_partCfgRepository = partCfgRepository;
}
#region 公共方法
public virtual void InitPub(List<VehicleAssemblyMainList> vehicleAssemblyIdList, List<AssemblyCfgVehicle2Part> vehicle2partList, List<ErpAssemblyMain> erpAssemblyMainList, List<AssemblyCfgErp2Part> erp2partList, List<PartSwitch> partSwitchList)
{
_vehicleAssemblyIdList = vehicleAssemblyIdList;
//_vehicle2partList = vehicle2partList;
_vehicle2partDict = vehicle2partList.GroupBy(p => p.VehicleAssemblyId).ToDictionary(p => p.Key, p => p.ToList());
_erpAssemblyMainList = erpAssemblyMainList;
_erp2partList = erp2partList;
_partSwitchList = partSwitchList;
_switchTargetPartCodeList = partSwitchList.Select(itm => itm.TargetPartCode).ToList(); //切换目标零件编码,判断单据是否存在切换零件时使用
}
/// <summary>
/// M110报文解析-正常入口
/// </summary>
/// <param name="msgReceiveObj"></param>
/// <param name="m110Bill"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public ObjectResultDto DoCheckM110Bill(MessageReceive msgReceiveObj, BillM110 m110Bill)
{
ObjectResultDto ret = new ObjectResultDto(false, null);
_hostSN = m110Bill.HostSN;
_billNumber = m110Bill.VIN;
_fileName = msgReceiveObj.MessageFileName;
try
{
#region 更新不可打印标志
List<BillM110> canNotPrintLst = _billM110Repository.Where(itm =>
itm.ProductLine == m110Bill.ProductLine
&& itm.HostSN == m110Bill.HostSN
&& (itm.CanNotPrint == null || itm.CanNotPrint == false)).ToList();
foreach (BillM110 canNotPrintObj in canNotPrintLst)
{
canNotPrintObj.CanNotPrint = true;
_billM110Repository.UpdateAsync(canNotPrintObj, true).GetAwaiter().GetResult();
}
#endregion
bool isMatch = DoMatchAssembly(m110Bill); //仅仅插入或更新M110主子表
if (isMatch)
{
#region 判断是否断号
//断号判断规则:大众顺序号生成规则是1至1999的重复循环,重复循环到1时判断之前最近的相同车型的VIN和当前VIN是否连续,如果不连续则表示断号
//断号判断:大众顺序号按生产线分类判断;VIN按车型分类判断
string curProductLine = m110Bill.ProductLine;
string curSerialNumStr = m110Bill.SerialNumStr; //排序依据
int curHostSN = m110Bill.HostSN ?? 0;
string curVehicleModel = m110Bill.VehicleModelCode;
int curVinNum = m110Bill.SerialNum ?? 0; //VIN后六位
//取当前生产线最近一条SerialNumStr
string priorSerialNumStr = _billM110Repository.Where(itm =>
itm.ProductLine == curProductLine
&& itm.SerialNumStr.CompareTo(curSerialNumStr) < 0
).Max(itm => itm.SerialNumStr);
if (priorSerialNumStr != null)
{
//取当前生产线最近一条
int priorHostSN = _billM110Repository.FirstOrDefault(itm => itm.ProductLine == curProductLine && itm.SerialNumStr == priorSerialNumStr).HostSN ?? 0;
if (curHostSN == priorHostSN + 1)
{
//不断号
}
else
{
//取当前生产线、相同车型、最近一条SerialNumStr
string priorSerialNumStr2 = _billM110Repository.Where(itm =>
itm.ProductLine == curProductLine
&& itm.VehicleModelCode == curVehicleModel
&& itm.SerialNumStr.CompareTo(curSerialNumStr) < 0
).Max(itm => itm.SerialNumStr);
if (priorSerialNumStr2 != null)
{
int priorVinNum = _billM110Repository.FirstOrDefault(itm => itm.SerialNumStr == priorSerialNumStr2).SerialNum ?? 0;
if (curVinNum == priorVinNum + 1)
{
//不断号
}
else
{
//断号提醒
string errorMsg = $"{curProductLine}生产线M110报文出现断号,当前VIN:{curVinNum}:{curHostSN},上一VIN:{priorVinNum}:{priorHostSN}。可以操作M110单据信息维护模块进行补号!";
_logger.LogError(errorMsg);
_logRemindDomainService.WriteLogRemind(_billNumber, errorMsg, LogTypeEnum.M110);
}
}
}
}
#endregion
ret.Status = true;
}
return ret;
}
catch (Exception ex)
{
string errorMsg = "调用报文解析及校验方法DoCheckM110Bill出错:" + ex.Message;
_logRemindDomainService.WriteLogRemind(_billNumber, errorMsg, LogTypeEnum.M110);
_logger.LogError(errorMsg);
throw new Exception(errorMsg);
}
}
public bool DoMatchAssembly(BillM110 m110Bill, bool isBillUpdate = false, bool isUnknowAssembly = false)
{
bool ret = false;
try
{
#region 更新单据表
m110Bill.SetAssemblyID(Guid.Parse("00000000-0000-0000-0000-000000000000"));
m110Bill.SetBillStatus(BillStatusEnum.Match);
BillM110 succObj;
if (isBillUpdate == true) //未知总成模块-重新解析时修改R100单据(单据已经存在)
{
if (isUnknowAssembly)
{
succObj = _billM110Repository.UpdateAsync(m110Bill).GetAwaiter().GetResult();
}
else
{
succObj = _billM110Repository.UpdateAsync(m110Bill, true).GetAwaiter().GetResult();
}
}
else
{
succObj = _billM110Repository.InsertAsync(m110Bill, true).GetAwaiter().GetResult();
}
if (succObj == null)
{
throw new Exception("插入或更新M110整车总成ID返回结果为空InsertAsync!!");
}
#endregion
ret = true;
return ret;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
#endregion
#region 私有方法
public RepeatM110 InsertM110RepeatBill(MessageReceive msgReceiveObj, BillM110 m110Bill) //, int? maxSerialNum
{
RepeatM110 ret = null;
int newSN = ServerHelper.VinToSN(m110Bill.VIN);
RepeatM110 repeatBill = new RepeatM110(
GuidGenerator.Create(),
msgReceiveObj.Id,
newSN, //maxSerialNum,
m110Bill.HostSN,
m110Bill.KNR,
m110Bill.VIN,
null,
m110Bill.OnlineTime,
ServerHelper.CurrentDateTime,
m110Bill.VehicleModelCode,
m110Bill.ProductLine,
((DateTime)m110Bill.OnlineTime).ToString("yyyyMM"),
BillStatusEnum.None
);
//零件子表赋值
foreach (BillM110Part m110Part in m110Bill.BillM110Parts)
{
repeatBill.AddChildObj(GuidGenerator.Create(), m110Part.PartCode, m110Part.PartNum, m110Part.Description);
}
//插入重复单据
ret = _repeatM110Repository.InsertAsync(repeatBill, true).GetAwaiter().GetResult();
return ret;
}
/// <summary>
/// 总成比较
/// </summary>
/// <param name="m110Bill"></param>
/// <param name="isBillSaved"></param>
/// <returns></returns>
//private CompareAssemblyResult IsMatchAssembly(BillM110 m110Bill, bool isBillSaved = false)
//{
// CompareAssemblyResult ret = new CompareAssemblyResult();
// try
// {
// #region 先进行整车总成匹配
// CompareVehicleAssemblyResult vehicleResult = CompareVehicleAssembly(m110Bill);
// if (vehicleResult.IsMatch == true)
// {
// ret.VehicleAssemblyResult = vehicleResult;
// ret.VehicleModel = m110Bill.VehicleModelCode;
// return ret;
// }
// #endregion
// #region 再进行Erp总成匹配
// if (ConfigDic.CurrentVersion == ConfigDicVersionOption.派格)
// {
// CompareErpAssemblyResult erpResult = CompareErpAssembly_PaiGe(m110Bill);
// if (erpResult.IsMatch == true)
// {
// ret.ErpAssemblyResult = erpResult;
// ret.VehicleModel = m110Bill.VehicleModelCode;
// return ret;
// }
// }
// else
// {
// //CompareErpAssemblyResult erpResult = CompareErpAssembly(m110Bill);
// //if (erpResult.IsMatch == true)
// //{
// // ret.ErpAssemblyResult = erpResult;
// // ret.VehicleModel = m110Bill.VehicleModelCode;
// // return ret;
// //}
// }
// #endregion
// #region 零件切换
// if (ConfigDic.CurrentVersion == ConfigDicVersionOption.派格)
// {
// bool isSwitch = m110Bill.BillM110Parts.Any(itm => _switchTargetPartCodeList.Contains(itm.PartCode));
// if (isSwitch == true) //存在零件切换情况
// {
// List<string> billPartCodeLst01 = m110Bill.BillM110Parts.Select(itm => itm.PartCode).ToList();
// List<PartSwitch> partSwitchLstByBill = _partSwitchList.Where(itm => billPartCodeLst01.Contains(itm.TargetPartCode) == true).ToList(); //根据单据零件数据,从零件切换表中取要切换的零件
// #region 先进行整车总成匹配
// CompareVehicleAssemblyResult vehicleResult22 = CompareVehicleAssembly(m110Bill, partSwitchLstByBill);
// if (vehicleResult22.IsMatch == true)
// {
// ret.VehicleAssemblyResult = vehicleResult22;
// ret.VehicleModel = m110Bill.VehicleModelCode;
// ret.IsPartSwitch = true;
// return ret;
// }
// #endregion
// #region 再进行Erp总成匹配
// CompareErpAssemblyResult erpResult = CompareErpAssembly_PaiGe(m110Bill, partSwitchLstByBill);
// if (erpResult.IsMatch == true)
// {
// ret.ErpAssemblyResult = erpResult;
// ret.VehicleModel = m110Bill.VehicleModelCode;
// ret.IsPartSwitch = true;
// return ret;
// }
// #endregion
// }
// }
// #endregion
// _logger.LogDebug(_errorMessagePrefix + "未匹配Erp总成:" + _billNumber);
// return ret;
// }
// catch (Exception ex)
// {
// throw new Exception($"-MatchAssembly子方法-{_billNumber}-" + ex.Message);
// }
//}
/// <summary>
/// 整车总成比较
/// </summary>
/// <param name="m110Bill"></param>
/// <returns>整车总成ID</returns>
//private CompareVehicleAssemblyResult CompareVehicleAssembly(BillM110 m110Bill, List<PartSwitch> partSwitchListByBillFilter = null)
//{
// try
// {
// CompareVehicleAssemblyResult ret = new CompareVehicleAssemblyResult();
// //取切换源零件列表
// List<string> switchSourcePartCodeLst = new List<string>();
// if (partSwitchListByBillFilter != null)
// {
// switchSourcePartCodeLst = partSwitchListByBillFilter.Select(itm => itm.SourcePartCode).ToList();
// }
// #region 单据子零件转换成PartBase(排除柱护板)
// List<PartBase> billPartBaseLst = new List<PartBase>();
// List<BillM110Part> tempPartLst = m110Bill.BillM110Parts;
// if (ConfigDic.CurrentVersion == ConfigDicVersionOption.派格)
// {
// tempPartLst = m110Bill.BillM110Parts.Where(itm => itm.PartType != "2").ToList(); //不等于柱护板
// }
// foreach (BillM110Part obj in tempPartLst)
// {
// PartBase tempObj = new PartBase(obj.PartCode, obj.PartNum);
// billPartBaseLst.Add(tempObj);
// }
// #endregion
// //遍历所有整车总成
// var vaLst = _vehicleAssemblyIdList.Where(itm => itm.VehicleModel == m110Bill.VehicleModelCode || string.IsNullOrEmpty(itm.VehicleModel) == true).Select(itm => itm.Id);
// foreach (Guid vehicleId in vaLst)
// {
// if (!_vehicle2partDict.TryGetValue(vehicleId, out List<AssemblyCfgVehicle2Part> vehicle2PartLst))
// {
// continue;
// }
// //先判断数量是否一致
// if (vehicle2PartLst.Count != billPartBaseLst.Count) continue;
// #region 整车总成零件转换成PartBase
// List<PartBase> vehiclePartBaseLst = new List<PartBase>();
// if (partSwitchListByBillFilter == null)
// {
// foreach (AssemblyCfgVehicle2Part v2pItm in vehicle2PartLst)
// {
// PartBase tempObj = new PartBase(v2pItm.PartCode, v2pItm.PartNum);
// vehiclePartBaseLst.Add(tempObj);
// }
// }
// else //执行零件切换
// {
// bool isAssemblyContainsSwitch = vehicle2PartLst.Any(itm => switchSourcePartCodeLst.Contains(itm.PartCode));
// if (isAssemblyContainsSwitch == false) //整车总成中不包含切换零件,直接跳过
// {
// //continue;
// }
// else
// {
// foreach (AssemblyCfgVehicle2Part v2pItm in vehicle2PartLst)
// {
// PartSwitch psObj = partSwitchListByBillFilter.FirstOrDefault(itm => itm.SourcePartCode == v2pItm.PartCode);
// if (psObj != null)
// {
// PartBase tempObj = new PartBase(psObj.TargetPartCode, v2pItm.PartNum);
// vehiclePartBaseLst.Add(tempObj);
// }
// else
// {
// PartBase tempObj = new PartBase(v2pItm.PartCode, v2pItm.PartNum);
// vehiclePartBaseLst.Add(tempObj);
// }
// }
// }
// }
// #endregion
// //集合比较
// bool isSame = ServerHelper.CompareTwoCollection(billPartBaseLst, vehiclePartBaseLst);
// if (isSame) //已匹配
// {
// ret.VehicleId = vehicleId; //整车总成ID
// ret.IsMatch = true;
// return ret;
// }
// }
// //不匹配
// ret.IsMatch = false;
// return ret;
// }
// catch (Exception ex)
// {
// throw new Exception($"-CompareVehicleAssembly子方法-{_billNumber}-" + ex.Message);
// }
//}
/// <summary>
/// ERP总成比较【派格版】
/// </summary>
/// <param name="m110Bill"></param>
/// <returns>匹配的若干个Erp总成ID</returns>
//private CompareErpAssemblyResult CompareErpAssembly_PaiGe(BillM110 m110Bill, List<PartSwitch> partSwitchListByBillFilter = null)
//{
// try
// {
// CompareErpAssemblyResult ret = new CompareErpAssemblyResult();
// #region 单据零件转换成PartBase
// List<PartBase> billPartBaseLst = new List<PartBase>();
// //排除柱护板
// List<BillM110Part> tempBillPartLst = m110Bill.BillM110Parts;
// if (ConfigDic.CurrentVersion == ConfigDicVersionOption.派格)
// {
// tempBillPartLst = m110Bill.BillM110Parts.Where(itm => itm.PartType != "2").ToList(); //不等于柱护板
// }
// //按PartCode分组汇总PartNum
// var qry2 = from item in tempBillPartLst
// group item by item.PartCode into g
// select new
// {
// PartCode = g.Key,
// PartNum = g.Sum(itm => itm.PartNum)
// };
// foreach (var item in qry2)
// {
// PartBase obj = new PartBase(item.PartCode, item.PartNum);
// billPartBaseLst.Add(obj);
// }
// #endregion
// //取ERP总成分组
// string assGroupSql = $"select Id, GroupCode, VehicleModel from FisAssemblyCfgGroup where IsDeleted = 0 and IsDisable <> 1 and (VehicleModel = '{m110Bill.VehicleModelCode}' or VehicleModel is null)";
// List<AssemblyCfgGroup> assGroupLst = _newJitDapperRepository.GetListBySql<AssemblyCfgGroup>(assGroupSql, true);
// //遍历ERP总成分组
// foreach (AssemblyCfgGroup assGroupObj in assGroupLst)
// {
// #region ERP总成子零件转换成PartBase
// var query = from item in _erp2partList
// where item.GroupId == assGroupObj.Id
// group item by item.PartCode into g
// select new
// {
// PartCode = g.Key,
// PartNum = g.Sum(itm => itm.PartNum)
// };
// List<PartBase> erpPartBaseLst = new List<PartBase>();
// if (partSwitchListByBillFilter == null)
// {
// foreach (var item in query)
// {
// PartBase obj = new PartBase(item.PartCode, item.PartNum);
// erpPartBaseLst.Add(obj);
// }
// }
// else //执行零件切换
// {
// //foreach (var item in query)
// //{
// // PartSwitch psObj = partSwitchListByBillFilter.FirstOrDefault(itm => itm.SourcePartCode == item.PartCode);
// // if (psObj != null)
// // {
// // PartBase obj = new PartBase(psObj.TargetPartCode, item.PartNum); //根据切换关系表,将总成的零件,从源零件替换成目标零件
// // erpPartBaseLst.Add(obj);
// // }
// // else
// // {
// // PartBase obj = new PartBase(item.PartCode, item.PartNum);
// // erpPartBaseLst.Add(obj);
// // }
// //}
// }
// #endregion
// bool isSame = ServerHelper.CompareTwoCollection(billPartBaseLst, erpPartBaseLst);
// if (isSame) //已匹配
// {
// ret.ErpAssemblyIdList = _erp2partList.Where(itm => itm.GroupId == assGroupObj.Id).Select(itm => itm.ErpAssemblyId).Distinct().ToList();
// //为了在调用方法中将整车总成添加到内存
// List<AssemblyCfgVehicle2Part> vehicle2PartLst = new List<AssemblyCfgVehicle2Part>();
// foreach (var erpPart in erpPartBaseLst)
// {
// AssemblyCfgVehicle2Part vehicle2PartObj = new AssemblyCfgVehicle2Part();
// vehicle2PartObj.PartCode = erpPart.PartCode;
// vehicle2PartObj.PartNum = erpPart.PartNum;
// vehicle2PartLst.Add(vehicle2PartObj);
// }
// ret.Vehicle2PartList = vehicle2PartLst;
// ret.IsMatch = true;
// return ret;
// }
// } //foreach
// ret.IsMatch = false;
// return ret;
// }
// catch (Exception ex)
// {
// throw new Exception($"-CompareErpAssembly子方法-{_billNumber}-" + ex.Message);
// }
//}
/// <summary>
/// 不匹配时,插入未知总成,写提醒日志
/// </summary>
/// <param name="bill"></param>
public UnknownAssembly InsertUnknownAssembly(BillM110 bill)
{
UnknownAssembly ret = null;
try
{
//插入未知总成
UnknownAssembly unknownAssemblyObj = new UnknownAssembly(GuidGenerator.Create(), bill.Id, "M110");
//预批量赋值
unknownAssemblyObj.Description = bill.Description; //描述字段保存预批量信息
foreach (BillM110Part billPart in bill.BillM110Parts)
{
unknownAssemblyObj.AddChildObj(GuidGenerator.Create(), billPart.PartCode, billPart.PartNum, billPart.Description);
}
var partNumSum = unknownAssemblyObj.UnknownAssemblyParts.Sum(itm => (int)itm.PartNum);
unknownAssemblyObj.SetPartNum(partNumSum);
ret = _unknownAssemblyRepository.InsertAsync(unknownAssemblyObj, true).GetAwaiter().GetResult();
return ret;
}
catch (Exception ex)
{
throw new Exception($"-InsertUnknownAssembly子方法-{_billNumber}-" + ex.Message);
}
}
#endregion
}//class
}

49
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.EntityFrameworkCore/EntityFrameworkCore/NewJitDbContextModelCreatingExtensions.cs

@ -212,21 +212,43 @@ namespace WY.NewJit.EntityFrameworkCore
});
#region M110
builder.Entity<BillM110>(b =>
{
b.ToTable(NewJitConsts.DbTablePrefix + nameof(BillM110)); //将Book实体映射到数据库表XXXBooks
b.ConfigureByConvention();//配置/映射继承的属性,应始终对你所有的实体使用它
b.Property(itm => itm.KNR).HasColumnType("varchar").HasMaxLength(50);
//b.HasIndex(itm => itm.KNR).HasDatabaseName("IX_BillM110_KNR");
b.Property(itm => itm.VIN).HasColumnType("varchar").HasMaxLength(50);
b.HasIndex(itm => itm.VIN).HasDatabaseName("IX_BillM110_VIN3");
//b.HasIndex(itm => itm.VIN).HasDatabaseName("IX_BillM110_VIN2");
b.Property(itm => itm.ProductLine).HasColumnType("varchar").HasMaxLength(50);
//b.HasIndex(itm => itm.ProductLine).HasDatabaseName("IX_BillM110_ProductLine2");
//b.HasIndex(itm => itm.SerialNum).HasDatabaseName("IX_BillM110_SerialNum");
b.Property(itm => itm.SerialNumStr).HasColumnType("varchar").HasMaxLength(50);
//b.HasIndex(itm => itm.SerialNumStr).HasDatabaseName("IX_BillM110_SerialNumStr2");
//b.HasIndex(itm => itm.HostSN).HasDatabaseName("IX_BillM110_HostSN2");
b.Property(itm => itm.Version).HasColumnType("varchar").HasMaxLength(50);
b.Property(itm => itm.VehicleModelCode).HasColumnType("varchar").HasMaxLength(50);
});
builder.Entity<BillM110Part>(b =>
{
b.ToTable(NewJitConsts.DbTablePrefix + nameof(BillM110Part)); //将Book实体映射到数据库表XXXBooks
b.ConfigureByConvention();//配置/映射继承的属性,应始终对你所有的实体使用它
b.Property(itm => itm.PartCode).HasColumnType("varchar").HasMaxLength(50);
b.HasIndex(itm => itm.PartCode).HasDatabaseName("IX_BillM110Part_PartCode3");
//b.HasIndex(itm => itm.PartCode).HasDatabaseName("IX_BillM110Part_PartCode2");
b.Property(itm => itm.PartType).HasColumnType("varchar").HasMaxLength(50);
b.Property(itm => itm.PartType2).HasColumnType("varchar").HasMaxLength(50);
b.Property(itm => itm.PartType3).HasColumnType("varchar").HasMaxLength(50);
});
#endregion
builder.Entity<BillR100>(b =>
{
b.ToTable(NewJitConsts.DbTablePrefix + nameof(BillR100)); //将Book实体映射到数据库表XXXBooks
@ -286,16 +308,39 @@ namespace WY.NewJit.EntityFrameworkCore
b.HasIndex(itm => itm.PartCode).HasDatabaseName("IX_RepeatM100Part_PartCode");
});
#region RepeatM110
builder.Entity<RepeatM110>(b =>
{
b.ToTable(NewJitConsts.DbTablePrefix + nameof(RepeatM110)); //将Book实体映射到数据库表XXXBooks
b.ConfigureByConvention();//配置/映射继承的属性,应始终对你所有的实体使用它
b.Property(itm => itm.KNR).HasColumnType("varchar").HasMaxLength(50);
//b.HasIndex(itm => itm.KNR).HasDatabaseName("IX_RepeatM110_KNR");
b.Property(itm => itm.VIN).HasColumnType("varchar").HasMaxLength(50);
//b.HasIndex(itm => itm.VIN).HasDatabaseName("IX_RepeatM110_VIN");
b.Property(itm => itm.ProductLine).HasColumnType("varchar").HasMaxLength(50);
//b.HasIndex(itm => itm.ProductLine).HasDatabaseName("IX_RepeatM110_ProductLine");
//b.HasIndex(itm => itm.HostSN).HasDatabaseName("IX_RepeatM110_HostSN");
b.Property(itm => itm.Version).HasColumnType("varchar").HasMaxLength(50);
b.Property(itm => itm.VehicleModelCode).HasColumnType("varchar").HasMaxLength(50);
});
builder.Entity<RepeatM110Part>(b =>
{
b.ToTable(NewJitConsts.DbTablePrefix + nameof(RepeatM110Part)); //将Book实体映射到数据库表XXXBooks
b.ConfigureByConvention();//配置/映射继承的属性,应始终对你所有的实体使用它
b.Property(itm => itm.PartCode).HasColumnType("varchar").HasMaxLength(50);
//b.HasIndex(itm => itm.PartCode).HasDatabaseName("IX_RepeatM110Part_PartCode");
});
#endregion
builder.Entity<RepeatR100>(b =>
{
b.ToTable(NewJitConsts.DbTablePrefix + nameof(RepeatR100)); //将Book实体映射到数据库表XXXBooks

195
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Job.ConsoleApp/Messages/MsgTransmissionService.cs

@ -53,8 +53,10 @@ namespace WY.NewJit.Job.ConsoleApp.Messages
/// </summary>
private readonly M100CheckDomainService _m100CheckDomainService;
private readonly M110CheckDomainService _m110_CheckDomainService;
//private readonly CacheManagerDomainService _cacheManagerDomainService;
/// <summary>
/// 日志
@ -76,6 +78,9 @@ namespace WY.NewJit.Job.ConsoleApp.Messages
/// </summary>
private readonly IRepository<BillM100, Guid> _billM100Repository;
private readonly IRepository<BillM110, Guid> _billM110_Repository;
/// <summary>
/// 重复R100
/// </summary>
@ -86,6 +91,8 @@ namespace WY.NewJit.Job.ConsoleApp.Messages
/// </summary>
private readonly IRepository<RepeatM100, Guid> _repeatM100Repository;
private readonly IRepository<RepeatM100, Guid> _repeatM110_Repository;
/// <summary>
/// 排除零件配置
/// </summary>
@ -238,7 +245,10 @@ namespace WY.NewJit.Job.ConsoleApp.Messages
DicDomainService dicDomainService,
IGuidGenerator guidGenerator,
GlobalSettingsDomainService globalSettingsDomainService,
IRepository<MessageReceiveArchive, Guid> messageReceiveArchiveRepository
IRepository<MessageReceiveArchive, Guid> messageReceiveArchiveRepository,
IRepository<BillM110, Guid> billM110_Repository,
IRepository<RepeatM100, Guid> repeatM110_Repository,
M110CheckDomainService m110_CheckDomainService
//CacheManagerDomainService cacheManagerDomainService
)
{
@ -260,6 +270,9 @@ namespace WY.NewJit.Job.ConsoleApp.Messages
GuidGenerator = guidGenerator;
_globalSettingsDomainService = globalSettingsDomainService;
_messageReceiveArchiveRepository = messageReceiveArchiveRepository;
_billM110_Repository = billM110_Repository;
_repeatM110_Repository = repeatM110_Repository;
_m110_CheckDomainService = m110_CheckDomainService;
//_cacheManagerDomainService = cacheManagerDomainService;
}
#endregion
@ -596,6 +609,18 @@ namespace WY.NewJit.Job.ConsoleApp.Messages
throw new Exception(msg3);
}
}
else if (billResObj.M110_Bill != null)
{
var m110Bill = billResObj.M110_Bill;
bool isRepeat = _billM110_Repository.Any(itm => itm.HostSN == m110Bill.HostSN && itm.VIN == m110Bill.VIN && itm.MessageFileReceiveID != msgReceiveObj.Id);
if (isRepeat == true)
{
var succObj = _m110_CheckDomainService.InsertM110RepeatBill(msgReceiveObj, m110Bill);
string msg3 = _errorMessagePrefix + $"M110是重复报文:{msgReceiveObj.MessageFileName}";
_logger.LogDebug(msg3);
throw new Exception(msg3);
}
}
#endregion
UpdateVehicleModel(msgReceiveObj, billResObj); //更新车型
@ -630,6 +655,12 @@ namespace WY.NewJit.Job.ConsoleApp.Messages
string snStr = ServerHelper.ToSerialNumStr(r100.OnlineTime, r100.HostSN, "r100", r100.ProductLine);
billResultObj.R100Bill.SetSerialNumStr(snStr);
}
else if (billResultObj.M110_Bill != null)
{
var m110 = billResultObj.M110_Bill;
string snStr = ServerHelper.ToSerialNumStr(m110.OnlineTime, m110.HostSN, "m110", m110.ProductLine);
billResultObj.M110_Bill.SetSerialNumStr(snStr);
}
#endregion
//区分门板和柱护板
@ -658,6 +689,25 @@ namespace WY.NewJit.Job.ConsoleApp.Messages
billHostSN = billResultObj.M100Bill.HostSN;
isSucc = resu.Status;
}
else if (billType == "M110")
{
var resu = _m110_CheckDomainService.DoCheckM110Bill(msgReceiveObj, billResultObj.M110_Bill);
billOnlineTime = billResultObj.M110_Bill.OnlineTime;
billHostSN = billResultObj.M110_Bill.HostSN;
isSucc = resu.Status;
#region 接收M110时,更新M100的“接收M110状态”
string vin = billResultObj.M110_Bill.VIN;
var m100Query = _billM100Repository.GetQueryableAsync().GetAwaiter().GetResult();
BillM100 m100Obj = m100Query.FirstOrDefault(itm => itm.VIN == vin);
if (m100Obj != null)
{
m100Obj.IsReceiveM110 = true;
_billM100Repository.UpdateAsync(m100Obj).GetAwaiter().GetResult();
}
#endregion
}
if (isSucc)
{
MessageReceiveArchive msgReceArv = new MessageReceiveArchive(GuidGenerator.Create(), msgReceiveObj.MessageFileName, msgReceiveObj.MessageContent,
@ -675,10 +725,6 @@ namespace WY.NewJit.Job.ConsoleApp.Messages
#endregion
} //遍历多个成品件
}
catch (Exception ex0)
{
@ -722,7 +768,7 @@ namespace WY.NewJit.Job.ConsoleApp.Messages
newBill.SetBillStatus(BillStatusEnum.Match);
newBill.BillR100Parts.Clear();
newBill.BillR100Parts.AddRange(item.PartList);
billResultLst.Add(new BillResult(newBill, null));
billResultLst.Add(new BillResult(newBill, null, null));
}
}
@ -744,7 +790,28 @@ namespace WY.NewJit.Job.ConsoleApp.Messages
newBill.SetBillStatus(BillStatusEnum.Match);
newBill.BillM100Parts.Clear();
newBill.BillM100Parts.AddRange(item.PartList);
billResultLst.Add(new BillResult(null, newBill));
billResultLst.Add(new BillResult(null, newBill, null));
}
}
else if (billResObj.M110_Bill != null)
{
var m110bill = billResObj.M110_Bill;
var billPartLst = billResObj.M110_Bill.BillM110Parts; //包含多个成品件
var partGroups = billPartLst.GroupBy(itm => new { itm.PartType, itm.PartType2 }).Select(itm => new
{
ProductLine = itm.Key.PartType,
Group = itm.Key.PartType2,
PartList = itm.ToList()
}).ToList();
foreach (var item in partGroups)
{
var newBill = BillM110.Clone(m110bill);
newBill.SetId(GuidGenerator.Create());
newBill.ProductLine = item.ProductLine;
newBill.SetBillStatus(BillStatusEnum.Match);
newBill.BillM110Parts.Clear();
newBill.BillM110Parts.AddRange(item.PartList);
billResultLst.Add(new BillResult(null, null, newBill));
}
}
return billResultLst;
@ -800,6 +867,27 @@ namespace WY.NewJit.Job.ConsoleApp.Messages
}
}
}
else if (billResObj.M110_Bill != null)
{
var bill = billResObj.M110_Bill;
var billPartLst = billResObj.M110_Bill.BillM110Parts; //包含多个成品件
foreach (var billPart in billPartLst)
{
string partLargeType = billPart.PartCode.Substring(6, 3); //取客户零件代码的7-9位,是零件大类
var partCfgObj = _partLargeTypeList.FirstOrDefault(itm => itm.LargeTypeCode == partLargeType && itm.VehicleModel == bill.VehicleModelCode); //是否加车型过滤//??
if (partCfgObj != null)
{
billPart.PartType = partCfgObj.ProductLine;
billPart.PartType2 = partCfgObj.Group;
billPart.PartType3 = partCfgObj.LargeTypeCode;
}
else
{
ret = $"根据车型{bill.VehicleModelCode}和零件大类{partLargeType}在零件大类字典中没有取到数据:{billPart.PartCode}";
break;
}
}
}
return ret;
}
@ -864,8 +952,8 @@ namespace WY.NewJit.Job.ConsoleApp.Messages
throw new Exception(errorMsg);
}
//单据配置校验:R100、M100
string billType = locItems[2];
if (billType != "R100" && billType != "M100")
string billType = locItems[2]?.Trim();
if (billType != "R100" && billType != "M100" && billType != "M110")
{
ret = $"报文类别错误:{billType}-{fileName}";
}
@ -1044,6 +1132,51 @@ namespace WY.NewJit.Job.ConsoleApp.Messages
}
ret.M100Bill = m100Obj;
}
else if (billType == "M110")
{
DateTime onlineTimeDT = onlineTime.yyyyMMddHHmmssToDateTime();
string serialNumStr = ServerHelper.ToSerialNumStr(onlineTimeDT, hostSN.TryToIntZero());
BillM110 m110_Obj = new BillM110(
GuidGenerator.Create(),
msgReceObj.Id, //报文接收ID
ServerHelper.VinToSN(vinCode), //流水号 maxSN + 1 流水号改成底盘后六位,这样同一生产线中不会重复、并且连续
serialNumStr,
hostSN.TryToInt(),
orderNumberKNR,
vinCode, //底牌号
null, //总成ID
onlineTimeDT, //上线时间
vehicleModel, //车型代码(取通用字典)
onlineTimeDT.Year.ToString(),
msgReceObj.ReceiveTime,
BillStatusEnum.None
);
for (int i = 0; i < partCodeList.Count; i++)
{
if (vehicleModel == "3C") //3C => B8L
{
string partCode = partCodeList[i];
int partNum = qtyList[i] ?? 0;
if (m110_Obj.BillM110Parts.Any(itm => itm.PartCode == partCode && itm.PartNum == partNum))
{
//B8L零件重复,待处理
}
else
{
m110_Obj.AddChildObj(GuidGenerator.Create(), partCodeList[i], qtyList[i] ?? 0);
}
}
else
{
m110_Obj.AddChildObj(GuidGenerator.Create(), partCodeList[i], qtyList[i] ?? 0);
}
}
ret.M110_Bill = m110_Obj;
}
return ret;
}
catch (Exception ex)
@ -1150,6 +1283,30 @@ namespace WY.NewJit.Job.ConsoleApp.Messages
}
}
else if (billResObj.M110_Bill != null)
{
var bill = billResObj.M110_Bill;
string ediVehicleModel = bill.VehicleModelCode; //报文车型
//车型转换:3H 转 CC
var obj1 = _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);
}
else //报文车型 没有对应的 格拉默车型
{
msgReceObj.ErrorCount = 4;
string errorMsg = $"报文车型{ediVehicleModel}没有对应的零件生产工厂车型:{msgReceObj.MessageFileName}";
throw new Exception(errorMsg); //车型不存在,直接返回解析失败,程序执行中断,报警(不进入未知总成)
}
}
}
private static void SetProductLineByExcept(BillR100 bill)
@ -1283,6 +1440,19 @@ namespace WY.NewJit.Job.ConsoleApp.Messages
billObj.Description = "预批量";
}
}
else if (billResObj.M110_Bill != null)
{
var billObj = billResObj.M110_Bill;
if (billObj.KNR.Length == 8)
{
string yy = ((DateTime)billObj.OnlineTime).ToString("yy");
billObj.KNR = yy + billObj.KNR;
}
if (billObj.KNR.Length == 10 && billObj.KNR.Substring(4, 1) == "7")
{
billObj.Description = "预批量";
}
}
}
}
#endregion
@ -1295,14 +1465,17 @@ namespace WY.NewJit.Job.ConsoleApp.Messages
public BillR100 R100Bill { get; set; }
public BillM100 M100Bill { get; set; }
public BillM110 M110_Bill { get; set; }
public BillResult()
{
}
public BillResult(BillR100 r100Bill, BillM100 m100Bill)
public BillResult(BillR100 r100Bill, BillM100 m100Bill, BillM110 m110Bill)
{
R100Bill = r100Bill;
M100Bill = m100Bill;
M110_Bill = m110Bill;
}
}

Loading…
Cancel
Save