From a29d747b259ffbff2560324611926a892aafb001 Mon Sep 17 00:00:00 2001 From: me Date: Tue, 5 Aug 2025 17:43:10 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=8C=89=E8=AE=A1=E5=88=92=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MenBanReports/MenBanPrintInputDto.cs | 2 +- .../MsgBaseData/Dics/Dtos/DicItemDto.cs | 46 + .../MsgCheck/BillM100s/Dtos/BillM100Dto.cs | 51 +- .../BillM100s/Dtos/BillM100PartDto.cs | 26 + .../MsgCheck/BillM110s/Dtos/BillM110Dto.cs | 26 + .../BillM110s/Dtos/BillM110PartDto.cs | 28 + .../Interfaces/IBillM110AppService.cs | 6 +- .../WY.NewJit.Application.Contracts.xml | 116 ++- .../MsgBaseData/Dics/DicAppService.cs | 14 +- .../MsgCheck/BillM100s/BillM100AppService.cs | 485 ++++++---- .../MsgCheck/BillM110s/BillM110AppService.cs | 860 +++++++++--------- .../WY.NewJit.Application.xml | 49 +- .../Common/ObjectResultDto.cs | 6 - .../MsgCheck/BillStatusEnum.cs | 6 +- .../MsgBaseData/Entitys/DicItem.cs | 24 +- .../Services/LineSNDomianService.cs | 4 +- .../Win.Sfs.Shared.AssemblyInfo.cs | 2 +- .../Win.Sfs.Shared.AssemblyInfoInputs.cache | 2 +- .../netcoreapp5/Win.Utils.AssemblyInfo.cs | 2 +- .../Win.Utils.AssemblyInfoInputs.cache | 2 +- 20 files changed, 1088 insertions(+), 669 deletions(-) diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/Extends/MenBanReports/MenBanPrintInputDto.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/Extends/MenBanReports/MenBanPrintInputDto.cs index 52e931e..44a433d 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/Extends/MenBanReports/MenBanPrintInputDto.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/Extends/MenBanReports/MenBanPrintInputDto.cs @@ -37,7 +37,7 @@ namespace WY.NewJit.Extends /// /// 补打时使用 /// - public virtual List M100IdList { get; set; } + //public virtual List M100IdList { get; set; } #endregion } diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/Dics/Dtos/DicItemDto.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/Dics/Dtos/DicItemDto.cs index 00c8ae9..f8a01c9 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/Dics/Dtos/DicItemDto.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/Dics/Dtos/DicItemDto.cs @@ -27,5 +27,51 @@ namespace WY.NewJit.MsgBaseData /// 字典项名称 /// public string DicItemName { get; set; } + + /// + /// 分类1(零件大类对应分组) + /// + public virtual string DicItemSort1 { get; set; } + + /// + /// 分类2 (零件大类对应产线) + /// + public virtual string DicItemSort2 { get; set; } + + /// + /// 分类3(零件大类对应车型) + /// + public virtual string DicItemSort3 { get; set; } + + /// + /// 分类4(零件大类对应打印报表的三位零件大类) + /// + public virtual string DicItemSort4 { get; set; } + + /// + /// 分类5 (零件大类对应客户零件号) + /// + public virtual string DicItemSort5 { get; set; } + + /// + /// 分类6(零件大类对应显示车型) + /// + public virtual string DicItemSort6 { get; set; } + + /// + /// 分类7(零件大类对应报表字段显示顺序) + /// + public virtual string DicItemSort7 { get; set; } + + /// + /// 分类8(零件大类对应装箱清单号的前缀,例如C或T) + /// + public virtual string DicItemSort8 { get; set; } + + /// + /// 分类9(零件大类对应 打印标准数量 12 或 24) + /// + public virtual string DicItemSort9 { get; set; } + } } diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM100s/Dtos/BillM100Dto.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM100s/Dtos/BillM100Dto.cs index eab856e..348cf10 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM100s/Dtos/BillM100Dto.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM100s/Dtos/BillM100Dto.cs @@ -45,14 +45,14 @@ namespace WY.NewJit.MsgCheck /// /// 总成ID /// - [ExporterHeader(DisplayName = "总成ID")] - [ImporterHeader(Name = "总成ID")] + [ExporterHeader(IsIgnore =true)] + [ImporterHeader(IsIgnore = true)] public Guid? AssemblyID { get; set; } /// /// 上线时间 /// - [ExporterHeader(DisplayName = "上线时间")] + [ExporterHeader(DisplayName = "上线时间", Format ="yyyy-MM-dd HH:mm")] [ImporterHeader(Name = "上线时间")] public DateTime? OnlineTime { get; set; } @@ -73,14 +73,14 @@ namespace WY.NewJit.MsgCheck /// /// 版本 /// - [ExporterHeader(DisplayName = "版本")] - [ImporterHeader(Name = "版本")] + [ExporterHeader(IsIgnore = true)] + [ImporterHeader(IsIgnore = true)] public string Version { get; set; } /// /// 接收时间 /// - [ExporterHeader(DisplayName = "接收时间")] + [ExporterHeader(DisplayName = "接收时间", Format = "yyyy-MM-dd HH:mm")] [ImporterHeader(Name = "接收时间")] public DateTime? ReceiveTime { get; set; } @@ -101,28 +101,55 @@ namespace WY.NewJit.MsgCheck /// /// 涂装重复单据包含的零件列表 /// + [ExporterHeader(IsIgnore = true)] + [ImporterHeader(IsIgnore = true)] public List BillM100Parts { get; set; } /// /// 手工操作类型:0 none,1 手工添加,2 手工修改 /// - [ExporterHeader(DisplayName = "手工操作类型")] - [ImporterHeader(Name = "手工操作类型")] + [ExporterHeader(IsIgnore = true)] + [ImporterHeader(IsIgnore = true)] public ManualOperationTypeEnum OperationType { get; set; } /// /// 手工操作员 /// - [ExporterHeader(DisplayName = "手工操作员")] - [ImporterHeader(Name = "手工操作员")] + [ExporterHeader(IsIgnore = true)] + [ImporterHeader(IsIgnore = true)] public string Operator { get; set; } /// /// 手工操作日期 /// - [ExporterHeader(DisplayName = "手工操作日期")] - [ImporterHeader(Name = "手工操作日期")] + [ExporterHeader(IsIgnore = true)] + [ImporterHeader(IsIgnore = true)] public DateTime? OperationTime { get; set; } + [ExporterHeader(DisplayName = "零件1")] + [ImporterHeader(Name = "零件1")] + public string PartCode1 { get; set; } + + [ExporterHeader(DisplayName = "零件2")] + [ImporterHeader(Name = "零件2")] + public string PartCode2 { get; set; } + + [ExporterHeader(DisplayName = "零件3")] + [ImporterHeader(Name = "零件3")] + public string PartCode3 { get; set; } + + [ExporterHeader(DisplayName = "零件4")] + [ImporterHeader(Name = "零件4")] + public string PartCode4 { get; set; } + + [ExporterHeader(DisplayName = "零件5")] + [ImporterHeader(Name = "零件5")] + public string PartCode5 { get; set; } + + [ExporterHeader(DisplayName = "零件6")] + [ImporterHeader(Name = "零件6")] + public string PartCode6 { get; set; } + + } } diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM100s/Dtos/BillM100PartDto.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM100s/Dtos/BillM100PartDto.cs index 52f9451..f136eb5 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM100s/Dtos/BillM100PartDto.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM100s/Dtos/BillM100PartDto.cs @@ -34,5 +34,31 @@ namespace WY.NewJit.MsgCheck [ExporterHeader(DisplayName = "描述")] [ImporterHeader(Name = "描述")] public string Description { get; set; } + + /// + /// 零件类型:产线 + /// + public virtual string PartType { get; set; } + + /// + /// 零件类型:分组 + /// + public virtual string PartType2 { get; set; } + + /// + /// 零件类型:零件大类 + /// + public virtual string PartType3 { get; set; } + + /// + /// 零件在主表横向排列顺序 + /// + public int? DisplaySN { get; set; } + + /// + /// 零件在主表横向排列显示的列名 + /// + public string DisplayColumnName { get; set; } + } } diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Dtos/BillM110Dto.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Dtos/BillM110Dto.cs index fdb57c9..cdabb63 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Dtos/BillM110Dto.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Dtos/BillM110Dto.cs @@ -124,5 +124,31 @@ namespace WY.NewJit.MsgCheck [ImporterHeader(Name = "手工操作日期")] public DateTime? OperationTime { get; set; } + #region 横向显示零件 + [ExporterHeader(DisplayName = "零件1")] + [ImporterHeader(Name = "零件1")] + public string PartCode1 { get; set; } + + [ExporterHeader(DisplayName = "零件2")] + [ImporterHeader(Name = "零件2")] + public string PartCode2 { get; set; } + + [ExporterHeader(DisplayName = "零件3")] + [ImporterHeader(Name = "零件3")] + public string PartCode3 { get; set; } + + [ExporterHeader(DisplayName = "零件4")] + [ImporterHeader(Name = "零件4")] + public string PartCode4 { get; set; } + + [ExporterHeader(DisplayName = "零件5")] + [ImporterHeader(Name = "零件5")] + public string PartCode5 { get; set; } + + [ExporterHeader(DisplayName = "零件6")] + [ImporterHeader(Name = "零件6")] + public string PartCode6 { get; set; } + + #endregion } } diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Dtos/BillM110PartDto.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Dtos/BillM110PartDto.cs index 8b788ff..2f045b5 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Dtos/BillM110PartDto.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Dtos/BillM110PartDto.cs @@ -34,5 +34,33 @@ namespace WY.NewJit.MsgCheck [ExporterHeader(DisplayName = "描述")] [ImporterHeader(Name = "描述")] public string Description { get; set; } + + #region 新增 + /// + /// 零件类型:产线 + /// + public virtual string PartType { get; set; } + + /// + /// 零件类型:分组 + /// + public virtual string PartType2 { get; set; } + + /// + /// 零件类型:零件大类 + /// + public virtual string PartType3 { get; set; } + + /// + /// 零件在主表横向排列顺序 + /// + public int? DisplaySN { get; set; } + + /// + /// 零件在主表横向排列显示的列名 + /// + public string DisplayColumnName { get; set; } + + #endregion } } diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Interfaces/IBillM110AppService.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Interfaces/IBillM110AppService.cs index 900ce5c..913f0aa 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Interfaces/IBillM110AppService.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Interfaces/IBillM110AppService.cs @@ -67,14 +67,14 @@ namespace WY.NewJit.MsgCheck /// /// 生产线 /// 起始大众顺序号 - Task> GetPrintStartHostSN2(string productLine, string isZhuHuBan,string GroupName = null); + //Task> GetPrintStartHostSN2(string productLine, string isZhuHuBan,string GroupName = null); /// /// 打印前检查门板大众顺序号是否断号 /// /// /// 断号时Item不为空 - Task> CheckMBHostSNBreakNum(MenBanPrintInputDto input); + //Task> CheckMBHostSNBreakNum(MenBanPrintInputDto input); /// /// 打印前检查柱护板大众顺序号是否断号 @@ -105,7 +105,7 @@ namespace WY.NewJit.MsgCheck /// /// 生产线编号列表 /// 生产线超时情况 - Task> ProductLineTimeoutRemind(TimeOutRemindInputDto input); + //Task> ProductLineTimeoutRemind(TimeOutRemindInputDto input); //Task> GetReplenishPrintListAsync(QueryBillM110Dto input); diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/WY.NewJit.Application.Contracts.xml b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/WY.NewJit.Application.Contracts.xml index c7408b9..d3d286b 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/WY.NewJit.Application.Contracts.xml +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/WY.NewJit.Application.Contracts.xml @@ -945,6 +945,51 @@ 字典项名称 + + + 分类1(零件大类对应分组) + + + + + 分类2 (零件大类对应产线) + + + + + 分类3(零件大类对应车型) + + + + + 分类4(零件大类对应打印报表的三位零件大类) + + + + + 分类5 (零件大类对应客户零件号) + + + + + 分类6(零件大类对应显示车型) + + + + + 分类7(零件大类对应报表字段显示顺序) + + + + + 分类8(零件大类对应装箱清单号的前缀,例如C或T) + + + + + 分类9(零件大类对应 打印标准数量 12 或 24) + + @@ -1546,6 +1591,31 @@ 描述 + + + 零件类型:产线 + + + + + 零件类型:分组 + + + + + 零件类型:零件大类 + + + + + 零件在主表横向排列顺序 + + + + + 零件在主表横向排列显示的列名 + + 流水号# @@ -2092,6 +2162,31 @@ 描述 + + + 零件类型:产线 + + + + + 零件类型:分组 + + + + + 零件类型:零件大类 + + + + + 零件在主表横向排列顺序 + + + + + 零件在主表横向排列显示的列名 + + 流水号# @@ -2441,27 +2536,6 @@ 导入文件流 执行成功返回真 - - - 根据生产线获取正常打印单据的起始大众顺序号 - - 生产线 - 起始大众顺序号 - - - - 打印前检查门板大众顺序号是否断号 - - - 断号时Item不为空 - - - - 生产线超时提醒 - - 生产线编号列表 - 生产线超时情况 - 零件查询结果DTO diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgBaseData/Dics/DicAppService.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgBaseData/Dics/DicAppService.cs index c34b702..e3cda14 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgBaseData/Dics/DicAppService.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgBaseData/Dics/DicAppService.cs @@ -77,12 +77,18 @@ namespace WY.NewJit.MsgBaseData { List lst = _dicDomainService.GetDicItems(dicTypeName); - List items = - ObjectMapper.Map, List>(lst); + List dtoLst = ObjectMapper.Map, List>(lst); - items = items.OrderBy(itm => itm.DicItemCode).ThenBy(itm => itm.DicItemName).ToList(); + if (dicTypeName == "零件大类") + { + dtoLst = dtoLst.OrderBy(itm => itm.DicItemSort2).ThenBy(itm => itm.DicItemSort1).ThenBy(itm => itm.DicItemSort7).ToList(); + } + else + { + dtoLst = dtoLst.OrderBy(itm => itm.DicItemCode).ThenBy(itm => itm.DicItemName).ToList(); + } - return new ListResultDto(items); + return new ListResultDto(dtoLst); } catch (Exception ex) { diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM100s/BillM100AppService.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM100s/BillM100AppService.cs index 8971068..d26fff4 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM100s/BillM100AppService.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM100s/BillM100AppService.cs @@ -1,31 +1,32 @@ using Magicodes.ExporterAndImporter.Core; using Magicodes.ExporterAndImporter.Excel; +using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; +using Shouldly; using System; using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; using System.Linq; using System.Linq.Dynamic.Core; +using System.Reflection; using System.Text; using System.Threading.Tasks; +using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; +using Volo.Abp.BlobStoring; using Volo.Abp.Domain.Repositories; -using Volo.Abp.Uow; using Volo.Abp.Domain.Repositories.Dapper; -using WY.NewJit.EntityFrameworkCore; +using Volo.Abp.Uow; using WY.NewJit.Common; -using Shouldly; -using Volo.Abp.BlobStoring; -using Microsoft.AspNetCore.Mvc; +using WY.NewJit.Commons; +using WY.NewJit.EntityFrameworkCore; using WY.NewJit.Extends; -using WY.NewJit.MsgBaseData; using WY.NewJit.Extends.PaiGe; using WY.NewJit.Extends.PaiGe.WMS; -using System.Reflection; -using WY.NewJit.Commons; -using Volo.Abp; -using System.Diagnostics; +using WY.NewJit.MsgBaseData; namespace WY.NewJit.MsgCheck { @@ -607,6 +608,239 @@ select * from return ret; } + /// + /// 包含主表横向排列零件字段 + /// + /// + /// + private async Task QueryByConditionAsync2(QueryBillM100Dto input) + { + M100_M110_Result ret = new M100_M110_Result(); + //取零件大类配置 + List partLargeTypeLst = await _dicItemRepository.GetListAsync(itm => itm.DicTypeCode == "零件大类"); + partLargeTypeLst = partLargeTypeLst.OrderBy(itm => itm.DicItemSort2).ThenBy(itm => itm.DicItemSort1).ToList(); + + 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(); //倒序排列 + List m100Dtos = ObjectMapper.Map, List>(m100Lst); + if (m100Dtos.Count == 0) + { + return ret; + } + var m100Parts = m100Dtos[0].BillM100Parts; + + foreach (BillM100Dto m100Dto in m100Dtos) //遍历M100 + { + foreach (var partDto in m100Dto.BillM100Parts) //遍历子件 + { + //按产线、分组、零件大类 过滤 + var partLargeTypeObj = partLargeTypeLst.FirstOrDefault(itm => + itm.DicItemSort2 == partDto.PartType + && itm.DicItemSort1 == partDto.PartType2 + && itm.DicItemCode == partDto.PartType3); + if (partLargeTypeObj != null) + { + partDto.DisplaySN = partLargeTypeObj.DicItemSort7.TryToInt(); + partDto.DisplayColumnName = partLargeTypeObj.DicItemName; + } + } + var filterParts = m100Dto.BillM100Parts.Where(itm => itm.DisplaySN != null).OrderBy(itm => itm.DisplaySN).ToList(); + for (int i = 0; i < filterParts.Count; i++) + { + var filterPart = filterParts[i]; + switch (i) + { + case 0: + m100Dto.PartCode1 = filterPart.PartCode; + break; + case 1: + m100Dto.PartCode2 = filterPart.PartCode; + break; + case 2: + m100Dto.PartCode3 = filterPart.PartCode; + break; + case 3: + m100Dto.PartCode4 = filterPart.PartCode; + break; + case 4: + m100Dto.PartCode5 = filterPart.PartCode; + break; + case 5: + m100Dto.PartCode6 = filterPart.PartCode; + break; + } + } + m100Dto.BillM100Parts = new List(); + } + ret.PartDisplayColumnName = m100Parts.Where(itm => itm.DisplaySN != null).OrderBy(itm => itm.DisplaySN).Select(itm => itm.DisplayColumnName).JoinAsString(","); + ret.M100Dtos = m100Dtos; + ret.M100_TotalCount = await m100Query.CountAsync(); + return ret; + } + + /// + /// 填充M110主表横向零件字段 + /// + /// + /// + private async Task> FillPartCodeField(List m110Dtos) + { + //取零件大类配置 + List partLargeTypeLst = await _dicItemRepository.GetListAsync(itm => itm.DicTypeCode == "零件大类"); + partLargeTypeLst = partLargeTypeLst.OrderBy(itm => itm.DicItemSort2).ThenBy(itm => itm.DicItemSort1).ToList(); + + foreach (BillM110Dto m110Dto in m110Dtos) //遍历M110 + { + foreach (var partDto in m110Dto.BillM110Parts) //遍历子件 + { + //按产线、分组、零件大类 过滤 + var partLargeTypeObj = partLargeTypeLst.FirstOrDefault(itm => + itm.DicItemSort2 == partDto.PartType + && itm.DicItemSort1 == partDto.PartType2 + && itm.DicItemCode == partDto.PartType3); + if (partLargeTypeObj != null) + { + partDto.DisplaySN = partLargeTypeObj.DicItemSort7.TryToInt(); + partDto.DisplayColumnName = partLargeTypeObj.DicItemName; + } + } + var filterParts = m110Dto.BillM110Parts.Where(itm => itm.DisplaySN != null).OrderBy(itm => itm.DisplaySN).ToList(); + for (int i = 0; i < filterParts.Count; i++) + { + var filterPart = filterParts[i]; + switch (i) + { + case 0: + m110Dto.PartCode1 = filterPart.PartCode; + break; + case 1: + m110Dto.PartCode2 = filterPart.PartCode; + break; + case 2: + m110Dto.PartCode3 = filterPart.PartCode; + break; + case 3: + m110Dto.PartCode4 = filterPart.PartCode; + break; + case 4: + m110Dto.PartCode5 = filterPart.PartCode; + break; + case 5: + m110Dto.PartCode6 = filterPart.PartCode; + break; + } + } + m110Dto.BillM110Parts = new List(); + } + return m110Dtos; + } + + /// /// 取单据包含的ERP总成列表 /// @@ -889,19 +1123,21 @@ select * from //} /// - /// 打印左侧或右侧门板 + /// 将M100转换成MenBanPackingList主子表 /// /// /// - /// /// - /// /// - /// + /// 报表分类,对应DicItemSort4 + /// 零件大类字典项 /// - private MenBanPackingList DoMBPrint(MenBanPrintInputDto input, int pageIdx, double maxSN, List billLst, string reportSort, string[] partLargeType) + private MenBanPackingList DoMBPrint(MenBanPrintInputDto input, int pageIdx, double maxSN, List billLst, string reportSort, List partLargeTypeLst) { const int _colNumberPerPage = 12; + string[] partLargeType = partLargeTypeLst.Select(itm => itm.DicItemCode).ToArray(); //取零件大类 + var partLargeTypeObj = partLargeTypeLst[0]; + //取当前页内容 List curPageLst = billLst.Skip(pageIdx * _colNumberPerPage).Take(_colNumberPerPage).ToList(); @@ -912,8 +1148,10 @@ select * from MenBanPackingList packingMain = new MenBanPackingList(); packingMain.SetId(GuidGenerator.Create()); - packingMain.BillNum = $"C{ymd}{serialNum}{reportSort}"; - packingMain.VehicleModel = vmLst; + + packingMain.BillNum = $"{partLargeTypeObj.DicItemSort8}{ymd}{serialNum}{reportSort}"; //partLargeTypeObj.DicItemSort8包含C或T + + packingMain.VehicleModel = partLargeTypeObj.DicItemSort6; //报表显示车型 //vmLst; packingMain.BillSerialNum = serialNum; packingMain.PrintDate = ServerHelper.CurrentDateTime; packingMain.ProductLine = billLst[0].ProductLine; @@ -3021,119 +3259,18 @@ select min(SerialNumStr) from FisBillM100 a left join d on a.VIN=d.VIN 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) + if (input.ProductLine.IsNullOrEmpty2()) { - m100Query = m100Query.Where(itm => itm.BillStatus == input.BillStatus); + throw new UserFriendlyException("生产线参数不能为空"); } - 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 + //填充M100,字段中文名称 + ret = await QueryByConditionAsync2(input); + //填充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; + List m110_Dtos = ObjectMapper.Map, List>(m110_Lst); + m110_Dtos = await FillPartCodeField(m110_Dtos); + ret.M110_Dtos = m110_Dtos; return ret; } @@ -3145,9 +3282,6 @@ select min(SerialNumStr) from FisBillM100 a left join d on a.VIN=d.VIN } } - - - /// /// 按主键获取唯一实体 /// @@ -3296,19 +3430,53 @@ select min(SerialNumStr) from FisBillM100 a left join d on a.VIN=d.VIN { input.SkipCount = 0; input.MaxResultCount = 50000; - PagedResultDto query = new PagedResultDto(); - if (!string.IsNullOrEmpty(input.GroupName)) - { - query = await QueryZHBByConditionAsync(input, (PagedAndSortedBase)input); - } - else + //PagedResultDto query = new PagedResultDto(); + //if (!string.IsNullOrEmpty(input.GroupName)) + //{ + // query = await QueryZHBByConditionAsync(input, (PagedAndSortedBase)input); + //} + //else + //{ + // query = await QueryByConditionAsync(input, (PagedAndSortedBase)input); + //} + M100_M110_Result result = await QueryByConditionAsync2(input); + + string[] fieldNames = result.PartDisplayColumnName.Split(","); + for (int i = 0; i < fieldNames.Length; i++) { - query = await QueryByConditionAsync(input, (PagedAndSortedBase)input); + switch (i) + { + case 0: + ExporterHeaderAttribute attr = typeof(BillM100Dto).GetProperty("PartCode1").GetCustomAttribute(typeof(ExporterHeaderAttribute)) as ExporterHeaderAttribute; + attr.DisplayName = fieldNames[i]; + break; + case 1: + attr = typeof(BillM100Dto).GetProperty("PartCode2").GetCustomAttribute(typeof(ExporterHeaderAttribute)) as ExporterHeaderAttribute; + attr.DisplayName = fieldNames[i]; + break; + case 2: + attr = typeof(BillM100Dto).GetProperty("PartCode3").GetCustomAttribute(typeof(ExporterHeaderAttribute)) as ExporterHeaderAttribute; + attr.DisplayName = fieldNames[i]; + break; + case 3: + attr = typeof(BillM100Dto).GetProperty("PartCode4").GetCustomAttribute(typeof(ExporterHeaderAttribute)) as ExporterHeaderAttribute; + attr.DisplayName = fieldNames[i]; + break; + case 4: + attr = typeof(BillM100Dto).GetProperty("PartCode5").GetCustomAttribute(typeof(ExporterHeaderAttribute)) as ExporterHeaderAttribute; + attr.DisplayName = fieldNames[i]; + break; + case 5: + attr = typeof(BillM100Dto).GetProperty("PartCode6").GetCustomAttribute(typeof(ExporterHeaderAttribute)) as ExporterHeaderAttribute; + attr.DisplayName = fieldNames[i]; + break; + } } - List items = query.Items.ToList(); + + //List items = query.Items.ToList(); //将实体列表转换成excel文件流 IExporter exporter = new ExcelExporter(); - byte[] byteArr = await exporter.ExportAsByteArray(items); + byte[] byteArr = await exporter.ExportAsByteArray(result.M100Dtos); byteArr.ShouldNotBeNull(); //将excel文件流保存到服务器端文件系统 string fileName = string.Format("单据M100_{0}.xlsx", Guid.NewGuid().ToString()); @@ -3414,6 +3582,10 @@ select min(SerialNumStr) from FisBillM100 a left join d on a.VIN=d.VIN return ret; } } + + List partLargeTypeLst = await _dicItemRepository.GetListAsync(itm => itm.DicTypeCode == "零件大类"); + partLargeTypeLst = partLargeTypeLst.OrderBy(itm => itm.DicItemSort2).ThenBy(itm => itm.DicItemSort1).ToList(); + ListResultDto tempLst = await GetMBReportDetailList(input, true); //----------------------------- List billLst = tempLst.Item; if (tempLst.Status == false) @@ -3428,14 +3600,13 @@ select min(SerialNumStr) from FisBillM100 a left join d on a.VIN=d.VIN int pageCnt = (int)Math.Ceiling(billLst.Count / 12.0); //每页打印12列,取打印页数 //double maxBillNum = 0; - //DateTime printTime = ServerHelper.CurrentDateTime; - var reportSortDic = _dicItemRepository - .Where(itm => itm.DicTypeCode == "零件大类" && itm.DicItemSort2 == input.ProductLine) - .ToList() + //过滤产线(DicItemSort2),按“报表分类”(DicItemSort4)分组,分组后按DicItemSort7排序 + Dictionary> reportSortDic = partLargeTypeLst + .Where(itm => itm.DicItemSort2 == input.ProductLine && string.IsNullOrEmpty(itm.DicItemSort4) == false) .GroupBy(itm => itm.DicItemSort4) - .ToDictionary(itm => itm.Key, it2 => it2.Select(itm => itm.DicItemCode).ToArray()); + .ToDictionary(itm => itm.Key, it2 => it2.OrderBy(itm => itm.DicItemSort7).ToList()); for (int pageIdx = 0; pageIdx < pageCnt; pageIdx++) { @@ -3475,12 +3646,12 @@ select min(SerialNumStr) from FisBillM100 a left join d on a.VIN=d.VIN billObj.NeedReplenishPrint = 0; //不需要补打 await _billM100Repository.UpdateAsync(billObj, true); } - else if (billObj.BillStatus == BillStatusEnum.NotMatch) - { - //billObj.PrintTime = ServerHelper.CurrentDateTime; - billObj.NeedReplenishPrint = 1; //需要补打 - await _billM100Repository.UpdateAsync(billObj, true); - } + //else if (billObj.BillStatus == BillStatusEnum.NotMatch) + //{ + // //billObj.PrintTime = ServerHelper.CurrentDateTime; + // billObj.NeedReplenishPrint = 1; //需要补打 + // await _billM100Repository.UpdateAsync(billObj, true); + //} } _logger.LogWarning($"SaveMenBanReport更新M100的门板打印标志 - {sw.ElapsedMilliseconds}毫秒"); @@ -5226,16 +5397,20 @@ select min(SerialNumStr) from FisBillM100 a left join d on a.VIN=d.VIN public class M100_M110_Result { - public List BillM100s { get; set; } - public List Bill_M110s { get; set; } + public List M100Dtos { get; set; } + public List M110_Dtos { get; set; } + + public long M100_TotalCount { get; set; } = 0; - public int M100_TotalCount { get; set; } + /// + /// 零件在主表横向排列显示的列名 + /// + public string PartDisplayColumnName { get; set; } = ""; public M100_M110_Result() { - BillM100s = new List(); - Bill_M110s = new List(); + M100Dtos = new List(); + M110_Dtos = new List(); } } - } diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM110s/BillM110AppService.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM110s/BillM110AppService.cs index 8be7ed5..2dfb650 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM110s/BillM110AppService.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM110s/BillM110AppService.cs @@ -1998,83 +1998,83 @@ select * from /// /// /// 断号时Item不为空 - [UnitOfWork(false)] - [HttpPost] - [Route("check-mb-hostsn-break-num")] - public virtual async Task> CheckMBHostSNBreakNum(MenBanPrintInputDto input) - { - List retLst = new List(); - try - { - int lastNum = await GetMenBanLastPrintNum(input); //从M110中取当前产线、已经打印的最大大众顺序号 - if (lastNum > 0) - { - if ((lastNum % 10000) == 1999) - { - if ((input.BeginHostSN % 10000) != 1) - { - string msg = $"单据之间断号,上次打印的最后大众顺序号为【{lastNum}】,与本次打印开始号【{input.BeginHostSN}】中间存在断号!"; - retLst.Add(msg); - _logger.LogDebug(msg); - } - } - else - { - if (lastNum + 1 != input.BeginHostSN) - { - string msg = $"单据之间断号,上次打印的最后大众顺序号为【{lastNum}】,与本次打印开始号【{input.BeginHostSN}】中间存在断号!"; - retLst.Add(msg); - _logger.LogDebug(msg); - } - } - } + //[UnitOfWork(false)] + //[HttpPost] + //[Route("check-mb-hostsn-break-num")] + //public virtual async Task> CheckMBHostSNBreakNum(MenBanPrintInputDto input) + //{ + // List retLst = new List(); + // try + // { + // int lastNum = await GetMenBanLastPrintNum(input); //从M110中取当前产线、已经打印的最大大众顺序号 + // if (lastNum > 0) + // { + // if ((lastNum % 10000) == 1999) + // { + // if ((input.BeginHostSN % 10000) != 1) + // { + // string msg = $"单据之间断号,上次打印的最后大众顺序号为【{lastNum}】,与本次打印开始号【{input.BeginHostSN}】中间存在断号!"; + // retLst.Add(msg); + // _logger.LogDebug(msg); + // } + // } + // else + // { + // if (lastNum + 1 != input.BeginHostSN) + // { + // string msg = $"单据之间断号,上次打印的最后大众顺序号为【{lastNum}】,与本次打印开始号【{input.BeginHostSN}】中间存在断号!"; + // retLst.Add(msg); + // _logger.LogDebug(msg); + // } + // } + // } - ListResultDto tempLst = await GetMBReportDetailList(input, false); - List billLst = tempLst.Item; - if (billLst.Count < 2) - { - return new ListResultDto(retLst); - } - for (int i = 1; i < billLst.Count; i++) - { - BillM110 priorObj = billLst[i - 1]; - BillM110 curObj = billLst[i]; - int priorHostSN = (int)billLst[i - 1].HostSN; - int curHostSN = (int)billLst[i].HostSN; + // ListResultDto tempLst = await GetMBReportDetailList(input, false); + // List billLst = tempLst.Item; + // if (billLst.Count < 2) + // { + // return new ListResultDto(retLst); + // } + // for (int i = 1; i < billLst.Count; i++) + // { + // BillM110 priorObj = billLst[i - 1]; + // BillM110 curObj = billLst[i]; + // int priorHostSN = (int)billLst[i - 1].HostSN; + // int curHostSN = (int)billLst[i].HostSN; - if (curHostSN > priorHostSN) //0005、0006 - { - if (curHostSN > priorHostSN + 1) //0005、0008时,补号 0006、0007 - { - retLst.Add($"大众顺序号{priorObj.HostSN}与{curObj.HostSN}之间存在断号情况!"); - } - } - else if (curHostSN < priorHostSN) //1999到0001的情况 - { - if (curHostSN + _hostSNMaxVal > priorHostSN + 1) //0005、0008时,补号 0006、0007 - { - retLst.Add($"大众顺序号{priorObj.HostSN}与{curObj.HostSN}之间存在断号情况!"); - } - } - } - if (retLst.Count == 0 && billLst.Count < input.EndHostSN - input.BeginHostSN + 1) - { - retLst.Add($"本车装箱单不满架!"); - } + // if (curHostSN > priorHostSN) //0005、0006 + // { + // if (curHostSN > priorHostSN + 1) //0005、0008时,补号 0006、0007 + // { + // retLst.Add($"大众顺序号{priorObj.HostSN}与{curObj.HostSN}之间存在断号情况!"); + // } + // } + // else if (curHostSN < priorHostSN) //1999到0001的情况 + // { + // if (curHostSN + _hostSNMaxVal > priorHostSN + 1) //0005、0008时,补号 0006、0007 + // { + // retLst.Add($"大众顺序号{priorObj.HostSN}与{curObj.HostSN}之间存在断号情况!"); + // } + // } + // } + // if (retLst.Count == 0 && billLst.Count < input.EndHostSN - input.BeginHostSN + 1) + // { + // retLst.Add($"本车装箱单不满架!"); + // } - return new ListResultDto(retLst); - } - catch (Exception ex) - { - ListResultDto ret = new ListResultDto(); - ret.Status = false; - ret.Message = _errorMessagePrefix + "打印前检查大众顺序号是否断号ChecMBkHostSNBreakNum 执行出错:" + ex.Message; - _logger.LogError(ret.Message); - return ret; - } + // return new ListResultDto(retLst); + // } + // catch (Exception ex) + // { + // ListResultDto ret = new ListResultDto(); + // ret.Status = false; + // ret.Message = _errorMessagePrefix + "打印前检查大众顺序号是否断号ChecMBkHostSNBreakNum 执行出错:" + ex.Message; + // _logger.LogError(ret.Message); + // return ret; + // } - } + //} /// /// 打印前检查大众顺序号是否断号 @@ -2154,72 +2154,72 @@ select * from /// 柱护板是1 门板是非1 /// 柱护板分组类型 /// 起始大众顺序号 - [UnitOfWork] - [HttpGet] - [Route("get-print-start-hostsn2")] - public virtual async Task> GetPrintStartHostSN2(string productLine, string isZhuHuBan,string GroupName=null) - { - int? beginHostSN = null; - try - { - if (isZhuHuBan == "1") //是柱护板, 根据PrintBillNum非空判断是柱护板 - { - //string minSNStr = await _billM110Repository.Where(itm => - // itm.ProductLine == productLine //指定生产线 - // && itm.CanNotPrint != true //能打印 - // && string.IsNullOrEmpty(itm.PrintBillNum) == true //等于 未打印 - // && itm.NeedReplenishPrint != 1 //排除补打 - // ).MinAsync(itm => itm.SerialNumStr); - string sql = @" -with d as -( - select *from [dbo].[FisZHBPrintStatus] where groupName='{1}' -) - -select min(SerialNumStr) from FisBillM110 a left join d on a.VIN=d.VIN - - where ProductLine='{0}' and (CanNotPrint !=1 or CanNotPrint is null) and (PrintBillNum is null or PrintBillNum ='') and (NeedReplenishPrint!=1 or NeedReplenishPrint is null) and d.BillStatus is null"; - - sql = string.Format(sql, productLine, GroupName); - var minSNStr = await _newJitDapperRepository.GetSingleBySqlAsync(sql); - - - beginHostSN = await _billM110Repository.Where(itm => - itm.ProductLine == productLine //指定生产线 - && itm.CanNotPrint != true //能打印 - && string.IsNullOrEmpty(itm.PrintBillNum) == true //等于 未打印 - && itm.SerialNumStr == minSNStr - ).MinAsync(itm => itm.HostSN); - } - else //---------------门板----------------------------------------------------------------------------------- - { - string minSNStr2 = await _billM110Repository.Where(itm => - itm.ProductLine == productLine //指定生产线 - && itm.CanNotPrint != true //能打印 - //&& itm.BillStatus == BillStatusEnum.Match //等于 未打印(和M110上线信息匹配) - && itm.BillStatus != BillStatusEnum.Publish //未知总成也显示在装箱单 - && itm.NeedReplenishPrint != 1 //排除补打 - ).MinAsync(itm => itm.SerialNumStr); +// [UnitOfWork] +// [HttpGet] +// [Route("get-print-start-hostsn2")] +// public virtual async Task> GetPrintStartHostSN2(string productLine, string isZhuHuBan,string GroupName=null) +// { +// int? beginHostSN = null; +// try +// { +// if (isZhuHuBan == "1") //是柱护板, 根据PrintBillNum非空判断是柱护板 +// { +// //string minSNStr = await _billM110Repository.Where(itm => +// // itm.ProductLine == productLine //指定生产线 +// // && itm.CanNotPrint != true //能打印 +// // && string.IsNullOrEmpty(itm.PrintBillNum) == true //等于 未打印 +// // && itm.NeedReplenishPrint != 1 //排除补打 +// // ).MinAsync(itm => itm.SerialNumStr); +// string sql = @" +//with d as +//( +// select *from [dbo].[FisZHBPrintStatus] where groupName='{1}' +//) - beginHostSN = await _billM110Repository.Where(itm => - itm.ProductLine == productLine //指定生产线 - && itm.CanNotPrint != true //能打印 - //&& itm.BillStatus == BillStatusEnum.Match //等于 未打印 - && itm.BillStatus != BillStatusEnum.Publish //未知总成也显示在装箱单 - && itm.SerialNumStr == minSNStr2 - ).MinAsync(itm => itm.HostSN); - } - return new ObjectResultDto(beginHostSN); - } - catch (Exception ex) - { - ObjectResultDto ret = new ObjectResultDto(); - ret.Status = false; - ret.Message = _errorMessagePrefix + "GetPrintStartHostSN2 执行出错:" + ex.Message; - _logger.LogError(ret.Message); - return ret; - } - } +//select min(SerialNumStr) from FisBillM110 a left join d on a.VIN=d.VIN + +// where ProductLine='{0}' and (CanNotPrint !=1 or CanNotPrint is null) and (PrintBillNum is null or PrintBillNum ='') and (NeedReplenishPrint!=1 or NeedReplenishPrint is null) and d.BillStatus is null"; + +// sql = string.Format(sql, productLine, GroupName); +// var minSNStr = await _newJitDapperRepository.GetSingleBySqlAsync(sql); + + +// beginHostSN = await _billM110Repository.Where(itm => +// itm.ProductLine == productLine //指定生产线 +// && itm.CanNotPrint != true //能打印 +// && string.IsNullOrEmpty(itm.PrintBillNum) == true //等于 未打印 +// && itm.SerialNumStr == minSNStr +// ).MinAsync(itm => itm.HostSN); +// } +// else //---------------门板----------------------------------------------------------------------------------- +// { +// string minSNStr2 = await _billM110Repository.Where(itm => +// itm.ProductLine == productLine //指定生产线 +// && itm.CanNotPrint != true //能打印 +// //&& itm.BillStatus == BillStatusEnum.Match //等于 未打印(和M110上线信息匹配) +// && itm.BillStatus != BillStatusEnum.Publish //未知总成也显示在装箱单 +// && itm.NeedReplenishPrint != 1 //排除补打 +// ).MinAsync(itm => itm.SerialNumStr); + +// beginHostSN = await _billM110Repository.Where(itm => +// itm.ProductLine == productLine //指定生产线 +// && itm.CanNotPrint != true //能打印 +// //&& itm.BillStatus == BillStatusEnum.Match //等于 未打印 +// && itm.BillStatus != BillStatusEnum.Publish //未知总成也显示在装箱单 +// && itm.SerialNumStr == minSNStr2 +// ).MinAsync(itm => itm.HostSN); +// } +// return new ObjectResultDto(beginHostSN); +// } +// catch (Exception ex) +// { +// ObjectResultDto ret = new ObjectResultDto(); +// ret.Status = false; +// ret.Message = _errorMessagePrefix + "GetPrintStartHostSN2 执行出错:" + ex.Message; +// _logger.LogError(ret.Message); +// return ret; +// } +// } /// /// 打印门板装箱单 @@ -3209,334 +3209,334 @@ select min(SerialNumStr) from FisBillM110 a left join d on a.VIN=d.VIN /// /// 生产线编号列表 /// 生产线超时情况 - [UnitOfWork] - [HttpPost] - [Route("product-line-timeout-remind")] - public virtual async Task> ProductLineTimeoutRemind(TimeOutRemindInputDto input) - { - List retLst = new List(); - foreach (string plStr in input.ProductLineList) - { - TimeOutRemindResultDto retObj = new TimeOutRemindResultDto(); - retObj.ProductLine = plStr; - retObj.ConfigMinutes = _configuration[$"ConfigDic:ProductLineTimeoutRemind:{plStr}"].TryToInt() ?? 30; + //[UnitOfWork] + //[HttpPost] + //[Route("product-line-timeout-remind")] + //public virtual async Task> ProductLineTimeoutRemind(TimeOutRemindInputDto input) + //{ + // List retLst = new List(); + // foreach (string plStr in input.ProductLineList) + // { + // TimeOutRemindResultDto retObj = new TimeOutRemindResultDto(); + // retObj.ProductLine = plStr; + // retObj.ConfigMinutes = _configuration[$"ConfigDic:ProductLineTimeoutRemind:{plStr}"].TryToInt() ?? 30; - string maxSNStr = await _billM110Repository.Where(itm => itm.ProductLine == plStr).MaxAsync(itm => itm.SerialNumStr); - BillM110 lastBill = await _billM110Repository.FirstOrDefaultAsync(itm => itm.ProductLine == plStr && itm.SerialNumStr == maxSNStr); - if (lastBill != null) - { - retObj.LastReceiveTime = lastBill.ReceiveTime ?? ServerHelper.CurrentDateTime; - retObj.TimeoutMinutes = MinuteDiff(retObj.LastReceiveTime, ServerHelper.CurrentDateTime); - } - retLst.Add(retObj); - } - return new ListResultDto(retLst); - } + // string maxSNStr = await _billM110Repository.Where(itm => itm.ProductLine == plStr).MaxAsync(itm => itm.SerialNumStr); + // BillM110 lastBill = await _billM110Repository.FirstOrDefaultAsync(itm => itm.ProductLine == plStr && itm.SerialNumStr == maxSNStr); + // if (lastBill != null) + // { + // retObj.LastReceiveTime = lastBill.ReceiveTime ?? ServerHelper.CurrentDateTime; + // retObj.TimeoutMinutes = MinuteDiff(retObj.LastReceiveTime, ServerHelper.CurrentDateTime); + // } + // retLst.Add(retObj); + // } + // return new ListResultDto(retLst); + //} - private int MinuteDiff(DateTime beginTime, DateTime endTime) - { - TimeSpan beginSpan = new TimeSpan(beginTime.Ticks); - TimeSpan endSpan = new TimeSpan(endTime.Ticks); - TimeSpan diffSpan = endSpan.Subtract(beginSpan).Duration(); - return (int)(diffSpan.TotalMinutes); - } + //private int MinuteDiff(DateTime beginTime, DateTime endTime) + //{ + // TimeSpan beginSpan = new TimeSpan(beginTime.Ticks); + // TimeSpan endSpan = new TimeSpan(endTime.Ticks); + // TimeSpan diffSpan = endSpan.Subtract(beginSpan).Duration(); + // return (int)(diffSpan.TotalMinutes); + //} #endregion #region 保存报表、加载打印报表分离 //[UnitOfWork] - [UnitOfWork(IsDisabled = true)] - [HttpPost] - [Route("save-menban-report")] - public virtual async Task>> SaveMenBanReport(MenBanPrintInputDto input) - { - Stopwatch sw = new Stopwatch(); + //[UnitOfWork(IsDisabled = true)] + //[HttpPost] + //[Route("save-menban-report")] + //public virtual async Task>> SaveMenBanReport(MenBanPrintInputDto input) + //{ + // Stopwatch sw = new Stopwatch(); - _logger.LogDebug(_errorMessagePrefix + "SaveMenBanReport 进入"); + // _logger.LogDebug(_errorMessagePrefix + "SaveMenBanReport 进入"); - List retLst = new List(); - ObjectResultDto> ret = new ObjectResultDto>(); - ret.Status = false; + // List retLst = new List(); + // ObjectResultDto> ret = new ObjectResultDto>(); + // ret.Status = false; - using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true, isolationLevel: System.Data.IsolationLevel.Unspecified)) - { - try - { - List reportMainLst = new List(); + // using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true, isolationLevel: System.Data.IsolationLevel.Unspecified)) + // { + // try + // { + // List reportMainLst = new List(); - if (input.PrintType == PrintTypeEnum.正常打印) - { - if (input.BeginHostSN != 0 && input.EndHostSN != 0) - { - if (input.BeginHostSN > input.EndHostSN) - { - ret.Message = "止大众顺序号必须大于等于起大众顺序号!"; - ret.Status = false; - return ret; - } - } - ListResultDto tempLst = await GetMBReportDetailList(input, true); //----------------------------- - List billLst = tempLst.Item; - if (tempLst.Status == false) - { - ret.Message = tempLst.Message; - ret.Status = false; - return ret; - } + // if (input.PrintType == PrintTypeEnum.正常打印) + // { + // if (input.BeginHostSN != 0 && input.EndHostSN != 0) + // { + // if (input.BeginHostSN > input.EndHostSN) + // { + // ret.Message = "止大众顺序号必须大于等于起大众顺序号!"; + // ret.Status = false; + // return ret; + // } + // } + // ListResultDto tempLst = await GetMBReportDetailList(input, true); //----------------------------- + // List billLst = tempLst.Item; + // if (tempLst.Status == false) + // { + // ret.Message = tempLst.Message; + // ret.Status = false; + // return ret; + // } - _logger.LogWarning($"SaveMenBanReport读取数据 - {sw.ElapsedMilliseconds}毫秒"); + // _logger.LogWarning($"SaveMenBanReport读取数据 - {sw.ElapsedMilliseconds}毫秒"); - int pageCnt = (int)Math.Ceiling(billLst.Count / 12.0); //每页打印12列,取打印页数 + // int pageCnt = (int)Math.Ceiling(billLst.Count / 12.0); //每页打印12列,取打印页数 - //double maxBillNum = 0; + // //double maxBillNum = 0; - //DateTime printTime = ServerHelper.CurrentDateTime; + // //DateTime printTime = ServerHelper.CurrentDateTime; - var reportSortDic = _dicItemRepository - .Where(itm => itm.DicTypeCode == "零件大类" && itm.DicItemSort2 == input.ProductLine) - .ToList() - .GroupBy(itm => itm.DicItemSort4) - .ToDictionary(itm => itm.Key, it2 => it2.Select(itm => itm.DicItemCode).ToArray()); + // var reportSortDic = _dicItemRepository + // .Where(itm => itm.DicTypeCode == "零件大类" && itm.DicItemSort2 == input.ProductLine) + // .ToList() + // .GroupBy(itm => itm.DicItemSort4) + // .ToDictionary(itm => itm.Key, it2 => it2.Select(itm => itm.DicItemCode).ToArray()); - for (int pageIdx = 0; pageIdx < pageCnt; pageIdx++) - { + // for (int pageIdx = 0; pageIdx < pageCnt; pageIdx++) + // { - foreach (var reportSortItem in reportSortDic) - { - //生成顺序号:按生产线分组,取当前生产线的最大流水号:001至999往复循环 - double maxSN = await _lineSNDomianService.GetMaxSN(ProductTypeEnum.门板, input.ProductLine, string.Empty); + // foreach (var reportSortItem in reportSortDic) + // { + // //生成顺序号:按生产线分组,取当前生产线的最大流水号:001至999往复循环 + // double maxSN = await _lineSNDomianService.GetMaxSN(ProductTypeEnum.门板, input.ProductLine, string.Empty); - MenBanPackingList packingObj = DoMBPrint(input, pageIdx, maxSN, billLst, reportSortItem.Key, reportSortItem.Value); - reportMainLst.Add(packingObj); - } - } + // MenBanPackingList packingObj = DoMBPrint(input, pageIdx, maxSN, billLst, reportSortItem.Key, reportSortItem.Value); + // reportMainLst.Add(packingObj); + // } + // } - _logger.LogWarning($"SaveMenBanReport转换数据 - {sw.ElapsedMilliseconds}毫秒"); + // _logger.LogWarning($"SaveMenBanReport转换数据 - {sw.ElapsedMilliseconds}毫秒"); - //插入门板打印记录表 - await _menBanPackingListRepository.InsertManyAsync(reportMainLst, true); - retLst.AddRange(reportMainLst.Select(itm => itm.Id)); + // //插入门板打印记录表 + // await _menBanPackingListRepository.InsertManyAsync(reportMainLst, true); + // retLst.AddRange(reportMainLst.Select(itm => itm.Id)); - _logger.LogWarning($"SaveMenBanReport插入门板打印记录表 - {sw.ElapsedMilliseconds}毫秒"); + // _logger.LogWarning($"SaveMenBanReport插入门板打印记录表 - {sw.ElapsedMilliseconds}毫秒"); - //调用派格版库存接口 - //await SaveMiddleTable_MB(reportMainLst); + // //调用派格版库存接口 + // //await SaveMiddleTable_MB(reportMainLst); - _logger.LogWarning($"SaveMenBanReport插入中间表 - {sw.ElapsedMilliseconds}毫秒"); + // _logger.LogWarning($"SaveMenBanReport插入中间表 - {sw.ElapsedMilliseconds}毫秒"); - //更新M110的门板打印标志:BillStatus=3 - foreach (BillM110 billObj in billLst) - { - if (billObj.BillStatus == BillStatusEnum.Match) - { - billObj.SetBillStatus(BillStatusEnum.Publish); - billObj.PrintTime = ServerHelper.CurrentDateTime; - billObj.NeedReplenishPrint = 0; //不需要补打 - await _billM110Repository.UpdateAsync(billObj, true); - } - else if (billObj.BillStatus == BillStatusEnum.NotMatch) - { - //billObj.PrintTime = ServerHelper.CurrentDateTime; - billObj.NeedReplenishPrint = 1; //需要补打 - await _billM110Repository.UpdateAsync(billObj, true); - } - } + // //更新M110的门板打印标志:BillStatus=3 + // foreach (BillM110 billObj in billLst) + // { + // if (billObj.BillStatus == BillStatusEnum.Match) + // { + // billObj.SetBillStatus(BillStatusEnum.Publish); + // billObj.PrintTime = ServerHelper.CurrentDateTime; + // billObj.NeedReplenishPrint = 0; //不需要补打 + // await _billM110Repository.UpdateAsync(billObj, true); + // } + // else if (billObj.BillStatus == BillStatusEnum.NotMatch) + // { + // //billObj.PrintTime = ServerHelper.CurrentDateTime; + // billObj.NeedReplenishPrint = 1; //需要补打 + // await _billM110Repository.UpdateAsync(billObj, true); + // } + // } - _logger.LogWarning($"SaveMenBanReport更新M110的门板打印标志 - {sw.ElapsedMilliseconds}毫秒"); + // _logger.LogWarning($"SaveMenBanReport更新M110的门板打印标志 - {sw.ElapsedMilliseconds}毫秒"); - } - //else if (input.PrintType == PrintTypeEnum.重新打印) //和正常打印单据完全一样,可以打印部分单据 - //{ - // throw new BusinessException("请调用LoadMenBanReport方法!"); - //} - //else if (input.PrintType == PrintTypeEnum.补打) - //{ - // List billLst = _billM110Repository.Where(itm => input.M110IdList.Contains(itm.Id)).OrderBy(itm => itm.SerialNumStr).ToList(); - // if (billLst.Count == 0) - // { - // ret.Message = "没有补打的单据,请先选择要补打的单据!"; - // ret.Status = false; - // return ret; - // } - - // int pageCnt = (int)Math.Ceiling(billLst.Count / 12.0); //每页打印12列,取打印页数 - - // double maxBillNum = 0; - - // DateTime printTime = ServerHelper.CurrentDateTime; - - // for (int pageIdx = 0; pageIdx < pageCnt; pageIdx++) - // { - // //取右上角顺序号:按生产线分组,取当前生产线的最大流水号:01至99循环,例如01左、01右 - // double maxSN = 0; // await _lineSNDomianService.GetMaxSN(ProductTypeEnum.门板, input.ProductLine, string.Empty); - // // 先打印两张:左后左前,再打印两张:右后右前 - // List leftLst = DoMBPrint(input, pageIdx, ref maxBillNum, maxSN, printTime, billLst, "左"); - // List rightLst = DoMBPrint(input, pageIdx, ref maxBillNum, maxSN, printTime, billLst, "右"); - - // //作废时需要同时作废相同VIN的左右两页,SortId相同表示是同一组左右 - // Guid sortId = GuidGenerator.Create(); - // foreach (var leftItm in leftLst) - // { - // leftItm.SortId = sortId; - // } - // foreach (var rightItm in rightLst) - // { - // rightItm.SortId = sortId; - // } - - // reportMainLst.AddRange(rightLst); - // reportMainLst.AddRange(leftLst); - // } - // //校验底盘号、零件是否重复打印 - // string checkVinPartRepeatSql = @" - // select top 1 a.BillNum from FisMenBanPackingList a join FisMenBanPackingRec b - // on a.Id = b.MenBanPackingListId - // where a.ReportStatus = 0 - // and b.VIN = '{0}' and (TopSAPMaterialNum = '{1}' or BelowSAPMaterialNum = '{1}') - // "; - // foreach (MenBanPackingList reportMainObj in reportMainLst) - // { - // foreach (MenBanPackingRec reportRecObj in reportMainObj.Details) - // { - // string sql1 = string.Format(checkVinPartRepeatSql, reportRecObj.VIN, reportRecObj.PartCode2); - // string checkVinPartRepeatBillNum1 = _newJitDapperRepository.GetSingleBySql(sql1, true); - // if (string.IsNullOrEmpty(checkVinPartRepeatBillNum1) == false) - // { - // throw new BusinessException("1001", $"与装箱单号{checkVinPartRepeatBillNum1}中的底盘号{reportRecObj.VIN}、零件号{reportRecObj.PartCode2}之间重复!"); - // } - - // string sql2 = string.Format(checkVinPartRepeatSql, reportRecObj.VIN, reportRecObj.PartCode4); - // string checkVinPartRepeatBillNum2 = _newJitDapperRepository.GetSingleBySql(sql2, true); - // if (string.IsNullOrEmpty(checkVinPartRepeatBillNum2) == false) - // { - // throw new BusinessException("1001", $"与装箱单号{checkVinPartRepeatBillNum2}中的底盘号{reportRecObj.VIN}、零件号{reportRecObj.PartCode4}之间重复!"); - // } - // } - // } - - // //调用派格版库存接口 - // await SaveMiddleTable_MB(reportMainLst); - - // //插入门板打印记录表 - // //await _menBanPackingListRepository.InsertManyAsync(reportMainLst); - // foreach (var reportMainObj in reportMainLst) - // { - // var insObj = await _menBanPackingListRepository.InsertAsync(reportMainObj, true); - // if (insObj != null) - // { - // retLst.Add(insObj.Id); - // } - // } - // //更新M110的门板打印标志:BillStatus=3 - // foreach (BillM110 billObj in billLst) - // { - // if (billObj.BillStatus == BillStatusEnum.Match) - // { - // billObj.SetBillStatus(BillStatusEnum.Publish); - // billObj.PrintTime = ServerHelper.CurrentDateTime; - // await _billM110Repository.UpdateAsync(billObj); - // } - // } - //} //补打if - await uow.CompleteAsync(); - ret.Status = true; - ret.Item = retLst; - return ret; - } - catch (Exception ex) - { - await uow.RollbackAsync(); - string errorMsg = _errorMessagePrefix + "SaveMenBanReport 执行出错:" + ex.Message; - _logger.LogError(errorMsg); - ret.Status = false; - ret.Message = ex.Message; - return ret; - } - } //事务 - } + // } + // //else if (input.PrintType == PrintTypeEnum.重新打印) //和正常打印单据完全一样,可以打印部分单据 + // //{ + // // throw new BusinessException("请调用LoadMenBanReport方法!"); + // //} + // //else if (input.PrintType == PrintTypeEnum.补打) + // //{ + // // List billLst = _billM110Repository.Where(itm => input.M110IdList.Contains(itm.Id)).OrderBy(itm => itm.SerialNumStr).ToList(); + // // if (billLst.Count == 0) + // // { + // // ret.Message = "没有补打的单据,请先选择要补打的单据!"; + // // ret.Status = false; + // // return ret; + // // } + + // // int pageCnt = (int)Math.Ceiling(billLst.Count / 12.0); //每页打印12列,取打印页数 + + // // double maxBillNum = 0; + + // // DateTime printTime = ServerHelper.CurrentDateTime; + + // // for (int pageIdx = 0; pageIdx < pageCnt; pageIdx++) + // // { + // // //取右上角顺序号:按生产线分组,取当前生产线的最大流水号:01至99循环,例如01左、01右 + // // double maxSN = 0; // await _lineSNDomianService.GetMaxSN(ProductTypeEnum.门板, input.ProductLine, string.Empty); + // // // 先打印两张:左后左前,再打印两张:右后右前 + // // List leftLst = DoMBPrint(input, pageIdx, ref maxBillNum, maxSN, printTime, billLst, "左"); + // // List rightLst = DoMBPrint(input, pageIdx, ref maxBillNum, maxSN, printTime, billLst, "右"); + + // // //作废时需要同时作废相同VIN的左右两页,SortId相同表示是同一组左右 + // // Guid sortId = GuidGenerator.Create(); + // // foreach (var leftItm in leftLst) + // // { + // // leftItm.SortId = sortId; + // // } + // // foreach (var rightItm in rightLst) + // // { + // // rightItm.SortId = sortId; + // // } + + // // reportMainLst.AddRange(rightLst); + // // reportMainLst.AddRange(leftLst); + // // } + // // //校验底盘号、零件是否重复打印 + // // string checkVinPartRepeatSql = @" + // // select top 1 a.BillNum from FisMenBanPackingList a join FisMenBanPackingRec b + // // on a.Id = b.MenBanPackingListId + // // where a.ReportStatus = 0 + // // and b.VIN = '{0}' and (TopSAPMaterialNum = '{1}' or BelowSAPMaterialNum = '{1}') + // // "; + // // foreach (MenBanPackingList reportMainObj in reportMainLst) + // // { + // // foreach (MenBanPackingRec reportRecObj in reportMainObj.Details) + // // { + // // string sql1 = string.Format(checkVinPartRepeatSql, reportRecObj.VIN, reportRecObj.PartCode2); + // // string checkVinPartRepeatBillNum1 = _newJitDapperRepository.GetSingleBySql(sql1, true); + // // if (string.IsNullOrEmpty(checkVinPartRepeatBillNum1) == false) + // // { + // // throw new BusinessException("1001", $"与装箱单号{checkVinPartRepeatBillNum1}中的底盘号{reportRecObj.VIN}、零件号{reportRecObj.PartCode2}之间重复!"); + // // } + + // // string sql2 = string.Format(checkVinPartRepeatSql, reportRecObj.VIN, reportRecObj.PartCode4); + // // string checkVinPartRepeatBillNum2 = _newJitDapperRepository.GetSingleBySql(sql2, true); + // // if (string.IsNullOrEmpty(checkVinPartRepeatBillNum2) == false) + // // { + // // throw new BusinessException("1001", $"与装箱单号{checkVinPartRepeatBillNum2}中的底盘号{reportRecObj.VIN}、零件号{reportRecObj.PartCode4}之间重复!"); + // // } + // // } + // // } + + // // //调用派格版库存接口 + // // await SaveMiddleTable_MB(reportMainLst); + + // // //插入门板打印记录表 + // // //await _menBanPackingListRepository.InsertManyAsync(reportMainLst); + // // foreach (var reportMainObj in reportMainLst) + // // { + // // var insObj = await _menBanPackingListRepository.InsertAsync(reportMainObj, true); + // // if (insObj != null) + // // { + // // retLst.Add(insObj.Id); + // // } + // // } + // // //更新M110的门板打印标志:BillStatus=3 + // // foreach (BillM110 billObj in billLst) + // // { + // // if (billObj.BillStatus == BillStatusEnum.Match) + // // { + // // billObj.SetBillStatus(BillStatusEnum.Publish); + // // billObj.PrintTime = ServerHelper.CurrentDateTime; + // // await _billM110Repository.UpdateAsync(billObj); + // // } + // // } + // //} //补打if + // await uow.CompleteAsync(); + // ret.Status = true; + // ret.Item = retLst; + // return ret; + // } + // catch (Exception ex) + // { + // await uow.RollbackAsync(); + // string errorMsg = _errorMessagePrefix + "SaveMenBanReport 执行出错:" + ex.Message; + // _logger.LogError(errorMsg); + // ret.Status = false; + // ret.Message = ex.Message; + // return ret; + // } + // } //事务 + //} - [UnitOfWork] - [HttpPost] - [Route("load-menban-report")] - public virtual async Task> LoadMenBanReport(List input) - { - _logger.LogDebug(_errorMessagePrefix + "LoadMenBanReport 进入"); + //[UnitOfWork] + //[HttpPost] + //[Route("load-menban-report")] + //public virtual async Task> LoadMenBanReport(List input) + //{ + // _logger.LogDebug(_errorMessagePrefix + "LoadMenBanReport 进入"); - try - { - List reportMainLst = new List(); + // try + // { + // List reportMainLst = new List(); - reportMainLst = await _menBanPackingListRepository.GetListAsync(itm => input.Contains(itm.Id) == true, true); - //按大众顺序号排序 - foreach (var reportMainObj in reportMainLst) - { - List recLst = reportMainObj.Details; - if (recLst == null) - continue; - - bool has1999 = recLst.Any(itm => itm.HostSN.Contains("1999") || itm.HostSN.Contains("1998") || itm.HostSN.Contains("1997") - || itm.HostSN.Contains("1996") || itm.HostSN.Contains("1995") || itm.HostSN.Contains("1994") - || itm.HostSN.Contains("1993") || itm.HostSN.Contains("1992") || itm.HostSN.Contains("1991") - || itm.HostSN.Contains("1990") || itm.HostSN.Contains("1989") || itm.HostSN.Contains("1988") - || itm.HostSN.Contains("1987") || itm.HostSN.Contains("1986") || itm.HostSN.Contains("1985") - || itm.HostSN.Contains("1984") || itm.HostSN.Contains("1983") || itm.HostSN.Contains("1982") - || itm.HostSN.Contains("1981") || itm.HostSN.Contains("1980") || itm.HostSN.Contains("1979") - || itm.HostSN.Contains("1978") || itm.HostSN.Contains("1977") || itm.HostSN.Contains("1976") - ); - bool has0001 = recLst.Any(itm => itm.HostSN.Contains("0001") || itm.HostSN.Contains("0002") || itm.HostSN.Contains("0003") - || itm.HostSN.Contains("0004") || itm.HostSN.Contains("0005") || itm.HostSN.Contains("0006") - || itm.HostSN.Contains("0007") || itm.HostSN.Contains("0008") || itm.HostSN.Contains("0009") - || itm.HostSN.Contains("0010") || itm.HostSN.Contains("0011") || itm.HostSN.Contains("0012") - || itm.HostSN.Contains("0013") || itm.HostSN.Contains("0014") || itm.HostSN.Contains("0015") - || itm.HostSN.Contains("0016") || itm.HostSN.Contains("0017") || itm.HostSN.Contains("0018") - || itm.HostSN.Contains("0019") || itm.HostSN.Contains("0020") || itm.HostSN.Contains("0021") - || itm.HostSN.Contains("0022") || itm.HostSN.Contains("0023") || itm.HostSN.Contains("0024") - ); - if (has1999 && has0001) - { - reportMainObj.Details = recLst.OrderBy(itm => (itm.HostSN.TryToIntZero() % 10000) < 240 ? (itm.HostSN.TryToIntZero() % 10000 + 1999) : (itm.HostSN.TryToIntZero() % 10000)).ToList(); - } - else - { - reportMainObj.Details = recLst.OrderBy(itm => itm.HostSN).ToList(); - } - } + // reportMainLst = await _menBanPackingListRepository.GetListAsync(itm => input.Contains(itm.Id) == true, true); + // //按大众顺序号排序 + // foreach (var reportMainObj in reportMainLst) + // { + // List recLst = reportMainObj.Details; + // if (recLst == null) + // continue; - #region 格式转换 - //实体 转 DTO - List targetLst = ObjectMapper.Map, List>(reportMainLst); - targetLst = targetLst.OrderBy(itm => itm.BillNum).ToList(); + // bool has1999 = recLst.Any(itm => itm.HostSN.Contains("1999") || itm.HostSN.Contains("1998") || itm.HostSN.Contains("1997") + // || itm.HostSN.Contains("1996") || itm.HostSN.Contains("1995") || itm.HostSN.Contains("1994") + // || itm.HostSN.Contains("1993") || itm.HostSN.Contains("1992") || itm.HostSN.Contains("1991") + // || itm.HostSN.Contains("1990") || itm.HostSN.Contains("1989") || itm.HostSN.Contains("1988") + // || itm.HostSN.Contains("1987") || itm.HostSN.Contains("1986") || itm.HostSN.Contains("1985") + // || itm.HostSN.Contains("1984") || itm.HostSN.Contains("1983") || itm.HostSN.Contains("1982") + // || itm.HostSN.Contains("1981") || itm.HostSN.Contains("1980") || itm.HostSN.Contains("1979") + // || itm.HostSN.Contains("1978") || itm.HostSN.Contains("1977") || itm.HostSN.Contains("1976") + // ); + // bool has0001 = recLst.Any(itm => itm.HostSN.Contains("0001") || itm.HostSN.Contains("0002") || itm.HostSN.Contains("0003") + // || itm.HostSN.Contains("0004") || itm.HostSN.Contains("0005") || itm.HostSN.Contains("0006") + // || itm.HostSN.Contains("0007") || itm.HostSN.Contains("0008") || itm.HostSN.Contains("0009") + // || itm.HostSN.Contains("0010") || itm.HostSN.Contains("0011") || itm.HostSN.Contains("0012") + // || itm.HostSN.Contains("0013") || itm.HostSN.Contains("0014") || itm.HostSN.Contains("0015") + // || itm.HostSN.Contains("0016") || itm.HostSN.Contains("0017") || itm.HostSN.Contains("0018") + // || itm.HostSN.Contains("0019") || itm.HostSN.Contains("0020") || itm.HostSN.Contains("0021") + // || itm.HostSN.Contains("0022") || itm.HostSN.Contains("0023") || itm.HostSN.Contains("0024") + // ); + // if (has1999 && has0001) + // { + // reportMainObj.Details = recLst.OrderBy(itm => (itm.HostSN.TryToIntZero() % 10000) < 240 ? (itm.HostSN.TryToIntZero() % 10000 + 1999) : (itm.HostSN.TryToIntZero() % 10000)).ToList(); + // } + // else + // { + // reportMainObj.Details = recLst.OrderBy(itm => itm.HostSN).ToList(); + // } + // } - //子表BillNum赋值, BillNum填充空格 - foreach (var masterObj in targetLst) - { - masterObj.BillNum = GetTrueString(masterObj.BillNum); - int sn = 1; - foreach (var detailObj in masterObj.Details) - { - detailObj.BillNum = masterObj.BillNum; - detailObj.KNR = GetTrueString(detailObj.KNR); - detailObj.SN = (sn++).ToString(); - detailObj.VIN = detailObj.VIN.TryToRight(6); //底盘号返回后六位 - } - } - #endregion - return targetLst; - } - catch (Exception ex) - { - string errorMsg = _errorMessagePrefix + "LoadMenBanReport 执行出错:" + ex.Message; - _logger.LogError(errorMsg); - throw new UserFriendlyException(errorMsg); - } - } + // #region 格式转换 + // //实体 转 DTO + // List targetLst = ObjectMapper.Map, List>(reportMainLst); + // targetLst = targetLst.OrderBy(itm => itm.BillNum).ToList(); - private static string GetTrueString(string str) - { - return str == null ? " " : str.Trim(); ; - } + // //子表BillNum赋值, BillNum填充空格 + // foreach (var masterObj in targetLst) + // { + // masterObj.BillNum = GetTrueString(masterObj.BillNum); + // int sn = 1; + // foreach (var detailObj in masterObj.Details) + // { + // detailObj.BillNum = masterObj.BillNum; + // detailObj.KNR = GetTrueString(detailObj.KNR); + // detailObj.SN = (sn++).ToString(); + // detailObj.VIN = detailObj.VIN.TryToRight(6); //底盘号返回后六位 + // } + // } + // #endregion + // return targetLst; + // } + // catch (Exception ex) + // { + // string errorMsg = _errorMessagePrefix + "LoadMenBanReport 执行出错:" + ex.Message; + // _logger.LogError(errorMsg); + // throw new UserFriendlyException(errorMsg); + // } + //} + + //private static string GetTrueString(string str) + //{ + // return str == null ? " " : str.Trim(); ; + //} /// /// 打印柱护板装箱单 diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/WY.NewJit.Application.xml b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/WY.NewJit.Application.xml index 0af46ef..eaa1594 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/WY.NewJit.Application.xml +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/WY.NewJit.Application.xml @@ -1013,6 +1013,20 @@ 根据筛选条件获取实体列表 + + + 包含主表横向排列零件字段 + + + + + + + 填充M110主表横向零件字段 + + + + 根据条件取用于打印的门板单据列表 @@ -1031,17 +1045,16 @@ - + 打印左侧或右侧门板 - - - + 报表分类,dui + 零件大类字典项 @@ -1118,6 +1131,11 @@ 生产线编号列表 生产线超时情况 + + + 零件在主表横向排列显示的列名 + + M100单据管理应用服务实现 @@ -1405,22 +1423,6 @@ - - - 打印前检查大众顺序号是否断号 - - - 断号时Item不为空 - - - - 根据生产线获取正常打印单据的起始大众顺序号2 - - 生产线 - 柱护板是1 门板是非1 - 柱护板分组类型 - 起始大众顺序号 - 根据筛选条件获取分页实体列表 @@ -1472,13 +1474,6 @@ 导入文件流 执行成功返回真 - - - 生产线超时提醒 - - 生产线编号列表 - 生产线超时情况 - R100单据管理应用服务实现 diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain.Shared/Common/ObjectResultDto.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain.Shared/Common/ObjectResultDto.cs index b750ab7..a7bb060 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain.Shared/Common/ObjectResultDto.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain.Shared/Common/ObjectResultDto.cs @@ -7,7 +7,6 @@ namespace WY.NewJit public class ObjectResultDto { - private bool isRepeat; public ObjectResultDto() { @@ -15,11 +14,6 @@ namespace WY.NewJit this.Message = ""; } - public ObjectResultDto(bool isRepeat) - { - this.isRepeat = isRepeat; - } - public ObjectResultDto(bool status, string errorMessage) { this.Status = status; diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain.Shared/MsgCheck/BillStatusEnum.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain.Shared/MsgCheck/BillStatusEnum.cs index 4c29e6d..2660c33 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain.Shared/MsgCheck/BillStatusEnum.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain.Shared/MsgCheck/BillStatusEnum.cs @@ -13,13 +13,13 @@ namespace WY.NewJit.MsgCheck /// /// 未匹配 /// - [Description("未匹配")] - NotMatch = 1, + //[Description("未匹配")] + //NotMatch = 1, /// /// 已匹配,未打印 /// - [Description("已匹配")] + [Description("未打印")] Match = 2, /// diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/DicItem.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/DicItem.cs index 4a882cf..74623e1 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/DicItem.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/DicItem.cs @@ -48,10 +48,32 @@ namespace WY.NewJit.MsgBaseData public virtual string DicItemSort4 { get; set; } /// - /// 分类5 + /// 分类5 (零件大类对应客户零件号) /// public virtual string DicItemSort5 { get; set; } + /// + /// 分类6(零件大类对应显示车型) + /// + public virtual string DicItemSort6 { get; set; } + + /// + /// 分类7(零件大类对应报表字段显示顺序) + /// + public virtual string DicItemSort7 { get; set; } + + /// + /// 分类8(零件大类对应装箱清单号的前缀,例如C或T) + /// + public virtual string DicItemSort8 { get; set; } + + /// + /// 分类9(零件大类对应 打印标准数量 12 或 24) + /// + public virtual string DicItemSort9 { get; set; } + + + protected DicItem() { //此构造函数是提供给ORM用来从数据库中获取实体. diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Services/LineSNDomianService.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Services/LineSNDomianService.cs index 42c4a0a..41cc749 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Services/LineSNDomianService.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Services/LineSNDomianService.cs @@ -19,7 +19,7 @@ namespace WY.NewJit.MsgBaseData } /// - /// 生成门板或柱护板右上角顺序号 + /// 生成门板或柱护板右上角顺序号,每天零点开始往复循环1-99 /// /// 门板或柱护板 /// 产线 @@ -38,7 +38,7 @@ namespace WY.NewJit.MsgBaseData } DateTime now = DateTime.Now; - DateTime today8 = new DateTime(now.Year, now.Month, now.Day, 8, 0, 0); + DateTime today8 = new DateTime(now.Year, now.Month, now.Day, 0, 0, 0); if (typeObj != null) { diff --git a/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.AssemblyInfo.cs b/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.AssemblyInfo.cs index 09328bf..4bf6f0b 100644 --- a/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.AssemblyInfo.cs +++ b/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Win.Sfs.Shared")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("2.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("2.0.0+9f1698b0f932dfc3e8d926fe272b9e5c15605da4")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("2.0.0+55c68df95edc067cefe3d74120d28daebdd00649")] [assembly: System.Reflection.AssemblyProductAttribute("Win.Sfs.Shared")] [assembly: System.Reflection.AssemblyTitleAttribute("Win.Sfs.Shared")] [assembly: System.Reflection.AssemblyVersionAttribute("2.0.0.0")] diff --git a/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.AssemblyInfoInputs.cache b/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.AssemblyInfoInputs.cache index 07049b5..6bbb8b8 100644 --- a/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.AssemblyInfoInputs.cache +++ b/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.AssemblyInfoInputs.cache @@ -1 +1 @@ -d755eed168280a373eeb0870bc5023deded8bf4c7a53f8c511dbfc9601ca31ed +48b37d1c823a2c28ae1847b40d58f961e3a2bcf25479d6132ccf6601b7861fc4 diff --git a/Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.AssemblyInfo.cs b/Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.AssemblyInfo.cs index 7d9588d..69ddc12 100644 --- a/Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.AssemblyInfo.cs +++ b/Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Win.Utils")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("2.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("2.0.0+32f3c7c4f91a6e47f64ef11cb91719a67226370a")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("2.0.0+55c68df95edc067cefe3d74120d28daebdd00649")] [assembly: System.Reflection.AssemblyProductAttribute("Win.Utils")] [assembly: System.Reflection.AssemblyTitleAttribute("Win.Utils")] [assembly: System.Reflection.AssemblyVersionAttribute("2.0.0.0")] diff --git a/Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.AssemblyInfoInputs.cache b/Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.AssemblyInfoInputs.cache index 0b62015..be5fb63 100644 --- a/Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.AssemblyInfoInputs.cache +++ b/Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.AssemblyInfoInputs.cache @@ -1 +1 @@ -b809d5ff0b4e2ed0d2cfb967cbf1ed268b666995e296a8a123408bdd3804a21c +319ab87b608dd5265bea28a1b45afd1f00fabe88367ebb4631ed6d98436c50fc From 655f97fce0dd87165ead1e3cce91aba34298af56 Mon Sep 17 00:00:00 2001 From: me Date: Wed, 6 Aug 2025 15:04:09 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=BC=80=E5=8F=91=E5=85=B6=E5=AE=83?= =?UTF-8?q?=EF=BC=8C=E5=BC=80=E5=8F=91=E5=8F=91=E8=BF=90=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MenBanReports/MenBanPackingListDto.cs | 4 + .../MenBanReports/MenBanPackingRecDto.cs | 10 +- .../WY.NewJit.Application.Contracts.xml | 20 +- .../MsgCheck/BillM100s/BillM100AppService.cs | 268 ++++++++++-------- .../BillM100s/MenBanPackingRecService.cs | 62 ++-- .../MsgCheck/BillM110s/BillM110AppService.cs | 160 +++++------ .../WY.NewJit.Application.xml | 19 +- .../PaiGe/MenBanReports/MenBanPackingList.cs | 4 + .../PaiGe/MenBanReports/MenBanPackingRec.cs | 8 + 9 files changed, 306 insertions(+), 249 deletions(-) diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/Extends/MenBanReports/MenBanPackingListDto.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/Extends/MenBanReports/MenBanPackingListDto.cs index de20e8e..8dc0da3 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/Extends/MenBanReports/MenBanPackingListDto.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/Extends/MenBanReports/MenBanPackingListDto.cs @@ -32,6 +32,10 @@ namespace WY.NewJit.Extends /// public string VehicleModel { get; set; } + /// + /// 报表显示车型 + /// + public string VehicleModel_Disp { get; set; } /// /// 供应商厂家代码 diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/Extends/MenBanReports/MenBanPackingRecDto.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/Extends/MenBanReports/MenBanPackingRecDto.cs index ba07fbc..e4053fa 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/Extends/MenBanReports/MenBanPackingRecDto.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/Extends/MenBanReports/MenBanPackingRecDto.cs @@ -75,9 +75,15 @@ namespace WY.NewJit.Extends /// public virtual string SN { get; set; } + /// + /// 扫描零件号,供发运使用 + /// + public string ScanPartCode { get; set; } - - + /// + /// 备注 + /// + public string Remark { get; set; } } diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/WY.NewJit.Application.Contracts.xml b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/WY.NewJit.Application.Contracts.xml index d3d286b..c1281a7 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/WY.NewJit.Application.Contracts.xml +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/WY.NewJit.Application.Contracts.xml @@ -24,6 +24,11 @@ 左或右 + + + 报表显示车型 + + 供应商厂家代码 @@ -184,6 +189,16 @@ 上箱位号 + + + 扫描零件号,供发运使用 + + + + + 备注 + + 打印类型:提供初次打印、重新打印、针对重新解析后单据的补打功能 @@ -209,11 +224,6 @@ 装箱单主表ID列表,报废时传入一个,重打时可传入多个 - - - 补打时使用 - - 门板主实体列表 diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM100s/BillM100AppService.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM100s/BillM100AppService.cs index d26fff4..881ba53 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM100s/BillM100AppService.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM100s/BillM100AppService.cs @@ -157,6 +157,8 @@ namespace WY.NewJit.MsgCheck private List _zhbCacheList = new List(); private string _topBoxPositionNumPrefix; + + private List _partCfgLst; #endregion #region 构造函数 @@ -1132,17 +1134,27 @@ select * from /// 报表分类,对应DicItemSort4 /// 零件大类字典项 /// - private MenBanPackingList DoMBPrint(MenBanPrintInputDto input, int pageIdx, double maxSN, List billLst, string reportSort, List partLargeTypeLst) + private MenBanPackingList DoMBPrint(MenBanPrintInputDto input, int pageIdx, double maxSN, List billLst, string reportSort, List partLargeTypeLst, Guid sortId) { - const int _colNumberPerPage = 12; - string[] partLargeType = partLargeTypeLst.Select(itm => itm.DicItemCode).ToArray(); //取零件大类 - var partLargeTypeObj = partLargeTypeLst[0]; + const int _colNumberPerPage = 12; //??临时的,等 + var partLargeTypeObj = partLargeTypeLst.FirstOrDefault(itm => itm.DicItemCode == reportSort); + if (partLargeTypeObj == null) + { + throw new UserFriendlyException($"零件大类字典中,DicItemCode列没有配置{reportSort}"); + } + string[] partLargeTypes = partLargeTypeLst.Select(itm => itm.DicItemCode).ToArray(); //取零件大类 + //取扫描零件的索引 + int idx = partLargeTypeLst.FindIndex(itm => itm.Id == partLargeTypeObj.Id); + if (idx < 0) + { + idx = 0; + } //取当前页内容 List curPageLst = billLst.Skip(pageIdx * _colNumberPerPage).Take(_colNumberPerPage).ToList(); - var vmLst = curPageLst.Select(itm => itm.VehicleModelCode).Distinct().JoinAsString(","); //取车型 + //var vmLst = curPageLst.Select(itm => itm.VehicleModelCode).Distinct().JoinAsString(","); //取车型 string ymd = ServerHelper.CurrentDateTime.ToString("yyyyMMdd"); string serialNum = maxSN.ToString().PadLeft(3, '0'); //075 @@ -1150,11 +1162,13 @@ select * from packingMain.SetId(GuidGenerator.Create()); packingMain.BillNum = $"{partLargeTypeObj.DicItemSort8}{ymd}{serialNum}{reportSort}"; //partLargeTypeObj.DicItemSort8包含C或T - - packingMain.VehicleModel = partLargeTypeObj.DicItemSort6; //报表显示车型 //vmLst; packingMain.BillSerialNum = serialNum; + packingMain.VehicleModel = partLargeTypeObj.DicItemSort3; //车型 + packingMain.VehicleModel_Disp = partLargeTypeObj.DicItemSort6; //车型(报表显示的) packingMain.PrintDate = ServerHelper.CurrentDateTime; + packingMain.PartType = partLargeTypeObj.DicItemCode; //零件大类 packingMain.ProductLine = billLst[0].ProductLine; + packingMain.SortId = sortId; var tempLst = curPageLst.Where(itm => string.IsNullOrEmpty(itm.VIN) == false).OrderBy(itm => itm.OnlineTime).ThenBy(itm => itm.HostSN).ToList(); if (tempLst.Count > 0) @@ -1180,41 +1194,136 @@ select * from packingDetail.VIN += "*断号*"; } //第一个零件 - if (partLargeType.Length >= 1) + if (partLargeTypes.Length >= 1) { - var partObj = billObj.BillM100Parts.FirstOrDefault(itm => itm.PartType3 == partLargeType[0]); + var partObj = billObj.BillM100Parts.FirstOrDefault(itm => itm.PartType3 == partLargeTypes[0]); if (partObj != null) { packingDetail.PartCode1 = partObj.PartCode; } } //第二个零件 - if (partLargeType.Length >= 2) + if (partLargeTypes.Length >= 2) { - var partObj = billObj.BillM100Parts.FirstOrDefault(itm => itm.PartType3 == partLargeType[1]); + var partObj = billObj.BillM100Parts.FirstOrDefault(itm => itm.PartType3 == partLargeTypes[1]); if (partObj != null) { packingDetail.PartCode2 = partObj.PartCode; } } //第三个零件 - if (partLargeType.Length >= 3) + if (partLargeTypes.Length >= 3) { - var partObj = billObj.BillM100Parts.FirstOrDefault(itm => itm.PartType3 == partLargeType[2]); + var partObj = billObj.BillM100Parts.FirstOrDefault(itm => itm.PartType3 == partLargeTypes[2]); if (partObj != null) { packingDetail.PartCode3 = partObj.PartCode; } } //第四个零件 - if (partLargeType.Length >= 4) + if (partLargeTypes.Length >= 4) { - var partObj = billObj.BillM100Parts.FirstOrDefault(itm => itm.PartType3 == partLargeType[3]); + var partObj = billObj.BillM100Parts.FirstOrDefault(itm => itm.PartType3 == partLargeTypes[3]); if (partObj != null) { packingDetail.PartCode4 = partObj.PartCode; } } + + switch (idx) + { + case 0: + if (partLargeTypeLst[0].DicItemSort5 == "厂内零件号") + { + var partCfgObj = _partCfgLst.FirstOrDefault(itm => itm.PartCode == packingDetail.PartCode1); + if (partCfgObj == null) + { + packingDetail.Remark = $"根据客户零件{packingDetail.PartCode1}无法取得厂内零件"; + } + else + { + packingDetail.ScanPartCode = partCfgObj.RelationKey; + } + } + else + { + packingDetail.ScanPartCode = packingDetail.PartCode1; + } + break; + case 1: + if (partLargeTypeLst[0].DicItemSort5 == "厂内零件号") + { + var partCfgObj = _partCfgLst.FirstOrDefault(itm => itm.PartCode == packingDetail.PartCode2); + if (partCfgObj == null) + { + packingDetail.Remark = $"根据客户零件{packingDetail.PartCode2}无法取得厂内零件"; + } + else + { + packingDetail.ScanPartCode = partCfgObj.RelationKey; + } + } + else + { + packingDetail.ScanPartCode = packingDetail.PartCode2; + } + break; + case 2: + if (partLargeTypeLst[0].DicItemSort5 == "厂内零件号") + { + var partCfgObj = _partCfgLst.FirstOrDefault(itm => itm.PartCode == packingDetail.PartCode3); + if (partCfgObj == null) + { + packingDetail.Remark = $"根据客户零件{packingDetail.PartCode3}无法取得厂内零件"; + } + else + { + packingDetail.ScanPartCode = partCfgObj.RelationKey; + } + } + else + { + packingDetail.ScanPartCode = packingDetail.PartCode3; + } + break; + case 3: + if (partLargeTypeLst[0].DicItemSort5 == "厂内零件号") + { + var partCfgObj = _partCfgLst.FirstOrDefault(itm => itm.PartCode == packingDetail.PartCode4); + if (partCfgObj == null) + { + packingDetail.Remark = $"根据客户零件{packingDetail.PartCode4}无法取得厂内零件"; + } + else + { + packingDetail.ScanPartCode = partCfgObj.RelationKey; + } + } + else + { + packingDetail.ScanPartCode = packingDetail.PartCode4; + } + break; + case 4: + if (partLargeTypeLst[0].DicItemSort5 == "厂内零件号") + { + var partCfgObj = _partCfgLst.FirstOrDefault(itm => itm.PartCode == packingDetail.PartCode5); + if (partCfgObj == null) + { + packingDetail.Remark = $"根据客户零件{packingDetail.PartCode5}无法取得厂内零件"; + } + else + { + packingDetail.ScanPartCode = partCfgObj.RelationKey; + } + } + else + { + packingDetail.ScanPartCode = packingDetail.PartCode5; + } + break; + } + packingDetail.SN = sn.ToString(); packingMain.Details.Add(packingDetail); sn++; @@ -3583,9 +3692,11 @@ select min(SerialNumStr) from FisBillM100 a left join d on a.VIN=d.VIN } } + _partCfgLst = await _partCfgRepository.GetListAsync(); + //取零件大类字典 List partLargeTypeLst = await _dicItemRepository.GetListAsync(itm => itm.DicTypeCode == "零件大类"); partLargeTypeLst = partLargeTypeLst.OrderBy(itm => itm.DicItemSort2).ThenBy(itm => itm.DicItemSort1).ToList(); - + //取M100数据 ListResultDto tempLst = await GetMBReportDetailList(input, true); //----------------------------- List billLst = tempLst.Item; if (tempLst.Status == false) @@ -3595,18 +3706,18 @@ select min(SerialNumStr) from FisBillM100 a left join d on a.VIN=d.VIN return ret; } - _logger.LogWarning($"SaveMenBanReport读取数据 - {sw.ElapsedMilliseconds}毫秒"); + //_logger.LogWarning($"SaveMenBanReport读取数据 - {sw.ElapsedMilliseconds}毫秒"); int pageCnt = (int)Math.Ceiling(billLst.Count / 12.0); //每页打印12列,取打印页数 - //double maxBillNum = 0; - //DateTime printTime = ServerHelper.CurrentDateTime; //过滤产线(DicItemSort2),按“报表分类”(DicItemSort4)分组,分组后按DicItemSort7排序 Dictionary> reportSortDic = partLargeTypeLst .Where(itm => itm.DicItemSort2 == input.ProductLine && string.IsNullOrEmpty(itm.DicItemSort4) == false) .GroupBy(itm => itm.DicItemSort4) - .ToDictionary(itm => itm.Key, it2 => it2.OrderBy(itm => itm.DicItemSort7).ToList()); + .ToDictionary(itm => itm.Key, it2 => it2.OrderBy(itm => itm.DicItemSort7).ToList()); + + Guid sortId = GuidGenerator.Create(); //每次打印所有记录的SortId是相同的 for (int pageIdx = 0; pageIdx < pageCnt; pageIdx++) { @@ -3616,24 +3727,24 @@ select min(SerialNumStr) from FisBillM100 a left join d on a.VIN=d.VIN //生成顺序号:按生产线分组,取当前生产线的最大流水号:001至999往复循环 double maxSN = await _lineSNDomianService.GetMaxSN(ProductTypeEnum.门板, input.ProductLine, string.Empty); - MenBanPackingList packingObj = DoMBPrint(input, pageIdx, maxSN, billLst, reportSortItem.Key, reportSortItem.Value); + MenBanPackingList packingObj = DoMBPrint(input, pageIdx, maxSN, billLst, reportSortItem.Key, reportSortItem.Value, sortId); reportMainLst.Add(packingObj); } } - _logger.LogWarning($"SaveMenBanReport转换数据 - {sw.ElapsedMilliseconds}毫秒"); + //_logger.LogWarning($"SaveMenBanReport转换数据 - {sw.ElapsedMilliseconds}毫秒"); //插入门板打印记录表 await _menBanPackingListRepository.InsertManyAsync(reportMainLst, true); retLst.AddRange(reportMainLst.Select(itm => itm.Id)); - _logger.LogWarning($"SaveMenBanReport插入门板打印记录表 - {sw.ElapsedMilliseconds}毫秒"); + //_logger.LogWarning($"SaveMenBanReport插入门板打印记录表 - {sw.ElapsedMilliseconds}毫秒"); //调用派格版库存接口 //await SaveMiddleTable_MB(reportMainLst); - _logger.LogWarning($"SaveMenBanReport插入中间表 - {sw.ElapsedMilliseconds}毫秒"); + //_logger.LogWarning($"SaveMenBanReport插入中间表 - {sw.ElapsedMilliseconds}毫秒"); //更新M100的门板打印标志:BillStatus=3 @@ -3654,102 +3765,13 @@ select min(SerialNumStr) from FisBillM100 a left join d on a.VIN=d.VIN //} } - _logger.LogWarning($"SaveMenBanReport更新M100的门板打印标志 - {sw.ElapsedMilliseconds}毫秒"); + //_logger.LogWarning($"SaveMenBanReport更新M100的门板打印标志 - {sw.ElapsedMilliseconds}毫秒"); } //else if (input.PrintType == PrintTypeEnum.重新打印) //和正常打印单据完全一样,可以打印部分单据 //{ // throw new BusinessException("请调用LoadMenBanReport方法!"); //} - //else if (input.PrintType == PrintTypeEnum.补打) - //{ - // List billLst = _billM100Repository.Where(itm => input.M100IdList.Contains(itm.Id)).OrderBy(itm => itm.SerialNumStr).ToList(); - // if (billLst.Count == 0) - // { - // ret.Message = "没有补打的单据,请先选择要补打的单据!"; - // ret.Status = false; - // return ret; - // } - - // int pageCnt = (int)Math.Ceiling(billLst.Count / 12.0); //每页打印12列,取打印页数 - - // double maxBillNum = 0; - - // DateTime printTime = ServerHelper.CurrentDateTime; - - // for (int pageIdx = 0; pageIdx < pageCnt; pageIdx++) - // { - // //取右上角顺序号:按生产线分组,取当前生产线的最大流水号:01至99循环,例如01左、01右 - // double maxSN = 0; // await _lineSNDomianService.GetMaxSN(ProductTypeEnum.门板, input.ProductLine, string.Empty); - // // 先打印两张:左后左前,再打印两张:右后右前 - // List leftLst = DoMBPrint(input, pageIdx, ref maxBillNum, maxSN, printTime, billLst, "左"); - // List rightLst = DoMBPrint(input, pageIdx, ref maxBillNum, maxSN, printTime, billLst, "右"); - - // //作废时需要同时作废相同VIN的左右两页,SortId相同表示是同一组左右 - // Guid sortId = GuidGenerator.Create(); - // foreach (var leftItm in leftLst) - // { - // leftItm.SortId = sortId; - // } - // foreach (var rightItm in rightLst) - // { - // rightItm.SortId = sortId; - // } - - // reportMainLst.AddRange(rightLst); - // reportMainLst.AddRange(leftLst); - // } - // //校验底盘号、零件是否重复打印 - // string checkVinPartRepeatSql = @" - // select top 1 a.BillNum from FisMenBanPackingList a join FisMenBanPackingRec b - // on a.Id = b.MenBanPackingListId - // where a.ReportStatus = 0 - // and b.VIN = '{0}' and (TopSAPMaterialNum = '{1}' or BelowSAPMaterialNum = '{1}') - // "; - // foreach (MenBanPackingList reportMainObj in reportMainLst) - // { - // foreach (MenBanPackingRec reportRecObj in reportMainObj.Details) - // { - // string sql1 = string.Format(checkVinPartRepeatSql, reportRecObj.VIN, reportRecObj.PartCode2); - // string checkVinPartRepeatBillNum1 = _newJitDapperRepository.GetSingleBySql(sql1, true); - // if (string.IsNullOrEmpty(checkVinPartRepeatBillNum1) == false) - // { - // throw new BusinessException("1001", $"与装箱单号{checkVinPartRepeatBillNum1}中的底盘号{reportRecObj.VIN}、零件号{reportRecObj.PartCode2}之间重复!"); - // } - - // string sql2 = string.Format(checkVinPartRepeatSql, reportRecObj.VIN, reportRecObj.PartCode4); - // string checkVinPartRepeatBillNum2 = _newJitDapperRepository.GetSingleBySql(sql2, true); - // if (string.IsNullOrEmpty(checkVinPartRepeatBillNum2) == false) - // { - // throw new BusinessException("1001", $"与装箱单号{checkVinPartRepeatBillNum2}中的底盘号{reportRecObj.VIN}、零件号{reportRecObj.PartCode4}之间重复!"); - // } - // } - // } - - // //调用派格版库存接口 - // await SaveMiddleTable_MB(reportMainLst); - - // //插入门板打印记录表 - // //await _menBanPackingListRepository.InsertManyAsync(reportMainLst); - // foreach (var reportMainObj in reportMainLst) - // { - // var insObj = await _menBanPackingListRepository.InsertAsync(reportMainObj, true); - // if (insObj != null) - // { - // retLst.Add(insObj.Id); - // } - // } - // //更新M100的门板打印标志:BillStatus=3 - // foreach (BillM100 billObj in billLst) - // { - // if (billObj.BillStatus == BillStatusEnum.Match) - // { - // billObj.SetBillStatus(BillStatusEnum.Publish); - // billObj.PrintTime = ServerHelper.CurrentDateTime; - // await _billM100Repository.UpdateAsync(billObj); - // } - // } - //} //补打if await uow.CompleteAsync(); ret.Status = true; ret.Item = retLst; @@ -4652,7 +4674,7 @@ select min(SerialNumStr) from FisBillM100 a left join d on a.VIN=d.VIN // _zhbCacheList = _materialExtRepository.Where(itm => itm.MaterialType == "2").ToList(); //取柱护板零件 - // _logger.LogWarning($"SaveZhuHuBanReport 加载缓存 - {sw.ElapsedMilliseconds}毫秒"); + // //_logger.LogWarning($"SaveZhuHuBanReport 加载缓存 - {sw.ElapsedMilliseconds}毫秒"); @@ -4673,7 +4695,7 @@ select min(SerialNumStr) from FisBillM100 a left join d on a.VIN=d.VIN // forWMSLst.AddRange(acLstOnlyWMSUse); - // _logger.LogWarning($"SaveZhuHuBanReport 转换A上C上 - {sw.ElapsedMilliseconds}毫秒"); + // //_logger.LogWarning($"SaveZhuHuBanReport 转换A上C上 - {sw.ElapsedMilliseconds}毫秒"); @@ -4730,7 +4752,7 @@ select min(SerialNumStr) from FisBillM100 a left join d on a.VIN=d.VIN // forWMSLst.AddRange(hsLst2); - // _logger.LogWarning($"SaveZhuHuBanReport 转换除A上C上的其它 - {sw.ElapsedMilliseconds}毫秒"); + // //_logger.LogWarning($"SaveZhuHuBanReport 转换除A上C上的其它 - {sw.ElapsedMilliseconds}毫秒"); @@ -4739,7 +4761,7 @@ select min(SerialNumStr) from FisBillM100 a left join d on a.VIN=d.VIN // #endregion - // _logger.LogWarning($"SaveZhuHuBanReport 保存中间库 - {sw.ElapsedMilliseconds}毫秒"); + // //_logger.LogWarning($"SaveZhuHuBanReport 保存中间库 - {sw.ElapsedMilliseconds}毫秒"); @@ -4758,7 +4780,7 @@ select min(SerialNumStr) from FisBillM100 a left join d on a.VIN=d.VIN // await _zhuHuBanPackingListRepository.InsertManyAsync(reportMainLst); - // _logger.LogWarning($"SaveZhuHuBanReport 插入柱护板打印记录表 - {sw.ElapsedMilliseconds}毫秒"); + // //_logger.LogWarning($"SaveZhuHuBanReport 插入柱护板打印记录表 - {sw.ElapsedMilliseconds}毫秒"); @@ -4774,7 +4796,7 @@ select min(SerialNumStr) from FisBillM100 a left join d on a.VIN=d.VIN // await _billM100Repository.UpdateManyAsync(updLst); - // _logger.LogWarning($"SaveZhuHuBanReport 更新M100的柱护板打印标志 - {sw.ElapsedMilliseconds}毫秒"); + // //_logger.LogWarning($"SaveZhuHuBanReport 更新M100的柱护板打印标志 - {sw.ElapsedMilliseconds}毫秒"); // } // else if (input.PrintType == PrintTypeEnum.重新打印) //和正常打印单据完全一样,可以打印部分单据 @@ -4896,7 +4918,7 @@ select min(SerialNumStr) from FisBillM100 a left join d on a.VIN=d.VIN // await uow.CompleteAsync(); - // _logger.LogWarning($"SaveZhuHuBanReport CompleteAsync - {sw.ElapsedMilliseconds}毫秒"); + // //_logger.LogWarning($"SaveZhuHuBanReport CompleteAsync - {sw.ElapsedMilliseconds}毫秒"); // ret.Status = true; // ret.Item = retLst; @@ -4954,7 +4976,7 @@ select min(SerialNumStr) from FisBillM100 a left join d on a.VIN=d.VIN // } - // _logger.LogWarning($"LoadZhuHuBanReport 取柱护板数据 - {sw.ElapsedMilliseconds}毫秒"); + // //_logger.LogWarning($"LoadZhuHuBanReport 取柱护板数据 - {sw.ElapsedMilliseconds}毫秒"); // //按大众顺序号排序 @@ -5083,7 +5105,7 @@ select min(SerialNumStr) from FisBillM100 a left join d on a.VIN=d.VIN // #endregion - // _logger.LogWarning($"LoadZhuHuBanReport 排序及转换 - {sw.ElapsedMilliseconds}毫秒"); + // //_logger.LogWarning($"LoadZhuHuBanReport 排序及转换 - {sw.ElapsedMilliseconds}毫秒"); // ret.Status = true; // return ret; diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM100s/MenBanPackingRecService.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM100s/MenBanPackingRecService.cs index 4925f91..489d626 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM100s/MenBanPackingRecService.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM100s/MenBanPackingRecService.cs @@ -382,13 +382,13 @@ namespace Win.Sfs.SettleAccount.FISes #region 格拉默 [HttpGet] [Route("get-packinglist-by-billnum")] - public async Task> GetPackingListByBillNum(string billNum) + public async Task> GetPackingListByBillNum(string billNum) { _logger.LogDebug(_errorMessagePrefix + "GetPackingListByBillNum 进入"); - + WY.NewJit.ListResultDto ret = new WY.NewJit.ListResultDto(); try { - List dicItemLst = await _dicItemRepository.GetListAsync(itm => itm.DicTypeCode == "零件大类"); + List partLargeTypeLst = await _dicItemRepository.GetListAsync(itm => itm.DicTypeCode == "零件大类"); List partCfgLst = await _partCfgRepository.GetListAsync(); @@ -443,16 +443,17 @@ namespace Win.Sfs.SettleAccount.FISes //第一个零件 if (detailObj.PartCode1.HasValue() && detailObj.PartCode1.Length >= 9) { - var dicItemObj = dicItemLst.FirstOrDefault(itm => itm.DicItemSort3 == targetObj.VehicleModel && itm.DicItemCode == detailObj.PartCode1.Substring(6, 3)); + //根据车型、零件大类取记录 + var partLargeTypeObj = partLargeTypeLst.FirstOrDefault(itm => itm.DicItemSort3 == targetObj.VehicleModel && itm.DicItemCode == detailObj.PartCode1.Substring(6, 3)); var partCfgObj = partCfgLst.FirstOrDefault(itm => itm.PartCode == detailObj.PartCode1); - if (dicItemObj.DicItemSort5 == "客户零件") + if (partLargeTypeObj.DicItemSort5 == "客户零件号") { if (partCfgObj != null) { detailObj.PartCode1 = partCfgObj.PartCode; } } - else if (dicItemObj.DicItemSort5 == "厂内零件") + else if (partLargeTypeObj.DicItemSort5 == "厂内零件号") { if (partCfgObj != null) { @@ -463,16 +464,16 @@ namespace Win.Sfs.SettleAccount.FISes //第二个零件 if (detailObj.PartCode2.HasValue() && detailObj.PartCode2.Length >= 9) { - var dicItemObj = dicItemLst.FirstOrDefault(itm => itm.DicItemSort3 == targetObj.VehicleModel && itm.DicItemCode == detailObj.PartCode2.Substring(6, 3)); + var dicItemObj = partLargeTypeLst.FirstOrDefault(itm => itm.DicItemSort3 == targetObj.VehicleModel && itm.DicItemCode == detailObj.PartCode2.Substring(6, 3)); var partCfgObj = partCfgLst.FirstOrDefault(itm => itm.PartCode == detailObj.PartCode2); - if (dicItemObj.DicItemSort5 == "客户零件") + if (dicItemObj.DicItemSort5 == "客户零件号") { if (partCfgObj != null) { detailObj.PartCode2 = partCfgObj.PartCode; } } - else if (dicItemObj.DicItemSort5 == "厂内零件") + else if (dicItemObj.DicItemSort5 == "厂内零件号") { if (partCfgObj != null) { @@ -483,16 +484,16 @@ namespace Win.Sfs.SettleAccount.FISes //第三个零件 if (detailObj.PartCode3.HasValue() && detailObj.PartCode3.Length >= 9) { - var dicItemObj = dicItemLst.FirstOrDefault(itm => itm.DicItemSort3 == targetObj.VehicleModel && itm.DicItemCode == detailObj.PartCode3.Substring(6, 3)); + var dicItemObj = partLargeTypeLst.FirstOrDefault(itm => itm.DicItemSort3 == targetObj.VehicleModel && itm.DicItemCode == detailObj.PartCode3.Substring(6, 3)); var partCfgObj = partCfgLst.FirstOrDefault(itm => itm.PartCode == detailObj.PartCode3); - if (dicItemObj.DicItemSort5 == "客户零件") + if (dicItemObj.DicItemSort5 == "客户零件号") { if (partCfgObj != null) { detailObj.PartCode3 = partCfgObj.PartCode; } } - else if (dicItemObj.DicItemSort5 == "厂内零件") + else if (dicItemObj.DicItemSort5 == "厂内零件号") { if (partCfgObj != null) { @@ -503,16 +504,16 @@ namespace Win.Sfs.SettleAccount.FISes //第四个零件 if (detailObj.PartCode4.HasValue() && detailObj.PartCode4.Length >= 9) { - var dicItemObj = dicItemLst.FirstOrDefault(itm => itm.DicItemSort3 == targetObj.VehicleModel && itm.DicItemCode == detailObj.PartCode4.Substring(6, 3)); + var dicItemObj = partLargeTypeLst.FirstOrDefault(itm => itm.DicItemSort3 == targetObj.VehicleModel && itm.DicItemCode == detailObj.PartCode4.Substring(6, 3)); var partCfgObj = partCfgLst.FirstOrDefault(itm => itm.PartCode == detailObj.PartCode4); - if (dicItemObj.DicItemSort5 == "客户零件") + if (dicItemObj.DicItemSort5 == "客户零件号") { if (partCfgObj != null) { detailObj.PartCode4 = partCfgObj.PartCode; } } - else if (dicItemObj.DicItemSort5 == "厂内零件") + else if (dicItemObj.DicItemSort5 == "厂内零件号") { if (partCfgObj != null) { @@ -526,27 +527,42 @@ namespace Win.Sfs.SettleAccount.FISes #endregion #endregion - return targetLst; + ret.Status = true; + ret.Item = targetLst; + return ret; } catch (Exception ex) { string errorMsg = _errorMessagePrefix + "GetPackingListByBillNum 执行出错:" + ex.Message; _logger.LogError(errorMsg); - throw new UserFriendlyException(errorMsg); + ret.Status = false; + ret.Message = errorMsg; + return ret; } } [HttpPost] [Route("update-scan-status")] - public virtual async Task UpdateScanStatus(string billNum) + public virtual async Task UpdateScanStatus(string billNum) { - var lst = await _menBanPackingListRepository.GetListAsync(itm => itm.BillNum == billNum); - foreach (var item in lst) + ObjectResultDto ret = new ObjectResultDto(); + try + { + var lst = await _menBanPackingListRepository.GetListAsync(itm => itm.BillNum == billNum); + foreach (var item in lst) + { + item.ReportStatus = ReportStatusEnum.已扫描; + var succ = await _menBanPackingListRepository.UpdateAsync(item); + } + ret.Status = true; + return ret; + } + catch (Exception ex) { - item.ReportStatus = ReportStatusEnum.已扫描; - var succ = await _menBanPackingListRepository.UpdateAsync(item); + ret.Status = false; + ret.Message = $"调用UpdateScanStatus方法报错:{ex.Message}"; + throw; } - return true; } #endregion diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM110s/BillM110AppService.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM110s/BillM110AppService.cs index 2dfb650..3d25573 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM110s/BillM110AppService.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM110s/BillM110AppService.cs @@ -897,90 +897,90 @@ select * from /// /// /// - private MenBanPackingList DoMBPrint(MenBanPrintInputDto input, int pageIdx, double maxSN, List billLst, string reportSort, string[] partLargeType) - { - const int _colNumberPerPage = 12; + //private MenBanPackingList DoMBPrint(MenBanPrintInputDto input, int pageIdx, double maxSN, List billLst, string reportSort, string[] partLargeType) + //{ + // const int _colNumberPerPage = 12; - //取当前页内容 - List curPageLst = billLst.Skip(pageIdx * _colNumberPerPage).Take(_colNumberPerPage).ToList(); + // //取当前页内容 + // List curPageLst = billLst.Skip(pageIdx * _colNumberPerPage).Take(_colNumberPerPage).ToList(); - var vmLst = curPageLst.Select(itm => itm.VehicleModelCode).Distinct().JoinAsString(","); //取车型 - string ymd = ServerHelper.CurrentDateTime.ToString("yyyyMMdd"); - string serialNum = maxSN.ToString().PadLeft(3, '0'); //075 + // var vmLst = curPageLst.Select(itm => itm.VehicleModelCode).Distinct().JoinAsString(","); //取车型 + // string ymd = ServerHelper.CurrentDateTime.ToString("yyyyMMdd"); + // string serialNum = maxSN.ToString().PadLeft(3, '0'); //075 - MenBanPackingList packingMain = new MenBanPackingList(); - packingMain.SetId(GuidGenerator.Create()); - packingMain.BillNum = $"C{ymd}{serialNum}{reportSort}"; - packingMain.VehicleModel = vmLst; - packingMain.BillSerialNum = serialNum; - packingMain.PrintDate = ServerHelper.CurrentDateTime; - packingMain.ProductLine = billLst[0].ProductLine; + // MenBanPackingList packingMain = new MenBanPackingList(); + // packingMain.SetId(GuidGenerator.Create()); + // packingMain.BillNum = $"C{ymd}{serialNum}{reportSort}"; + // packingMain.VehicleModel = vmLst; + // packingMain.BillSerialNum = serialNum; + // packingMain.PrintDate = ServerHelper.CurrentDateTime; + // packingMain.ProductLine = billLst[0].ProductLine; - var tempLst = curPageLst.Where(itm => string.IsNullOrEmpty(itm.VIN) == false).OrderBy(itm => itm.OnlineTime).ThenBy(itm => itm.HostSN).ToList(); - if (tempLst.Count > 0) - { - packingMain.BeginVin = tempLst[0].VIN; - packingMain.EndVin = tempLst[tempLst.Count - 1].VIN; - packingMain.BeginHostSN = tempLst[0].HostSN.ToString(); - packingMain.EndHostSN = tempLst[tempLst.Count - 1].HostSN.ToString(); - } - packingMain.MinOnlineTime = tempLst.Min(itm => itm.OnlineTime); //本单据最早的上线时间 - //明细 - int sn = 1; - foreach (BillM110 billObj in curPageLst) - { - MenBanPackingRec packingDetail = new MenBanPackingRec(); - packingDetail.SetId(GuidGenerator.Create()); - packingDetail.M100BillId = billObj.Id; - packingDetail.KNR = billObj.KNR; - packingDetail.VIN = billObj.VIN; - packingDetail.HostSN = billObj.HostSN?.ToString(); - if (billObj.VIN == null) - { - packingDetail.VIN += "*断号*"; - } - //第一个零件 - if (partLargeType.Length >= 1) - { - var partObj = billObj.BillM110Parts.FirstOrDefault(itm => itm.PartType3 == partLargeType[0]); - if (partObj != null) - { - packingDetail.PartCode1 = partObj.PartCode; - } - } - //第二个零件 - if (partLargeType.Length >= 2) - { - var partObj = billObj.BillM110Parts.FirstOrDefault(itm => itm.PartType3 == partLargeType[1]); - if (partObj != null) - { - packingDetail.PartCode2 = partObj.PartCode; - } - } - //第三个零件 - if (partLargeType.Length >= 3) - { - var partObj = billObj.BillM110Parts.FirstOrDefault(itm => itm.PartType3 == partLargeType[2]); - if (partObj != null) - { - packingDetail.PartCode3 = partObj.PartCode; - } - } - //第四个零件 - if (partLargeType.Length >= 4) - { - var partObj = billObj.BillM110Parts.FirstOrDefault(itm => itm.PartType3 == partLargeType[3]); - if (partObj != null) - { - packingDetail.PartCode4 = partObj.PartCode; - } - } - packingDetail.SN = sn.ToString(); - packingMain.Details.Add(packingDetail); - sn++; - } - return packingMain; - } + // var tempLst = curPageLst.Where(itm => string.IsNullOrEmpty(itm.VIN) == false).OrderBy(itm => itm.OnlineTime).ThenBy(itm => itm.HostSN).ToList(); + // if (tempLst.Count > 0) + // { + // packingMain.BeginVin = tempLst[0].VIN; + // packingMain.EndVin = tempLst[tempLst.Count - 1].VIN; + // packingMain.BeginHostSN = tempLst[0].HostSN.ToString(); + // packingMain.EndHostSN = tempLst[tempLst.Count - 1].HostSN.ToString(); + // } + // packingMain.MinOnlineTime = tempLst.Min(itm => itm.OnlineTime); //本单据最早的上线时间 + // //明细 + // int sn = 1; + // foreach (BillM110 billObj in curPageLst) + // { + // MenBanPackingRec packingDetail = new MenBanPackingRec(); + // packingDetail.SetId(GuidGenerator.Create()); + // packingDetail.M100BillId = billObj.Id; + // packingDetail.KNR = billObj.KNR; + // packingDetail.VIN = billObj.VIN; + // packingDetail.HostSN = billObj.HostSN?.ToString(); + // if (billObj.VIN == null) + // { + // packingDetail.VIN += "*断号*"; + // } + // //第一个零件 + // if (partLargeType.Length >= 1) + // { + // var partObj = billObj.BillM110Parts.FirstOrDefault(itm => itm.PartType3 == partLargeType[0]); + // if (partObj != null) + // { + // packingDetail.PartCode1 = partObj.PartCode; + // } + // } + // //第二个零件 + // if (partLargeType.Length >= 2) + // { + // var partObj = billObj.BillM110Parts.FirstOrDefault(itm => itm.PartType3 == partLargeType[1]); + // if (partObj != null) + // { + // packingDetail.PartCode2 = partObj.PartCode; + // } + // } + // //第三个零件 + // if (partLargeType.Length >= 3) + // { + // var partObj = billObj.BillM110Parts.FirstOrDefault(itm => itm.PartType3 == partLargeType[2]); + // if (partObj != null) + // { + // packingDetail.PartCode3 = partObj.PartCode; + // } + // } + // //第四个零件 + // if (partLargeType.Length >= 4) + // { + // var partObj = billObj.BillM110Parts.FirstOrDefault(itm => itm.PartType3 == partLargeType[3]); + // if (partObj != null) + // { + // packingDetail.PartCode4 = partObj.PartCode; + // } + // } + // packingDetail.SN = sn.ToString(); + // packingMain.Details.Add(packingDetail); + // sn++; + // } + // return packingMain; + //} /// /// 上箱位号加前缀 diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/WY.NewJit.Application.xml b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/WY.NewJit.Application.xml index eaa1594..b95e117 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/WY.NewJit.Application.xml +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/WY.NewJit.Application.xml @@ -1045,15 +1045,15 @@ - + - 打印左侧或右侧门板 + 将M100转换成MenBanPackingList主子表 - 报表分类,dui + 报表分类,对应DicItemSort4 零件大类字典项 @@ -1410,19 +1410,6 @@ - - - 打印左侧或右侧门板 - - - - - - - - - - 根据筛选条件获取分页实体列表 diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/Extends/PaiGe/MenBanReports/MenBanPackingList.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/Extends/PaiGe/MenBanReports/MenBanPackingList.cs index 746dabb..6aa4fde 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/Extends/PaiGe/MenBanReports/MenBanPackingList.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/Extends/PaiGe/MenBanReports/MenBanPackingList.cs @@ -30,6 +30,10 @@ namespace WY.NewJit.Extends /// public string VehicleModel { get; set; } + /// + /// 报表显示车型 + /// + public string VehicleModel_Disp { get; set; } /// /// 供应商厂家代码 diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/Extends/PaiGe/MenBanReports/MenBanPackingRec.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/Extends/PaiGe/MenBanReports/MenBanPackingRec.cs index 06e74af..21d2c85 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/Extends/PaiGe/MenBanReports/MenBanPackingRec.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/Extends/PaiGe/MenBanReports/MenBanPackingRec.cs @@ -64,7 +64,15 @@ namespace WY.NewJit.Extends /// public virtual string SN { get; set; } + /// + /// 扫描零件号,供发运使用 + /// + public string ScanPartCode { get; set; } + /// + /// 备注 + /// + public string Remark { get; set; } public void SetId(Guid id) { From a5a9bdc002c0bde27fed59155b4f42778c8a586e Mon Sep 17 00:00:00 2001 From: me Date: Thu, 7 Aug 2025 09:14:58 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E6=AC=A1=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E6=8A=A5=E8=A1=A8=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WebApplicationGridJJReport.sln | 25 + .../Common/ReportHelper.cs | 397 +++ .../Handlers/Handler1.ashx | 1 + .../Handlers/Handler1.ashx.cs | 94 + .../Properties/AssemblyInfo.cs | 35 + .../Web.Debug.config | 31 + .../Web.Release.config | 32 + .../WebApplicationGridJJReport/Web.config | 17 + .../WebApplicationGridJJReport.csproj | 140 + .../WebApplicationGridJJReport.csproj.user | 38 + .../appcode/PostParam.cs | 2959 +++++++++++++++++ .../appcode/ReportGenerator.cs | 202 ++ .../appcode/ServerUtility.cs | 336 ++ .../common_code/DataTextProvider.cs | 517 +++ .../common_code/DbReportData.cs | 194 ++ .../common_code/ReportData.cs | 239 ++ .../WebApplicationGridJJReport/grf/1.grf | 1 + .../WebApplicationGridJJReport/grf/2.grf | 1 + .../WebApplicationGridJJReport/grf/3.grf | 1 + .../WebApplicationGridJJReport/grf/4.grf | 1 + .../WebApplicationGridJJReport/grf/5.grf | 1 + .../WebApplicationGridJJReport/grf/6.grf | 1 + .../WebApplicationGridJJReport/grf/menban.grf | 1 + .../grf/zhuhuban.grf | 1 + .../packages.config | 4 + 25 files changed, 5269 insertions(+) create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport.sln create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Common/ReportHelper.cs create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Handlers/Handler1.ashx create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Handlers/Handler1.ashx.cs create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Properties/AssemblyInfo.cs create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Web.Debug.config create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Web.Release.config create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Web.config create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/WebApplicationGridJJReport.csproj create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/WebApplicationGridJJReport.csproj.user create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/appcode/PostParam.cs create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/appcode/ReportGenerator.cs create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/appcode/ServerUtility.cs create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/common_code/DataTextProvider.cs create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/common_code/DbReportData.cs create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/common_code/ReportData.cs create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/1.grf create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/2.grf create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/3.grf create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/4.grf create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/5.grf create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/6.grf create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/menban.grf create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/zhuhuban.grf create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/packages.config diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport.sln b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport.sln new file mode 100644 index 0000000..fa513be --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31515.178 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebApplicationGridJJReport", "WebApplicationGridJJReport\WebApplicationGridJJReport.csproj", "{BF0F3ED4-41A8-4AD4-9C8E-EE7112151620}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BF0F3ED4-41A8-4AD4-9C8E-EE7112151620}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BF0F3ED4-41A8-4AD4-9C8E-EE7112151620}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BF0F3ED4-41A8-4AD4-9C8E-EE7112151620}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BF0F3ED4-41A8-4AD4-9C8E-EE7112151620}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {94C38E90-2D92-4F48-A923-4ECF913D03BF} + EndGlobalSection +EndGlobal diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Common/ReportHelper.cs b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Common/ReportHelper.cs new file mode 100644 index 0000000..7e3a100 --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Common/ReportHelper.cs @@ -0,0 +1,397 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Diagnostics; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.ServiceModel.Dispatcher; +using System.Text; +using System.Web; +//using CK.SCP.Controller; +//using CK.SCP.Models.ScpEntity; +//using CK.SCP.Utils; + +namespace SCP.Common +{ + + public enum PrintType + { + BARCODE_CUSTOM=110, + BARCODE = 101, + ASN = 102, + ARRIVE = 103, + CUSTOM_PAGE = 104, + ASN_PALLET =107, + PALLET=105, + SmallBARCODE = 106, + } + public class TextProvider + { + public static string BuildByRequest(HttpRequest p_request) + { + string text = string.Empty; + if (p_request.Form["dataname"]!=null && !string.IsNullOrEmpty(p_request.Form["dataname"])) + { + text = p_request.Form["dataname"]; + } + else + { + //string name = p_request.QueryString["data"]; + //text = JSONReportData.FromDataSet(GetData(name, p_request)); + } + return text; + } + + // private static DataSet GetData(string p_name, HttpRequest p_request) + // { + // DataSet ds = new DataSet(); + // switch (int.Parse(p_name)) + // { + // case (int)PrintType.ASN: + // ds = GET_ASN(p_request); + // break; + // case (int)PrintType.BARCODE: + // ds = GET_TS_BAR(p_request); + // break; + // case (int)PrintType.BARCODE_CUSTOM: + // ds = GET_TS_BAR_CUSTOM(p_request); + // break; + // case (int)PrintType.ARRIVE: + // ds = GET_ARRIVE(p_request); + // break; + // case (int)PrintType.CUSTOM_PAGE: + // ds =GET_CUSTOM_PAGE(p_request); + // break; + // case (int)PrintType.ASN_PALLET: + // ds = GET_ASN_PALLET(p_request); + // break; + // case (int)PrintType.PALLET: + // ds = GET_TB_PALLETS(p_request); + // break; + // case (int)PrintType.SmallBARCODE: + // ds = GET_TS_BAR_Small(p_request); + // break; + // } + // return ds; + // } + ///// + // /// 获取发货单(带托盘明细的发货单) + // /// + // /// + // /// + // private static DataSet GET_ASN_PALLET(HttpRequest p_request) + // { + // DataSet ds = new DataSet(); + // if (!string.IsNullOrEmpty(p_request["AsnBillNum"])) + // { + // var AskBillNum = p_request["AsnBillNum"].ToString(); + // ds = SCP_ASN_CONTROLLER.ASN_PALLET_REPORT(AskBillNum); + // } + // return ds; + // } + // private static DataSet GET_ASN(HttpRequest p_request) + // { + // DataSet ds = new DataSet(); + // if (!string.IsNullOrEmpty(p_request["AsnBillNum"])) + // { + // var AskBillNum = p_request["AsnBillNum"].ToString(); + // ds=SCP_ASN_CONTROLLER.ASN_REPORT(AskBillNum); + // } + // return ds; + // } + ///// + // /// 获取托盘 + // /// + // /// + // /// + // private static DataSet GET_TB_PALLETS(HttpRequest p_request) + // { + // DataSet ds = new DataSet(); + // TB_PALLETS _pallet = new TB_PALLETS(); + // if (!string.IsNullOrEmpty(p_request["AsnBillNum"])) + // { + // _pallet.AsnBillNum = p_request["AsnBillNum"].ToString(); + // } + // if (!string.IsNullOrEmpty(_pallet.AsnBillNum)) + // { + // SCP_PALLET_CONTROLLER.Get_TB_PALLETS_List(_pallet, (ret) => + // { + // if (ret.State == ReturnStatus.Succeed) + // { + // var _ls = ret.Result.DistinctBy(t=>t.PalletNum); + // var dt = ConvertHelper.ToDataTable(_ls.ToList()); + // ds.Tables.Add(dt); + // } + // }); + // } + // return ds; + // } + // private static DataSet GET_TS_BAR(HttpRequest p_request) + // { + // DataSet ds = new DataSet(); + // TS_BARCODE _bar = new TS_BARCODE(); + // if (!string.IsNullOrEmpty(p_request["AsnBillNum"])) + // { + // _bar.BillNum = p_request["AsnBillNum"].ToString(); + // } + // if (!string.IsNullOrEmpty(p_request["Barcode"])) + // { + // var _ls = p_request["Barcode"].ToString().Split('_').ToList(); + // _bar.UIDList = new List(); + // _ls.ForEach(p => + // { + // if (!string.IsNullOrEmpty(p)) + // { + // _bar.UIDList.Add(long.Parse(p)); + // } + // }); + // } + // if (!string.IsNullOrEmpty(_bar.BillNum) || _bar.UIDList != null) + // { + // SCP_TS_BARCODE_CONTROLLER.Get_TS_BARCODE_List(_bar, (ret) => + // { + // if (ret.State == ReturnStatus.Succeed) + // { + // var _ls = ret.Result.ToList(); + // var _list=_ls.OrderBy(p => p.PartCode).ThenBy(p => p.BarCode).ToList(); + // var dt = ConvertHelper.ToDataTable(_list); + // ds.Tables.Add(dt); + // } + // }); + // } + + // return ds; + // } + + // private static DataSet GET_TS_BAR_Small(HttpRequest p_request) + // { + // DataSet ds = new DataSet(); + // TS_BARCODE_SMALL _bar = new TS_BARCODE_SMALL(); + // if (!string.IsNullOrEmpty(p_request["AsnBillNum"])) + // { + // _bar.BillNum = p_request["AsnBillNum"].ToString(); + // } + // if (!string.IsNullOrEmpty(p_request["Barcode"])) + // { + // var _ls = p_request["Barcode"].ToString().Split('_').ToList(); + // _bar.UIDList = new List(); + // _ls.ForEach(p => + // { + // if (!string.IsNullOrEmpty(p)) + // { + // _bar.UIDList.Add(long.Parse(p)); + // } + // }); + // } + // if (!string.IsNullOrEmpty(_bar.BillNum) || _bar.UIDList != null) + // { + // SCP_TS_BARCODE_CONTROLLER.Get_TS_BARCODE_Small_List(_bar, (ret) => + // { + // if (ret.State == ReturnStatus.Succeed) + // { + // var _ls = ret.Result.ToList(); + // var _list = _ls.OrderBy(p => p.PartCode).ThenBy(p => p.BarCode).ToList(); + // var dt = ConvertHelper.ToDataTable(_list); + // ds.Tables.Add(dt); + // } + // }); + // } + + // return ds; + // } + + // private static DataSet GET_TS_BAR_CUSTOM(HttpRequest p_request) + // { + // DataSet ds = new DataSet(); + // TS_BARCODE_CUSTOM _bar = new TS_BARCODE_CUSTOM(); + // if (!string.IsNullOrEmpty(p_request["AsnBillNum"])) + // { + // _bar.BillNum = p_request["AsnBillNum"].ToString(); + // } + // if (!string.IsNullOrEmpty(p_request["Barcode"])) + // { + // var _ls = p_request["Barcode"].ToString().Split('_').ToList(); + // _bar.UIDList = new List(); + // _ls.ForEach(p => + // { + // if (!string.IsNullOrEmpty(p)) + // { + // _bar.UIDList.Add(long.Parse(p)); + // } + // }); + // } + // if (!string.IsNullOrEmpty(_bar.BillNum) || _bar.UIDList != null) + // { + // SCP_TS_BARCODE_CONTROLLER.Get_TS_BARCODE_CUSTOM_List(_bar, (ret) => + // { + // if (ret.State == ReturnStatus.Succeed) + // { + // var _ls = ret.Result.ToList(); + // var _list = _ls.OrderBy(p => p.PartCode).ThenBy(p => p.BarCode).ToList(); + // var dt = ConvertHelper.ToDataTable(_list); + // ds.Tables.Add(dt); + // } + // }); + // } + + // return ds; + // } + // private static DataSet GET_ARRIVE(HttpRequest p_request) + // { + // DataSet ds = new DataSet(); + // if (!string.IsNullOrEmpty(p_request["AsnBillNum"])) + // { + // var AskBillNum = p_request["AsnBillNum"].ToString(); + // ds = SCP_ASN_CONTROLLER.ARRIVE_REPORT(AskBillNum); + // } + // return ds; + // } + // private static DataSet GET_CUSTOM_PAGE(HttpRequest p_request) + // { + // DataSet ds = new DataSet(); + // V_TB_ASN _asn = new V_TB_ASN(); + // _asn.AsnBillNum= p_request.Params["AsnBillNum"]; + // var dt=SCP_ASN_CONTROLLER.Get_CUSTOM_PAGE_List(_asn); + // ds.Tables.Add(dt); + + // // string _str= ConvertHelper.SerializeObject(_asn); + + + // return ds; + + // } + //class JSONReportData 产生报表需要的 JSON 格式数据 + public class JSONReportData + { + //根据 DataSet 产生提供给报表需要的JSON文本数据 + public static string FromDataSet(DataSet ds) + { + JsonQueryStringConverter jqsc = new JsonQueryStringConverter(); + + StringBuilder sbJSONText = new StringBuilder("{\n"); + foreach (DataTable dt in ds.Tables) + { + //"recordset":[ + sbJSONText.Append('"'); + sbJSONText.Append(dt.TableName); + sbJSONText.Append("\":[\n"); + foreach (DataRow dr in dt.Rows) + { + sbJSONText.Append('{'); + for (int i = 0; i < dt.Columns.Count; ++i) + { + if (!dr.IsNull(i)) + { + //用 ConvertValueToString 转换,这样数字类型才不会加引号 + //如果日期类型也用ConvertValueToString转换,则为 "\/Date(-152438400000+0800)\/" 这样的形式 + string Value; + if (dt.Columns[i].DataType.IsArray) + { + Value = "\"" + Convert.ToBase64String((byte[])dr[i]) + "\""; + } + else if (dt.Columns[i].DataType == typeof(System.DateTime)) + { + Value = "\"" + dr[i].ToString() + "\""; + } + else + { + Value = jqsc.ConvertValueToString(dr[i], dt.Columns[i].DataType); + } + sbJSONText.AppendFormat("\"{0}\":{1},", dt.Columns[i].ColumnName, Value); + } + } + sbJSONText.Remove(sbJSONText.Length - 1, 1); //去掉每笔记录最后一个字段后面的"," + sbJSONText.Append("},\n"); + } + if (dt.Rows.Count > 0) //如果无明细记录,则不要回退 + sbJSONText.Remove(sbJSONText.Length - 2, 1); //去掉最后一条记录后面的"," + sbJSONText.Append("],\n"); + } + sbJSONText.Remove(sbJSONText.Length - 2, 1); //去掉最后一记录集后面的"," + sbJSONText.Append("}"); + + return sbJSONText.ToString(); + } + + //根据 DataTable 产生提供给报表需要的JSON文本数据 + public static string FromDataTable(DataTable dt) + { + DataSet ds = new DataSet(); + ds.Tables.Add(dt); + return FromDataSet(ds); + } + } + + ///////////////////////////////////////////////////////////////////////////////////////////////////////// + //以下枚举指定报表数据的格式类型 + public enum ResponseDataType + { + PlainText, //报表数据为XML或JSON文本,在调试时可以查看报表数据。数据未经压缩,大数据量报表采用此种方式不合适 + ZipBinary, //报表数据为XML或JSON文本经过压缩得到的二进制数据。此种方式数据量最小(约为原始数据的1/10),但用Ajax方式加载报表数据时不能为此种方式 + ZipBase64, //报表数据为将 ZipBinary 方式得到的数据再进行 BASE64 编码的数据。此种方式适合用Ajax方式加载报表数据 + }; + + public class GridReportDataResponse + { + //指定报表的默认数据类型,便于统一定义整个报表系统的数据类型 + //在报表开发调试阶段,通常指定为 ResponseDataType.PlainText, 以便在浏览器中查看响应的源文件时能看到可读的文本数据 + //在项目部署时,通常指定为 ResponseDataType.ZipBinary 或 ResponseDataType.ZipBase64,这样可以极大减少数据量,提供报表响应速度 + public const ResponseDataType DefaultDataType = ResponseDataType.PlainText; //PlainText ZipBinary ZipBase64 + + //将报表XML数据文本输出到HTTP请求 + public static void Response(HttpResponse Response, string DataText, ResponseDataType DataType) + { + //报表XML数据的前后不能附加任何其它数据,否则XML数据将不能成功解析,所以调用ClearContent方法清理网页中前面多余的数据 + Response.ClearContent(); + + if (ResponseDataType.PlainText == DataType) + { + // 把 xml 或 json 文本响应给客户端 + //Response.ContentType = "text/xml"; + Response.ContentType = "text/plain"; + Response.Write(DataText); + } + else + { + //将string数据转换为byte[],以便进行压缩 + System.Text.UTF8Encoding converter = new System.Text.UTF8Encoding(); + byte[] XmlBytes = converter.GetBytes(DataText); + + //在 HTTP 头信息中写入报表数据压缩信息 + Response.AppendHeader("gr_zip_type", "deflate"); //指定压缩方法 + Response.AppendHeader("gr_zip_size", XmlBytes.Length.ToString()); //指定数据的原始长度 + Response.AppendHeader("gr_zip_encode", converter.HeaderName); //指定数据的编码方式 utf-8 utf-16 ... + + // 把压缩后的xml数据发送给客户端 + if (ResponseDataType.ZipBinary == DataType) + { + DeflateStream compressedzipStream = new DeflateStream(Response.OutputStream, CompressionMode.Compress, true); + compressedzipStream.Write(XmlBytes, 0, XmlBytes.Length); + compressedzipStream.Close(); + } + else //ResponseDataType.ZipBase64 + { + MemoryStream memStream = new MemoryStream(); + DeflateStream compressedzipStream = new DeflateStream(memStream, CompressionMode.Compress, true); + compressedzipStream.Write(XmlBytes, 0, XmlBytes.Length); + compressedzipStream.Close(); //这句很重要,这样数据才能全部写入 MemoryStream + + // Read bytes from the stream. + memStream.Seek(0, SeekOrigin.Begin); // Set the position to the beginning of the stream. + int count = (int)memStream.Length; + byte[] byteArray = new byte[count]; + count = memStream.Read(byteArray, 0, count); + + string Base64Text = Convert.ToBase64String(byteArray); + Response.ContentType = "text/plain"; + Response.Write(Base64Text); + } + } + + //报表XML数据的前后不能附加任何其它数据,否则XML数据将不能成功解析,所以调用End方法放弃网页中后面不必要的数据 + Response.End(); + } + } + } +} \ No newline at end of file diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Handlers/Handler1.ashx b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Handlers/Handler1.ashx new file mode 100644 index 0000000..5f0f5d0 --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Handlers/Handler1.ashx @@ -0,0 +1 @@ +<%@ WebHandler Language="C#" CodeBehind="Handler1.ashx.cs" Class="WebApplicationGridJJReport.Handlers.Handler1" %> diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Handlers/Handler1.ashx.cs b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Handlers/Handler1.ashx.cs new file mode 100644 index 0000000..68ca69d --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Handlers/Handler1.ashx.cs @@ -0,0 +1,94 @@ +using GridReport; +using SCP.Common; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using WebApplicationGridJJReport.appcode; + +namespace WebApplicationGridJJReport.Handlers +{ + /// + /// Handler1 的摘要说明 + /// + public class Handler1 : IHttpHandler + { + + public void ProcessRequest(HttpContext context) + { + //取Post参数 + string text = TextProvider.BuildByRequest(context.Request); + if (text.Length > 1 && text[0] == '[' && text[text.Length - 1] == ']') + { + text = text.Substring(1); + text = text.Substring(0, text.Length - 1); + } + + + string reportType = context.Request.QueryString["report"].ToLower(); + if (reportType == "menban") + { + if (string.IsNullOrEmpty(text)) + { + text = PostParam.MenBanVal.Replace("'", "\""); + } + } + else if (reportType == "zhuhuban") + { + if (string.IsNullOrEmpty(text)) + { + text = PostParam.ZhuHuBanVal.Replace("'", "\""); + } + } + else + { + if (string.IsNullOrEmpty(text)) + { + text = PostParam.ZhuHuBanVal.Replace("'", "\""); + } + + } + + ReportGenerator reportGenerator = new ReportGenerator(context); + + //#region 加载子报表 + //if (reportType == "zhuhuban") + //{ + // string[] childReportLst = new string[6] { "1", "2", "3", "4", "5", "6" }; + // foreach (string childReportName in childReportLst) + // { + // reportGenerator.LoadChildReport(childReportName); + // //reportGenerator.LoadReportData(text); + // } + //} + //#endregion + + + reportGenerator.LoadReport(); + reportGenerator.LoadReportData(text); + + string returnFile = context.Request.QueryString["returnfile"]; + if (returnFile == "1") //返回PDF文件流 + { + reportGenerator.Generate(); + + } + else //返回base64字符串 + { + string base64Str = reportGenerator.Generate2(); + + context.Response.Write(base64Str); + context.Response.End(); + + } + } + + public bool IsReusable + { + get + { + return false; + } + } + } +} \ No newline at end of file diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Properties/AssemblyInfo.cs b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..0e5d1c2 --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的常规信息通过下列特性集 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("WebApplicationGridJJReport")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("WebApplicationGridJJReport")] +[assembly: AssemblyCopyright("Copyright © 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +// 对 COM 组件不可见。如果需要 +// 从 COM 访问此程序集中的某个类型,请针对该类型将 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于 typelib 的 ID +[assembly: Guid("bf0f3ed4-41a8-4ad4-9c8e-ee7112151620")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 内部版本号 +// 修订版本 +// +// 可以指定所有值,也可以使用“修订号”和“内部版本号”的默认值, +// 方法是按如下所示使用 "*": +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Web.Debug.config b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Web.Debug.config new file mode 100644 index 0000000..b9a9fde --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Web.Debug.config @@ -0,0 +1,31 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Web.Release.config b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Web.Release.config new file mode 100644 index 0000000..755e745 --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Web.Release.config @@ -0,0 +1,32 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Web.config b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Web.config new file mode 100644 index 0000000..32897a7 --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Web.config @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/WebApplicationGridJJReport.csproj b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/WebApplicationGridJJReport.csproj new file mode 100644 index 0000000..a7c0f59 --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/WebApplicationGridJJReport.csproj @@ -0,0 +1,140 @@ + + + + + Debug + AnyCPU + + + 2.0 + {BF0F3ED4-41A8-4AD4-9C8E-EE7112151620} + {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + WebApplicationGridJJReport + WebApplicationGridJJReport + v4.5.2 + true + + 44356 + + + + + + + + + true + full + false + bin\ + DEBUG;TRACE + prompt + 4 + + + true + pdbonly + true + bin\ + TRACE + prompt + 4 + + + + D:\~LYF\软件安装\闻荫软件安装\SCP(GridJJ_report_project)\SCP\SCP\obj\Debug\Interop.grsvr6Lib.dll + True + + + + + + + + + + + + + + + + + + + + + + + ..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll + + + + + + + + + + + + + + + Handler1.ashx + + + + + + + + Web.config + + + Web.config + + + + + + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + + + + + True + True + 56348 + / + https://localhost:44356/ + False + False + http://192.168.0.140/WebApplicationGridJJReport + False + + + + + + + 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 + + + + + \ No newline at end of file diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/WebApplicationGridJJReport.csproj.user b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/WebApplicationGridJJReport.csproj.user new file mode 100644 index 0000000..8325ddd --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/WebApplicationGridJJReport.csproj.user @@ -0,0 +1,38 @@ + + + + true + + 44356 + + + + + Debug|Any CPU + ProjectFiles + + + + + + /Handlers/Handler1.ashx?report=zhuhuban&returnfile=1 + SpecificPage + True + False + False + False + + + + + + + + + True + False + + + + + \ No newline at end of file diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/appcode/PostParam.cs b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/appcode/PostParam.cs new file mode 100644 index 0000000..94cc6f6 --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/appcode/PostParam.cs @@ -0,0 +1,2959 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; + +namespace WebApplicationGridJJReport.appcode +{ + public static class PostParam + { + // public const string ZhuHuBanVal = @" + //{'masterList_AC':[{'billNum':' 10000000127','billSerialNum':'06','billLocation':null,'providerCode':'0709FAW-VW7XH','partType':'A上C上','capacity':'1','printDate':'2021-12-01 15:53:54','printType':0,'productLine':'08','beginVin':'LFV3A24K0M3117267','endVin':'LFV3A24K0M3117267','details':null}],'detailList_AC':[{'billNum':' 10000000127','knr':' 21325574111001','vin':'LFV3A24K0M3117267','hostSN':383,'partCode':'80D867233CYM5','partCode2':'','sn':1},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':2},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':3},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':4},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':5},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':6},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':7},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':8},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':9},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':10},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':11},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':12},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':13},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':14},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':15},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':16},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':17},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':18},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':19},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':20},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':21},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':22},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':23},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':24}],'masterList_AA':[{'billNum':' 10000000128','billSerialNum':'06','billLocation':'左','providerCode':'0709FAW-VW7XH','partType':'A柱下A中','capacity':'1','printDate':'2021-12-01 15:53:54','printType':0,'productLine':'08','beginVin':'LFV3A24K0M3117267','endVin':'LFV3A24K0M3117267','details':null},{'billNum':' 10000000129','billSerialNum':'06','billLocation':'右','providerCode':'0709FAW-VW7XH','partType':'A柱下A中','capacity':'1','printDate':'2021-12-01 15:53:54','printType':0,'productLine':'08','beginVin':'LFV3A24K0M3117267','endVin':'LFV3A24K0M3117267','details':null}],'detailList_AA':[{'billNum':' 10000000128','knr':' 21325574111001','vin':'LFV3A24K0M3117267','hostSN':383,'partCode':'80D867271DS2','partCode2':'80D868203DS2','sn':1},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':2},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':3},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':4},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':5},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':6},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':7},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':8},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':9},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':10},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':11},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':12},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':13},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':14},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':15},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':16},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':17},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':18},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':19},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':20},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':21},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':22},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':23},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':24},{'billNum':' 10000000129','knr':' 21325574111001','vin':'LFV3A24K0M3117267','hostSN':383,'partCode':'80D867272ADS2','partCode2':'80D868204DS2','sn':1},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':2},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':3},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':4},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':5},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':6},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':7},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':8},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':9},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':10},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':11},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':12},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':13},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':14},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':15},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':16},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':17},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':18},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':19},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':20},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':21},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':22},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':23},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':24}],'masterList_BS':[{'billNum':' 10000000130','billSerialNum':'06','billLocation':'左','providerCode':'0709FAW-VW7XH','partType':'B柱上','capacity':'1','printDate':'2021-12-01 15:53:54','printType':0,'productLine':'08','beginVin':'LFV3A24K0M3117267','endVin':'LFV3A24K0M3117267','details':null},{'billNum':' 10000000131','billSerialNum':'06','billLocation':'右','providerCode':'0709FAW-VW7XH','partType':'B柱上','capacity':'1','printDate':'2021-12-01 15:53:54','printType':0,'productLine':'08','beginVin':'LFV3A24K0M3117267','endVin':'LFV3A24K0M3117267','details':null}],'detailList_BS':[{'billNum':' 10000000130','knr':' 21325574111001','vin':'LFV3A24K0M3117267','hostSN':383,'partCode':'','partCode2':null,'sn':1},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':2},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':3},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':4},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':5},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':6},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':7},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':8},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':9},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':10},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':11},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':12},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':13},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':14},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':15},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':16},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':17},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':18},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':19},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':20},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':21},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':22},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':23},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':24},{'billNum':' 10000000131','knr':' 21325574111001','vin':'LFV3A24K0M3117267','hostSN':383,'partCode':'80D867244AYW5','partCode2':null,'sn':1},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':2},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':3},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':4},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':5},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':6},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':7},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':8},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':9},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':10},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':11},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':12},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':13},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':14},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':15},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':16},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':17},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':18},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':19},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':20},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':21},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':22},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':23},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':24}],'masterList_BX':[{'billNum':' 10000000132','billSerialNum':'06','billLocation':'左','providerCode':'0709FAW-VW7XH','partType':'B柱下','capacity':'1','printDate':'2021-12-01 15:53:54','printType':0,'productLine':'08','beginVin':'LFV3A24K0M3117267','endVin':'LFV3A24K0M3117267','details':null},{'billNum':' 10000000133','billSerialNum':'06','billLocation':'右','providerCode':'0709FAW-VW7XH','partType':'B柱下','capacity':'1','printDate':'2021-12-01 15:53:54','printType':0,'productLine':'08','beginVin':'LFV3A24K0M3117267','endVin':'LFV3A24K0M3117267','details':null}],'detailList_BX':[{'billNum':' 10000000132','knr':' 21325574111001','vin':'LFV3A24K0M3117267','hostSN':383,'partCode':'80D8672394PK','partCode2':null,'sn':1},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':2},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':3},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':4},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':5},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':6},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':7},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':8},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':9},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':10},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':11},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':12},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':13},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':14},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':15},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':16},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':17},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':18},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':19},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':20},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':21},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':22},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':23},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':24},{'billNum':' 10000000133','knr':' 21325574111001','vin':'LFV3A24K0M3117267','hostSN':383,'partCode':'80D867240DS2','partCode2':null,'sn':1},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':2},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':3},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':4},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':5},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':6},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':7},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':8},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':9},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':10},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':11},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':12},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':13},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':14},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':15},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':16},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':17},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':18},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':19},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':20},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':21},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':22},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':23},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':24}],'masterList_D':[{'billNum':' 10000000134','billSerialNum':'11','billLocation':null,'providerCode':'0709FAW-VW7XH','partType':'D柱','capacity':'1','printDate':'2021-12-01 15:53:54','printType':0,'productLine':'08','beginVin':'LFV3A24K0M3117267','endVin':'LFV3A24K0M3117267','details':null},{'billNum':' 10000000135','billSerialNum':'12','billLocation':null,'providerCode':'0709FAW-VW7XH','partType':'D柱','capacity':'0','printDate':'2021-12-01 15:53:54','printType':0,'productLine':'08','beginVin':null,'endVin':null,'details':null}],'detailList_D':[{'billNum':' 10000000134','knr':' 21325574111001','vin':'LFV3A24K0M3117267','hostSN':383,'partCode':'80D867245ACE3','partCode2':null,'sn':1},{'billNum':' 10000000134','knr':' 21325574111001','vin':'LFV3A24K0M3117267','hostSN':383,'partCode':'80G8672464PK','partCode2':null,'sn':2},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':3},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':4},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':5},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':6},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':7},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':8},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':9},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':10},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':11},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':12},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':13},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':14},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':15},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':16},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':17},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':18},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':19},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':20},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':21},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':22},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':23},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':24},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':1},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':2},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':3},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':4},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':5},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':6},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':7},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':8},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':9},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':10},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':11},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':12},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':13},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':14},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':15},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':16},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':17},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':18},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':19},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':20},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':21},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':22},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':23},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':24}],'masterList_HL':[{'billNum':' 10000000136','billSerialNum':'06','billLocation':'左','providerCode':'0709FAW-VW7XH','partType':'后轮上装饰板','capacity':'1','printDate':'2021-12-01 15:53:54','printType':0,'productLine':'08','beginVin':'LFV3A24K0M3117267','endVin':'LFV3A24K0M3117267','details':null},{'billNum':' 10000000137','billSerialNum':'06','billLocation':'右','providerCode':'0709FAW-VW7XH','partType':'后轮上装饰板','capacity':'1','printDate':'2021-12-01 15:53:54','printType':0,'productLine':'08','beginVin':'LFV3A24K0M3117267','endVin':'LFV3A24K0M3117267','details':null}],'detailList_HL':[{'billNum':' 10000000136','knr':' 21325574111001','vin':'LFV3A24K0M3117267','hostSN':383,'partCode':'80D867767DS2','partCode2':'','sn':1},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':2},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':3},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':4},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':5},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':6},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':7},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':8},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':9},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':10},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':11},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':12},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':13},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':14},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':15},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':16},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':17},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':18},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':19},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':20},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':21},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':22},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':23},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':24},{'billNum':' 10000000137','knr':' 21325574111001','vin':'LFV3A24K0M3117267','hostSN':383,'partCode':'80D867768DS2','partCode2':'','sn':1},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':2},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':3},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':4},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':5},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':6},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':7},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':8},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':9},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':10},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':11},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':12},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':13},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':14},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':15},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':16},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':17},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':18},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':19},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':20},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':21},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':22},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':23},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':24}]} + //"; + + public const string ZhuHuBanVal = @" +{ + 'item': { + 'masterList_AC': [ + { + 'id': 'edc713c4-7b6c-abeb-90d1-3a00f2e50a6f', + 'billNum': '10000001556', + 'billSerialNum': '15', + 'billLocation': null, + 'providerCode': '0709FAW-VW7XH', + 'partType': 'A上C上', + 'capacity': '24', + 'printDate': '2021-12-22 13:58:27', + 'printType': 0, + 'productLine': '08', + 'beginVin': 'LFV3B2FYXM3492369', + 'endVin': 'LFV3B2FY5M3492392', + 'details': null, + 'beginVin1': null, + 'endVin1': null + } + ], + 'detailList_AC': [ + { + 'billNum': '10000001556', + 'knr': '2146496140', + 'vin': '492369', + 'hostSN': 81625, + 'partCode': '80D867233C1OJ', + 'partCode2': '80D8672871OJ', + 'sn': 1 + }, + { + 'billNum': '10000001556', + 'knr': '2146496195', + 'vin': '492370', + 'hostSN': 81626, + 'partCode': '80D867233B1OJ', + 'partCode2': '80D8672871OJ', + 'sn': 2 + }, + { + 'billNum': '10000001556', + 'knr': '2146496249', + 'vin': '492371', + 'hostSN': 81627, + 'partCode': '80D867233B1OJ', + 'partCode2': '80D8672871OJ', + 'sn': 3 + }, + { + 'billNum': '10000001556', + 'knr': '2138196881', + 'vin': '492372', + 'hostSN': 81628, + 'partCode': '80D867233BYW5', + 'partCode2': '80G867287YW5', + 'sn': 4 + }, + { + 'billNum': '10000001556', + 'knr': '2146496362', + 'vin': '492373', + 'hostSN': 81629, + 'partCode': '80D867233B1OJ', + 'partCode2': '80D8672871OJ', + 'sn': 5 + }, + { + 'billNum': '10000001556', + 'knr': '2146496409', + 'vin': '492374', + 'hostSN': 81630, + 'partCode': '80D867233B1OJ', + 'partCode2': '80D8672871OJ', + 'sn': 6 + }, + { + 'billNum': '10000001556', + 'knr': '2146496225', + 'vin': '492375', + 'hostSN': 81631, + 'partCode': '80D867233B1OJ', + 'partCode2': '80D8672871OJ', + 'sn': 7 + }, + { + 'billNum': '10000001556', + 'knr': '2146496218', + 'vin': '492376', + 'hostSN': 81632, + 'partCode': '80D867233B1OJ', + 'partCode2': '80D8672871OJ', + 'sn': 8 + }, + { + 'billNum': '10000001556', + 'knr': '2146496188', + 'vin': '492377', + 'hostSN': 81633, + 'partCode': '80D867233B1OJ', + 'partCode2': '80D8672871OJ', + 'sn': 9 + }, + { + 'billNum': '10000001556', + 'knr': '2146496232', + 'vin': '492378', + 'hostSN': 81634, + 'partCode': '80D867233B1OJ', + 'partCode2': '80D8672871OJ', + 'sn': 10 + }, + { + 'billNum': '10000001556', + 'knr': '2146496256', + 'vin': '492379', + 'hostSN': 81635, + 'partCode': '80D867233C1OJ', + 'partCode2': '80D8672871OJ', + 'sn': 11 + }, + { + 'billNum': '10000001556', + 'knr': '2146496447', + 'vin': '492380', + 'hostSN': 81636, + 'partCode': '80D867233B1OJ', + 'partCode2': '80D8672871OJ', + 'sn': 12 + }, + { + 'billNum': '10000001556', + 'knr': '2146496485', + 'vin': '492381', + 'hostSN': 81637, + 'partCode': '80D867233C1OJ', + 'partCode2': '80D8672871OJ', + 'sn': 13 + }, + { + 'billNum': '10000001556', + 'knr': '2146496324', + 'vin': '492382', + 'hostSN': 81638, + 'partCode': '80D867233B1OJ', + 'partCode2': '80D8672871OJ', + 'sn': 14 + }, + { + 'billNum': '10000001556', + 'knr': '2146496201', + 'vin': '492383', + 'hostSN': 81639, + 'partCode': '80D867233C1OJ', + 'partCode2': '80D8672871OJ', + 'sn': 15 + }, + { + 'billNum': '10000001556', + 'knr': '2138196898', + 'vin': '492384', + 'hostSN': 81640, + 'partCode': '80D867233BYW5', + 'partCode2': '80G867287YW5', + 'sn': 16 + }, + { + 'billNum': '10000001556', + 'knr': '2146496515', + 'vin': '492385', + 'hostSN': 81641, + 'partCode': '80D867233C1OJ', + 'partCode2': '80D8672871OJ', + 'sn': 17 + }, + { + 'billNum': '10000001556', + 'knr': '2146496263', + 'vin': '492386', + 'hostSN': 81642, + 'partCode': '80D867233B1OJ', + 'partCode2': '80D8672871OJ', + 'sn': 18 + }, + { + 'billNum': '10000001556', + 'knr': '2146496331', + 'vin': '492387', + 'hostSN': 81643, + 'partCode': '80D867233B1OJ', + 'partCode2': '80D8672871OJ', + 'sn': 19 + }, + { + 'billNum': '10000001556', + 'knr': '2138196904', + 'vin': '492388', + 'hostSN': 81644, + 'partCode': '80D867233BYW5', + 'partCode2': '80G867287YW5', + 'sn': 20 + }, + { + 'billNum': '10000001556', + 'knr': '2146496270', + 'vin': '492389', + 'hostSN': 81645, + 'partCode': '80D867233B1OJ', + 'partCode2': '80D8672871OJ', + 'sn': 21 + }, + { + 'billNum': '10000001556', + 'knr': '2146496294', + 'vin': '492390', + 'hostSN': 81646, + 'partCode': '80D867233B1OJ', + 'partCode2': '80D8672871OJ', + 'sn': 22 + }, + { + 'billNum': '10000001556', + 'knr': '2146496539', + 'vin': '492391', + 'hostSN': 81647, + 'partCode': '80D867233B1OJ', + 'partCode2': '80D8672871OJ', + 'sn': 23 + }, + { + 'billNum': '10000001556', + 'knr': '2146496300', + 'vin': '492392', + 'hostSN': 81648, + 'partCode': '80D867233B1OJ', + 'partCode2': '80D8672871OJ', + 'sn': 24 + } + ], + 'masterList_AA': [ + { + 'id': 'c368b4c8-8ef7-73b1-4edb-3a00f2e50fbd', + 'billNum': '10000001557', + 'billSerialNum': '15', + 'billLocation': '左', + 'providerCode': '0709FAW-VW7XH', + 'partType': 'A柱下A中', + 'capacity': '24', + 'printDate': '2021-12-22 13:58:27', + 'printType': 0, + 'productLine': '08', + 'beginVin': 'LFV3B2FYXM3492369', + 'endVin': 'LFV3B2FY5M3492392', + 'details': null, + 'beginVin1': null, + 'endVin1': null + }, + { + 'id': '8f087abd-7641-5414-c7ff-3a00f2e5141a', + 'billNum': '10000001558', + 'billSerialNum': '15', + 'billLocation': '右', + 'providerCode': '0709FAW-VW7XH', + 'partType': 'A柱下A中', + 'capacity': '24', + 'printDate': '2021-12-22 13:58:27', + 'printType': 0, + 'productLine': '08', + 'beginVin': 'LFV3B2FYXM3492369', + 'endVin': 'LFV3B2FY5M3492392', + 'details': null, + 'beginVin1': null, + 'endVin1': null + } + ], + 'detailList_AA': [ + { + 'billNum': '10000001557', + 'knr': '2146496140', + 'vin': '492369', + 'hostSN': 81625, + 'partCode': '80D8672714PK', + 'partCode2': '80D8682034PK', + 'sn': 1 + }, + { + 'billNum': '10000001557', + 'knr': '2146496195', + 'vin': '492370', + 'hostSN': 81626, + 'partCode': '80D8672714PK', + 'partCode2': '80D8682034PK', + 'sn': 2 + }, + { + 'billNum': '10000001557', + 'knr': '2146496249', + 'vin': '492371', + 'hostSN': 81627, + 'partCode': '80D8672714PK', + 'partCode2': '80D8682034PK', + 'sn': 3 + }, + { + 'billNum': '10000001557', + 'knr': '2138196881', + 'vin': '492372', + 'hostSN': 81628, + 'partCode': '80D8672714PK', + 'partCode2': '80D8682034PK', + 'sn': 4 + }, + { + 'billNum': '10000001557', + 'knr': '2146496362', + 'vin': '492373', + 'hostSN': 81629, + 'partCode': '80D8672714PK', + 'partCode2': '80D8682034PK', + 'sn': 5 + }, + { + 'billNum': '10000001557', + 'knr': '2146496409', + 'vin': '492374', + 'hostSN': 81630, + 'partCode': '80D8672714PK', + 'partCode2': '80D8682034PK', + 'sn': 6 + }, + { + 'billNum': '10000001557', + 'knr': '2146496225', + 'vin': '492375', + 'hostSN': 81631, + 'partCode': '80D8672714PK', + 'partCode2': '80D8682034PK', + 'sn': 7 + }, + { + 'billNum': '10000001557', + 'knr': '2146496218', + 'vin': '492376', + 'hostSN': 81632, + 'partCode': '80D8672714PK', + 'partCode2': '80D8682034PK', + 'sn': 8 + }, + { + 'billNum': '10000001557', + 'knr': '2146496188', + 'vin': '492377', + 'hostSN': 81633, + 'partCode': '80D8672714PK', + 'partCode2': '80D8682034PK', + 'sn': 9 + }, + { + 'billNum': '10000001557', + 'knr': '2146496232', + 'vin': '492378', + 'hostSN': 81634, + 'partCode': '80D8672714PK', + 'partCode2': '80D8682034PK', + 'sn': 10 + }, + { + 'billNum': '10000001557', + 'knr': '2146496256', + 'vin': '492379', + 'hostSN': 81635, + 'partCode': '80D8672714PK', + 'partCode2': '80D8682034PK', + 'sn': 11 + }, + { + 'billNum': '10000001557', + 'knr': '2146496447', + 'vin': '492380', + 'hostSN': 81636, + 'partCode': '80D8672714PK', + 'partCode2': '80D8682034PK', + 'sn': 12 + }, + { + 'billNum': '10000001557', + 'knr': '2146496485', + 'vin': '492381', + 'hostSN': 81637, + 'partCode': '80D8672714PK', + 'partCode2': '80D8682034PK', + 'sn': 13 + }, + { + 'billNum': '10000001557', + 'knr': '2146496324', + 'vin': '492382', + 'hostSN': 81638, + 'partCode': '80D8672714PK', + 'partCode2': '80D8682034PK', + 'sn': 14 + }, + { + 'billNum': '10000001557', + 'knr': '2146496201', + 'vin': '492383', + 'hostSN': 81639, + 'partCode': '80D8672714PK', + 'partCode2': '80D8682034PK', + 'sn': 15 + }, + { + 'billNum': '10000001557', + 'knr': '2138196898', + 'vin': '492384', + 'hostSN': 81640, + 'partCode': '80D8672714PK', + 'partCode2': '80D8682034PK', + 'sn': 16 + }, + { + 'billNum': '10000001557', + 'knr': '2146496515', + 'vin': '492385', + 'hostSN': 81641, + 'partCode': '80D8672714PK', + 'partCode2': '80D8682034PK', + 'sn': 17 + }, + { + 'billNum': '10000001557', + 'knr': '2146496263', + 'vin': '492386', + 'hostSN': 81642, + 'partCode': '80D8672714PK', + 'partCode2': '80D8682034PK', + 'sn': 18 + }, + { + 'billNum': '10000001557', + 'knr': '2146496331', + 'vin': '492387', + 'hostSN': 81643, + 'partCode': '80D8672714PK', + 'partCode2': '80D8682034PK', + 'sn': 19 + }, + { + 'billNum': '10000001557', + 'knr': '2138196904', + 'vin': '492388', + 'hostSN': 81644, + 'partCode': '80D8672714PK', + 'partCode2': '80D8682034PK', + 'sn': 20 + }, + { + 'billNum': '10000001557', + 'knr': '2146496270', + 'vin': '492389', + 'hostSN': 81645, + 'partCode': '80D8672714PK', + 'partCode2': '80D8682034PK', + 'sn': 21 + }, + { + 'billNum': '10000001557', + 'knr': '2146496294', + 'vin': '492390', + 'hostSN': 81646, + 'partCode': '80D8672714PK', + 'partCode2': '80D8682034PK', + 'sn': 22 + }, + { + 'billNum': '10000001557', + 'knr': '2146496539', + 'vin': '492391', + 'hostSN': 81647, + 'partCode': '80D8672714PK', + 'partCode2': '80D8682034PK', + 'sn': 23 + }, + { + 'billNum': '10000001557', + 'knr': '2146496300', + 'vin': '492392', + 'hostSN': 81648, + 'partCode': '80D8672714PK', + 'partCode2': '80D8682034PK', + 'sn': 24 + }, + { + 'billNum': '10000001558', + 'knr': '2146496140', + 'vin': '492369', + 'hostSN': 81625, + 'partCode': '80D867272A4PK', + 'partCode2': '80D8682044PK', + 'sn': 1 + }, + { + 'billNum': '10000001558', + 'knr': '2146496195', + 'vin': '492370', + 'hostSN': 81626, + 'partCode': '80D867272A4PK', + 'partCode2': '80D8682044PK', + 'sn': 2 + }, + { + 'billNum': '10000001558', + 'knr': '2146496249', + 'vin': '492371', + 'hostSN': 81627, + 'partCode': '80D867272A4PK', + 'partCode2': '80D8682044PK', + 'sn': 3 + }, + { + 'billNum': '10000001558', + 'knr': '2138196881', + 'vin': '492372', + 'hostSN': 81628, + 'partCode': '80D867272A4PK', + 'partCode2': '80D8682044PK', + 'sn': 4 + }, + { + 'billNum': '10000001558', + 'knr': '2146496362', + 'vin': '492373', + 'hostSN': 81629, + 'partCode': '80D867272A4PK', + 'partCode2': '80D8682044PK', + 'sn': 5 + }, + { + 'billNum': '10000001558', + 'knr': '2146496409', + 'vin': '492374', + 'hostSN': 81630, + 'partCode': '80D867272A4PK', + 'partCode2': '80D8682044PK', + 'sn': 6 + }, + { + 'billNum': '10000001558', + 'knr': '2146496225', + 'vin': '492375', + 'hostSN': 81631, + 'partCode': '80D867272A4PK', + 'partCode2': '80D8682044PK', + 'sn': 7 + }, + { + 'billNum': '10000001558', + 'knr': '2146496218', + 'vin': '492376', + 'hostSN': 81632, + 'partCode': '80D867272A4PK', + 'partCode2': '80D8682044PK', + 'sn': 8 + }, + { + 'billNum': '10000001558', + 'knr': '2146496188', + 'vin': '492377', + 'hostSN': 81633, + 'partCode': '80D867272A4PK', + 'partCode2': '80D8682044PK', + 'sn': 9 + }, + { + 'billNum': '10000001558', + 'knr': '2146496232', + 'vin': '492378', + 'hostSN': 81634, + 'partCode': '80D867272A4PK', + 'partCode2': '80D8682044PK', + 'sn': 10 + }, + { + 'billNum': '10000001558', + 'knr': '2146496256', + 'vin': '492379', + 'hostSN': 81635, + 'partCode': '80D867272A4PK', + 'partCode2': '80D8682044PK', + 'sn': 11 + }, + { + 'billNum': '10000001558', + 'knr': '2146496447', + 'vin': '492380', + 'hostSN': 81636, + 'partCode': '80D867272A4PK', + 'partCode2': '80D8682044PK', + 'sn': 12 + }, + { + 'billNum': '10000001558', + 'knr': '2146496485', + 'vin': '492381', + 'hostSN': 81637, + 'partCode': '80D867272A4PK', + 'partCode2': '80D8682044PK', + 'sn': 13 + }, + { + 'billNum': '10000001558', + 'knr': '2146496324', + 'vin': '492382', + 'hostSN': 81638, + 'partCode': '80D867272A4PK', + 'partCode2': '80D8682044PK', + 'sn': 14 + }, + { + 'billNum': '10000001558', + 'knr': '2146496201', + 'vin': '492383', + 'hostSN': 81639, + 'partCode': '80D867272A4PK', + 'partCode2': '80D8682044PK', + 'sn': 15 + }, + { + 'billNum': '10000001558', + 'knr': '2138196898', + 'vin': '492384', + 'hostSN': 81640, + 'partCode': '80D867272A4PK', + 'partCode2': '80D8682044PK', + 'sn': 16 + }, + { + 'billNum': '10000001558', + 'knr': '2146496515', + 'vin': '492385', + 'hostSN': 81641, + 'partCode': '80D867272A4PK', + 'partCode2': '80D8682044PK', + 'sn': 17 + }, + { + 'billNum': '10000001558', + 'knr': '2146496263', + 'vin': '492386', + 'hostSN': 81642, + 'partCode': '80D867272A4PK', + 'partCode2': '80D8682044PK', + 'sn': 18 + }, + { + 'billNum': '10000001558', + 'knr': '2146496331', + 'vin': '492387', + 'hostSN': 81643, + 'partCode': '80D867272A4PK', + 'partCode2': '80D8682044PK', + 'sn': 19 + }, + { + 'billNum': '10000001558', + 'knr': '2138196904', + 'vin': '492388', + 'hostSN': 81644, + 'partCode': '80D867272A4PK', + 'partCode2': '80D8682044PK', + 'sn': 20 + }, + { + 'billNum': '10000001558', + 'knr': '2146496270', + 'vin': '492389', + 'hostSN': 81645, + 'partCode': '80D867272A4PK', + 'partCode2': '80D8682044PK', + 'sn': 21 + }, + { + 'billNum': '10000001558', + 'knr': '2146496294', + 'vin': '492390', + 'hostSN': 81646, + 'partCode': '80D867272A4PK', + 'partCode2': '80D8682044PK', + 'sn': 22 + }, + { + 'billNum': '10000001558', + 'knr': '2146496539', + 'vin': '492391', + 'hostSN': 81647, + 'partCode': '80D867272A4PK', + 'partCode2': '80D8682044PK', + 'sn': 23 + }, + { + 'billNum': '10000001558', + 'knr': '2146496300', + 'vin': '492392', + 'hostSN': 81648, + 'partCode': '80D867272A4PK', + 'partCode2': '80D8682044PK', + 'sn': 24 + } + ], + 'masterList_BS': [ + { + 'id': '47bf942c-996d-f375-19c9-3a00f2e5194b', + 'billNum': '10000001559', + 'billSerialNum': '15', + 'billLocation': '左', + 'providerCode': '0709FAW-VW7XH', + 'partType': 'B柱上', + 'capacity': '24', + 'printDate': '2021-12-22 13:58:27', + 'printType': 0, + 'productLine': '08', + 'beginVin': 'LFV3B2FYXM3492369', + 'endVin': 'LFV3B2FY5M3492392', + 'details': null, + 'beginVin1': null, + 'endVin1': null + }, + { + 'id': '92f65b60-fb00-5180-8327-3a00f2e51c25', + 'billNum': '10000001560', + 'billSerialNum': '15', + 'billLocation': '右', + 'providerCode': '0709FAW-VW7XH', + 'partType': 'B柱上', + 'capacity': '24', + 'printDate': '2021-12-22 13:58:27', + 'printType': 0, + 'productLine': '08', + 'beginVin': 'LFV3B2FYXM3492369', + 'endVin': 'LFV3B2FY5M3492392', + 'details': null, + 'beginVin1': null, + 'endVin1': null + } + ], + 'detailList_BS': [ + { + 'billNum': '10000001559', + 'knr': '2146496140', + 'vin': '492369', + 'hostSN': 81625, + 'partCode': '80D867243A1OJ', + 'partCode2': null, + 'sn': 1 + }, + { + 'billNum': '10000001559', + 'knr': '2146496195', + 'vin': '492370', + 'hostSN': 81626, + 'partCode': '80D867243A1OJ', + 'partCode2': null, + 'sn': 2 + }, + { + 'billNum': '10000001559', + 'knr': '2146496249', + 'vin': '492371', + 'hostSN': 81627, + 'partCode': '80D867243A1OJ', + 'partCode2': null, + 'sn': 3 + }, + { + 'billNum': '10000001559', + 'knr': '2138196881', + 'vin': '492372', + 'hostSN': 81628, + 'partCode': '80D867243AYW5', + 'partCode2': null, + 'sn': 4 + }, + { + 'billNum': '10000001559', + 'knr': '2146496362', + 'vin': '492373', + 'hostSN': 81629, + 'partCode': '80D867243A1OJ', + 'partCode2': null, + 'sn': 5 + }, + { + 'billNum': '10000001559', + 'knr': '2146496409', + 'vin': '492374', + 'hostSN': 81630, + 'partCode': '80D867243A1OJ', + 'partCode2': null, + 'sn': 6 + }, + { + 'billNum': '10000001559', + 'knr': '2146496225', + 'vin': '492375', + 'hostSN': 81631, + 'partCode': '80D867243A1OJ', + 'partCode2': null, + 'sn': 7 + }, + { + 'billNum': '10000001559', + 'knr': '2146496218', + 'vin': '492376', + 'hostSN': 81632, + 'partCode': '80D867243A1OJ', + 'partCode2': null, + 'sn': 8 + }, + { + 'billNum': '10000001559', + 'knr': '2146496188', + 'vin': '492377', + 'hostSN': 81633, + 'partCode': '80D867243A1OJ', + 'partCode2': null, + 'sn': 9 + }, + { + 'billNum': '10000001559', + 'knr': '2146496232', + 'vin': '492378', + 'hostSN': 81634, + 'partCode': '80D867243A1OJ', + 'partCode2': null, + 'sn': 10 + }, + { + 'billNum': '10000001559', + 'knr': '2146496256', + 'vin': '492379', + 'hostSN': 81635, + 'partCode': '80D867243A1OJ', + 'partCode2': null, + 'sn': 11 + }, + { + 'billNum': '10000001559', + 'knr': '2146496447', + 'vin': '492380', + 'hostSN': 81636, + 'partCode': '80D867243A1OJ', + 'partCode2': null, + 'sn': 12 + }, + { + 'billNum': '10000001559', + 'knr': '2146496485', + 'vin': '492381', + 'hostSN': 81637, + 'partCode': '80D867243A1OJ', + 'partCode2': null, + 'sn': 13 + }, + { + 'billNum': '10000001559', + 'knr': '2146496324', + 'vin': '492382', + 'hostSN': 81638, + 'partCode': '80D867243A1OJ', + 'partCode2': null, + 'sn': 14 + }, + { + 'billNum': '10000001559', + 'knr': '2146496201', + 'vin': '492383', + 'hostSN': 81639, + 'partCode': '80D867243A1OJ', + 'partCode2': null, + 'sn': 15 + }, + { + 'billNum': '10000001559', + 'knr': '2138196898', + 'vin': '492384', + 'hostSN': 81640, + 'partCode': '80D867243AYW5', + 'partCode2': null, + 'sn': 16 + }, + { + 'billNum': '10000001559', + 'knr': '2146496515', + 'vin': '492385', + 'hostSN': 81641, + 'partCode': '80D867243A1OJ', + 'partCode2': null, + 'sn': 17 + }, + { + 'billNum': '10000001559', + 'knr': '2146496263', + 'vin': '492386', + 'hostSN': 81642, + 'partCode': '80D867243A1OJ', + 'partCode2': null, + 'sn': 18 + }, + { + 'billNum': '10000001559', + 'knr': '2146496331', + 'vin': '492387', + 'hostSN': 81643, + 'partCode': '80D867243A1OJ', + 'partCode2': null, + 'sn': 19 + }, + { + 'billNum': '10000001559', + 'knr': '2138196904', + 'vin': '492388', + 'hostSN': 81644, + 'partCode': '80D867243AYW5', + 'partCode2': null, + 'sn': 20 + }, + { + 'billNum': '10000001559', + 'knr': '2146496270', + 'vin': '492389', + 'hostSN': 81645, + 'partCode': '80D867243A1OJ', + 'partCode2': null, + 'sn': 21 + }, + { + 'billNum': '10000001559', + 'knr': '2146496294', + 'vin': '492390', + 'hostSN': 81646, + 'partCode': '80D867243A1OJ', + 'partCode2': null, + 'sn': 22 + }, + { + 'billNum': '10000001559', + 'knr': '2146496539', + 'vin': '492391', + 'hostSN': 81647, + 'partCode': '80D867243A1OJ', + 'partCode2': null, + 'sn': 23 + }, + { + 'billNum': '10000001559', + 'knr': '2146496300', + 'vin': '492392', + 'hostSN': 81648, + 'partCode': '80D867243A1OJ', + 'partCode2': null, + 'sn': 24 + }, + { + 'billNum': '10000001560', + 'knr': '2146496140', + 'vin': '492369', + 'hostSN': 81625, + 'partCode': '80D867244A1OJ', + 'partCode2': null, + 'sn': 1 + }, + { + 'billNum': '10000001560', + 'knr': '2146496195', + 'vin': '492370', + 'hostSN': 81626, + 'partCode': '80D867244A1OJ', + 'partCode2': null, + 'sn': 2 + }, + { + 'billNum': '10000001560', + 'knr': '2146496249', + 'vin': '492371', + 'hostSN': 81627, + 'partCode': '80D867244A1OJ', + 'partCode2': null, + 'sn': 3 + }, + { + 'billNum': '10000001560', + 'knr': '2138196881', + 'vin': '492372', + 'hostSN': 81628, + 'partCode': '80D867244AYW5', + 'partCode2': null, + 'sn': 4 + }, + { + 'billNum': '10000001560', + 'knr': '2146496362', + 'vin': '492373', + 'hostSN': 81629, + 'partCode': '80D867244A1OJ', + 'partCode2': null, + 'sn': 5 + }, + { + 'billNum': '10000001560', + 'knr': '2146496409', + 'vin': '492374', + 'hostSN': 81630, + 'partCode': '80D867244A1OJ', + 'partCode2': null, + 'sn': 6 + }, + { + 'billNum': '10000001560', + 'knr': '2146496225', + 'vin': '492375', + 'hostSN': 81631, + 'partCode': '80D867244A1OJ', + 'partCode2': null, + 'sn': 7 + }, + { + 'billNum': '10000001560', + 'knr': '2146496218', + 'vin': '492376', + 'hostSN': 81632, + 'partCode': '80D867244A1OJ', + 'partCode2': null, + 'sn': 8 + }, + { + 'billNum': '10000001560', + 'knr': '2146496188', + 'vin': '492377', + 'hostSN': 81633, + 'partCode': '80D867244A1OJ', + 'partCode2': null, + 'sn': 9 + }, + { + 'billNum': '10000001560', + 'knr': '2146496232', + 'vin': '492378', + 'hostSN': 81634, + 'partCode': '80D867244A1OJ', + 'partCode2': null, + 'sn': 10 + }, + { + 'billNum': '10000001560', + 'knr': '2146496256', + 'vin': '492379', + 'hostSN': 81635, + 'partCode': '80D867244A1OJ', + 'partCode2': null, + 'sn': 11 + }, + { + 'billNum': '10000001560', + 'knr': '2146496447', + 'vin': '492380', + 'hostSN': 81636, + 'partCode': '80D867244A1OJ', + 'partCode2': null, + 'sn': 12 + }, + { + 'billNum': '10000001560', + 'knr': '2146496485', + 'vin': '492381', + 'hostSN': 81637, + 'partCode': '80D867244A1OJ', + 'partCode2': null, + 'sn': 13 + }, + { + 'billNum': '10000001560', + 'knr': '2146496324', + 'vin': '492382', + 'hostSN': 81638, + 'partCode': '80D867244A1OJ', + 'partCode2': null, + 'sn': 14 + }, + { + 'billNum': '10000001560', + 'knr': '2146496201', + 'vin': '492383', + 'hostSN': 81639, + 'partCode': '80D867244A1OJ', + 'partCode2': null, + 'sn': 15 + }, + { + 'billNum': '10000001560', + 'knr': '2138196898', + 'vin': '492384', + 'hostSN': 81640, + 'partCode': '80D867244AYW5', + 'partCode2': null, + 'sn': 16 + }, + { + 'billNum': '10000001560', + 'knr': '2146496515', + 'vin': '492385', + 'hostSN': 81641, + 'partCode': '80D867244A1OJ', + 'partCode2': null, + 'sn': 17 + }, + { + 'billNum': '10000001560', + 'knr': '2146496263', + 'vin': '492386', + 'hostSN': 81642, + 'partCode': '80D867244A1OJ', + 'partCode2': null, + 'sn': 18 + }, + { + 'billNum': '10000001560', + 'knr': '2146496331', + 'vin': '492387', + 'hostSN': 81643, + 'partCode': '80D867244A1OJ', + 'partCode2': null, + 'sn': 19 + }, + { + 'billNum': '10000001560', + 'knr': '2138196904', + 'vin': '492388', + 'hostSN': 81644, + 'partCode': '80D867244AYW5', + 'partCode2': null, + 'sn': 20 + }, + { + 'billNum': '10000001560', + 'knr': '2146496270', + 'vin': '492389', + 'hostSN': 81645, + 'partCode': '80D867244A1OJ', + 'partCode2': null, + 'sn': 21 + }, + { + 'billNum': '10000001560', + 'knr': '2146496294', + 'vin': '492390', + 'hostSN': 81646, + 'partCode': '80D867244A1OJ', + 'partCode2': null, + 'sn': 22 + }, + { + 'billNum': '10000001560', + 'knr': '2146496539', + 'vin': '492391', + 'hostSN': 81647, + 'partCode': '80D867244A1OJ', + 'partCode2': null, + 'sn': 23 + }, + { + 'billNum': '10000001560', + 'knr': '2146496300', + 'vin': '492392', + 'hostSN': 81648, + 'partCode': '80D867244A1OJ', + 'partCode2': null, + 'sn': 24 + } + ], + 'masterList_BX': [ + { + 'id': '413b80c2-8a2b-75d7-14d4-3a00f2e51eab', + 'billNum': '10000001561', + 'billSerialNum': '15', + 'billLocation': '左', + 'providerCode': '0709FAW-VW7XH', + 'partType': 'B柱下', + 'capacity': '24', + 'printDate': '2021-12-22 13:58:27', + 'printType': 0, + 'productLine': '08', + 'beginVin': 'LFV3B2FYXM3492369', + 'endVin': 'LFV3B2FY5M3492392', + 'details': null, + 'beginVin1': null, + 'endVin1': null + }, + { + 'id': '312f189b-ea33-8130-cb92-3a00f2e52146', + 'billNum': '10000001562', + 'billSerialNum': '15', + 'billLocation': '右', + 'providerCode': '0709FAW-VW7XH', + 'partType': 'B柱下', + 'capacity': '24', + 'printDate': '2021-12-22 13:58:27', + 'printType': 0, + 'productLine': '08', + 'beginVin': 'LFV3B2FYXM3492369', + 'endVin': 'LFV3B2FY5M3492392', + 'details': null, + 'beginVin1': null, + 'endVin1': null + } + ], + 'detailList_BX': [ + { + 'billNum': '10000001561', + 'knr': '2146496140', + 'vin': '492369', + 'hostSN': 81625, + 'partCode': '80D8672394PK', + 'partCode2': null, + 'sn': 1 + }, + { + 'billNum': '10000001561', + 'knr': '2146496195', + 'vin': '492370', + 'hostSN': 81626, + 'partCode': '80D8672394PK', + 'partCode2': null, + 'sn': 2 + }, + { + 'billNum': '10000001561', + 'knr': '2146496249', + 'vin': '492371', + 'hostSN': 81627, + 'partCode': '80D8672394PK', + 'partCode2': null, + 'sn': 3 + }, + { + 'billNum': '10000001561', + 'knr': '2138196881', + 'vin': '492372', + 'hostSN': 81628, + 'partCode': '80D8672394PK', + 'partCode2': null, + 'sn': 4 + }, + { + 'billNum': '10000001561', + 'knr': '2146496362', + 'vin': '492373', + 'hostSN': 81629, + 'partCode': '80D8672394PK', + 'partCode2': null, + 'sn': 5 + }, + { + 'billNum': '10000001561', + 'knr': '2146496409', + 'vin': '492374', + 'hostSN': 81630, + 'partCode': '80D8672394PK', + 'partCode2': null, + 'sn': 6 + }, + { + 'billNum': '10000001561', + 'knr': '2146496225', + 'vin': '492375', + 'hostSN': 81631, + 'partCode': '80D8672394PK', + 'partCode2': null, + 'sn': 7 + }, + { + 'billNum': '10000001561', + 'knr': '2146496218', + 'vin': '492376', + 'hostSN': 81632, + 'partCode': '80D8672394PK', + 'partCode2': null, + 'sn': 8 + }, + { + 'billNum': '10000001561', + 'knr': '2146496188', + 'vin': '492377', + 'hostSN': 81633, + 'partCode': '80D8672394PK', + 'partCode2': null, + 'sn': 9 + }, + { + 'billNum': '10000001561', + 'knr': '2146496232', + 'vin': '492378', + 'hostSN': 81634, + 'partCode': '80D8672394PK', + 'partCode2': null, + 'sn': 10 + }, + { + 'billNum': '10000001561', + 'knr': '2146496256', + 'vin': '492379', + 'hostSN': 81635, + 'partCode': '80D8672394PK', + 'partCode2': null, + 'sn': 11 + }, + { + 'billNum': '10000001561', + 'knr': '2146496447', + 'vin': '492380', + 'hostSN': 81636, + 'partCode': '80D8672394PK', + 'partCode2': null, + 'sn': 12 + }, + { + 'billNum': '10000001561', + 'knr': '2146496485', + 'vin': '492381', + 'hostSN': 81637, + 'partCode': '80D8672394PK', + 'partCode2': null, + 'sn': 13 + }, + { + 'billNum': '10000001561', + 'knr': '2146496324', + 'vin': '492382', + 'hostSN': 81638, + 'partCode': '80D8672394PK', + 'partCode2': null, + 'sn': 14 + }, + { + 'billNum': '10000001561', + 'knr': '2146496201', + 'vin': '492383', + 'hostSN': 81639, + 'partCode': '80D8672394PK', + 'partCode2': null, + 'sn': 15 + }, + { + 'billNum': '10000001561', + 'knr': '2138196898', + 'vin': '492384', + 'hostSN': 81640, + 'partCode': '80D8672394PK', + 'partCode2': null, + 'sn': 16 + }, + { + 'billNum': '10000001561', + 'knr': '2146496515', + 'vin': '492385', + 'hostSN': 81641, + 'partCode': '80D8672394PK', + 'partCode2': null, + 'sn': 17 + }, + { + 'billNum': '10000001561', + 'knr': '2146496263', + 'vin': '492386', + 'hostSN': 81642, + 'partCode': '80D8672394PK', + 'partCode2': null, + 'sn': 18 + }, + { + 'billNum': '10000001561', + 'knr': '2146496331', + 'vin': '492387', + 'hostSN': 81643, + 'partCode': '80D8672394PK', + 'partCode2': null, + 'sn': 19 + }, + { + 'billNum': '10000001561', + 'knr': '2138196904', + 'vin': '492388', + 'hostSN': 81644, + 'partCode': '80D8672394PK', + 'partCode2': null, + 'sn': 20 + }, + { + 'billNum': '10000001561', + 'knr': '2146496270', + 'vin': '492389', + 'hostSN': 81645, + 'partCode': '80D8672394PK', + 'partCode2': null, + 'sn': 21 + }, + { + 'billNum': '10000001561', + 'knr': '2146496294', + 'vin': '492390', + 'hostSN': 81646, + 'partCode': '80D8672394PK', + 'partCode2': null, + 'sn': 22 + }, + { + 'billNum': '10000001561', + 'knr': '2146496539', + 'vin': '492391', + 'hostSN': 81647, + 'partCode': '80D8672394PK', + 'partCode2': null, + 'sn': 23 + }, + { + 'billNum': '10000001561', + 'knr': '2146496300', + 'vin': '492392', + 'hostSN': 81648, + 'partCode': '80D8672394PK', + 'partCode2': null, + 'sn': 24 + }, + { + 'billNum': '10000001562', + 'knr': '2146496140', + 'vin': '492369', + 'hostSN': 81625, + 'partCode': '80D8672404PK', + 'partCode2': null, + 'sn': 1 + }, + { + 'billNum': '10000001562', + 'knr': '2146496195', + 'vin': '492370', + 'hostSN': 81626, + 'partCode': '80D8672404PK', + 'partCode2': null, + 'sn': 2 + }, + { + 'billNum': '10000001562', + 'knr': '2146496249', + 'vin': '492371', + 'hostSN': 81627, + 'partCode': '80D8672404PK', + 'partCode2': null, + 'sn': 3 + }, + { + 'billNum': '10000001562', + 'knr': '2138196881', + 'vin': '492372', + 'hostSN': 81628, + 'partCode': '80D8672404PK', + 'partCode2': null, + 'sn': 4 + }, + { + 'billNum': '10000001562', + 'knr': '2146496362', + 'vin': '492373', + 'hostSN': 81629, + 'partCode': '80D8672404PK', + 'partCode2': null, + 'sn': 5 + }, + { + 'billNum': '10000001562', + 'knr': '2146496409', + 'vin': '492374', + 'hostSN': 81630, + 'partCode': '80D8672404PK', + 'partCode2': null, + 'sn': 6 + }, + { + 'billNum': '10000001562', + 'knr': '2146496225', + 'vin': '492375', + 'hostSN': 81631, + 'partCode': '80D8672404PK', + 'partCode2': null, + 'sn': 7 + }, + { + 'billNum': '10000001562', + 'knr': '2146496218', + 'vin': '492376', + 'hostSN': 81632, + 'partCode': '80D8672404PK', + 'partCode2': null, + 'sn': 8 + }, + { + 'billNum': '10000001562', + 'knr': '2146496188', + 'vin': '492377', + 'hostSN': 81633, + 'partCode': '80D8672404PK', + 'partCode2': null, + 'sn': 9 + }, + { + 'billNum': '10000001562', + 'knr': '2146496232', + 'vin': '492378', + 'hostSN': 81634, + 'partCode': '80D8672404PK', + 'partCode2': null, + 'sn': 10 + }, + { + 'billNum': '10000001562', + 'knr': '2146496256', + 'vin': '492379', + 'hostSN': 81635, + 'partCode': '80D8672404PK', + 'partCode2': null, + 'sn': 11 + }, + { + 'billNum': '10000001562', + 'knr': '2146496447', + 'vin': '492380', + 'hostSN': 81636, + 'partCode': '80D8672404PK', + 'partCode2': null, + 'sn': 12 + }, + { + 'billNum': '10000001562', + 'knr': '2146496485', + 'vin': '492381', + 'hostSN': 81637, + 'partCode': '80D8672404PK', + 'partCode2': null, + 'sn': 13 + }, + { + 'billNum': '10000001562', + 'knr': '2146496324', + 'vin': '492382', + 'hostSN': 81638, + 'partCode': '80D8672404PK', + 'partCode2': null, + 'sn': 14 + }, + { + 'billNum': '10000001562', + 'knr': '2146496201', + 'vin': '492383', + 'hostSN': 81639, + 'partCode': '80D8672404PK', + 'partCode2': null, + 'sn': 15 + }, + { + 'billNum': '10000001562', + 'knr': '2138196898', + 'vin': '492384', + 'hostSN': 81640, + 'partCode': '80D8672404PK', + 'partCode2': null, + 'sn': 16 + }, + { + 'billNum': '10000001562', + 'knr': '2146496515', + 'vin': '492385', + 'hostSN': 81641, + 'partCode': '80D8672404PK', + 'partCode2': null, + 'sn': 17 + }, + { + 'billNum': '10000001562', + 'knr': '2146496263', + 'vin': '492386', + 'hostSN': 81642, + 'partCode': '80D8672404PK', + 'partCode2': null, + 'sn': 18 + }, + { + 'billNum': '10000001562', + 'knr': '2146496331', + 'vin': '492387', + 'hostSN': 81643, + 'partCode': '80D8672404PK', + 'partCode2': null, + 'sn': 19 + }, + { + 'billNum': '10000001562', + 'knr': '2138196904', + 'vin': '492388', + 'hostSN': 81644, + 'partCode': '80D8672404PK', + 'partCode2': null, + 'sn': 20 + }, + { + 'billNum': '10000001562', + 'knr': '2146496270', + 'vin': '492389', + 'hostSN': 81645, + 'partCode': '80D8672404PK', + 'partCode2': null, + 'sn': 21 + }, + { + 'billNum': '10000001562', + 'knr': '2146496294', + 'vin': '492390', + 'hostSN': 81646, + 'partCode': '80D8672404PK', + 'partCode2': null, + 'sn': 22 + }, + { + 'billNum': '10000001562', + 'knr': '2146496539', + 'vin': '492391', + 'hostSN': 81647, + 'partCode': '80D8672404PK', + 'partCode2': null, + 'sn': 23 + }, + { + 'billNum': '10000001562', + 'knr': '2146496300', + 'vin': '492392', + 'hostSN': 81648, + 'partCode': '80D8672404PK', + 'partCode2': null, + 'sn': 24 + } + ], + 'masterList_D': [ + { + 'id': '39223934-04a8-ec08-91e2-3a00f2e5238c', + 'billNum': '10000001563', + 'billSerialNum': '29', + 'billLocation': null, + 'providerCode': '0709FAW-VW7XH', + 'partType': 'D柱', + 'capacity': '12', + 'printDate': '2021-12-22 13:58:27', + 'printType': 0, + 'productLine': '08', + 'beginVin': 'LFV3B2FYXM3492369', + 'endVin': 'LFV3B2FY9M3492380', + 'details': null, + 'beginVin1': null, + 'endVin1': null + }, + { + 'id': '9a745ce7-a03f-090d-bc61-3a00f2e52630', + 'billNum': '10000001564', + 'billSerialNum': '30', + 'billLocation': null, + 'providerCode': '0709FAW-VW7XH', + 'partType': 'D柱', + 'capacity': '12', + 'printDate': '2021-12-22 13:58:27', + 'printType': 0, + 'productLine': '08', + 'beginVin': 'LFV3B2FY0M3492381', + 'endVin': 'LFV3B2FY5M3492392', + 'details': null, + 'beginVin1': null, + 'endVin1': null + } + ], + 'detailList_D': [ + { + 'billNum': '10000001563', + 'knr': '2146496140', + 'vin': '492369', + 'hostSN': 81625, + 'partCode': '80D867245ADT4', + 'partCode2': null, + 'sn': 1 + }, + { + 'billNum': '10000001563', + 'knr': '2146496140', + 'vin': '492369', + 'hostSN': 81625, + 'partCode': '80D867246ADT4', + 'partCode2': null, + 'sn': 2 + }, + { + 'billNum': '10000001563', + 'knr': '2146496195', + 'vin': '492370', + 'hostSN': 81626, + 'partCode': '80D867245DT4', + 'partCode2': null, + 'sn': 3 + }, + { + 'billNum': '10000001563', + 'knr': '2146496195', + 'vin': '492370', + 'hostSN': 81626, + 'partCode': '80D867246DT4', + 'partCode2': null, + 'sn': 4 + }, + { + 'billNum': '10000001563', + 'knr': '2146496249', + 'vin': '492371', + 'hostSN': 81627, + 'partCode': '80D867245DT4', + 'partCode2': null, + 'sn': 5 + }, + { + 'billNum': '10000001563', + 'knr': '2146496249', + 'vin': '492371', + 'hostSN': 81627, + 'partCode': '80D867246DT4', + 'partCode2': null, + 'sn': 6 + }, + { + 'billNum': '10000001563', + 'knr': '2138196881', + 'vin': '492372', + 'hostSN': 81628, + 'partCode': '80G8672454PK', + 'partCode2': null, + 'sn': 7 + }, + { + 'billNum': '10000001563', + 'knr': '2138196881', + 'vin': '492372', + 'hostSN': 81628, + 'partCode': '80G8672464PK', + 'partCode2': null, + 'sn': 8 + }, + { + 'billNum': '10000001563', + 'knr': '2146496362', + 'vin': '492373', + 'hostSN': 81629, + 'partCode': '80D867245DT4', + 'partCode2': null, + 'sn': 9 + }, + { + 'billNum': '10000001563', + 'knr': '2146496362', + 'vin': '492373', + 'hostSN': 81629, + 'partCode': '80D867246DT4', + 'partCode2': null, + 'sn': 10 + }, + { + 'billNum': '10000001563', + 'knr': '2146496409', + 'vin': '492374', + 'hostSN': 81630, + 'partCode': '80D867245DT4', + 'partCode2': null, + 'sn': 11 + }, + { + 'billNum': '10000001563', + 'knr': '2146496409', + 'vin': '492374', + 'hostSN': 81630, + 'partCode': '80D867246DT4', + 'partCode2': null, + 'sn': 12 + }, + { + 'billNum': '10000001563', + 'knr': '2146496225', + 'vin': '492375', + 'hostSN': 81631, + 'partCode': '80D867245DT4', + 'partCode2': null, + 'sn': 13 + }, + { + 'billNum': '10000001563', + 'knr': '2146496225', + 'vin': '492375', + 'hostSN': 81631, + 'partCode': '80D867246DT4', + 'partCode2': null, + 'sn': 14 + }, + { + 'billNum': '10000001563', + 'knr': '2146496218', + 'vin': '492376', + 'hostSN': 81632, + 'partCode': '80D867245DT4', + 'partCode2': null, + 'sn': 15 + }, + { + 'billNum': '10000001563', + 'knr': '2146496218', + 'vin': '492376', + 'hostSN': 81632, + 'partCode': '80D867246DT4', + 'partCode2': null, + 'sn': 16 + }, + { + 'billNum': '10000001563', + 'knr': '2146496188', + 'vin': '492377', + 'hostSN': 81633, + 'partCode': '80D867245DT4', + 'partCode2': null, + 'sn': 17 + }, + { + 'billNum': '10000001563', + 'knr': '2146496188', + 'vin': '492377', + 'hostSN': 81633, + 'partCode': '80D867246DT4', + 'partCode2': null, + 'sn': 18 + }, + { + 'billNum': '10000001563', + 'knr': '2146496232', + 'vin': '492378', + 'hostSN': 81634, + 'partCode': '80D867245DT4', + 'partCode2': null, + 'sn': 19 + }, + { + 'billNum': '10000001563', + 'knr': '2146496232', + 'vin': '492378', + 'hostSN': 81634, + 'partCode': '80D867246DT4', + 'partCode2': null, + 'sn': 20 + }, + { + 'billNum': '10000001563', + 'knr': '2146496256', + 'vin': '492379', + 'hostSN': 81635, + 'partCode': '80D867245ADT4', + 'partCode2': null, + 'sn': 21 + }, + { + 'billNum': '10000001563', + 'knr': '2146496256', + 'vin': '492379', + 'hostSN': 81635, + 'partCode': '80D867246ADT4', + 'partCode2': null, + 'sn': 22 + }, + { + 'billNum': '10000001563', + 'knr': '2146496447', + 'vin': '492380', + 'hostSN': 81636, + 'partCode': '80D867245DT4', + 'partCode2': null, + 'sn': 23 + }, + { + 'billNum': '10000001563', + 'knr': '2146496447', + 'vin': '492380', + 'hostSN': 81636, + 'partCode': '80D867246DT4', + 'partCode2': null, + 'sn': 24 + }, + { + 'billNum': '10000001564', + 'knr': '2146496485', + 'vin': '492381', + 'hostSN': 81637, + 'partCode': '80D867245ADT4', + 'partCode2': null, + 'sn': 1 + }, + { + 'billNum': '10000001564', + 'knr': '2146496485', + 'vin': '492381', + 'hostSN': 81637, + 'partCode': '80D867246ADT4', + 'partCode2': null, + 'sn': 2 + }, + { + 'billNum': '10000001564', + 'knr': '2146496324', + 'vin': '492382', + 'hostSN': 81638, + 'partCode': '80D867245DT4', + 'partCode2': null, + 'sn': 3 + }, + { + 'billNum': '10000001564', + 'knr': '2146496324', + 'vin': '492382', + 'hostSN': 81638, + 'partCode': '80D867246DT4', + 'partCode2': null, + 'sn': 4 + }, + { + 'billNum': '10000001564', + 'knr': '2146496201', + 'vin': '492383', + 'hostSN': 81639, + 'partCode': '80D867245ADT4', + 'partCode2': null, + 'sn': 5 + }, + { + 'billNum': '10000001564', + 'knr': '2146496201', + 'vin': '492383', + 'hostSN': 81639, + 'partCode': '80D867246ADT4', + 'partCode2': null, + 'sn': 6 + }, + { + 'billNum': '10000001564', + 'knr': '2138196898', + 'vin': '492384', + 'hostSN': 81640, + 'partCode': '80G8672454PK', + 'partCode2': null, + 'sn': 7 + }, + { + 'billNum': '10000001564', + 'knr': '2138196898', + 'vin': '492384', + 'hostSN': 81640, + 'partCode': '80G8672464PK', + 'partCode2': null, + 'sn': 8 + }, + { + 'billNum': '10000001564', + 'knr': '2146496515', + 'vin': '492385', + 'hostSN': 81641, + 'partCode': '80D867245ADT4', + 'partCode2': null, + 'sn': 9 + }, + { + 'billNum': '10000001564', + 'knr': '2146496515', + 'vin': '492385', + 'hostSN': 81641, + 'partCode': '80D867246ADT4', + 'partCode2': null, + 'sn': 10 + }, + { + 'billNum': '10000001564', + 'knr': '2146496263', + 'vin': '492386', + 'hostSN': 81642, + 'partCode': '80D867245DT4', + 'partCode2': null, + 'sn': 11 + }, + { + 'billNum': '10000001564', + 'knr': '2146496263', + 'vin': '492386', + 'hostSN': 81642, + 'partCode': '80D867246DT4', + 'partCode2': null, + 'sn': 12 + }, + { + 'billNum': '10000001564', + 'knr': '2146496331', + 'vin': '492387', + 'hostSN': 81643, + 'partCode': '80D867245DT4', + 'partCode2': null, + 'sn': 13 + }, + { + 'billNum': '10000001564', + 'knr': '2146496331', + 'vin': '492387', + 'hostSN': 81643, + 'partCode': '80D867246DT4', + 'partCode2': null, + 'sn': 14 + }, + { + 'billNum': '10000001564', + 'knr': '2138196904', + 'vin': '492388', + 'hostSN': 81644, + 'partCode': '80G8672454PK', + 'partCode2': null, + 'sn': 15 + }, + { + 'billNum': '10000001564', + 'knr': '2138196904', + 'vin': '492388', + 'hostSN': 81644, + 'partCode': '80G8672464PK', + 'partCode2': null, + 'sn': 16 + }, + { + 'billNum': '10000001564', + 'knr': '2146496270', + 'vin': '492389', + 'hostSN': 81645, + 'partCode': '80D867245DT4', + 'partCode2': null, + 'sn': 17 + }, + { + 'billNum': '10000001564', + 'knr': '2146496270', + 'vin': '492389', + 'hostSN': 81645, + 'partCode': '80D867246DT4', + 'partCode2': null, + 'sn': 18 + }, + { + 'billNum': '10000001564', + 'knr': '2146496294', + 'vin': '492390', + 'hostSN': 81646, + 'partCode': '80D867245DT4', + 'partCode2': null, + 'sn': 19 + }, + { + 'billNum': '10000001564', + 'knr': '2146496294', + 'vin': '492390', + 'hostSN': 81646, + 'partCode': '80D867246DT4', + 'partCode2': null, + 'sn': 20 + }, + { + 'billNum': '10000001564', + 'knr': '2146496539', + 'vin': '492391', + 'hostSN': 81647, + 'partCode': '80D867245DT4', + 'partCode2': null, + 'sn': 21 + }, + { + 'billNum': '10000001564', + 'knr': '2146496539', + 'vin': '492391', + 'hostSN': 81647, + 'partCode': '80D867246DT4', + 'partCode2': null, + 'sn': 22 + }, + { + 'billNum': '10000001564', + 'knr': '2146496300', + 'vin': '492392', + 'hostSN': 81648, + 'partCode': '80D867245DT4', + 'partCode2': null, + 'sn': 23 + }, + { + 'billNum': '10000001564', + 'knr': '2146496300', + 'vin': '492392', + 'hostSN': 81648, + 'partCode': '80D867246DT4', + 'partCode2': null, + 'sn': 24 + } + ], + 'masterList_HL': [ + { + 'id': '292d2b2d-e32d-e53b-0ebd-3a00f2e52890', + 'billNum': '10000001565', + 'billSerialNum': '15', + 'billLocation': '左', + 'providerCode': '0709FAW-VW7XH', + 'partType': '后轮上装饰板', + 'capacity': '24', + 'printDate': '2021-12-22 13:58:27', + 'printType': 0, + 'productLine': '08', + 'beginVin': 'LFV3B2FYXM3492369', + 'endVin': 'LFV3B2FY5M3492392', + 'details': null, + 'beginVin1': null, + 'endVin1': null + }, + { + 'id': '430819cc-ccb8-dab0-d878-3a00f2e52e45', + 'billNum': '10000001566', + 'billSerialNum': '15', + 'billLocation': '右', + 'providerCode': '0709FAW-VW7XH', + 'partType': '后轮上装饰板', + 'capacity': '24', + 'printDate': '2021-12-22 13:58:27', + 'printType': 0, + 'productLine': '08', + 'beginVin': 'LFV3B2FYXM3492369', + 'endVin': 'LFV3B2FY5M3492392', + 'details': null, + 'beginVin1': null, + 'endVin1': null + } + ], + 'detailList_HL': [ + { + 'billNum': '10000001565', + 'knr': '2146496140', + 'vin': '492369', + 'hostSN': 81625, + 'partCode': '80D8677674PK', + 'partCode2': '80D8677674PK', + 'sn': 1 + }, + { + 'billNum': '10000001565', + 'knr': '2146496195', + 'vin': '492370', + 'hostSN': 81626, + 'partCode': '80D8677674PK', + 'partCode2': '80D8677674PK', + 'sn': 2 + }, + { + 'billNum': '10000001565', + 'knr': '2146496249', + 'vin': '492371', + 'hostSN': 81627, + 'partCode': '80D8677674PK', + 'partCode2': '80D8677674PK', + 'sn': 3 + }, + { + 'billNum': '10000001565', + 'knr': '2138196881', + 'vin': '492372', + 'hostSN': 81628, + 'partCode': '80D8677674PK', + 'partCode2': '80D8677674PK', + 'sn': 4 + }, + { + 'billNum': '10000001565', + 'knr': '2146496362', + 'vin': '492373', + 'hostSN': 81629, + 'partCode': '80D8677674PK', + 'partCode2': '80D8677674PK', + 'sn': 5 + }, + { + 'billNum': '10000001565', + 'knr': '2146496409', + 'vin': '492374', + 'hostSN': 81630, + 'partCode': '80D8677674PK', + 'partCode2': '80D8677674PK', + 'sn': 6 + }, + { + 'billNum': '10000001565', + 'knr': '2146496225', + 'vin': '492375', + 'hostSN': 81631, + 'partCode': '80D8677674PK', + 'partCode2': '80D8677674PK', + 'sn': 7 + }, + { + 'billNum': '10000001565', + 'knr': '2146496218', + 'vin': '492376', + 'hostSN': 81632, + 'partCode': '80D8677674PK', + 'partCode2': '80D8677674PK', + 'sn': 8 + }, + { + 'billNum': '10000001565', + 'knr': '2146496188', + 'vin': '492377', + 'hostSN': 81633, + 'partCode': '80D8677674PK', + 'partCode2': '80D8677674PK', + 'sn': 9 + }, + { + 'billNum': '10000001565', + 'knr': '2146496232', + 'vin': '492378', + 'hostSN': 81634, + 'partCode': '80D8677674PK', + 'partCode2': '80D8677674PK', + 'sn': 10 + }, + { + 'billNum': '10000001565', + 'knr': '2146496256', + 'vin': '492379', + 'hostSN': 81635, + 'partCode': '80D8677674PK', + 'partCode2': '80D8677674PK', + 'sn': 11 + }, + { + 'billNum': '10000001565', + 'knr': '2146496447', + 'vin': '492380', + 'hostSN': 81636, + 'partCode': '80D8677674PK', + 'partCode2': '80D8677674PK', + 'sn': 12 + }, + { + 'billNum': '10000001565', + 'knr': '2146496485', + 'vin': '492381', + 'hostSN': 81637, + 'partCode': '80D8677674PK', + 'partCode2': '80D8677674PK', + 'sn': 13 + }, + { + 'billNum': '10000001565', + 'knr': '2146496324', + 'vin': '492382', + 'hostSN': 81638, + 'partCode': '80D8677674PK', + 'partCode2': '80D8677674PK', + 'sn': 14 + }, + { + 'billNum': '10000001565', + 'knr': '2146496201', + 'vin': '492383', + 'hostSN': 81639, + 'partCode': '80D8677674PK', + 'partCode2': '80D8677674PK', + 'sn': 15 + }, + { + 'billNum': '10000001565', + 'knr': '2138196898', + 'vin': '492384', + 'hostSN': 81640, + 'partCode': '80D8677674PK', + 'partCode2': '80D8677674PK', + 'sn': 16 + }, + { + 'billNum': '10000001565', + 'knr': '2146496515', + 'vin': '492385', + 'hostSN': 81641, + 'partCode': '80D8677674PK', + 'partCode2': '80D8677674PK', + 'sn': 17 + }, + { + 'billNum': '10000001565', + 'knr': '2146496263', + 'vin': '492386', + 'hostSN': 81642, + 'partCode': '80D8677674PK', + 'partCode2': '80D8677674PK', + 'sn': 18 + }, + { + 'billNum': '10000001565', + 'knr': '2146496331', + 'vin': '492387', + 'hostSN': 81643, + 'partCode': '80D8677674PK', + 'partCode2': '80D8677674PK', + 'sn': 19 + }, + { + 'billNum': '10000001565', + 'knr': '2138196904', + 'vin': '492388', + 'hostSN': 81644, + 'partCode': '80D8677674PK', + 'partCode2': '80D8677674PK', + 'sn': 20 + }, + { + 'billNum': '10000001565', + 'knr': '2146496270', + 'vin': '492389', + 'hostSN': 81645, + 'partCode': '80D8677674PK', + 'partCode2': '80D8677674PK', + 'sn': 21 + }, + { + 'billNum': '10000001565', + 'knr': '2146496294', + 'vin': '492390', + 'hostSN': 81646, + 'partCode': '80D8677674PK', + 'partCode2': '80D8677674PK', + 'sn': 22 + }, + { + 'billNum': '10000001565', + 'knr': '2146496539', + 'vin': '492391', + 'hostSN': 81647, + 'partCode': '80D8677674PK', + 'partCode2': '80D8677674PK', + 'sn': 23 + }, + { + 'billNum': '10000001565', + 'knr': '2146496300', + 'vin': '492392', + 'hostSN': 81648, + 'partCode': '80D8677674PK', + 'partCode2': '80D8677674PK', + 'sn': 24 + }, + { + 'billNum': '10000001566', + 'knr': '2146496140', + 'vin': '492369', + 'hostSN': 81625, + 'partCode': '80D8677684PK', + 'partCode2': '80D8677684PK', + 'sn': 1 + }, + { + 'billNum': '10000001566', + 'knr': '2146496195', + 'vin': '492370', + 'hostSN': 81626, + 'partCode': '80D8677684PK', + 'partCode2': '80D8677684PK', + 'sn': 2 + }, + { + 'billNum': '10000001566', + 'knr': '2146496249', + 'vin': '492371', + 'hostSN': 81627, + 'partCode': '80D8677684PK', + 'partCode2': '80D8677684PK', + 'sn': 3 + }, + { + 'billNum': '10000001566', + 'knr': '2138196881', + 'vin': '492372', + 'hostSN': 81628, + 'partCode': '80D8677684PK', + 'partCode2': '80D8677684PK', + 'sn': 4 + }, + { + 'billNum': '10000001566', + 'knr': '2146496362', + 'vin': '492373', + 'hostSN': 81629, + 'partCode': '80D8677684PK', + 'partCode2': '80D8677684PK', + 'sn': 5 + }, + { + 'billNum': '10000001566', + 'knr': '2146496409', + 'vin': '492374', + 'hostSN': 81630, + 'partCode': '80D8677684PK', + 'partCode2': '80D8677684PK', + 'sn': 6 + }, + { + 'billNum': '10000001566', + 'knr': '2146496225', + 'vin': '492375', + 'hostSN': 81631, + 'partCode': '80D8677684PK', + 'partCode2': '80D8677684PK', + 'sn': 7 + }, + { + 'billNum': '10000001566', + 'knr': '2146496218', + 'vin': '492376', + 'hostSN': 81632, + 'partCode': '80D8677684PK', + 'partCode2': '80D8677684PK', + 'sn': 8 + }, + { + 'billNum': '10000001566', + 'knr': '2146496188', + 'vin': '492377', + 'hostSN': 81633, + 'partCode': '80D8677684PK', + 'partCode2': '80D8677684PK', + 'sn': 9 + }, + { + 'billNum': '10000001566', + 'knr': '2146496232', + 'vin': '492378', + 'hostSN': 81634, + 'partCode': '80D8677684PK', + 'partCode2': '80D8677684PK', + 'sn': 10 + }, + { + 'billNum': '10000001566', + 'knr': '2146496256', + 'vin': '492379', + 'hostSN': 81635, + 'partCode': '80D8677684PK', + 'partCode2': '80D8677684PK', + 'sn': 11 + }, + { + 'billNum': '10000001566', + 'knr': '2146496447', + 'vin': '492380', + 'hostSN': 81636, + 'partCode': '80D8677684PK', + 'partCode2': '80D8677684PK', + 'sn': 12 + }, + { + 'billNum': '10000001566', + 'knr': '2146496485', + 'vin': '492381', + 'hostSN': 81637, + 'partCode': '80D8677684PK', + 'partCode2': '80D8677684PK', + 'sn': 13 + }, + { + 'billNum': '10000001566', + 'knr': '2146496324', + 'vin': '492382', + 'hostSN': 81638, + 'partCode': '80D8677684PK', + 'partCode2': '80D8677684PK', + 'sn': 14 + }, + { + 'billNum': '10000001566', + 'knr': '2146496201', + 'vin': '492383', + 'hostSN': 81639, + 'partCode': '80D8677684PK', + 'partCode2': '80D8677684PK', + 'sn': 15 + }, + { + 'billNum': '10000001566', + 'knr': '2138196898', + 'vin': '492384', + 'hostSN': 81640, + 'partCode': '80D8677684PK', + 'partCode2': '80D8677684PK', + 'sn': 16 + }, + { + 'billNum': '10000001566', + 'knr': '2146496515', + 'vin': '492385', + 'hostSN': 81641, + 'partCode': '80D8677684PK', + 'partCode2': '80D8677684PK', + 'sn': 17 + }, + { + 'billNum': '10000001566', + 'knr': '2146496263', + 'vin': '492386', + 'hostSN': 81642, + 'partCode': '80D8677684PK', + 'partCode2': '80D8677684PK', + 'sn': 18 + }, + { + 'billNum': '10000001566', + 'knr': '2146496331', + 'vin': '492387', + 'hostSN': 81643, + 'partCode': '80D8677684PK', + 'partCode2': '80D8677684PK', + 'sn': 19 + }, + { + 'billNum': '10000001566', + 'knr': '2138196904', + 'vin': '492388', + 'hostSN': 81644, + 'partCode': '80D8677684PK', + 'partCode2': '80D8677684PK', + 'sn': 20 + }, + { + 'billNum': '10000001566', + 'knr': '2146496270', + 'vin': '492389', + 'hostSN': 81645, + 'partCode': '80D8677684PK', + 'partCode2': '80D8677684PK', + 'sn': 21 + }, + { + 'billNum': '10000001566', + 'knr': '2146496294', + 'vin': '492390', + 'hostSN': 81646, + 'partCode': '80D8677684PK', + 'partCode2': '80D8677684PK', + 'sn': 22 + }, + { + 'billNum': '10000001566', + 'knr': '2146496539', + 'vin': '492391', + 'hostSN': 81647, + 'partCode': '80D8677684PK', + 'partCode2': '80D8677684PK', + 'sn': 23 + }, + { + 'billNum': '10000001566', + 'knr': '2146496300', + 'vin': '492392', + 'hostSN': 81648, + 'partCode': '80D8677684PK', + 'partCode2': '80D8677684PK', + 'sn': 24 + } + ] + }, + 'status': true, + 'message': '' +} +"; + + public const string MenBanVal = @" +{ + 'masterList': [ + { + 'billNum': ' 10000000138', + 'billSerialNum': '03', + 'billLocation': '左', + 'providerCode': '0709FAW-VW7XH', + 'partType': 'C8 DP', + 'capacity': '12', + 'printDate': '2021-12-01 16:10:26', + 'printType': 0, + 'productLine': '01', + 'beginVin': 'LFV2A24K0M3303466', + 'endVin': 'LFV2A24K0M3303595', + 'details': null + }, + { + 'billNum': ' 10000000139', + 'billSerialNum': '03', + 'billLocation': '右', + 'providerCode': '0709FAW-VW7XH', + 'partType': 'C8 DP', + 'capacity': '12', + 'printDate': '2021-12-01 16:10:26', + 'printType': 0, + 'productLine': '01', + 'beginVin': 'LFV2A24K0M3303466', + 'endVin': 'LFV2A24K0M3303595', + 'details': null + } + ], + 'detailList': [ + { + 'billNum': ' 10000000138', + 'knr': ' 21301504611001', + 'vin': 'LFV2A24K0M3303466', + 'hostSN': 1, + 'vehicleModel_DoorPlankCode': 'PHEFZ_N5W_7HB_7Y0_3Y0 9VD GS0 0K3 3L5 QQ2 3FU4V020', + 'topBoxPositionNum': '01', + 'topSAPMaterialNum': '30052525', + 'topMaterialDescription': 'C8-PHEV.黑4024-左后 FZ(黑PVC多孔低扬无电镀)', + 'belowSAPMaterialNum': '30052524', + 'belowMaterialDescription': 'C8-PHEV.黑4024-右前 FZ(黑PVC多孔低扬无电镀)', + 'sn': 1 + }, + { + 'billNum': ' 10000000138', + 'knr': ' 21301503931001', + 'vin': 'LFV2A24K0M3303483', + 'hostSN': 2, + 'vehicleModel_DoorPlankCode': 'PHEFZ_N5W_7HB_7Y0_3Y0 9VD GS0 0K3 3L5 QQ2 3FU4V020', + 'topBoxPositionNum': '02', + 'topSAPMaterialNum': '30052525', + 'topMaterialDescription': 'C8-PHEV.黑4024-左后 FZ(黑PVC多孔低扬无电镀)', + 'belowSAPMaterialNum': '30052524', + 'belowMaterialDescription': 'C8-PHEV.黑4024-右前 FZ(黑PVC多孔低扬无电镀)', + 'sn': 2 + }, + { + 'billNum': ' 10000000138', + 'knr': ' 21301505841001', + 'vin': 'LFV2A24K0M3303497', + 'hostSN': 3, + 'vehicleModel_DoorPlankCode': 'PHEFZ_N5W_7HB_7Y0_3Y0 9VD GS0 0K3 3L5 QQ2 3FU4V020', + 'topBoxPositionNum': '03', + 'topSAPMaterialNum': '30052525', + 'topMaterialDescription': 'C8-PHEV.黑4024-左后 FZ(黑PVC多孔低扬无电镀)', + 'belowSAPMaterialNum': '30052524', + 'belowMaterialDescription': 'C8-PHEV.黑4024-右前 FZ(黑PVC多孔低扬无电镀)', + 'sn': 3 + }, + { + 'billNum': ' 10000000138', + 'knr': ' 21301505461001', + 'vin': 'LFV2A24K0M3303502', + 'hostSN': 4, + 'vehicleModel_DoorPlankCode': 'PHEFZ_N5W_7HB_7Y0_3Y0 9VD GS0 0K3 3L5 QQ2 3FU4V020', + 'topBoxPositionNum': '04', + 'topSAPMaterialNum': '30052525', + 'topMaterialDescription': 'C8-PHEV.黑4024-左后 FZ(黑PVC多孔低扬无电镀)', + 'belowSAPMaterialNum': '30052524', + 'belowMaterialDescription': 'C8-PHEV.黑4024-右前 FZ(黑PVC多孔低扬无电镀)', + 'sn': 4 + }, + { + 'billNum': ' 10000000138', + 'knr': ' 21301507371001', + 'vin': 'LFV2A24K0M3303516', + 'hostSN': 5, + 'vehicleModel_DoorPlankCode': 'PHEFZ_N5W_7HB_7Y0_3Y0 9VD GS0 0K3 3L5 QQ2 3FU4V020', + 'topBoxPositionNum': '05', + 'topSAPMaterialNum': '30052525', + 'topMaterialDescription': 'C8-PHEV.黑4024-左后 FZ(黑PVC多孔低扬无电镀)', + 'belowSAPMaterialNum': '30052524', + 'belowMaterialDescription': 'C8-PHEV.黑4024-右前 FZ(黑PVC多孔低扬无电镀)', + 'sn': 5 + }, + { + 'billNum': ' 10000000138', + 'knr': ' 21301508811001', + 'vin': 'LFV2A24K0M3303533', + 'hostSN': 6, + 'vehicleModel_DoorPlankCode': 'PHEFZ_N5W_7HB_7Y0_3Y0 9VD GS0 0K3 3L5 QQ2 3FU4V020', + 'topBoxPositionNum': '06', + 'topSAPMaterialNum': '30052525', + 'topMaterialDescription': 'C8-PHEV.黑4024-左后 FZ(黑PVC多孔低扬无电镀)', + 'belowSAPMaterialNum': '30052524', + 'belowMaterialDescription': 'C8-PHEV.黑4024-右前 FZ(黑PVC多孔低扬无电镀)', + 'sn': 6 + }, + { + 'billNum': ' 10000000138', + 'knr': ' 21301510311001', + 'vin': 'LFV2A24K0M3303547', + 'hostSN': 7, + 'vehicleModel_DoorPlankCode': 'PHEFZ_N5W_7HB_7Y0_3Y0 9VD GS0 0K3 3L5 QQ2 3FU4V020', + 'topBoxPositionNum': '07', + 'topSAPMaterialNum': '30052525', + 'topMaterialDescription': 'C8-PHEV.黑4024-左后 FZ(黑PVC多孔低扬无电镀)', + 'belowSAPMaterialNum': '30052524', + 'belowMaterialDescription': 'C8-PHEV.黑4024-右前 FZ(黑PVC多孔低扬无电镀)', + 'sn': 7 + }, + { + 'billNum': ' 10000000138', + 'knr': ' 21301510621001', + 'vin': 'LFV2A24K0M3303550', + 'hostSN': 8, + 'vehicleModel_DoorPlankCode': 'PHEFZ_N5W_7HB_7Y0_3Y0 9VD GS0 0K3 3L5 QQ2 3FU4V020', + 'topBoxPositionNum': '08', + 'topSAPMaterialNum': '30052525', + 'topMaterialDescription': 'C8-PHEV.黑4024-左后 FZ(黑PVC多孔低扬无电镀)', + 'belowSAPMaterialNum': '30052524', + 'belowMaterialDescription': 'C8-PHEV.黑4024-右前 FZ(黑PVC多孔低扬无电镀)', + 'sn': 8 + }, + { + 'billNum': ' 10000000138', + 'knr': ' 21311500261001', + 'vin': 'LFV2A24K0M3303564', + 'hostSN': 9, + 'vehicleModel_DoorPlankCode': 'PHEFZ_N5W_7HB_7Y0_3Y0 9VD GS0 0K3 3L5 QQ2 3FU4V020', + 'topBoxPositionNum': '09', + 'topSAPMaterialNum': '30052525', + 'topMaterialDescription': 'C8-PHEV.黑4024-左后 FZ(黑PVC多孔低扬无电镀)', + 'belowSAPMaterialNum': '30052524', + 'belowMaterialDescription': 'C8-PHEV.黑4024-右前 FZ(黑PVC多孔低扬无电镀)', + 'sn': 9 + }, + { + 'billNum': ' 10000000138', + 'knr': ' 21301513451001', + 'vin': 'LFV2A24K0M3303578', + 'hostSN': 10, + 'vehicleModel_DoorPlankCode': 'PHEFZ_N5W_7HB_7Y0_3Y0 9VD GS0 0K3 3L5 QQ2 3FU4V020', + 'topBoxPositionNum': '10', + 'topSAPMaterialNum': '30052525', + 'topMaterialDescription': 'C8-PHEV.黑4024-左后 FZ(黑PVC多孔低扬无电镀)', + 'belowSAPMaterialNum': '30052524', + 'belowMaterialDescription': 'C8-PHEV.黑4024-右前 FZ(黑PVC多孔低扬无电镀)', + 'sn': 10 + }, + { + 'billNum': ' 10000000138', + 'knr': ' 21301513761001', + 'vin': 'LFV2A24K0M3303581', + 'hostSN': 11, + 'vehicleModel_DoorPlankCode': 'PHEFZ_N5W_7HB_7Y0_3Y0 9VD GS0 0K3 3L5 QQ2 3FU4V020', + 'topBoxPositionNum': '11', + 'topSAPMaterialNum': '30052525', + 'topMaterialDescription': 'C8-PHEV.黑4024-左后 FZ(黑PVC多孔低扬无电镀)', + 'belowSAPMaterialNum': '30052524', + 'belowMaterialDescription': 'C8-PHEV.黑4024-右前 FZ(黑PVC多孔低扬无电镀)', + 'sn': 11 + }, + { + 'billNum': ' 10000000138', + 'knr': ' 21311500881001', + 'vin': 'LFV2A24K0M3303595', + 'hostSN': 12, + 'vehicleModel_DoorPlankCode': 'PHEFZ_N5W_7HB_7Y0_3Y0 9VD GS0 0K3 3L5 QQ2 3FU4V020', + 'topBoxPositionNum': '12', + 'topSAPMaterialNum': '30052525', + 'topMaterialDescription': 'C8-PHEV.黑4024-左后 FZ(黑PVC多孔低扬无电镀)', + 'belowSAPMaterialNum': '30052524', + 'belowMaterialDescription': 'C8-PHEV.黑4024-右前 FZ(黑PVC多孔低扬无电镀)', + 'sn': 12 + }, + { + 'billNum': ' 10000000139', + 'knr': ' 21301504611001', + 'vin': 'LFV2A24K0M3303466', + 'hostSN': 1, + 'vehicleModel_DoorPlankCode': 'PHEFZ_N5W_7HB_7Y0_3Y0 9VD GS0 0K3 3L5 QQ2 3FU4V020', + 'topBoxPositionNum': '01', + 'topSAPMaterialNum': '30052526', + 'topMaterialDescription': 'C8-PHEV.黑4024-右后 FZ(黑PVC多孔低扬无电镀)', + 'belowSAPMaterialNum': '30052523', + 'belowMaterialDescription': 'C8-PHEV.黑4024-左前 FZ(黑PVC多孔低扬无电镀)', + 'sn': 1 + }, + { + 'billNum': ' 10000000139', + 'knr': ' 21301503931001', + 'vin': 'LFV2A24K0M3303483', + 'hostSN': 2, + 'vehicleModel_DoorPlankCode': 'PHEFZ_N5W_7HB_7Y0_3Y0 9VD GS0 0K3 3L5 QQ2 3FU4V020', + 'topBoxPositionNum': '02', + 'topSAPMaterialNum': '30052526', + 'topMaterialDescription': 'C8-PHEV.黑4024-右后 FZ(黑PVC多孔低扬无电镀)', + 'belowSAPMaterialNum': '30052523', + 'belowMaterialDescription': 'C8-PHEV.黑4024-左前 FZ(黑PVC多孔低扬无电镀)', + 'sn': 2 + }, + { + 'billNum': ' 10000000139', + 'knr': ' 21301505841001', + 'vin': 'LFV2A24K0M3303497', + 'hostSN': 3, + 'vehicleModel_DoorPlankCode': 'PHEFZ_N5W_7HB_7Y0_3Y0 9VD GS0 0K3 3L5 QQ2 3FU4V020', + 'topBoxPositionNum': '03', + 'topSAPMaterialNum': '30052526', + 'topMaterialDescription': 'C8-PHEV.黑4024-右后 FZ(黑PVC多孔低扬无电镀)', + 'belowSAPMaterialNum': '30052523', + 'belowMaterialDescription': 'C8-PHEV.黑4024-左前 FZ(黑PVC多孔低扬无电镀)', + 'sn': 3 + }, + { + 'billNum': ' 10000000139', + 'knr': ' 21301505461001', + 'vin': 'LFV2A24K0M3303502', + 'hostSN': 4, + 'vehicleModel_DoorPlankCode': 'PHEFZ_N5W_7HB_7Y0_3Y0 9VD GS0 0K3 3L5 QQ2 3FU4V020', + 'topBoxPositionNum': '04', + 'topSAPMaterialNum': '30052526', + 'topMaterialDescription': 'C8-PHEV.黑4024-右后 FZ(黑PVC多孔低扬无电镀)', + 'belowSAPMaterialNum': '30052523', + 'belowMaterialDescription': 'C8-PHEV.黑4024-左前 FZ(黑PVC多孔低扬无电镀)', + 'sn': 4 + }, + { + 'billNum': ' 10000000139', + 'knr': ' 21301507371001', + 'vin': 'LFV2A24K0M3303516', + 'hostSN': 5, + 'vehicleModel_DoorPlankCode': 'PHEFZ_N5W_7HB_7Y0_3Y0 9VD GS0 0K3 3L5 QQ2 3FU4V020', + 'topBoxPositionNum': '05', + 'topSAPMaterialNum': '30052526', + 'topMaterialDescription': 'C8-PHEV.黑4024-右后 FZ(黑PVC多孔低扬无电镀)', + 'belowSAPMaterialNum': '30052523', + 'belowMaterialDescription': 'C8-PHEV.黑4024-左前 FZ(黑PVC多孔低扬无电镀)', + 'sn': 5 + }, + { + 'billNum': ' 10000000139', + 'knr': ' 21301508811001', + 'vin': 'LFV2A24K0M3303533', + 'hostSN': 6, + 'vehicleModel_DoorPlankCode': 'PHEFZ_N5W_7HB_7Y0_3Y0 9VD GS0 0K3 3L5 QQ2 3FU4V020', + 'topBoxPositionNum': '06', + 'topSAPMaterialNum': '30052526', + 'topMaterialDescription': 'C8-PHEV.黑4024-右后 FZ(黑PVC多孔低扬无电镀)', + 'belowSAPMaterialNum': '30052523', + 'belowMaterialDescription': 'C8-PHEV.黑4024-左前 FZ(黑PVC多孔低扬无电镀)', + 'sn': 6 + }, + { + 'billNum': ' 10000000139', + 'knr': ' 21301510311001', + 'vin': 'LFV2A24K0M3303547', + 'hostSN': 7, + 'vehicleModel_DoorPlankCode': 'PHEFZ_N5W_7HB_7Y0_3Y0 9VD GS0 0K3 3L5 QQ2 3FU4V020', + 'topBoxPositionNum': '07', + 'topSAPMaterialNum': '30052526', + 'topMaterialDescription': 'C8-PHEV.黑4024-右后 FZ(黑PVC多孔低扬无电镀)', + 'belowSAPMaterialNum': '30052523', + 'belowMaterialDescription': 'C8-PHEV.黑4024-左前 FZ(黑PVC多孔低扬无电镀)', + 'sn': 7 + }, + { + 'billNum': ' 10000000139', + 'knr': ' 21301510621001', + 'vin': 'LFV2A24K0M3303550', + 'hostSN': 8, + 'vehicleModel_DoorPlankCode': 'PHEFZ_N5W_7HB_7Y0_3Y0 9VD GS0 0K3 3L5 QQ2 3FU4V020', + 'topBoxPositionNum': '08', + 'topSAPMaterialNum': '30052526', + 'topMaterialDescription': 'C8-PHEV.黑4024-右后 FZ(黑PVC多孔低扬无电镀)', + 'belowSAPMaterialNum': '30052523', + 'belowMaterialDescription': 'C8-PHEV.黑4024-左前 FZ(黑PVC多孔低扬无电镀)', + 'sn': 8 + }, + { + 'billNum': ' 10000000139', + 'knr': ' 21311500261001', + 'vin': 'LFV2A24K0M3303564', + 'hostSN': 9, + 'vehicleModel_DoorPlankCode': 'PHEFZ_N5W_7HB_7Y0_3Y0 9VD GS0 0K3 3L5 QQ2 3FU4V020', + 'topBoxPositionNum': '09', + 'topSAPMaterialNum': '30052526', + 'topMaterialDescription': 'C8-PHEV.黑4024-右后 FZ(黑PVC多孔低扬无电镀)', + 'belowSAPMaterialNum': '30052523', + 'belowMaterialDescription': 'C8-PHEV.黑4024-左前 FZ(黑PVC多孔低扬无电镀)', + 'sn': 9 + }, + { + 'billNum': ' 10000000139', + 'knr': ' 21301513451001', + 'vin': 'LFV2A24K0M3303578', + 'hostSN': 10, + 'vehicleModel_DoorPlankCode': 'PHEFZ_N5W_7HB_7Y0_3Y0 9VD GS0 0K3 3L5 QQ2 3FU4V020', + 'topBoxPositionNum': '10', + 'topSAPMaterialNum': '30052526', + 'topMaterialDescription': 'C8-PHEV.黑4024-右后 FZ(黑PVC多孔低扬无电镀)', + 'belowSAPMaterialNum': '30052523', + 'belowMaterialDescription': 'C8-PHEV.黑4024-左前 FZ(黑PVC多孔低扬无电镀)', + 'sn': 10 + }, + { + 'billNum': ' 10000000139', + 'knr': ' 21301513761001', + 'vin': 'LFV2A24K0M3303581', + 'hostSN': 11, + 'vehicleModel_DoorPlankCode': 'PHEFZ_N5W_7HB_7Y0_3Y0 9VD GS0 0K3 3L5 QQ2 3FU4V020', + 'topBoxPositionNum': '11', + 'topSAPMaterialNum': '30052526', + 'topMaterialDescription': 'C8-PHEV.黑4024-右后 FZ(黑PVC多孔低扬无电镀)', + 'belowSAPMaterialNum': '30052523', + 'belowMaterialDescription': 'C8-PHEV.黑4024-左前 FZ(黑PVC多孔低扬无电镀)', + 'sn': 11 + }, + { + 'billNum': ' 10000000139', + 'knr': ' 21311500881001', + 'vin': 'LFV2A24K0M3303595', + 'hostSN': 12, + 'vehicleModel_DoorPlankCode': 'PHEFZ_N5W_7HB_7Y0_3Y0 9VD GS0 0K3 3L5 QQ2 3FU4V020', + 'topBoxPositionNum': '12', + 'topSAPMaterialNum': '30052526', + 'topMaterialDescription': 'C8-PHEV.黑4024-右后 FZ(黑PVC多孔低扬无电镀)', + 'belowSAPMaterialNum': '30052523', + 'belowMaterialDescription': 'C8-PHEV.黑4024-左前 FZ(黑PVC多孔低扬无电镀)', + 'sn': 12 + } + ] + } +"; + } +} \ No newline at end of file diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/appcode/ReportGenerator.cs b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/appcode/ReportGenerator.cs new file mode 100644 index 0000000..2ae6cd1 --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/appcode/ReportGenerator.cs @@ -0,0 +1,202 @@ +using System; +using System.Web; +using grsvr6Lib; + +namespace GridReport +{ + public class ReportGenerator + { + protected HttpContext context = null; + + public GridppReportServer report = new GridppReportServer(); + + + + public ReportGenerator(HttpContext context) + { + this.context = context; + } + + //根据HTTP请求中的 report 参数加载报表模板 + public void LoadReport() + { + string reportID = context.Request.QueryString["report"]; + + if (reportID == null || reportID.Length == 0) + throw new Exception("没有在URL参数中指定\"report\"参数!"); + + //载入报表模板。模板路径获取应该按实际情况进行调整 + string reportPathFile = context.Server.MapPath("../grf/") + reportID + ".grf"; //根据当前页进行相对寻址 + //string reportPathFile = context.Server.MapPath("/grf/") + reportID + ".grf"; //根据WEB服务器根目录寻址 + LoadReportEx(reportPathFile); + } + + /// + /// 导入子报表【适用于柱护板报表】 + /// + /// 不含文件扩展名的文件名称 + /// + public GridppReportServer LoadChildReport(string fileShortName) + { + string reportPathFile = context.Server.MapPath("../grf/") + fileShortName + ".grf"; //根据当前页进行相对寻址 + bool success = report.LoadFromFile(reportPathFile); + if (!success) + throw new Exception(string.Format("载入 子 报表模板 '{0}' 失败!", reportPathFile)); + return report; + } + + //根据路径文件名加载报表模板,参数为当前网页的相对文件路径名 + public void LoadReport(string relativePathFile) + { + string reportPathFile = context.Server.MapPath(relativePathFile); + LoadReportEx(reportPathFile); + } + + //根据完整的路径文件名加载报表模板 + public void LoadReportEx(string fullPathFile) + { + bool success = report.LoadFromFile(fullPathFile); + if (!success) + throw new Exception(string.Format("载入报表模板 '{0}' 失败!", fullPathFile)); + + //如果要禁止用拉模式获取报表数据,需要将报表模板中的数据连接串置空 + //如果确实要用拉模式获取报表数据,请将以下代码注释掉 + //report.ConnectionString = ""; + //if (report.DetailGrid != null) + // report.DetailGrid.Recordset.ConnectionString = ""; + } + + //从 XML 或 JSON 文本数据包加载报表数据。数据形式必须满足Grid++report的约定要求。 + public void LoadReportData(string DataText) + { + bool success = report.LoadDataFromXML(DataText); + if (!success) + throw new Exception(string.Format("载入报表数据:\r\n '{0}' \r\n失败!", DataText)); + } + + //生成报表结果到二进制数据包对象中,并将数据响应给请求的客户端 + //HTTP请求中包含的参数: + //report: 指定哪个报表 + //type: 指定生成的数据类型,可选[pdf|xls|csv|txt|rtf|img|grd|grp]。如果不指定,默认为pdf + //img: 指定生成的图像数据格式,仅当生成图像数据时需要,可选[png|bmp|jpg|tif]。如果不指定,默认为png + //open: 指定生成的数据打开模式,可选[inline|attachment],"inline"表示在网页中内联显示,"attachment"表示以附件文件形式下载。如果不指定,由浏览器自动确定打开方式 + //filename: 指定下载(或保存)文件时的默认文件名称 + public void Generate() + { + string TypeText = context.Request.QueryString["type"]; + string ImageTypeText = context.Request.QueryString["img"]; + string FileName = context.Request.QueryString["filename"]; + string OpenMode = context.Request.QueryString["open"]; + + Generate(TypeText, FileName, OpenMode, ImageTypeText); + } + + public void Generate(string TypeText, string FileName) + { + Generate(TypeText, FileName, "", ""); + } + + public void Generate(string TypeText, string FileName, string OpenMode, string ImageTypeText) + { + //确定导出数据类型及数据的ContentType + ReportGenerateInfo GenerateInfo = new ReportGenerateInfo(); + GenerateInfo.Build(TypeText, ImageTypeText); + + IGRBinaryObject ResultDataObject; + if (GenerateInfo.IsGRD) + { + ResultDataObject = report.GenerateDocumentData(); + } + else + { + IGRExportOption ExportOption = report.PrepareExport(GenerateInfo.ExportType); + + if (GenerateInfo.ExportType == GRExportType.gretIMG) + { + IGRE2IMGOption E2IMGOption = ExportOption.AsE2IMGOption; + E2IMGOption.ImageType = GenerateInfo.ImageType; + E2IMGOption.AllInOne = true; //所有页产生在一个图像文件中 + //E2IMGOption.VertGap = 20; //页之间设置20个像素的间距 + } + + ResultDataObject = report.ExportToBinaryObject(); + report.UnprepareExport(); + } + + #region 响应生成的报表结果数据 + //如果参数中没指定文件名,则更报表模板中的“标题”属性设置一个默认文件名 + if (FileName == null || FileName.Length == 0) + { + if (report.Title == null || report.Title.Length == 0) + FileName = "gridreport"; + else + FileName = report.Title; + FileName += "." + GenerateInfo.ExtFileBame; + } + + ServerUtility.ResponseBinary(context, ResultDataObject, FileName, GenerateInfo.ContentType, OpenMode); + #endregion + } + + #region 导出Base64 + public string Generate2() + { + string TypeText = context.Request.QueryString["type"]; + string ImageTypeText = context.Request.QueryString["img"]; + string FileName = context.Request.QueryString["filename"]; + string OpenMode = context.Request.QueryString["open"]; + + return Generate2(TypeText, FileName, OpenMode, ImageTypeText); + } + + + public string Generate2(string TypeText, string FileName, string OpenMode, string ImageTypeText) + { + //确定导出数据类型及数据的ContentType + ReportGenerateInfo GenerateInfo = new ReportGenerateInfo(); + GenerateInfo.Build(TypeText, ImageTypeText); + + IGRBinaryObject ResultDataObject; + if (GenerateInfo.IsGRD) + { + ResultDataObject = report.GenerateDocumentData(); + } + else + { + IGRExportOption ExportOption = report.PrepareExport(GenerateInfo.ExportType); + + if (GenerateInfo.ExportType == GRExportType.gretIMG) + { + IGRE2IMGOption E2IMGOption = ExportOption.AsE2IMGOption; + E2IMGOption.ImageType = GenerateInfo.ImageType; + E2IMGOption.AllInOne = true; //所有页产生在一个图像文件中 + //E2IMGOption.VertGap = 20; //页之间设置20个像素的间距 + } + + ResultDataObject = report.ExportToBinaryObject(); + report.UnprepareExport(); + } + + #region 响应生成的报表结果数据 + //如果参数中没指定文件名,则更报表模板中的“标题”属性设置一个默认文件名 + if (FileName == null || FileName.Length == 0) + { + if (report.Title == null || report.Title.Length == 0) + FileName = "gridreport"; + else + FileName = report.Title; + FileName += "." + GenerateInfo.ExtFileBame; + } + + #endregion + object Data = ResultDataObject.SaveToVariant(); + byte[] byArr = (byte[])Data; + string base64Str = Convert.ToBase64String(byArr); + return base64Str; + + } + + #endregion + + } +} diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/appcode/ServerUtility.cs b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/appcode/ServerUtility.cs new file mode 100644 index 0000000..ba89456 --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/appcode/ServerUtility.cs @@ -0,0 +1,336 @@ +using System; +using System.Collections; +using System.Web; +using System.Data; +using grsvr6Lib; +//using OfficeOpenXml; + +namespace GridReport +{ + public class ReportGenerateInfo + { + public string ContentType; //HTTP响应ContentType + public string ExtFileBame; //默认扩展文件名 + public bool IsGRD; //是否生成为 Grid++Report 报表文档格式 + public GRExportType ExportType; //导出的数据格式类型 + public GRExportImageType ImageType; //导出的图像格式类型 + + ///根据报表导出格式类型,生成对应的响应信息,将结果信息保存本类的成员变量中 + ///参数 ExportTypeText: 指定报表导出的导出格式类型 + ///参数 ImageTypeText: 指定生成的图像格式,仅当为导出图像时有效 + public void Build(string ExportTypeText, string ImageTypeText) + { + ExtFileBame = ExportTypeText; + ContentType = "application/"; + IsGRD = (ExportTypeText == "grd" || ExportTypeText == "grp"); + + if (IsGRD) + { + //ContentType += ExportTypeText; //application/grd + ContentType += "octet-stream"; //application/octet-stream + } + else + { + switch (ExportTypeText) + { + case "xls": + ExportType = GRExportType.gretXLS; + ContentType += "x-xls"; //application/vnd.ms-excel application/x-xls + break; + case "csv": + ExportType = GRExportType.gretCSV; + ContentType += "vnd.ms-excel"; //application/vnd.ms-excel application/x-xls + break; + case "txt": + ExportType = GRExportType.gretTXT; + ContentType = "text/plain"; //text/plain + break; + case "rtf": + ExportType = GRExportType.gretRTF; + ContentType += "rtf"; //application/rtf + break; + case "img": + ExportType = GRExportType.gretIMG; + //ContentType 要在后面根据图像格式来确定 + break; + default: + ExtFileBame = "pdf"; //"type"参数如没有设置,保证 ExtFileBame 被设置为"pdf" + ExportType = GRExportType.gretPDF; + ContentType += "pdf"; + break; + } + + //导出图像处理 + if (ExportType == GRExportType.gretIMG) + { + ExtFileBame = ImageTypeText; + switch (ImageTypeText) + { + case "bmp": + ImageType = GRExportImageType.greitBMP; + ContentType += "x-bmp"; + break; + case "jpg": + ImageType = GRExportImageType.greitJPEG; + ContentType += "x-jpg"; + break; + case "tif": + ImageType = GRExportImageType.greitTIFF; + ContentType = "image/tiff"; + break; + default: + ExtFileBame = "png"; + ImageType = GRExportImageType.greitPNG; + ContentType += "x-png"; + break; + } + } + } + } + } + + public class ServerUtility + { + /// + /// 将报表生成的二进制数据响应给 HTPP 请求客户端 + /// + /// HTPP 请求对象 + /// 报表生成的二进制数据 + /// 指定下载(或保存)文件时的默认文件名称 + /// 响应的ContentType + /// 指定生成的数据打开模式,可选[inline|attachment],"inline"表示在网页中内联显示,"attachment"表示以附件文件形式下载。如果不指定,由浏览器自动确定打开方式。 + public static void ResponseBinary(HttpContext context, IGRBinaryObject ExportResult, string FileName, string ContentType, string OpenMode) + { + if (ExportResult.DataSize > 0) + { + string Disposition = ""; + + if (OpenMode != null && OpenMode.Length > 0) + Disposition = OpenMode + "; "; + + Disposition += ServerUtility.EncodeAttachmentFileName(context.Request.UserAgent, FileName); + + context.Response.ContentType = ContentType; + context.Response.AppendHeader("Content-Length", ExportResult.DataSize.ToString()); + context.Response.AppendHeader("Content-Disposition", Disposition); + + context.Response.ClearContent(); + + //当发布到IIS,用InteropServices.Marshal.Copy方式复制导出的数据出现了异常,而在VS的IDE里是正常的,所以改用SaveToVariant + //byte[] buffer = new byte[ExportResult.DataSize]; + //System.Runtime.InteropServices.Marshal.Copy((IntPtr)ExportResult.DataBuf, buffer, 0, ExportResult.DataSize); + //context.Response.BinaryWrite(buffer); + object Data = ExportResult.SaveToVariant(); + context.Response.BinaryWrite((byte[])Data); + + context.Response.Flush(); + } + } + + /// + /// 将异常信息文字响应给请求的客户端 + /// + /// + /// + public static void ResponseException(HttpContext context, string MessageText) + { + context.Response.ContentType = "text/plain"; + context.Response.Write(MessageText); + } + + /// + /// 为了文件名中的汉字与特殊字符能正确,必须进行分浏览器处理 + /// + /// + /// + /// + public static string EncodeAttachmentFileName(string BrowserAgent, string RawFileName) + { + System.Text.UTF8Encoding UTF8Encoding = new System.Text.UTF8Encoding(); + string EncodedFileName = HttpUtility.UrlEncode(RawFileName, UTF8Encoding); + + // 如果没有BrowserAgent,则默认使用IE的方式进行编码,因为毕竟IE还是占多数的 + string ret = "filename=\"" + EncodedFileName + "\""; + if (BrowserAgent != null && BrowserAgent.Length != 0) + { + BrowserAgent = BrowserAgent.ToLower(); + // msie 与 edge 采用默认的方式 + if ((BrowserAgent.IndexOf("msie") == -1) && (BrowserAgent.IndexOf("edge") == -1)) + { + // Chrome浏览器,只能采用MimeUtility编码或ISO编码的中文输出 + if (BrowserAgent.IndexOf("applewebkit") != -1) + { + //EncodedFileName = MimeUtility.encodeText(RawFileName, "UTF8", "B"); + System.Text.UTF8Encoding UTF8EncodingBOM = new System.Text.UTF8Encoding(true); + EncodedFileName = UTF8EncodingBOM.GetString(UTF8EncodingBOM.GetBytes(RawFileName)); + ret = "filename=\"" + EncodedFileName + "\""; + } + // Safari浏览器,只能采用ISO编码的中文输出 + else if (BrowserAgent.IndexOf("safari") != -1) + { + //28591 iso-8859-1 1252 * + //ret = "filename=\"" + new String(filename.getBytes("UTF-8"), "ISO8859-1") + "\""; + byte[] UTF8Bytes = UTF8Encoding.GetBytes(RawFileName); + string ISO8859Text = System.Text.Encoding.GetEncoding(28591).GetString(UTF8Bytes); + ret = "filename=\"" + ISO8859Text + "\""; + } + // Opera浏览器只能采用filename* + // FireFox浏览器,可以使用MimeUtility或filename*或ISO编码的中文输出 + else if ((BrowserAgent.IndexOf("opera") != -1) || (BrowserAgent.IndexOf("mozilla") != -1)) + { + ret = "filename*=UTF-8''" + EncodedFileName; + } + } + } + + return ret; + } + + /// + /// 根据报表模板中的查询SQL获取报表数据 + /// + public static string BuildFromSelfSQL(GridppReportServer Report) + { + string DataText = ""; + + //从 XML 或 JSON 数据包中载入报表数据 + string MasterQuerySQL = Report.QuerySQL; + string DetailQuerySQL = Report.DetailGrid != null ? Report.DetailGrid.Recordset.QuerySQL : null; + bool MasterAssigned = (MasterQuerySQL != null && MasterQuerySQL.Length > 0); + bool DetailAssigned = (DetailQuerySQL != null && DetailQuerySQL.Length > 0); + if (MasterAssigned || DetailAssigned) + { + if (MasterAssigned && DetailAssigned) + { + string MasterTableName = Report.XmlTableName; + if (MasterTableName == null || MasterTableName.Length == 0) + MasterTableName = "Master"; + + string DetailTableName = Report.DetailGrid.Recordset.XmlTableName; + if (DetailTableName == null || DetailTableName.Length == 0) + { + DetailTableName = "Detail"; + } + ArrayList QueryList = new ArrayList(); + QueryList.Add(new ReportQueryItem(DetailQuerySQL, DetailTableName)); + QueryList.Add(new ReportQueryItem(MasterQuerySQL, MasterTableName)); + DataText = DataTextProvider.Build(QueryList); + } + else + { + DataText = DataTextProvider.Build(MasterAssigned ? MasterQuerySQL : DetailQuerySQL); + } + } + + return DataText; + } + + private struct MatchFieldPairType + { + public IGRField grField; + public int MatchColumnIndex; + } + + // 将 DataReader 的数据转储到 Grid++Report 的记录集中 + public static void FillRecordToReport(IGridppReport Report, IDataReader dr) + { + MatchFieldPairType[] MatchFieldPairs = new MatchFieldPairType[Math.Min(Report.DetailGrid.Recordset.Fields.Count, dr.FieldCount)]; + + //根据字段名称与列名称进行匹配,建立DataReader字段与Grid++Report记录集的字段之间的对应关系 + int MatchFieldCount = 0; + for (int i = 0; i < dr.FieldCount; ++i) + { + foreach (IGRField fld in Report.DetailGrid.Recordset.Fields) + { + if (String.Compare(fld.RunningDBField, dr.GetName(i), true) == 0) + { + MatchFieldPairs[MatchFieldCount].grField = fld; + MatchFieldPairs[MatchFieldCount].MatchColumnIndex = i; + ++MatchFieldCount; + break; + } + } + } + + + // 将 DataReader 中的每一条记录转储到 Grid++Report 的记录集中去 + while (dr.Read()) + { + Report.DetailGrid.Recordset.Append(); + + for (int i = 0; i < MatchFieldCount; ++i) + { + if (!dr.IsDBNull(MatchFieldPairs[i].MatchColumnIndex)) + MatchFieldPairs[i].grField.Value = dr.GetValue(MatchFieldPairs[i].MatchColumnIndex); + } + Report.DetailGrid.Recordset.Post(); + } + } + + // 将 DataTable 的数据转储到 Grid++Report 的记录集中 + public static void FillRecordToReport(IGridppReport Report, DataTable dt) + { + MatchFieldPairType[] MatchFieldPairs = new MatchFieldPairType[Math.Min(Report.DetailGrid.Recordset.Fields.Count, dt.Columns.Count)]; + + //根据字段名称与列名称进行匹配,建立DataReader字段与Grid++Report记录集的字段之间的对应关系 + int MatchFieldCount = 0; + for (int i = 0; i < dt.Columns.Count; ++i) + { + foreach (IGRField fld in Report.DetailGrid.Recordset.Fields) + { + if (String.Compare(fld.Name, dt.Columns[i].ColumnName, true) == 0) + { + MatchFieldPairs[MatchFieldCount].grField = fld; + MatchFieldPairs[MatchFieldCount].MatchColumnIndex = i; + ++MatchFieldCount; + break; + } + } + } + + + // 将 DataTable 中的每一条记录转储到 Grid++Report 的记录集中去 + foreach (DataRow dr in dt.Rows) + { + Report.DetailGrid.Recordset.Append(); + + for (int i = 0; i < MatchFieldCount; ++i) + { + if (!dr.IsNull(MatchFieldPairs[i].MatchColumnIndex)) + MatchFieldPairs[i].grField.Value = dr[MatchFieldPairs[i].MatchColumnIndex]; + } + + Report.DetailGrid.Recordset.Post(); + } + } + + public static uint RGBToOleColor(byte r, byte g, byte b) + { + return ((uint)b) * 256 * 256 + ((uint)g) * 256 + r; + } + + public static uint ColorToOleColor(System.Drawing.Color val) + { + return RGBToOleColor(val.R, val.G, val.B); + } + + //判断当前运行进程是不是64位程序 + public static bool Is64bitProcess() + { + //IsWow64Process + //也可以直接用Environment.Is64BitProcess,不过需要DotNet4.0或以上版本。 + return (IntPtr.Size == 8); + } + + //生成数据源连接串,根据当前运行环境与配置参数进行实际调整 + public static string BuildOLEDBConnectionString() + { + //Grid++Report的64位程序通过OLE DB连接Access与32位程序使用完全不同的数据驱动程序, + //此数据驱动程序(AccessDatabaseEngine_X64.exe)没有跟随Windows系统自动安装,需要从 + //微软网站下载并安装, 下载地址:https://www.microsoft.com/zh-CN/download/details.aspx?id=13255 + //如果直接不能安装,要先将Ofiice卸载后再进行安装,驱动程序安装后,在重新安装Office。 + return (Is64bitProcess() ? "Provider = Microsoft.ACE.OLEDB.12.0;" : "Provider=Microsoft.Jet.OLEDB.4.0;") + + "User ID=Admin;Data Source=" + @"C:\Grid++Report 6\Samples\Data\NorthWind.mdb"; + } + } +} diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/common_code/DataTextProvider.cs b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/common_code/DataTextProvider.cs new file mode 100644 index 0000000..ef5904b --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/common_code/DataTextProvider.cs @@ -0,0 +1,517 @@ +///下面两个编译条件参数指定产生报表数据的格式。如果都不定义,则产生 XML 形式的报表数据 +///编译条件参数定义在项目属性的“生成->条件编译符号”里更合适,这样可以为整个项目使用 +///_XML_REPORT_DATA:指定产生 XML 形式的报表数据 +///_JSON_REPORT_DATA:指定产生 JSON 形式的报表数据。 +//#define _XML_REPORT_DATA +#define _JSON_REPORT_DATA + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Web; +using System.Text; +using System.Diagnostics; + +namespace GridReport +{ + +#if _JSON_REPORT_DATA + using MyDbReportData = DatabaseJsonReportData; +#else +using MyDbReportData = DatabaseXmlReportData; +#endif + + /// + /// 在这里集中产生整个项目的所有报表需要的 XML 或 JSON 文本数据 + /// + public class DataTextProvider + { + /// + /// 根据查询SQL语句产生报表数据 + /// + public static string Build(string QuerySQL) + { + return MyDbReportData.TextFromOneSQL(QuerySQL); + } + + /// + /// 根据多条查询SQL语句产生报表数据,数据对应多记录集 + /// + public static string Build(ArrayList QueryList) + { + return MyDbReportData.TextFromMultiSQL(QueryList); + } + + #region 产生特定的报表数据文本 + public static string Customer() + { + return MyDbReportData.TextFromOneSQL("select * from Customers order by Region,City"); + } + + public static string AppendBlankRow() + { + string QuerySQL = string.Format( + "select m.OrderId, m.OrderDate, d.Productid,p.ProductName,d.Quantity," + + "d.UnitPrice*d.Quantity as Amount " + + "from orders m inner join (OrderDetails d inner join Products p on d.ProductID=p.ProductID) " + + "on m.orderid=d.orderid " + + "where (m.OrderDate between {0}1996-1-1{0} And {0}1997-9-30{0}) and d.Productid<10 " + + "order by d.ProductID", DatabaseReportData.DateSqlBracketChar); + return MyDbReportData.TextFromOneSQL(QuerySQL); + } + + public static string Categories() + { + return MyDbReportData.TextFromOneSQL("select * from categories"); + } + + public static string ContractOne() + { + const string QuerySQL = + "select m.OrderID,m.CustomerId,c.CompanyName,m.OrderDate, " + + "p.ProductName,d.UnitPrice,d.Quantity,d.UnitPrice*d.Quantity as Amount " + + "from (Orders m inner join " + + "(OrderDetails as d inner join Products p on P.ProductID=D.ProductID) on m.OrderId=d.OrderId) " + + "left join Customers c on c.CustomerID=m.CustomerID " + + "where m.OrderID=10252 and d.ProductID=20 " + + "order by m.OrderDate, m.OrderID"; + + return MyDbReportData.TextFromOneSQL(QuerySQL); + } + + public static string CrossTab() + { + const string QuerySQL = "select c.City,m.CustomerId,c.CompanyName,d.ProductID,p.ProductName," + + "d.Quantity, d.UnitPrice*d.Quantity as Amount " + + "from (Orders m inner join " + + "(OrderDetails as d inner join Products p " + + "on P.ProductID=D.ProductID) on m.OrderId=d.OrderId) " + + "left join Customers c on c.CustomerID=m.CustomerID " + + "where d.ProductID<8 " + + "order by c.City,m.CustomerId, d.ProductID"; + + return MyDbReportData.TextFromOneSQL(QuerySQL); + } + + public static string CrossTabByDay() + { + string QuerySQL = string.Format("select c.CompanyName,m.OrderDate,d.UnitPrice*d.Quantity as Amount " + + "from (Orders m inner join OrderDetails as d on m.OrderId=d.OrderId) " + + "left join Customers c on c.CustomerID=m.CustomerID " + + "where m.OrderDate between {0}1997-6-1{0} and {0}1997-7-15{0} " + + "order by c.CompanyName, m.OrderDate", DatabaseReportData.DateSqlBracketChar); + + return MyDbReportData.TextFromOneSQL(QuerySQL); + } + + public static string CrossTabByMonth() + { + string QuerySQL = string.Format("select c.CompanyName,m.OrderDate,d.UnitPrice*d.Quantity as Amount " + + "from (Orders m inner join OrderDetails as d on m.OrderId=d.OrderId) " + + "left join Customers c on c.CustomerID=m.CustomerID " + + "where m.OrderDate between {0}1997-1-1{0} and {0}1997-12-31{0} " + + "order by c.CompanyName, m.OrderDate", DatabaseReportData.DateSqlBracketChar); + return MyDbReportData.TextFromOneSQL(QuerySQL); + } + + public static string CrossTabCalendar() + { + string QuerySQL = string.Format( + "select m.OrderDate,sum(d.Quantity) as Qty,sum(d.UnitPrice*d.Quantity) as Amount " + + "from (Orders m inner join OrderDetails as d on m.OrderId=d.OrderId) " + + "where m.OrderDate between {0}1997-1-1{0} and {0}1997-12-31{0} " + + "group by m.OrderDate " + + "order by m.OrderDate", DatabaseReportData.DateSqlBracketChar); + return MyDbReportData.TextFromOneSQL(QuerySQL); + } + + public static string CrossTabSubtotal() + { + string QuerySQL = string.Format( + "select t.CategoryName, p.ProductName,c.City,c.CompanyName,d.Quantity " + + "from (Orders m inner join " + + "(OrderDetails as d inner join (Products p inner join Categories t on p.CategoryID=t.CategoryID) " + + "on P.ProductID=D.ProductID) on m.OrderId=d.OrderId) " + + "left join Customers c on c.CustomerID=m.CustomerID " + + "where m.OrderDate between {0}1997-1-1{0} and {0}1997-3-31{0} " + + "order by t.CategoryName,p.ProductName,c.City,c.CompanyName ", DatabaseReportData.DateSqlBracketChar); + return MyDbReportData.TextFromOneSQL(QuerySQL); + } + + public static string CrossTabYearMonth() + { + string QuerySQL = "select Year(m.OrderDate) As TheYear,Month(m.OrderDate) As TheMonth, sum(d.UnitPrice*d.Quantity) as Amount " + + "from Orders m inner join OrderDetails as d on m.OrderId=d.OrderId " + + "group by Year(m.OrderDate),Month(m.OrderDate) " + + "order by Year(m.OrderDate),Month(m.OrderDate)"; + return MyDbReportData.TextFromOneSQL(QuerySQL); + } + + public static string EmployeeOne() + { + const string QuerySQL = "select * from Employees where EmployeeID=5"; + return MyDbReportData.TextFromOneSQL(QuerySQL); + } + + public static string FreeGridwithDetailGrid() + { + //第一个查询SQL串指定报表明细数据的查询SQL + //第二个查询SQL串指定报表参数数据的查询SQL + const string RecordsetQuerySQL = "select * from Employees where EmployeeID<8"; + const string ParameterQuerySQL = "select * from Employees where EmployeeID=8"; + + ArrayList QueryList = new ArrayList(); + QueryList.Add(new ReportQueryItem(RecordsetQuerySQL, "Detail")); + QueryList.Add(new ReportQueryItem(ParameterQuerySQL, "FreeGrid")); + + return MyDbReportData.TextFromMultiSQL(QueryList); + } + + public static string InvoiceMany() + { + const string QuerySQL = + "select m.OrderID,m.CustomerId,c.CompanyName,C.Address,m.OrderDate,c.ContactName+c.Phone as Remark, " + + "d.ProductID,p.ProductName,d.UnitPrice,d.Quantity,d.UnitPrice*d.Quantity as Amount " + + "from (Orders m inner join (OrderDetails d inner join Products p on p.ProductID=d.ProductID) " + + "on d.OrderID=m.OrderID) left join Customers c on c.CustomerID=m.CustomerID " + + "where m.OrderID>=10255 and m.OrderID<10260 "; + return MyDbReportData.TextFromOneSQL(QuerySQL); + } + + public static string InvoiceOne() + { + //第一个查询SQL串指定报表明细数据的查询SQL + //第二个查询SQL串指定报表参数数据的查询SQL + const string RecordsetQuerySQL = "select d.ProductID,p.ProductName,d.UnitPrice,d.Quantity,d.UnitPrice*d.Quantity as Amount " + + "from OrderDetails as d inner join Products p on P.ProductID=D.ProductID " + + "where d.OrderID=10255"; + const string ParameterQuerySQL = "select m.OrderID,m.CustomerId,c.CompanyName,C.Address,m.OrderDate,c.ContactName+c.Phone as Remark " + + "from Orders m left join Customers c on c.CustomerID=m.CustomerID " + + "where m.OrderID=10255"; + + ArrayList QueryList = new ArrayList(); + QueryList.Add(new ReportQueryItem(RecordsetQuerySQL, "Detail")); + QueryList.Add(new ReportQueryItem(ParameterQuerySQL, "Master")); + + return MyDbReportData.TextFromMultiSQL(QueryList); + } + + public static string Picture() + { + const string QuerySQL = "select EmployeeID,LastName,FirstName,Title,TitleOfCourtesy,BirthDate,HireDate," + + "Address,City,Region,PostalCode,Country,HomePhone,Extension,Photo,Notes from Employees"; + + return MyDbReportData.TextFromOneSQL(QuerySQL); + } + + public static string RTFSample() + { + string QuerySQL = string.Format("select m.OrderID,m.CustomerId,c.CompanyName,c.ContactName,c.Address,c.city,c.Region,c.Country,c.Postalcode," + + "m.OrderDate,M.Freight,d.ProductID,p.ProductName," + + "d.UnitPrice,d.Quantity,d.Discount," + + "d.UnitPrice*d.Quantity as Amount," + + "d.UnitPrice*d.Quantity*d.Discount as DiscountAmt," + + "d.UnitPrice*d.Quantity-d.UnitPrice*d.Quantity*d.Discount as NetAmount " + + "from (Orders m inner join " + + "(OrderDetails as d inner join Products p on P.ProductID=D.ProductID) on m.OrderId=d.OrderId) " + + "left join Customers c on c.CustomerID=m.CustomerID " + + "where m.OrderDate between {0}1997-1-1{0} And {0}1997-1-15{0} " + + "order by m.CustomerID,m.OrderDate, m.OrderID", DatabaseReportData.DateSqlBracketChar); + return MyDbReportData.TextFromOneSQL(QuerySQL); + } + + public static string SaleByProduct() + { + string QuerySQL = string.Format( + "select m.OrderID,m.OrderDate, " + + "d.ProductID,p.ProductName,d.UnitPrice,d.Quantity,d.UnitPrice*d.Quantity as Amount " + + "from Orders m inner join " + + "(OrderDetails as d inner join Products p on P.ProductID=D.ProductID) on m.OrderId=d.OrderId " + + "where m.OrderDate between {0}1997-6-1{0} and {0}1997-12-31{0} " + + "order by d.ProductID, m.OrderDate", DatabaseReportData.DateSqlBracketChar); + return MyDbReportData.TextFromOneSQL(QuerySQL); + } + + public static string SaleDetail() + { + const string QuerySQL = "select m.OrderID,m.CustomerId,c.CompanyName,m.OrderDate,M.Freight," + + "d.ProductID,p.ProductName,d.UnitPrice,d.Quantity,d.Discount, " + + "d.UnitPrice*d.Quantity as Amount, d.UnitPrice*d.Quantity*d.Discount as DiscountAmt, " + + "d.UnitPrice*d.Quantity-d.UnitPrice*d.Quantity*d.Discount as NetAmount " + + "from (Orders m inner join " + + "(OrderDetails as d inner join Products p on P.ProductID=D.ProductID) on m.OrderId=d.OrderId) " + + "left join Customers c on c.CustomerID=m.CustomerID " + + "where m.OrderID<=10300 " + + "order by m.OrderDate, m.OrderID"; + return MyDbReportData.TextFromOneSQL(QuerySQL); + } + + public static string SaleSumByProduct() + { + string QuerySQL = string.Format( + "select d.Productid,p.ProductName,sum(d.Quantity) as Quantity, " + + "sum(d.UnitPrice*d.Quantity*(1-d.Discount)) as Amount " + + "from orders m inner join (OrderDetails d inner join Products p " + + "on d.ProductID=p.ProductID) " + + "on m.orderid=d.orderid " + + "where m.OrderDate between {0}1997-1-1{0} and {0}1997-12-31{0} " + + "group by d.Productid,p.ProductName " + + "order by d.Productid", DatabaseReportData.DateSqlBracketChar); + return MyDbReportData.TextFromOneSQL(QuerySQL); + } + + public static string SubReport_4a() + { + const string Top10CustomerQuerySQL = + "select top 10 c.CustomerID, c.CompanyName, sum(o.Quantity*o.UnitPrice) As SumAmt " + + "from OrderDetails o, Orders m, customers c " + + "where o.OrderID=m.OrderID and m.CustomerID=c.CustomerID " + + "group by c.CustomerID, c.CompanyName " + + "order by sum(o.Quantity*o.UnitPrice) desc"; + const string Top10ProductQuerySQL = + "select top 10 p.ProductID, p.ProductName, sum(o.Quantity*o.UnitPrice) As SumQty " + + "from OrderDetails o, Products p " + + "where o.ProductID=p.ProductID " + + "group by p.ProductID, p.ProductName " + + "order by sum(Quantity*o.UnitPrice) desc"; + + ArrayList QueryList = new ArrayList(); + QueryList.Add(new ReportQueryItem("select * from Customers order by CustomerID", "Customer")); + QueryList.Add(new ReportQueryItem("select * from Products order by ProductName", "Product")); + QueryList.Add(new ReportQueryItem(Top10CustomerQuerySQL, "Top10Customer")); + QueryList.Add(new ReportQueryItem(Top10ProductQuerySQL, "Top10Product")); + return MyDbReportData.TextFromMultiSQL(QueryList); + } + + public static string SubReport_4b() + { + ArrayList QueryList = new ArrayList(); + QueryList.Add(new ReportQueryItem("select * from Customers order by CustomerID", "Customer")); + QueryList.Add(new ReportQueryItem("select * from Products order by ProductName", "Product")); + QueryList.Add(new ReportQueryItem("select * from Customers order by CustomerID", "Customer2")); + return MyDbReportData.TextFromMultiSQL(QueryList); + } + + public static string SubReport_4c() + { + const string RelateCustomerQuerySQL = + "select o.OrderID, o.ShipCity, c.* from Customers c, Orders o " + + "where OrderID<=10260 and c.City=o.ShipCity " + + "order by o.OrderID"; + + ArrayList QueryList = new ArrayList(); + QueryList.Add(new ReportQueryItem("select * from Orders where OrderID<=10260 order by OrderID", "Master")); + QueryList.Add(new ReportQueryItem("select * from OrderDetails where OrderID<=10260", "Detail1")); + QueryList.Add(new ReportQueryItem(RelateCustomerQuerySQL, "Detail2")); + + return MyDbReportData.TextFromMultiSQL(QueryList); + } + + public static string SubReport_4d(string city) + { + string CustomerQuerySQL = "select * from Customers where City='" + city + "'"; + string SupplierQuerySQL = "select * from Suppliers where City='" + city + "'"; + + ArrayList QueryList = new ArrayList(); + QueryList.Add(new ReportQueryItem(CustomerQuerySQL, "Customer")); + QueryList.Add(new ReportQueryItem(SupplierQuerySQL, "Supplier")); + + return MyDbReportData.TextFromMultiSQL(QueryList); + } + + public static string Report_7_3g(int BeginNo, int EndNo) + { + string QuerySQL = string.Format("select * from Products " + + "where ProductID>={0} and ProductID<={1} " + + "order by ProductID", BeginNo, EndNo); + return MyDbReportData.TextFromOneSQL(QuerySQL); + } + + public static string Chart_8b() + { + ArrayList QueryList = new ArrayList(); + QueryList.Add(new ReportQueryItem("select * from scatter order by Name, X", "Table1")); + QueryList.Add(new ReportQueryItem("select * from scatter order by Name, X", "Table2")); + QueryList.Add(new ReportQueryItem("select * from scatter order by Name, X", "Table3")); + QueryList.Add(new ReportQueryItem("select * from scatter order by Name, X", "Table4")); + return MyDbReportData.TextFromMultiSQL(QueryList); + } + + public static string Chart_8d() + { + string SQL = "select c.Region, d.ProductID,p.ProductName, " + + "sum(d.UnitPrice * d.Quantity) as Amount " + + "from(Orders m inner join (OrderDetails as d inner join Products p on P.ProductID = D.ProductID) on m.OrderId = d.OrderId) " + + "left join Customers c on c.CustomerID = m.CustomerID " + + "where d.ProductID in (1, 10, 11, 21) and m.OrderDate between #1997/1/1# and #1997/12/31# " + + "group by c.Region, d.ProductID, p.ProductName " + + "order by d.ProductID, c.Region"; + string SQL2 = "select c.Region, sum(d.UnitPrice * d.Quantity) as Amount, sum(d.Quantity) as Quantity " + + "from(Orders m inner join OrderDetails d on m.OrderId = d.OrderId) " + + "left join Customers c on c.CustomerID = m.CustomerID " + + "where d.ProductID = 11 and m.OrderDate between #1997/1/1# and #1997/12/31# " + + "group by c.Region " + + "order by c.Region"; + + ArrayList QueryList = new ArrayList(); + QueryList.Add(new ReportQueryItem(SQL, "Table1")); + QueryList.Add(new ReportQueryItem(SQL, "Table2")); + QueryList.Add(new ReportQueryItem(SQL, "Table3")); + QueryList.Add(new ReportQueryItem(SQL2, "Table4")); + return MyDbReportData.TextFromMultiSQL(QueryList); + } + + public static string FilterSaleSummary(string BeginDate, string EndDate) + { + string QuerySQL = string.Format("select d.Productid,p.ProductName,sum(d.Quantity) as Quantity," + + "sum(d.UnitPrice*d.Quantity) as Amount " + + "from orders m inner join (OrderDetails d inner join Products p " + + "on d.ProductID=p.ProductID) on m.orderid=d.orderid " + + "where m.OrderDate between {2}{0}{2} And {2}{1}{2}" + + "group by d.Productid,p.ProductName " + + "order by d.Productid", BeginDate, EndDate, DatabaseReportData.DateSqlBracketChar); + return MyDbReportData.TextFromOneSQL(QuerySQL); + } + + public static string FilterSaleDetail(string BeginDate, string EndDate, string ProductID) + { + string QuerySQL = string.Format("select m.OrderId, m.OrderDate, d.Productid,p.ProductName,d.Quantity, " + + "d.UnitPrice*d.Quantity as Amount " + + "from orders m inner join (OrderDetails d inner join Products p on d.ProductID=p.ProductID) " + + "on m.orderid=d.orderid " + + "where (m.OrderDate between {3}{0}{3} And {3}{1}{3}) and d.Productid={2} " + + "order by m.OrderDate ", + BeginDate, EndDate, ProductID, DatabaseReportData.DateSqlBracketChar); + return MyDbReportData.TextFromOneSQL(QuerySQL); + } + #endregion + + + #region 根据 HTTP 请求中的参数生成报表数据,主要是为例子报表自动分配合适的数据生成函数 + /// + /// 为了避免 switch 语句的使用,建立数据名称与数据函数的映射(map) + /// 在 Global.asax 中创建映射,即在WEB服务启动时初始化映射数据 + /// + + //简单无参数报表数据的名称与函数映射表 + private delegate string SimpleDataFun(); + private static Dictionary SimpleDataFunMap = new Dictionary(); + + //有参数报表数据的名称与函数映射表,参数来自 HttpRequest + private delegate string SpecialDataFun(HttpRequest Request); + private static Dictionary SpecialDataFunMap = new Dictionary(); + + public static string BuildByHttpRequest(HttpRequest Request) + { + string DataText; + string DataName = Request.QueryString["data"]; + + Trace.Assert(SimpleDataFunMap.Count > 0, "DataFunMap isn't initialized!"); + + if (DataName != null) //if (DataName != "") + { + //根据数据名称查找映射表,如果找到,执行对应的报表数据函数获取数据 + SimpleDataFun simpleFun; + SpecialDataFun specialFun; + if (SimpleDataFunMap.TryGetValue(DataName, out simpleFun)) + { + DataText = simpleFun(); + } + else if (SpecialDataFunMap.TryGetValue(DataName, out specialFun)) + { + DataText = specialFun(Request); + } + else + { + throw new Exception(string.Format("没有为报表数据 '{0}' 分配处理程序!", DataName)); + } + } + else + { + string QuerySQL = Request.QueryString["QuerySQL"]; + if (QuerySQL != null) + { + //根据传递的 HTTP 请求中的查询SQL获取数据 + DataText = DataTextProvider.Build(QuerySQL); + } + else if (Request.TotalBytes > 0) + { + //从客户端发送的数据包中获取报表查询参数,URL有长度限制,当要传递的参数数据量比较大时,应该采用这样的方式 + //这里演示了用这样的方式传递一个超长查询SQL语句。 + byte[] FormData = Request.BinaryRead(Request.TotalBytes); + UTF8Encoding Unicode = new UTF8Encoding(); + int charCount = Unicode.GetCharCount(FormData, 0, Request.TotalBytes); + char[] chars = new Char[charCount]; + int charsDecodedCount = Unicode.GetChars(FormData, 0, Request.TotalBytes, chars, 0); + + QuerySQL = new String(chars); + + DataText = DataTextProvider.Build(QuerySQL); + } + else + { + DataText = ""; + } + } + + return DataText; + } + + //初始化映射表(map),在 Global.asax 中被调用 + public static void InitDataFunMap() + { + Trace.Assert(SimpleDataFunMap.Count <= 0, "DataFunMap already initialized!"); + + SimpleDataFunMap.Add("AppendBlankRow", DataTextProvider.AppendBlankRow); + SimpleDataFunMap.Add("Categories", DataTextProvider.Categories); + SimpleDataFunMap.Add("Chart_8b", DataTextProvider.Chart_8b); + SimpleDataFunMap.Add("Chart_8d", DataTextProvider.Chart_8d); + SimpleDataFunMap.Add("ContractOne", DataTextProvider.ContractOne); + SimpleDataFunMap.Add("CrossTab", DataTextProvider.CrossTab); + SimpleDataFunMap.Add("CrossTabByDay", DataTextProvider.CrossTabByDay); + SimpleDataFunMap.Add("CrossTabByMonth", DataTextProvider.CrossTabByMonth); + SimpleDataFunMap.Add("CrossTabCalendar", DataTextProvider.CrossTabCalendar); + SimpleDataFunMap.Add("CrossTabSubtotal", DataTextProvider.CrossTabSubtotal); + SimpleDataFunMap.Add("CrossTabYearMonth", DataTextProvider.CrossTabYearMonth); + SimpleDataFunMap.Add("Customer", DataTextProvider.Customer); + SimpleDataFunMap.Add("EmployeeOne", DataTextProvider.EmployeeOne); + SimpleDataFunMap.Add("FreeGridwithDetailGrid", DataTextProvider.FreeGridwithDetailGrid); + SimpleDataFunMap.Add("InvoiceMany", DataTextProvider.InvoiceMany); + SimpleDataFunMap.Add("InvoiceOne", DataTextProvider.InvoiceOne); + SimpleDataFunMap.Add("Picture", DataTextProvider.Picture); + SimpleDataFunMap.Add("RTFSample", DataTextProvider.RTFSample); + SimpleDataFunMap.Add("SaleByProduct", DataTextProvider.SaleByProduct); + SimpleDataFunMap.Add("SaleDetail", DataTextProvider.SaleDetail); + SimpleDataFunMap.Add("SaleSumByProduct", DataTextProvider.SaleSumByProduct); + SimpleDataFunMap.Add("SubReport_4a", DataTextProvider.SubReport_4a); + SimpleDataFunMap.Add("SubReport_4b", DataTextProvider.SubReport_4b); + SimpleDataFunMap.Add("SubReport_4c", DataTextProvider.SubReport_4c); + + SpecialDataFunMap.Add("Report_7_3g", DataTextProvider.Report_7_3g); + SpecialDataFunMap.Add("SubReport_4d", DataTextProvider.SubReport_4d); + SpecialDataFunMap.Add("FilterSaleSummary", DataTextProvider.FilterSaleSummary); + SpecialDataFunMap.Add("FilterSaleDetail", DataTextProvider.FilterSaleDetail); + } + + public static string SubReport_4d(HttpRequest Request) + { + return DataTextProvider.SubReport_4d(Request.QueryString["city"]); + } + + public static string Report_7_3g(HttpRequest Request) + { + return DataTextProvider.Report_7_3g(Convert.ToInt32(Request.QueryString["BeginNo"]), Convert.ToInt32(Request.QueryString["EndNo"])); + } + + public static string FilterSaleSummary(HttpRequest Request) + { + return DataTextProvider.FilterSaleSummary(Request.QueryString["BeginDate"], Request.QueryString["EndDate"]); + } + + public static string FilterSaleDetail(HttpRequest Request) + { + return DataTextProvider.FilterSaleDetail(Request.QueryString["BeginDate"], Request.QueryString["EndDate"], Request.QueryString["ProductID"]); + } + #endregion + } +} \ No newline at end of file diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/common_code/DbReportData.cs b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/common_code/DbReportData.cs new file mode 100644 index 0000000..ea7afbb --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/common_code/DbReportData.cs @@ -0,0 +1,194 @@ +///下面三个编译条件参数指定产生报表数据需要连接的数据库。如果都不定义,则用 OLEDB 数据驱动连接数据库 +///编译条件参数定义在项目属性的“生成->条件编译符号”里更合适,这样可以为整个项目使用 +///_OLEDB_REPORT_DS:指定用 OLEDB 数据驱动连接数据库 +///_MSSQL_REPORT_DS:指定用 Microsoft SQL Server 数据驱动连接数据库 +///_ORACLE_REPORT_DS:指定用 Oracle 数据驱动连接数据库 +#define _OLEDB_REPORT_DS +//#define _MSSQL_REPORT_DS +//#define _ORACLE_REPORT_DS + +using System; +using System.Collections; +using System.Data; +using System.Web; + +namespace GridReport +{ + +#if _ORACLE_REPORT_DS +//using System.Data.OracleClient; +using MyDbConnection = System.Data.OracleClient.OracleConnection; +using MyDbCommand = System.Data.OracleClient.OracleCommand; +using MyDbDataReader = System.Data.OracleClient.OracleDataReader; +using MyDbDataAdapter = System.Data.OracleClient.OracleDataAdapter; +#elif _MSSQL_REPORT_DS +//using System.Data.SqlClient; +using MyDbConnection = System.Data.SqlClient.SqlConnection; +using MyDbCommand = System.Data.SqlClient.SqlCommand; +using MyDbDataReader = System.Data.SqlClient.SqlDataReader; +using MyDbDataAdapter = System.Data.SqlClient.SqlDataAdapter; +#else +//using System.Data.OleDb; +using MyDbConnection = System.Data.OleDb.OleDbConnection; +using MyDbCommand = System.Data.OleDb.OleDbCommand; +using MyDbDataReader = System.Data.OleDb.OleDbDataReader; +using MyDbDataAdapter = System.Data.OleDb.OleDbDataAdapter; +#endif //#ifdef OLE_DB + + ///////////////////////////////////////////////////////////////////////////////////////////////////////// + //class DatabaseReportData 产生提供给报表生成需要的 XML 或 JSON 数据 + public class DatabaseReportData + { + //★特别提示★:数据库连接串,一定要改为实际的参数值 +#if _ORACLE_REPORT_DS + public const string DbConnStr = "Data Source=dbmachine;Persist Security Info=True;User ID=hr;Password=hr;Unicode=True;"; + + public const char DateSqlBracketChar = '\''; +#elif _MSSQL_REPORT_DS + //连接SQL Server数据库的连接串,应该修改为与实际一致。如果是运行Grid++Report本身的例子,应该首先附加例子数据库到 + //SQL Server2000/2005数据库上。 + public const string DbConnStr = "Data Source=(local);Initial Catalog=gridreport;Persist Security Info=True;User ID=sa;Password=;"; + + //定义在SQL中表示日期值的包围符号,Access用“#”, 而MS SQl Server用“'”,为了生成两者都可用的查询SQL语句,将其参数化定义出来。这样处理只是为了演示例子方便 + public const char DateSqlBracketChar = '\''; +#else + //连接Grid++Report Access例子数据库的连接串,应该修改为与实际一致,如果安装目录不在C:\Grid++Report 6,应进行修改。 + //如果是运行为64位程序,连接串应该改为64位的,Provider为“Microsoft.ACE.OLEDB.12.0” + //另64位的驱动不是Windows系统自带的,需要从微软官网下载安装,具体见帮助文档“开发指南->报表数据源->设计时报表数据源->连接 Access”中的说明 + //如果WEB服务器是64位的,则 Grid++Report 的报表服务器程序也是64位的,其连接串也要相应的改为用64位的 + public const string DbConnStr = @"Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\Grid++Report 6\Samples\Data\Northwind.mdb"; //32位报表服务器程序连接串 + //public const string DbConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:\Grid++Report 6\Samples\Data\Northwind.mdb"; //64位报表服务器程序连接串 + + //定义在SQL中表示日期值的包围符号,Access用“#”, 而MS SQl Server用“'”,为了生成两者都可用的查询SQL语句,将其参数化定义出来。这样处理只是为了演示例子方便 + public const char DateSqlBracketChar = '#'; +#endif //#ifdef OLE_DB + + //根据查询SQL,产生提供给报表生成需要的 XML 数据,字段值为空也产生数据 + public static void FullGenNodeXmlData(HttpResponse Response, string QuerySQL, bool ToCompress) + { + MyDbCommand ReportDataCommand = new MyDbCommand(QuerySQL, ReportConn); + MyDbDataReader ReportDataReader = ReportDataCommand.ExecuteReader(); + string Text = XMLReportData.FromDataReader(ReportDataReader); + GridReportDataResponse.Response(Response, Text, ToCompress ? ResponseDataType.ZipBinary : ResponseDataType.PlainText); + } + + //获取 Count(*) SQL 查询到的数据行数。参数 QuerySQL 指定获取报表数据的查询SQL + public static int BatchGetDataCount(string QuerySQL) + { + int Total = 0; + + MyDbCommand ReportDataCommand = new MyDbCommand(QuerySQL, ReportConn); + MyDbDataReader ReportDataReader = ReportDataCommand.ExecuteReader(); + if (ReportDataReader.Read()) + Total = ReportDataReader.GetInt32(0); + + return Total; + } + + #region protected function + private static object dbcLock = new Object(); + + private static MyDbConnection _ReportConn = null; + + protected static MyDbConnection ReportConn + { + get + { + lock (dbcLock) + { + if (_ReportConn == null) + { + _ReportConn = new MyDbConnection(DbConnStr); + _ReportConn.Open(); + } + } + return _ReportConn; + } + } + #endregion protected function + } + + ///////////////////////////////////////////////////////////////////////////////////////////////////////// + //class DatabaseXmlReportData 根据SQL产生报表需要的 XML 数据 + public class DatabaseXmlReportData : DatabaseReportData + { + public static string TextFromOneSQL(string QuerySQL) + { + DataSet ReportDataSet = new DataSet(); + + MyDbDataAdapter ReportDataAdapter = new MyDbDataAdapter(QuerySQL, ReportConn); + + ReportDataAdapter.Fill(ReportDataSet); + + return XMLReportData.FromDataSet(ReportDataSet); + } + + public static string TextFromMultiSQL(ArrayList QueryList) + { + DataSet ReportDataSet = new DataSet(); + + foreach (ReportQueryItem item in QueryList) + { + MyDbDataAdapter DataAdapter = new MyDbDataAdapter(item.QuerySQL, ReportConn); + + DataAdapter.Fill(ReportDataSet, item.RecordsetName); + } + + return XMLReportData.FromDataSet(ReportDataSet); + } + + public static void GenOneRecordset(HttpResponse Response, string QuerySQL) + { + string Text = TextFromOneSQL(QuerySQL); + GridReportDataResponse.Response(Response, Text, GridReportDataResponse.DefaultDataType); + } + + public static void GenMultiRecordset(HttpResponse Response, ArrayList QueryList) + { + string Text = TextFromMultiSQL(QueryList); + GridReportDataResponse.Response(Response, Text, GridReportDataResponse.DefaultDataType); + } + } + + ///////////////////////////////////////////////////////////////////////////////////////////////////////// + //class DatabaseJsonReportData 根据SQL产生报表需要的 JSON 数据 + public class DatabaseJsonReportData : DatabaseReportData + { + public static string TextFromOneSQL(string QuerySQL) + { + DataSet ReportDataSet = new DataSet(); + + MyDbDataAdapter ReportDataAdapter = new MyDbDataAdapter(QuerySQL, ReportConn); + + ReportDataAdapter.Fill(ReportDataSet); + + return JSONReportData.FromDataSet(ReportDataSet); + } + + public static string TextFromMultiSQL(ArrayList QueryList) + { + DataSet ReportDataSet = new DataSet(); + + foreach (ReportQueryItem item in QueryList) + { + MyDbDataAdapter DataAdapter = new MyDbDataAdapter(item.QuerySQL, ReportConn); + + DataAdapter.Fill(ReportDataSet, item.RecordsetName); + } + + return JSONReportData.FromDataSet(ReportDataSet); + } + + public static void GenOneRecordset(HttpResponse Response, string QuerySQL) + { + string Text = TextFromOneSQL(QuerySQL); + GridReportDataResponse.Response(Response, Text, GridReportDataResponse.DefaultDataType); + } + + public static void GenMultiRecordset(HttpResponse Response, ArrayList QueryList) + { + string Text = TextFromMultiSQL(QueryList); + GridReportDataResponse.Response(Response, Text, GridReportDataResponse.DefaultDataType); + } + } +} diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/common_code/ReportData.cs b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/common_code/ReportData.cs new file mode 100644 index 0000000..73ccfdf --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/common_code/ReportData.cs @@ -0,0 +1,239 @@ +using System; +using System.Text; +using System.Data; +using System.IO; +using System.IO.Compression; +using System.Web; + +namespace GridReport +{ + + ///////////////////////////////////////////////////////////////////////////////////////////////////////// + //以下枚举指定报表数据的格式类型 + public enum ResponseDataType + { + PlainText, //报表数据为XML或JSON文本,在调试时可以查看报表数据。数据未经压缩,大数据量报表采用此种方式不合适 + ZipBinary, //报表数据为XML或JSON文本经过压缩得到的二进制数据。此种方式数据量最小(约为原始数据的1/10),但用Ajax方式加载报表数据时不能为此种方式 + ZipBase64, //报表数据为将 ZipBinary 方式得到的数据再进行 BASE64 编码的数据。此种方式适合用Ajax方式加载报表数据 + }; + + ///////////////////////////////////////////////////////////////////////////////////////////////////////// + // ReportQueryItem + public class ReportQueryItem + { + public string QuerySQL; + public string RecordsetName; + + public ReportQueryItem(string AQuerySQL, string ARecordsetName) + { + QuerySQL = AQuerySQL; + RecordsetName = ARecordsetName; + } + }; + + ///////////////////////////////////////////////////////////////////////////////////////////////////////// + // GridReportDataResponse + public class GridReportDataResponse + { + //指定报表的默认数据类型,便于统一定义整个报表系统的数据类型 + //在报表开发调试阶段,通常指定为 ResponseDataType.PlainText, 以便在浏览器中查看响应的源文件时能看到可读的文本数据 + //在项目部署时,通常指定为 ResponseDataType.ZipBinary 或 ResponseDataType.ZipBase64,这样可以极大减少数据量,提供报表响应速度 + public const ResponseDataType DefaultDataType = ResponseDataType.PlainText; //PlainText ZipBinary ZipBase64 + + //将报表XML数据文本输出到HTTP请求 + public static void Response(HttpResponse Response, string DataText, ResponseDataType DataType) + { + //报表XML数据的前后不能附加任何其它数据,否则XML数据将不能成功解析,所以调用ClearContent方法清理网页中前面多余的数据 + Response.ClearContent(); + + if (ResponseDataType.PlainText == DataType) + { + // 把 xml 或 json 文本响应给客户端 + //Response.ContentType = "text/xml"; + Response.ContentType = "text/plain"; + Response.Write(DataText); + } + else + { + //将string数据转换为byte[],以便进行压缩 + System.Text.UTF8Encoding converter = new System.Text.UTF8Encoding(); + byte[] XmlBytes = converter.GetBytes(DataText); + + //在 HTTP 头信息中写入报表数据压缩信息 + Response.AppendHeader("gr_zip_type", "deflate"); //指定压缩方法 + Response.AppendHeader("gr_zip_size", XmlBytes.Length.ToString()); //指定数据的原始长度 + Response.AppendHeader("gr_zip_encode", converter.HeaderName); //指定数据的编码方式 utf-8 utf-16 ... + + // 把压缩后的xml数据发送给客户端 + if (ResponseDataType.ZipBinary == DataType) + { + DeflateStream compressedzipStream = new DeflateStream(Response.OutputStream, CompressionMode.Compress, true); + compressedzipStream.Write(XmlBytes, 0, XmlBytes.Length); + compressedzipStream.Close(); + } + else //ResponseDataType.ZipBase64 + { + MemoryStream memStream = new MemoryStream(); + DeflateStream compressedzipStream = new DeflateStream(memStream, CompressionMode.Compress, true); + compressedzipStream.Write(XmlBytes, 0, XmlBytes.Length); + compressedzipStream.Close(); //这句很重要,这样数据才能全部写入 MemoryStream + + // Read bytes from the stream. + memStream.Seek(0, SeekOrigin.Begin); // Set the position to the beginning of the stream. + int count = (int)memStream.Length; + byte[] byteArray = new byte[count]; + count = memStream.Read(byteArray, 0, count); + + string Base64Text = Convert.ToBase64String(byteArray); + Response.ContentType = "text/plain"; + Response.Write(Base64Text); + } + } + + //报表XML数据的前后不能附加任何其它数据,否则XML数据将不能成功解析,所以调用End方法放弃网页中后面不必要的数据 + Response.End(); + } + } + + ///////////////////////////////////////////////////////////////////////////////////////////////////////// + //class XMLReportData 产生报表需要的xml数据 + public class XMLReportData + { + //根据 DataSet 产生提供给报表需要的XML文本数据 + public static string FromDataSet(DataSet ReportDataSet) + { + return ReportDataSet.GetXml(); + } + + //根据 DataTable 产生提供给报表需要的XML文本数据 + public static string FromDataTable(DataTable mydt) + { + DataSet ds = new DataSet(); + ds.Tables.Add(mydt); + return FromDataSet(ds); + } + + //根据IDataReader, 产生提供给报表需要的XML文本数据 + public static string FromDataReader(IDataReader dr) + { + string XMLText = "\n"; + while (dr.Read()) + { + XMLText += ""; + for (int i = 0; i < dr.FieldCount; ++i) + { + string FldName = dr.GetName(i); + if (FldName == "") + FldName = "Fld" + i; + XMLText += String.Format("<{0}>{1}", FldName, HttpUtility.HtmlEncode(dr.GetValue(i).ToString())); + } + XMLText += "\n"; + } + XMLText += "\n"; + + return XMLText; + } + } + + ///////////////////////////////////////////////////////////////////////////////////////////////////////// + //class JSONReportData 产生报表需要的 JSON 格式数据 + public class JSONReportData + { + //根据 DataSet 产生提供给报表需要的JSON文本数据 + public static string FromDataSet(DataSet ds) + { + //如果这里编译不过,请将项目属性的“生成->目标 Framework”设置为“.Net FrameWork4”或更高版本 + System.ServiceModel.Dispatcher.JsonQueryStringConverter jqsc = new System.ServiceModel.Dispatcher.JsonQueryStringConverter(); + + StringBuilder sbJSONText = new StringBuilder("{\n"); + foreach (DataTable dt in ds.Tables) + { + //"recordset":[ + sbJSONText.Append('"'); + sbJSONText.Append(dt.TableName); + sbJSONText.Append("\":[\n"); + foreach (DataRow dr in dt.Rows) + { + sbJSONText.Append('{'); + for (int i = 0; i < dt.Columns.Count; ++i) + { + if (!dr.IsNull(i)) + { + //用 ConvertValueToString 转换,这样数字类型才不会加引号 + //如果日期类型也用ConvertValueToString转换,则为 "\/Date(-152438400000+0800)\/" 这样的形式 + string Value; + if (dt.Columns[i].DataType.IsArray) + { + Value = "\"" + Convert.ToBase64String((byte[])dr[i]) + "\""; + } + else if (dt.Columns[i].DataType == typeof(System.DateTime)) + { + Value = "\"" + dr[i].ToString() + "\""; + } + else + { + Value = jqsc.ConvertValueToString(dr[i], dt.Columns[i].DataType); + } + sbJSONText.AppendFormat("\"{0}\":{1},", dt.Columns[i].ColumnName, Value); + } + } + sbJSONText.Remove(sbJSONText.Length - 1, 1); //去掉每笔记录最后一个字段后面的"," + sbJSONText.Append("},\n"); + } + if (dt.Rows.Count > 0) //如果无明细记录,则不要回退 + sbJSONText.Remove(sbJSONText.Length - 2, 1); //去掉最后一条记录后面的"," + sbJSONText.Append("],\n"); + } + sbJSONText.Remove(sbJSONText.Length - 2, 1); //去掉最后一记录集后面的"," + sbJSONText.Append("}"); + + return sbJSONText.ToString(); + } + + //根据 DataTable 产生提供给报表需要的JSON文本数据 + public static string FromDataTable(DataTable dt) + { + DataSet ds = new DataSet(); + ds.Tables.Add(dt); + return FromDataSet(ds); + } + + ////如果数据中包含有JSON规范中的特殊字符(" \ \r \n \t),多特殊字符加 \ 编码 + //public static void PrepareValueText(ref string ValueText) + //{ + // bool HasSpecialChar = false; + // foreach(char ch in ValueText) + // { + // if (ch == '"' || ch == '\\' || ch == '\r' || ch == '\n' || ch == '\t') + // { + // HasSpecialChar = true; + // break; + // } + // } + // if (HasSpecialChar) + // { + // StringBuilder NewValueText = new StringBuilder(); + // foreach (char ch in ValueText) + // { + // if (ch == '"' || ch == '\\' || ch == '\r' || ch == '\n' || ch == '\t') + // { + // NewValueText.Append( '\\'); + // if (ch == '"' || ch == '\\') + // NewValueText.Append( ch ); + // else if (ch == '\r') + // NewValueText.Append( 'r' ); + // else if (ch == '\n') + // NewValueText.Append( 'n' ); + // else if (ch == '\t') + // NewValueText.Append( 't' ); + // } + // else + // { + // NewValueText.Append( ch ); + // } + // } + // ValueText = NewValueText.ToString(); + // } + //} + } +} \ No newline at end of file diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/1.grf b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/1.grf new file mode 100644 index 0000000..d0db8d9 --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/1.grf @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/2.grf b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/2.grf new file mode 100644 index 0000000..918b3a1 --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/2.grf @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/3.grf b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/3.grf new file mode 100644 index 0000000..d616d2d --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/3.grf @@ -0,0 +1 @@ +BASE64NioAAHic5VpLb9tGED67QP8Ejd4MglyRIqWbLNdJUNl1bCEOYAsFLW6kbSiuQK4Su20OLZA+UKQ+JEZa5NCmObRAA6MB2gR10PbPmHF86l/oLt8UKYu2GCd2Dgap2dnZnW8eOzvmf8///fTdd6a4K9CyETa5KlfmyzzgBW6GkeexSbgq45jiFrUepOPO7rf7f991h6e4FfQJpYmCLAiCR1mFqNOlc6SAUO9qlg0pRSxJlHDLlbtkIZNAKxD9oYWgSbz1G5qp222tD7mQew4SDRkXLKQHE2r9PjT1WUMzry/jm1yVWAM4MzxSx8Yq0kmXLs1Lsjc8iy09XJfun2wZ0KarrrXYct56U9wybFM+d9c+Yx2bJmyzLa4QuvcOnXJ1oeGhMMVdHkBra+Vyg1Lnq+vr9aVac31dBCX+Y5vq5DNd7RlNbcOAPo49zaYINJBNPqrVAp55BA2q5Jr7a8pbO4J+AxnG4qDHeWRvr9lcK9BCmss7E4w2t/ps9BLFvUMRGC+jgduaa5OjWfsWvoEopnWsw3GsmkXcbRzNRo2vtRHZOuHe+8y35jQCU/MZsYl6Y7fJBLhTTroBrA/apIHMk0rYgB1kXkHjoKeOPp5Jd4PHDrjcRyvm6zRKBj0z8Dl/djDZGxQDNTg/noDEKyVVdomuxFZcFo0VAs0odi76KQHwkqAo4kwQUTHeOjSMtNsHWxveBo0TC0JvThj5fpQSC0eSIlmRBVYGG8uwjy0SSovUDcfE+OAcbl9nkU1jIk5ehoYbH27M2rHwpDycv0T1LCbXS3bdwrZNk1U8sc6jTWoGqqdnQG+Vmq71yQIkXUxnc6uW1n9/s20MdHjBwoM+96blXC8WXkHOvW6OC+kbYwO1i22yspgjhebMtIwNjOGzzXEZqph8wYOAQt0I6j6ZOZeXQ2ZGCwNpYcoYabkzUomXK2qpFDhCFI/ZERnGpBKGZEZQpsMyVPD1JT1CU1V7Fm9mJb1gLCvpNXE/Tg2AE3glRk0GuEeLonzO0m424DXyGXuh8tznMpPjvs1iQnCvxYVzb8UkJ0wy2iwx08TSpU9P2yfbRsNrN+EmHeUO7v24v/fLy92fnTs74SYjvhNiDcZjzX4OAR2DX5RKinwyG5wd7J29nYMH3zvbz4oDvpQTeHplEACoFOn7Zwf3w4d7zt52obhLOXEHvPgWO/zhg6f7z58WCrycG3hVkGT1LXX4NO7+Sys8Zz3F6wObajJ0BKcwSRW5kcRUKTZ04INCDny3qM32jGDoFR73Z+iUX6XKsHtLEmOGiEY0/2oQK++PDsgcqL+Gg/+8WCG6Qk1shdOvAs6LERK31Int8BqqgvNiiKFOwMSmOP064bxZApxC8eA+0u2YJiIGDNsbV5CNNtjva5ph+wtFVkq0ItyJ2Y0It4XnC44JSlcssRYFK6dqBuqwwQWk60y224tMcMRmjqiJcq8NTrw2GN3hCrufPp5L0GpTUfPY6mlMgMBPT78XtA8vuuxhE9j2zigmlf7dekM84s00/qvHwmtDZ/cq3bGoVTm7ldXId4caqIeITb1gSevAoAEeSL8ItcQGuQ8g7DdxB5IuIyfBi/4VkkiiXjOd9eADdYcxH1/xL8Aezs7w/kii3md3NJaxgSiWy/G07RefKbrfZC1l5v1y+ka1/88DZ++es/Ol890Xzi69XT06+Onzaq7DaqwmIK1JiRclVZbyKyLxFUUSs2tsWQWCWkrrtDYd/2fndKsYbUr57QJ4QZzAJi++uevc+f3F/aeH9/8oyBRS/s3TWnqSzTs//Orcfubs/nX41XZBm5ePExFq7s2Pch+vyXDw5Lnz9W8FaVBOa1DhRVUUUpEg8qpMt5XWAfAVtaJkX3HKAo0pkNbk5aPbB7tPnDs7zvazgjRRjhHTSiVZ9OcI6VGa0JD2P0ooKpzVtCKiStcXQFqRUckJ8HIFVECGJoAvqSKIK3/88lgBQrHds7XpxDcnRSFZyUCSXgSVhBcf7dwSDduk3fO4hH/+F6WHKOT2bZbgk7ljwuPK/xSmMFUyighA0RfEY9QQZ9K7g6+hCkMyfxGTbkJNlPCCz6tyajKrWW3WZkhr4o9kuMSIM4i6RJlWvRnurVAXkkFWj0fkaa5PTKlrfWaIJWwj/6uWRWwm9ndUIPsvLe8ZKO6V8vMYk0QpPwrO06nXE4VhzWx3seXdemLkEd8mxa9iFPqhe1gcourB48fC4cM/j8DIfXgfVbzr3Wr/B0i27aM= \ No newline at end of file diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/4.grf b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/4.grf new file mode 100644 index 0000000..baf925b --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/4.grf @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/5.grf b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/5.grf new file mode 100644 index 0000000..59866e1 --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/5.grf @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/6.grf b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/6.grf new file mode 100644 index 0000000..fcc0e79 --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/6.grf @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/menban.grf b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/menban.grf new file mode 100644 index 0000000..2203a83 --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/menban.grf @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/zhuhuban.grf b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/zhuhuban.grf new file mode 100644 index 0000000..583c7ba --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/zhuhuban.grf @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/packages.config b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/packages.config new file mode 100644 index 0000000..08df8e6 --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file From ec1383591dce0935576a66bebfe8f243eb6bb935 Mon Sep 17 00:00:00 2001 From: me Date: Thu, 7 Aug 2025 16:37:06 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=96=B0=E6=B5=81=E7=A8=8B=EF=BC=88?= =?UTF-8?q?=E4=B8=8D=E5=8F=91=E8=BF=90=EF=BC=8C=E4=B8=8D=E8=83=BD=E6=89=93?= =?UTF-8?q?=E5=8D=B0=E6=96=B0=E5=8D=95=E6=8D=AE=EF=BC=89=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E5=89=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 + .../Handlers/Handler1.ashx.cs | 30 +- .../WebApplicationGridJJReport/Web.config | 14 +- .../WebApplicationGridJJReport.csproj.user | 4 +- .../appcode/PostParam.cs | 215 ++++++++++- .../grf/C8-头枕.grf | 353 +++++++++++++++++ .../grf/C8-扶手.grf | 1 + .../WebApplicationGridJJReport/grf/Q5NF.grf | 355 ++++++++++++++++++ .../MenBanReports/MenBanPackingListDto.cs | 22 +- .../MsgBaseData/Dics/Dtos/DicItemDto.cs | 14 + .../WY.NewJit.Application.Contracts.xml | 20 + .../MsgCheck/BillM100s/BillM100AppService.cs | 44 +++ .../BillM100s/MenBanPackingRecService.cs | 258 ++++++------- .../MsgCheck/BillStatusEnum.cs | 8 +- .../MsgBaseData/Entitys/DicItem.cs | 13 + .../MsgCheck/Entitys/BillM100.cs | 4 +- .../bin/Debug/Win.Sfs.Shared.2.0.0.nupkg | Bin 32774 -> 32765 bytes .../bin/Debug/netcoreapp5/Win.Sfs.Shared.dll | Bin 73728 -> 73728 bytes .../bin/Debug/netcoreapp5/Win.Sfs.Shared.pdb | Bin 48412 -> 49104 bytes .../bin/Debug/netcoreapp5/Win.Utils.dll | Bin 10752 -> 10752 bytes .../bin/Debug/netcoreapp5/Win.Utils.pdb | Bin 21748 -> 21748 bytes .../obj/Debug/Win.Sfs.Shared.2.0.0.nuspec | 2 +- .../Win.Sfs.Shared.AssemblyInfo.cs | 2 +- .../Win.Sfs.Shared.AssemblyInfoInputs.cache | 2 +- ....Sfs.Shared.csproj.AssemblyReference.cache | Bin 30894 -> 30894 bytes .../obj/Debug/netcoreapp5/Win.Sfs.Shared.dll | Bin 73728 -> 73728 bytes .../obj/Debug/netcoreapp5/Win.Sfs.Shared.pdb | Bin 48412 -> 49104 bytes .../Debug/netcoreapp5/ref/Win.Sfs.Shared.dll | Bin 42496 -> 42496 bytes .../netcoreapp5/refint/Win.Sfs.Shared.dll | Bin 42496 -> 42496 bytes .../Win.Utils/bin/Debug/Win.Utils.2.0.0.nupkg | Bin 6635 -> 6631 bytes .../bin/Debug/netcoreapp5/Win.Utils.dll | Bin 10752 -> 10752 bytes .../bin/Debug/netcoreapp5/Win.Utils.pdb | Bin 21748 -> 21748 bytes .../obj/Debug/Win.Utils.2.0.0.nuspec | 2 +- .../netcoreapp5/Win.Utils.AssemblyInfo.cs | 2 +- .../Win.Utils.AssemblyInfoInputs.cache | 2 +- .../obj/Debug/netcoreapp5/Win.Utils.dll | Bin 10752 -> 10752 bytes .../obj/Debug/netcoreapp5/Win.Utils.pdb | Bin 21748 -> 21748 bytes .../obj/Debug/netcoreapp5/ref/Win.Utils.dll | Bin 7168 -> 7168 bytes .../Debug/netcoreapp5/refint/Win.Utils.dll | Bin 7168 -> 7168 bytes 39 files changed, 1210 insertions(+), 162 deletions(-) create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/C8-头枕.grf create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/C8-扶手.grf create mode 100644 Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/Q5NF.grf diff --git a/.gitignore b/.gitignore index 5b7c739..e78c733 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,6 @@ /*.rar +packages +.vs +bin +obj +~bak diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Handlers/Handler1.ashx.cs b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Handlers/Handler1.ashx.cs index 68ca69d..67fe3d9 100644 --- a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Handlers/Handler1.ashx.cs +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Handlers/Handler1.ashx.cs @@ -26,28 +26,28 @@ namespace WebApplicationGridJJReport.Handlers string reportType = context.Request.QueryString["report"].ToLower(); - if (reportType == "menban") + //if (reportType == "menban") { if (string.IsNullOrEmpty(text)) { text = PostParam.MenBanVal.Replace("'", "\""); } } - else if (reportType == "zhuhuban") - { - if (string.IsNullOrEmpty(text)) - { - text = PostParam.ZhuHuBanVal.Replace("'", "\""); - } - } - else - { - if (string.IsNullOrEmpty(text)) - { - text = PostParam.ZhuHuBanVal.Replace("'", "\""); - } + //else if (reportType == "zhuhuban") + //{ + // if (string.IsNullOrEmpty(text)) + // { + // text = PostParam.ZhuHuBanVal.Replace("'", "\""); + // } + //} + //else + //{ + // if (string.IsNullOrEmpty(text)) + // { + // text = PostParam.ZhuHuBanVal.Replace("'", "\""); + // } - } + //} ReportGenerator reportGenerator = new ReportGenerator(context); diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Web.config b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Web.config index 32897a7..2c86dca 100644 --- a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Web.config +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Web.config @@ -14,4 +14,16 @@ - \ No newline at end of file + + \ No newline at end of file diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/WebApplicationGridJJReport.csproj.user b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/WebApplicationGridJJReport.csproj.user index 8325ddd..2adebda 100644 --- a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/WebApplicationGridJJReport.csproj.user +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/WebApplicationGridJJReport.csproj.user @@ -1,4 +1,4 @@ - + true @@ -15,7 +15,7 @@ - /Handlers/Handler1.ashx?report=zhuhuban&returnfile=1 + /Handlers/Handler1.ashx?report=menban&returnfile=1 SpecificPage True False diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/appcode/PostParam.cs b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/appcode/PostParam.cs index 94cc6f6..6ef9dc1 100644 --- a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/appcode/PostParam.cs +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/appcode/PostParam.cs @@ -10,7 +10,7 @@ namespace WebApplicationGridJJReport.appcode // public const string ZhuHuBanVal = @" //{'masterList_AC':[{'billNum':' 10000000127','billSerialNum':'06','billLocation':null,'providerCode':'0709FAW-VW7XH','partType':'A上C上','capacity':'1','printDate':'2021-12-01 15:53:54','printType':0,'productLine':'08','beginVin':'LFV3A24K0M3117267','endVin':'LFV3A24K0M3117267','details':null}],'detailList_AC':[{'billNum':' 10000000127','knr':' 21325574111001','vin':'LFV3A24K0M3117267','hostSN':383,'partCode':'80D867233CYM5','partCode2':'','sn':1},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':2},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':3},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':4},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':5},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':6},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':7},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':8},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':9},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':10},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':11},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':12},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':13},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':14},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':15},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':16},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':17},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':18},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':19},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':20},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':21},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':22},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':23},{'billNum':' 10000000127','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':24}],'masterList_AA':[{'billNum':' 10000000128','billSerialNum':'06','billLocation':'左','providerCode':'0709FAW-VW7XH','partType':'A柱下A中','capacity':'1','printDate':'2021-12-01 15:53:54','printType':0,'productLine':'08','beginVin':'LFV3A24K0M3117267','endVin':'LFV3A24K0M3117267','details':null},{'billNum':' 10000000129','billSerialNum':'06','billLocation':'右','providerCode':'0709FAW-VW7XH','partType':'A柱下A中','capacity':'1','printDate':'2021-12-01 15:53:54','printType':0,'productLine':'08','beginVin':'LFV3A24K0M3117267','endVin':'LFV3A24K0M3117267','details':null}],'detailList_AA':[{'billNum':' 10000000128','knr':' 21325574111001','vin':'LFV3A24K0M3117267','hostSN':383,'partCode':'80D867271DS2','partCode2':'80D868203DS2','sn':1},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':2},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':3},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':4},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':5},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':6},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':7},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':8},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':9},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':10},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':11},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':12},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':13},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':14},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':15},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':16},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':17},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':18},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':19},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':20},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':21},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':22},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':23},{'billNum':' 10000000128','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':24},{'billNum':' 10000000129','knr':' 21325574111001','vin':'LFV3A24K0M3117267','hostSN':383,'partCode':'80D867272ADS2','partCode2':'80D868204DS2','sn':1},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':2},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':3},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':4},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':5},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':6},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':7},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':8},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':9},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':10},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':11},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':12},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':13},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':14},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':15},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':16},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':17},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':18},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':19},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':20},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':21},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':22},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':23},{'billNum':' 10000000129','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':24}],'masterList_BS':[{'billNum':' 10000000130','billSerialNum':'06','billLocation':'左','providerCode':'0709FAW-VW7XH','partType':'B柱上','capacity':'1','printDate':'2021-12-01 15:53:54','printType':0,'productLine':'08','beginVin':'LFV3A24K0M3117267','endVin':'LFV3A24K0M3117267','details':null},{'billNum':' 10000000131','billSerialNum':'06','billLocation':'右','providerCode':'0709FAW-VW7XH','partType':'B柱上','capacity':'1','printDate':'2021-12-01 15:53:54','printType':0,'productLine':'08','beginVin':'LFV3A24K0M3117267','endVin':'LFV3A24K0M3117267','details':null}],'detailList_BS':[{'billNum':' 10000000130','knr':' 21325574111001','vin':'LFV3A24K0M3117267','hostSN':383,'partCode':'','partCode2':null,'sn':1},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':2},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':3},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':4},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':5},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':6},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':7},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':8},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':9},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':10},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':11},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':12},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':13},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':14},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':15},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':16},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':17},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':18},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':19},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':20},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':21},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':22},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':23},{'billNum':' 10000000130','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':24},{'billNum':' 10000000131','knr':' 21325574111001','vin':'LFV3A24K0M3117267','hostSN':383,'partCode':'80D867244AYW5','partCode2':null,'sn':1},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':2},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':3},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':4},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':5},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':6},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':7},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':8},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':9},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':10},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':11},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':12},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':13},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':14},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':15},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':16},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':17},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':18},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':19},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':20},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':21},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':22},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':23},{'billNum':' 10000000131','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':24}],'masterList_BX':[{'billNum':' 10000000132','billSerialNum':'06','billLocation':'左','providerCode':'0709FAW-VW7XH','partType':'B柱下','capacity':'1','printDate':'2021-12-01 15:53:54','printType':0,'productLine':'08','beginVin':'LFV3A24K0M3117267','endVin':'LFV3A24K0M3117267','details':null},{'billNum':' 10000000133','billSerialNum':'06','billLocation':'右','providerCode':'0709FAW-VW7XH','partType':'B柱下','capacity':'1','printDate':'2021-12-01 15:53:54','printType':0,'productLine':'08','beginVin':'LFV3A24K0M3117267','endVin':'LFV3A24K0M3117267','details':null}],'detailList_BX':[{'billNum':' 10000000132','knr':' 21325574111001','vin':'LFV3A24K0M3117267','hostSN':383,'partCode':'80D8672394PK','partCode2':null,'sn':1},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':2},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':3},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':4},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':5},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':6},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':7},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':8},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':9},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':10},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':11},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':12},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':13},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':14},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':15},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':16},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':17},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':18},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':19},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':20},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':21},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':22},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':23},{'billNum':' 10000000132','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':24},{'billNum':' 10000000133','knr':' 21325574111001','vin':'LFV3A24K0M3117267','hostSN':383,'partCode':'80D867240DS2','partCode2':null,'sn':1},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':2},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':3},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':4},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':5},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':6},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':7},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':8},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':9},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':10},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':11},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':12},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':13},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':14},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':15},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':16},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':17},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':18},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':19},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':20},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':21},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':22},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':23},{'billNum':' 10000000133','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':24}],'masterList_D':[{'billNum':' 10000000134','billSerialNum':'11','billLocation':null,'providerCode':'0709FAW-VW7XH','partType':'D柱','capacity':'1','printDate':'2021-12-01 15:53:54','printType':0,'productLine':'08','beginVin':'LFV3A24K0M3117267','endVin':'LFV3A24K0M3117267','details':null},{'billNum':' 10000000135','billSerialNum':'12','billLocation':null,'providerCode':'0709FAW-VW7XH','partType':'D柱','capacity':'0','printDate':'2021-12-01 15:53:54','printType':0,'productLine':'08','beginVin':null,'endVin':null,'details':null}],'detailList_D':[{'billNum':' 10000000134','knr':' 21325574111001','vin':'LFV3A24K0M3117267','hostSN':383,'partCode':'80D867245ACE3','partCode2':null,'sn':1},{'billNum':' 10000000134','knr':' 21325574111001','vin':'LFV3A24K0M3117267','hostSN':383,'partCode':'80G8672464PK','partCode2':null,'sn':2},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':3},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':4},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':5},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':6},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':7},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':8},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':9},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':10},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':11},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':12},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':13},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':14},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':15},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':16},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':17},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':18},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':19},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':20},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':21},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':22},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':23},{'billNum':' 10000000134','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':24},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':1},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':2},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':3},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':4},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':5},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':6},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':7},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':8},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':9},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':10},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':11},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':12},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':13},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':14},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':15},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':16},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':17},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':18},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':19},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':20},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':21},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':22},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':23},{'billNum':' 10000000135','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':24}],'masterList_HL':[{'billNum':' 10000000136','billSerialNum':'06','billLocation':'左','providerCode':'0709FAW-VW7XH','partType':'后轮上装饰板','capacity':'1','printDate':'2021-12-01 15:53:54','printType':0,'productLine':'08','beginVin':'LFV3A24K0M3117267','endVin':'LFV3A24K0M3117267','details':null},{'billNum':' 10000000137','billSerialNum':'06','billLocation':'右','providerCode':'0709FAW-VW7XH','partType':'后轮上装饰板','capacity':'1','printDate':'2021-12-01 15:53:54','printType':0,'productLine':'08','beginVin':'LFV3A24K0M3117267','endVin':'LFV3A24K0M3117267','details':null}],'detailList_HL':[{'billNum':' 10000000136','knr':' 21325574111001','vin':'LFV3A24K0M3117267','hostSN':383,'partCode':'80D867767DS2','partCode2':'','sn':1},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':2},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':3},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':4},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':5},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':6},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':7},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':8},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':9},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':10},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':11},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':12},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':13},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':14},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':15},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':16},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':17},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':18},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':19},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':20},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':21},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':22},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':23},{'billNum':' 10000000136','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':24},{'billNum':' 10000000137','knr':' 21325574111001','vin':'LFV3A24K0M3117267','hostSN':383,'partCode':'80D867768DS2','partCode2':'','sn':1},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':2},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':3},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':4},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':5},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':6},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':7},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':8},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':9},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':10},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':11},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':12},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':13},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':14},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':15},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':16},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':17},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':18},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':19},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':20},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':21},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':22},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':23},{'billNum':' 10000000137','knr':' ','vin':null,'hostSN':null,'partCode':null,'partCode2':null,'sn':24}]} //"; - + /* public const string ZhuHuBanVal = @" { 'item': { @@ -2606,7 +2606,8 @@ namespace WebApplicationGridJJReport.appcode 'message': '' } "; - + */ + /* public const string MenBanVal = @" { 'masterList': [ @@ -2954,6 +2955,216 @@ namespace WebApplicationGridJJReport.appcode } ] } +"; + */ + + public const string MenBanVal = @" + { + 'id': '1f9e60c5-6754-6c9b-fce3-3a1b902dd6d7', + 'billNum': '20250806001703', + 'billSerialNum': '001', + 'vehicleModel': 'Q5', + 'vehicleModel_Disp': 'Q5NF', + 'providerCode': null, + 'partType': '703', + 'capacity': null, + 'printDate': '2025-08-06 14:15:17', + 'printType': 0, + 'productLine': '02', + 'beginVin': 'LFV3B2FY5S3474908', + 'endVin': 'LFV3B2FYXS3474919', + 'beginVin1': null, + 'endVin1': null, + + 'reportStatus': 2, + 'beginHostSN': '80005', + 'endHostSN': '80016' + + + 'details': [ + { + 'm100BillId': '23d30ecf-f4c9-d048-f2d3-3a1b4311313d', + 'billNum': '20250806001703', + 'knr': '2526191911', + 'vin': '474908', + 'hostSN': '80005', + 'partCode1': '80D885703AHVE4', + 'partCode2': null, + 'partCode3': null, + 'partCode4': null, + 'partCode5': null, + 'sn': '1', + 'scanPartCode': '1571151', + 'remark': null + }, + { + 'm100BillId': '5f755549-cbb1-7cf2-fe4f-3a1b43113d39', + 'billNum': '20250806001703', + 'knr': '2525195118', + 'vin': '474909', + 'hostSN': '80006', + 'partCode1': '80D885703AHVE4', + 'partCode2': null, + 'partCode3': null, + 'partCode4': null, + 'partCode5': null, + 'sn': '2', + 'scanPartCode': '1571151', + 'remark': null + }, + { + 'm100BillId': 'ebced6f7-b982-5b76-91ec-3a1b43114197', + 'billNum': '20250806001703', + 'knr': '2526192154', + 'vin': '474910', + 'hostSN': '80007', + 'partCode1': '80D885703AH6PS', + 'partCode2': null, + 'partCode3': null, + 'partCode4': null, + 'partCode5': null, + 'sn': '3', + 'scanPartCode': '1571149', + 'remark': null + }, + { + 'm100BillId': '87999866-d64c-da6a-ad7e-3a1b4311513f', + 'billNum': '20250806001703', + 'knr': '2525290639', + 'vin': '474911', + 'hostSN': '80008', + 'partCode1': '80D885703AH6PS', + 'partCode2': null, + 'partCode3': null, + 'partCode4': null, + 'partCode5': null, + 'sn': '4', + 'scanPartCode': '1571149', + 'remark': null + }, + { + 'm100BillId': '3f14f9ea-257b-c554-a3e8-3a1b4311544f', + 'billNum': '20250806001703', + 'knr': '2526191966', + 'vin': '474912', + 'hostSN': '80009', + 'partCode1': '80D885703AHVE4', + 'partCode2': null, + 'partCode3': null, + 'partCode4': null, + 'partCode5': null, + 'sn': '5', + 'scanPartCode': '1571151', + 'remark': null + }, + { + 'm100BillId': '9250eecd-7772-aa05-edd7-3a1b4311653d', + 'billNum': '20250806001703', + 'knr': '2525290738', + 'vin': '474913', + 'hostSN': '80010', + 'partCode1': '80D885703AH6PS', + 'partCode2': null, + 'partCode3': null, + 'partCode4': null, + 'partCode5': null, + 'sn': '6', + 'scanPartCode': '1571149', + 'remark': null + }, + { + 'm100BillId': '2cc334c9-2244-b4b9-7173-3a1b43116f36', + 'billNum': '20250806001703', + 'knr': '2526192079', + 'vin': '474914', + 'hostSN': '80011', + 'partCode1': '80D885703AH6PS', + 'partCode2': null, + 'partCode3': null, + 'partCode4': null, + 'partCode5': null, + 'sn': '7', + 'scanPartCode': '1571149', + 'remark': null + }, + { + 'm100BillId': '7a24ff24-a032-d83d-be1b-3a1b43117715', + 'billNum': '20250806001703', + 'knr': '2525291025', + 'vin': '474915', + 'hostSN': '80012', + 'partCode1': '80D885703AH6PS', + 'partCode2': null, + 'partCode3': null, + 'partCode4': null, + 'partCode5': null, + 'sn': '8', + 'scanPartCode': '1571149', + 'remark': null + }, + { + 'm100BillId': '323d4050-e018-7a34-a87d-3a1b43118134', + 'billNum': '20250806001703', + 'knr': '2525290837', + 'vin': '474916', + 'hostSN': '80013', + 'partCode1': '80D885703AH6PS', + 'partCode2': null, + 'partCode3': null, + 'partCode4': null, + 'partCode5': null, + 'sn': '9', + 'scanPartCode': '1571149', + 'remark': null + }, + { + 'm100BillId': '4f5acff7-e891-f249-2045-3a1b43118c1e', + 'billNum': '20250806001703', + 'knr': '2526192437', + 'vin': '474917', + 'hostSN': '80014', + 'partCode1': '80D885703AH6PS', + 'partCode2': null, + 'partCode3': null, + 'partCode4': null, + 'partCode5': null, + 'sn': '10', + 'scanPartCode': '1571149', + 'remark': null + }, + { + 'm100BillId': '45156e53-5fd7-30dc-d1af-3a1b43118e00', + 'billNum': '20250806001703', + 'knr': '2526192048', + 'vin': '474918', + 'hostSN': '80015', + 'partCode1': '80D885703AH6PS', + 'partCode2': null, + 'partCode3': null, + 'partCode4': null, + 'partCode5': null, + 'sn': '11', + 'scanPartCode': '1571149', + 'remark': null + }, + { + 'm100BillId': '41cc40a8-6dae-e638-5b4e-3a1b431195ee', + 'billNum': '20250806001703', + 'knr': '2525290868', + 'vin': '474919', + 'hostSN': '80016', + 'partCode1': '80D885703AH6PS', + 'partCode2': null, + 'partCode3': null, + 'partCode4': null, + 'partCode5': null, + 'sn': '12', + 'scanPartCode': '1571149', + 'remark': null + } + ], + + } "; } } \ No newline at end of file diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/C8-头枕.grf b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/C8-头枕.grf new file mode 100644 index 0000000..05d4e4b --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/C8-头枕.grf @@ -0,0 +1,353 @@ +{ + "Version":"6.6.2.0", + "Font":{ + "Name":"宋体", + "Size":105000, + "Weight":400, + "Charset":134 + }, + "Printer":{ + }, + "DetailGrid":{ + "Recordset":{ + "Field":[ + { + "Name":"knr" + }, + { + "Name":"vin" + }, + { + "Name":"partcode1" + }, + { + "Name":"partcode2" + }, + { + "Name":"sn" + } + ] + }, + "Column":[ + { + "Name":"knr" + }, + { + "Name":"vin" + }, + { + "Name":"partcode1" + }, + { + "Name":"partcode2" + }, + { + "Name":"sn" + } + ], + "ColumnContent":{ + "Height":1.79917, + "ColumnContentCell":[ + { + "Column":"knr", + "DataField":"knr" + }, + { + "Column":"vin", + "DataField":"vin" + }, + { + "Column":"partcode1", + "DataField":"partcode1" + }, + { + "Column":"partcode2", + "DataField":"partcode2" + }, + { + "Column":"sn", + "DataField":"sn" + } + ] + }, + "ColumnTitle":{ + "Height":0.608542, + "ColumnTitleCell":[ + { + "GroupTitle":false, + "Column":"knr", + "TextAlign":"MiddleCenter", + "Text":"kin号" + }, + { + "GroupTitle":false, + "Column":"vin", + "TextAlign":"MiddleCenter", + "Text":"底盘号" + }, + { + "GroupTitle":false, + "Column":"partcode1", + "TextAlign":"MiddleCenter", + "Text":"顶部饰板" + }, + { + "GroupTitle":false, + "Column":"partcode2", + "TextAlign":"MiddleCenter", + "Text":"头枕" + }, + { + "GroupTitle":false, + "Column":"sn", + "TextAlign":"MiddleCenter", + "Text":"序号" + } + ] + } + }, + "Parameter":[ + { + "Name":"vehicleModel" + }, + { + "Name":"billNum" + }, + { + "Name":"billSerialNum" + }, + { + "Name":"printDate" + }, + { + "Name":"productLine" + }, + { + "Name":"beginVin" + }, + { + "Name":"endVin" + }, + { + "Name":"knr" + }, + { + "Name":"partCode1" + }, + { + "Name":"partCode2" + }, + { + "Name":"sn" + }, + { + "Name":"partCode3" + }, + { + "Name":"partCode5" + }, + { + "Name":"vin" + } + ], + "ReportHeader":[ + { + "Name":"ReportHeader1", + "Height":1.79917, + "Control":[ + { + "Type":"FreeGrid", + "Name":"FreeGrid2", + "Left":0.079375, + "Top":0.3175, + "Border":{ + "Styles":"[DrawLeft|DrawTop|DrawRight|DrawBottom]" + }, + "ColumnCount":6, + "RowCount":2, + "FreeGridColumn":[ + { + "index":1, + "Width":1.5875 + }, + { + "index":2, + "Width":1.08479 + }, + { + "index":4, + "Width":5.18583 + }, + { + "index":5, + "Width":0.211667 + }, + { + "index":6, + "Width":4.07458 + } + ], + "FreeGridRow":[ + ], + "FreeGridCell":[ + { + "row":1, + "col":1, + "FreeCell":true, + "Control":[ + { + "Type":"StaticBox", + "Name":"StaticBox1", + "Width":3.41313, + "Height":0.608542, + "Text":"GRAMMER-" + } + ] + }, + { + "row":1, + "col":2, + "Text":"[#{vehicleModel}#]" + }, + { + "row":1, + "col":3, + "FreeCell":true, + "Control":[ + { + "Type":"MemoBox", + "Name":"MemoBox1", + "Left":1.19063, + "Width":6.40292, + "Height":0.396875, + "Font":{ + "Name":"宋体", + "Size":142500, + "Bold":true, + "Charset":134 + }, + "Text":"[#{billNum}#]" + } + ], + "ColSpan":2 + }, + { + "row":1, + "col":5, + "FreeCell":true + }, + { + "row":1, + "col":6, + "FreeCell":true, + "Control":[ + { + "Type":"Barcode", + "Name":"Barcode2", + "Left":0.211667, + "Width":2.59292, + "Height":0.608542 + } + ] + }, + { + "row":2, + "col":1, + "FreeCell":true + }, + { + "row":2, + "col":3, + "FreeCell":true + }, + { + "row":2, + "col":4, + "FreeCell":true + }, + { + "row":2, + "col":5, + "FreeCell":true + }, + { + "row":2, + "col":6, + "FreeCell":true, + "Control":[ + { + "Type":"MemoBox", + "Name":"MemoBox2", + "Left":0.396875, + "Width":2.59292, + "Height":0.396875, + "Text":"[#{billNum}#]" + } + ] + } + ] + } + ] + } + ], + "ReportFooter":[ + { + "Name":"ReportFooter1", + "Height":3.20146, + "Control":[ + { + "Type":"FreeGrid", + "Name":"FreeGrid4", + "Left":0.0264583, + "Top":0.3175, + "Border":{ + "Styles":"[DrawLeft|DrawTop|DrawRight|DrawBottom]" + }, + "RowCount":2, + "FreeGridColumn":[ + { + "index":2, + "Width":2.43417 + }, + { + "index":3, + "Width":4.60375 + }, + { + "index":4, + "Width":1.74625 + }, + { + "index":5, + "Width":3.57188 + } + ], + "FreeGridRow":[ + { + "index":2, + "Height":1.5875 + } + ], + "FreeGridCell":[ + { + "row":2, + "col":3, + "Font":{ + "Name":"宋体", + "Size":180000, + "Bold":true, + "Charset":134 + }, + "Text":"[#{billSerialNum}#]" + }, + { + "row":2, + "col":5, + "Text":"[#{printDate}#]" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/C8-扶手.grf b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/C8-扶手.grf new file mode 100644 index 0000000..60e02a2 --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/C8-扶手.grf @@ -0,0 +1 @@ +BASE64QBYAAHicvVdNj9tEGD6nUv+Eew2WPf6I01uzy24PTYWSVXtYRciNp7sjHDsaO3RLyZFD1UMPCKlSxQEhrogTSCDEn2EXOPEXmBnPjL9mHDcb0UPjfT9n3vd5P+bf3/54dffOwHgCcYbSxLhv+KZvAtMyhpR8kia5cZ9KDIzH4QoS/vWPb/78/WvGHhhz9AWh2ZZnWVZBeQrRxSXRcQXh6DLEGSQU23EJYcvsfoJRkkNcmC5IxzAPUXyKUSQczuAyxRHTZQRyHARjwj5nfw0KYnmyzxJsFCRmUSHxOUp2SKxDnC/TCNo95cAOuUw6ZD8L+v+WByaNN6tE3IYrtu7CDTfY8iJqduMW3UKgS0icnx1/UT34EYEGTMrcPOSJt83ReGyPCmt12SMYx+3siTiwOw8F9TjMQ57ursRKZRoRpXJHzqVyGS+liZ2gaBkC3Ya0qJGGMs1tduLpDOUxbCXFMn0r8FxQywoTVefkFKebNTf1PIwzOOzO1hm8yh/E6IIypiiKqF1W4DUJqoWS67e/6K7fw20tz73dXv/6zV/v393OswIkvf3fvP755vWbAzgHezj/+/uv/vnhp5tvv7uF/2y/qL+thLwC2HIOhJj0GTYJGAQ5bEWXg5doGcMpuXf86THK1kYJ97rkMxTHjzerTv4cYhR2Sq3pVCLVBjsk0mizzB+hRC/zDF6g5AnvOioBmERdbNHtlP4JDI5kJ+qSAFqJTO9aKDs7JTythOi3NMlsYJA5vk5x/hCGkSbPVQFRXdp5kuQ4VXSss5drauoEQ8h2CIlF7kMwKgX0CD5nrdEajZ2RV4I3XVOqY1doE7KIiHWloMzzlzHMiOHzYxy+oKa+pB9Emf3O6OHZ1yTN83S14FUgi68cjRs6RH1JnqUvOA1Imjh8fWWoXJ/IoCSCVyRcw5L0FEX5JY2gF4w8QZYHUCgDlbIVuKNxH223re2ZduAFTh9tr61tmcC2fX/UR91vq7sks64XSG3+sWiFlYS8jGmbXRuRNd+YKlYjvqTQrBKojUI/xxtYYTSBXLdcAnqehzlaTtIrY1jlclRLrl1n8wg4pms7tlNjqVcC4bRo3KezB9Ppx7OPjJK3lZ+LznSoQ1IFFvdxfu9Vq79v78k6+RDrziEDPoWrVBduzmsEu+gjtmmPLd9RpcE3XQuMgSYNztgPRl6NWXl2NY9QfX5JHn+GucDjry7JmaR0bayHYtB+lYl/WxUaSKb4fK3mpwaJWpzj+TokTQrskUlPm8k9jPmHhMUkxHT/UsKC84AKFqKHqXABTG+sx0VRnntWIGgGQ9+U9jCmL7g9jLmHNHYbALWMHRRAPfqKBkCKBtELQAq9/hXdmprFb2OLry54J2mqW+SrAq0FzzGBZbv+oRY8V7HgAZ/sARK0/9uGd8tVTrGNAdN1XLvXQuS0tV3SU5x+m6BilyOLuOuDXtqKXc4xvZEdfOgytiMq5RuhtuFqbe/Y5Lr7XHMm6yeymMeBZdXmsXoaq2dxZRI3qla+Y/ttS50tsrQs3741q93Ff/fO9j/5TWYU \ No newline at end of file diff --git a/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/Q5NF.grf b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/Q5NF.grf new file mode 100644 index 0000000..9b27cc9 --- /dev/null +++ b/Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/Q5NF.grf @@ -0,0 +1,355 @@ +{ + "Version":"6.6.2.0", + "Font":{ + "Name":"宋体", + "Size":105000, + "Weight":400, + "Charset":134 + }, + "Printer":{ + }, + "DetailGrid":{ + "Recordset":{ + "Field":[ + { + "Name":"knr" + }, + { + "Name":"vin" + }, + { + "Name":"partcode1" + }, + { + "Name":"partcode2" + }, + { + "Name":"sn" + } + ] + }, + "Column":[ + { + "Name":"knr" + }, + { + "Name":"vin", + "Width":5.37104 + }, + { + "Name":"partcode1", + "Width":5.60917 + }, + { + "Name":"sn", + "Width":1.19063 + } + ], + "ColumnContent":{ + "Height":1.79917, + "ColumnContentCell":[ + { + "Column":"knr", + "DataField":"knr" + }, + { + "Column":"vin", + "DataField":"vin" + }, + { + "Column":"partcode1", + "DataField":"partcode1" + }, + { + "Column":"sn", + "DataField":"sn" + } + ] + }, + "ColumnTitle":{ + "Height":0.608542, + "ColumnTitleCell":[ + { + "GroupTitle":false, + "Column":"knr", + "TextAlign":"MiddleCenter", + "Text":"kin号" + }, + { + "GroupTitle":false, + "Column":"vin", + "TextAlign":"MiddleCenter", + "Text":"底盘号" + }, + { + "GroupTitle":false, + "Column":"partcode1", + "TextAlign":"MiddleCenter", + "Text":"顶部饰板" + }, + { + "GroupTitle":false, + "Column":"sn", + "TextAlign":"MiddleCenter", + "Text":"序号" + } + ] + } + }, + "Parameter":[ + { + "Name":"vehicleModel" + }, + { + "Name":"billNum" + }, + { + "Name":"billSerialNum" + }, + { + "Name":"printDate" + }, + { + "Name":"productLine" + }, + { + "Name":"beginVin" + }, + { + "Name":"endVin" + }, + { + "Name":"knr" + }, + { + "Name":"partCode1" + }, + { + "Name":"partCode2" + }, + { + "Name":"sn" + }, + { + "Name":"partCode3" + }, + { + "Name":"partCode5" + }, + { + "Name":"vin" + }, + { + "Name":"direction" + } + ], + "ReportHeader":[ + { + "Name":"ReportHeader1", + "Height":1.79917, + "Control":[ + { + "Type":"FreeGrid", + "Name":"FreeGrid2", + "Left":0.079375, + "Top":0.3175, + "Border":{ + "Styles":"[DrawLeft|DrawTop|DrawRight|DrawBottom]" + }, + "ColumnCount":7, + "RowCount":2, + "FreeGridColumn":[ + { + "index":1, + "Width":1.5875 + }, + { + "index":2, + "Width":1.08479 + }, + { + "index":4, + "Width":4.60375 + }, + { + "index":5, + "Width":0.211667 + }, + { + "index":6, + "Width":3.41313 + }, + { + "index":7, + "Width":1.24354 + } + ], + "FreeGridRow":[ + ], + "FreeGridCell":[ + { + "row":1, + "col":1, + "FreeCell":true, + "Control":[ + { + "Type":"StaticBox", + "Name":"StaticBox1", + "Width":3.41313, + "Height":0.608542, + "Text":"GRAMMER-" + } + ] + }, + { + "row":1, + "col":2, + "Text":"[#{vehicleModel}#]" + }, + { + "row":1, + "col":3, + "FreeCell":true, + "Control":[ + { + "Type":"MemoBox", + "Name":"MemoBox1", + "Left":1.19063, + "Width":6.40292, + "Height":0.396875, + "Font":{ + "Name":"宋体", + "Size":142500, + "Bold":true, + "Charset":134 + }, + "Text":"[#{billNum}#]" + } + ], + "ColSpan":2 + }, + { + "row":1, + "col":5, + "FreeCell":true + }, + { + "row":1, + "col":6, + "FreeCell":true, + "Control":[ + { + "Type":"Barcode", + "Name":"Barcode2", + "Left":0.211667, + "Width":2.59292, + "Height":0.608542 + } + ] + }, + { + "row":1, + "col":7, + "Text":"[#{direction}#]" + }, + { + "row":2, + "col":1, + "FreeCell":true + }, + { + "row":2, + "col":3, + "FreeCell":true + }, + { + "row":2, + "col":4, + "FreeCell":true + }, + { + "row":2, + "col":5, + "FreeCell":true + }, + { + "row":2, + "col":6, + "FreeCell":true, + "Control":[ + { + "Type":"MemoBox", + "Name":"MemoBox2", + "Left":0.396875, + "Width":2.59292, + "Height":0.396875, + "Text":"[#{billNum}#]" + } + ] + } + ] + } + ] + } + ], + "ReportFooter":[ + { + "Name":"ReportFooter1", + "Height":3.20146, + "Control":[ + { + "Type":"FreeGrid", + "Name":"FreeGrid4", + "Left":0.0264583, + "Top":0.3175, + "Border":{ + "Styles":"[DrawLeft|DrawTop|DrawRight|DrawBottom]" + }, + "RowCount":2, + "FreeGridColumn":[ + { + "index":2, + "Width":2.43417 + }, + { + "index":3, + "Width":4.60375 + }, + { + "index":4, + "Width":1.74625 + }, + { + "index":5, + "Width":3.57188 + } + ], + "FreeGridRow":[ + { + "index":2, + "Height":1.5875 + } + ], + "FreeGridCell":[ + { + "row":2, + "col":3, + "Font":{ + "Name":"宋体", + "Size":180000, + "Bold":true, + "Charset":134 + }, + "Text":"[#{billSerialNum}#]" + }, + { + "row":2, + "col":5, + "Text":"[#{printDate}#]" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/Extends/MenBanReports/MenBanPackingListDto.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/Extends/MenBanReports/MenBanPackingListDto.cs index 8dc0da3..9db318d 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/Extends/MenBanReports/MenBanPackingListDto.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/Extends/MenBanReports/MenBanPackingListDto.cs @@ -110,7 +110,10 @@ namespace WY.NewJit.Extends /// public string EndHostSN { set; get; } - + /// + /// 排序字段 + /// + public int SN { get; set; } public MenBanPackingListDto() { @@ -159,6 +162,23 @@ namespace WY.NewJit.Extends } + public class MenBanPackingListResultDto + { + public List MainList1 { get; set; } + + public List MainList2 { get; set; } + public List DetailList1 { get; set; } + + public List DetailList2 { get; set; } + + public MenBanPackingListResultDto() + { + MainList1 = new List(); + MainList2 = new List(); + DetailList1 = new List(); + DetailList2 = new List(); + } + } } diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/Dics/Dtos/DicItemDto.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/Dics/Dtos/DicItemDto.cs index f8a01c9..cdb62f3 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/Dics/Dtos/DicItemDto.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/Dics/Dtos/DicItemDto.cs @@ -73,5 +73,19 @@ namespace WY.NewJit.MsgBaseData /// public virtual string DicItemSort9 { get; set; } + /// + /// 分类10(零件大类对应 是否扫描 1 需要扫描 0 不需要扫描) + /// + public virtual string DicItemSort10 { get; set; } + + /// + /// + /// + public virtual string DicItemSort11 { get; set; } + /// + /// + /// + public virtual string DicItemSort12 { get; set; } + } } diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/WY.NewJit.Application.Contracts.xml b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/WY.NewJit.Application.Contracts.xml index c1281a7..9073733 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/WY.NewJit.Application.Contracts.xml +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/WY.NewJit.Application.Contracts.xml @@ -99,6 +99,11 @@ 顺序号结束 + + + 排序字段 + + 生产线 @@ -1000,6 +1005,21 @@ 分类9(零件大类对应 打印标准数量 12 或 24) + + + 分类10(零件大类对应 是否扫描 1 需要扫描 0 不需要扫描) + + + + + + + + + + + + diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM100s/BillM100AppService.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM100s/BillM100AppService.cs index 881ba53..1545883 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM100s/BillM100AppService.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM100s/BillM100AppService.cs @@ -3865,6 +3865,50 @@ select min(SerialNumStr) from FisBillM100 a left join d on a.VIN=d.VIN } } + [UnitOfWork] + [HttpPost] + [Route("load-menban-report2")] + public virtual async Task LoadMenBanReport2(List input) + { + _logger.LogDebug(_errorMessagePrefix + "LoadMenBanReport2 进入"); + MenBanPackingListResultDto ret = new MenBanPackingListResultDto(); + try + { + List reportLst = await LoadMenBanReport(input); + + List partLargeTypeLst = await _dicItemRepository.GetListAsync(itm => itm.DicTypeCode == "零件大类"); + foreach (MenBanPackingListDto report in reportLst) + { + var partLargeTypeObj = partLargeTypeLst.FirstOrDefault(itm => itm.DicItemSort2 == report.ProductLine && itm.DicItemCode == report.PartType); + if (partLargeTypeObj != null) + { + report.SN = partLargeTypeObj.DicItemSort7.TryToIntZero(); + } + } + reportLst = reportLst.OrderBy(itm => itm.SN).ToList(); + if (reportLst.Count > 0) + { + ret.MainList1.Add(reportLst[0]); + ret.DetailList1.AddRange(reportLst[0].Details); + reportLst[0].Details = null; + } + if (reportLst.Count > 1) + { + ret.MainList2.Add(reportLst[1]); + ret.DetailList2.AddRange(reportLst[1].Details); + reportLst[1].Details = null; + } + return ret; + } + catch (Exception ex) + { + string errorMsg = _errorMessagePrefix + "LoadMenBanReport2 执行出错:" + ex.Message; + _logger.LogError(errorMsg); + throw new UserFriendlyException(errorMsg); + } + } + + private static string GetTrueString(string str) { return str == null ? " " : str.Trim(); ; diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM100s/MenBanPackingRecService.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM100s/MenBanPackingRecService.cs index 489d626..832bfed 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM100s/MenBanPackingRecService.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM100s/MenBanPackingRecService.cs @@ -225,45 +225,45 @@ namespace Win.Sfs.SettleAccount.FISes /// /// IDs /// 是否执行成功 - [HttpPost] - [Route("delete")] - [UnitOfWork(isTransactional: false)] - public virtual async Task> DeleteListAsync(List ids) - { - - var _list=await _menBanPackingListRepository.Where(p => ids.Contains(p.Id)).ToListAsync(); - var sortList=_list.Select(p => p.SortId).Distinct().ToList();//筛选出匹配门板 - _list = _menBanPackingListRepository.Where(p => sortList.Contains(p.SortId)).ToList(); - - var idList = _list.Select(p => p.Id).ToList(); - var _ls=_list.Select(p => p.BillNum).ToList(); - var _strList = new List (); + //[HttpPost] + //[Route("delete")] + //[UnitOfWork(isTransactional: false)] + //public virtual async Task> DeleteListAsync(List ids) + //{ + + // var _list=await _menBanPackingListRepository.Where(p => ids.Contains(p.Id)).ToListAsync(); + // var sortList=_list.Select(p => p.SortId).Distinct().ToList();//筛选出匹配门板 + // _list = _menBanPackingListRepository.Where(p => sortList.Contains(p.SortId)).ToList(); + + // var idList = _list.Select(p => p.Id).ToList(); + // var _ls=_list.Select(p => p.BillNum).ToList(); + // var _strList = new List (); - _ls.ForEach(p=>{ - _strList.Add(string.Format("'{0}'", p)); - }); - string str=string.Join(",", _strList.ToArray()); - var _lst=_wmsRepository.GetListBySql(string.Format("select * from TB_BILL where (state=1 or state=2) and BillNum in ({0}) ", str)); - if (_lst.Count() == 0) - { - await _menBanPackingListRepository.DeleteManyAsync(idList.ToArray()); - - var _childList = await _menBanPackingListRepository.Where(p => idList.Contains(p.Id)).SelectMany(p => p.Details).ToListAsync(); - var _child = _childList.Select(p => p.M100BillId).Distinct().ToList(); - var _lst1= await _billM100Repository.Where(p => _child.Contains(p.Id)).ToListAsync(); - _lst1.ForEach(p => - { - if (p.BillStatus == BillStatusEnum.Publish) - { - p.SetBillStatus(BillStatusEnum.Match); - } - - }); - await _billM100Repository.UpdateManyAsync(_lst1); + // _ls.ForEach(p=>{ + // _strList.Add(string.Format("'{0}'", p)); + // }); + // string str=string.Join(",", _strList.ToArray()); + // var _lst=_wmsRepository.GetListBySql(string.Format("select * from TB_BILL where (state=1 or state=2) and BillNum in ({0}) ", str)); + // if (_lst.Count() == 0) + // { + // await _menBanPackingListRepository.DeleteManyAsync(idList.ToArray()); + + // var _childList = await _menBanPackingListRepository.Where(p => idList.Contains(p.Id)).SelectMany(p => p.Details).ToListAsync(); + // var _child = _childList.Select(p => p.M100BillId).Distinct().ToList(); + // var _lst1= await _billM100Repository.Where(p => _child.Contains(p.Id)).ToListAsync(); + // _lst1.ForEach(p => + // { + // if (p.BillStatus == BillStatusEnum.Publish) + // { + // p.SetBillStatus(BillStatusEnum.Match); + // } + + // }); + // await _billM100Repository.UpdateManyAsync(_lst1); - } - return _lst.Select(p => p.BillNum).ToList(); - } + // } + // return _lst.Select(p => p.BillNum).ToList(); + //} /// /// 取待报废的全部数据,用于展示 @@ -286,98 +286,98 @@ namespace Win.Sfs.SettleAccount.FISes /// /// IDs /// 是否执行成功 - [HttpPost] - [Route("scrap")] - [UnitOfWork(isTransactional: false)] - public virtual async Task> ScrapAsync(List ids) - { - var selLst = await _menBanPackingListRepository.Where(p => ids.Contains(p.Id)).ToListAsync(); - if (selLst == null || selLst.Count == 0) - { - throw new BusinessException("1001", "没有选中要作废的已打印装箱单!"); - } - foreach (var _obj in selLst) - { - string maxBillNum = await _menBanPackingListRepository.Where(itm => itm.ProductLine == _obj.ProductLine && itm.ReportStatus == ReportStatusEnum.已打印).MaxAsync(itm => itm.BillNum); //取当前生产线的最大装箱单号 - if (string.IsNullOrEmpty(maxBillNum) == false) - { - MenBanPackingList firObj = await _menBanPackingListRepository.FirstOrDefaultAsync(itm => itm.BillNum == maxBillNum); - if (firObj != null) - { - if (_obj.SortId != firObj.SortId) - { - throw new BusinessException("1001", "只能报废当前生产线的最后打印单据,要报废的单据不是最后打印单据!"); - } - } - } - } - - var sortList = selLst.Select(p => p.SortId).Distinct().ToList();//筛选出匹配门板 - List pairlist = _menBanPackingListRepository.Where(p => sortList.Contains(p.SortId)).ToList(); - - - var idList = pairlist.Select(p => p.Id).ToList(); - var _ls = pairlist.Select(p => p.BillNum).ToList(); - var _strList = new List(); - - _ls.ForEach(p => { - _strList.Add(string.Format("'{0}'", p)); - }); - string str = string.Join(",", _strList.ToArray()); - var wmsLst = _wmsRepository.GetListBySql(string.Format("select top 100 * from TB_BILL with(nolock) where (state=1 or state=2) and BillNum in ({0}) ", str)); - if (wmsLst.Count() == 0) //库存没有排序 - { - //调用库存系统接口 - List billNumLst = pairlist.Select(itm => itm.BillNum).Distinct().ToList(); - foreach (string billNumStr in billNumLst) - { - DelOrScrapWMSInterface(billNumStr, true); - } - - #region 作废时单据序号减一 - string curProductLine = selLst[0].ProductLine; - DateTime curPrintDate = selLst[0].PrintDate; - //string curPartType = selLst[0].PartType; - var priorLst = _menBanPackingListRepository.Where(itm => itm.ReportStatus == ReportStatusEnum.已打印 && itm.ProductLine == curProductLine && idList.Contains(itm.Id) == false); - if (priorLst.Any()) - { - string maxBillNum = priorLst.Max(itm => itm.BillNum); //除去要作废记录,取当前生产线的最大单据号 - MenBanPackingList priorObj = priorLst.FirstOrDefault(itm => itm.BillNum == maxBillNum); //除去要作废记录,取当前生产线的最后打印记录 - double updRecCnt = await _lineSNDomianServic.SetMaxSN(ProductTypeEnum.门板, curProductLine, "", priorObj.PrintDate, priorObj.BillSerialNum.TryToDoubleZero(), null); //调用减号接口 - } - else - { - double updRecCnt2 = await _lineSNDomianServic.SetMaxSN(ProductTypeEnum.门板, curProductLine, "", curPrintDate, 0, null); //调用减号接口,没有上条记录时 单据号传0 - } - #endregion - - foreach (var itm in pairlist) - { - itm.ReportStatus = WY.NewJit.Extends.PaiGe.ReportStatusEnum.已作废; - } - - await _menBanPackingListRepository.UpdateManyAsync(pairlist); - //批量改为未打印 - var _childList = await _menBanPackingListRepository.Where(p => idList.Contains(p.Id)).SelectMany(p => p.Details).ToListAsync(); - var _child = _childList.Select(p => p.M100BillId).Distinct().ToList(); - var m100Lst = await _billM100Repository.Where(p => _child.Contains(p.Id)).ToListAsync(); - m100Lst.ForEach(p => - { - if (p.BillStatus == BillStatusEnum.Publish) - { - p.SetBillStatus(BillStatusEnum.Match); - } - p.PrintTime = null; - }); - await _billM100Repository.UpdateManyAsync(m100Lst); - - } - else - { - throw new BusinessException("1001", "WMS已经排序,不能报废!"); - } - return wmsLst.Select(p => p.BillNum).ToList(); - } + //[HttpPost] + //[Route("scrap")] + //[UnitOfWork(isTransactional: false)] + //public virtual async Task> ScrapAsync(List ids) + //{ + // var selLst = await _menBanPackingListRepository.Where(p => ids.Contains(p.Id)).ToListAsync(); + // if (selLst == null || selLst.Count == 0) + // { + // throw new BusinessException("1001", "没有选中要作废的已打印装箱单!"); + // } + // foreach (var _obj in selLst) + // { + // string maxBillNum = await _menBanPackingListRepository.Where(itm => itm.ProductLine == _obj.ProductLine && itm.ReportStatus == ReportStatusEnum.已打印).MaxAsync(itm => itm.BillNum); //取当前生产线的最大装箱单号 + // if (string.IsNullOrEmpty(maxBillNum) == false) + // { + // MenBanPackingList firObj = await _menBanPackingListRepository.FirstOrDefaultAsync(itm => itm.BillNum == maxBillNum); + // if (firObj != null) + // { + // if (_obj.SortId != firObj.SortId) + // { + // throw new BusinessException("1001", "只能报废当前生产线的最后打印单据,要报废的单据不是最后打印单据!"); + // } + // } + // } + // } + + // var sortList = selLst.Select(p => p.SortId).Distinct().ToList();//筛选出匹配门板 + // List pairlist = _menBanPackingListRepository.Where(p => sortList.Contains(p.SortId)).ToList(); + + + // var idList = pairlist.Select(p => p.Id).ToList(); + // var _ls = pairlist.Select(p => p.BillNum).ToList(); + // var _strList = new List(); + + // _ls.ForEach(p => { + // _strList.Add(string.Format("'{0}'", p)); + // }); + // string str = string.Join(",", _strList.ToArray()); + // var wmsLst = _wmsRepository.GetListBySql(string.Format("select top 100 * from TB_BILL with(nolock) where (state=1 or state=2) and BillNum in ({0}) ", str)); + // if (wmsLst.Count() == 0) //库存没有排序 + // { + // //调用库存系统接口 + // List billNumLst = pairlist.Select(itm => itm.BillNum).Distinct().ToList(); + // foreach (string billNumStr in billNumLst) + // { + // DelOrScrapWMSInterface(billNumStr, true); + // } + + // #region 作废时单据序号减一 + // string curProductLine = selLst[0].ProductLine; + // DateTime curPrintDate = selLst[0].PrintDate; + // //string curPartType = selLst[0].PartType; + // var priorLst = _menBanPackingListRepository.Where(itm => itm.ReportStatus == ReportStatusEnum.已打印 && itm.ProductLine == curProductLine && idList.Contains(itm.Id) == false); + // if (priorLst.Any()) + // { + // string maxBillNum = priorLst.Max(itm => itm.BillNum); //除去要作废记录,取当前生产线的最大单据号 + // MenBanPackingList priorObj = priorLst.FirstOrDefault(itm => itm.BillNum == maxBillNum); //除去要作废记录,取当前生产线的最后打印记录 + // double updRecCnt = await _lineSNDomianServic.SetMaxSN(ProductTypeEnum.门板, curProductLine, "", priorObj.PrintDate, priorObj.BillSerialNum.TryToDoubleZero(), null); //调用减号接口 + // } + // else + // { + // double updRecCnt2 = await _lineSNDomianServic.SetMaxSN(ProductTypeEnum.门板, curProductLine, "", curPrintDate, 0, null); //调用减号接口,没有上条记录时 单据号传0 + // } + // #endregion + + // foreach (var itm in pairlist) + // { + // itm.ReportStatus = WY.NewJit.Extends.PaiGe.ReportStatusEnum.已作废; + // } + + // await _menBanPackingListRepository.UpdateManyAsync(pairlist); + // //批量改为未打印 + // var _childList = await _menBanPackingListRepository.Where(p => idList.Contains(p.Id)).SelectMany(p => p.Details).ToListAsync(); + // var _child = _childList.Select(p => p.M100BillId).Distinct().ToList(); + // var m100Lst = await _billM100Repository.Where(p => _child.Contains(p.Id)).ToListAsync(); + // m100Lst.ForEach(p => + // { + // if (p.BillStatus == BillStatusEnum.Publish) + // { + // p.SetBillStatus(BillStatusEnum.Match); + // } + // p.PrintTime = null; + // }); + // await _billM100Repository.UpdateManyAsync(m100Lst); + + // } + // else + // { + // throw new BusinessException("1001", "WMS已经排序,不能报废!"); + // } + // return wmsLst.Select(p => p.BillNum).ToList(); + //} #region 格拉默 [HttpGet] diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain.Shared/MsgCheck/BillStatusEnum.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain.Shared/MsgCheck/BillStatusEnum.cs index 2660c33..67188fb 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain.Shared/MsgCheck/BillStatusEnum.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain.Shared/MsgCheck/BillStatusEnum.cs @@ -17,15 +17,15 @@ namespace WY.NewJit.MsgCheck //NotMatch = 1, /// - /// 已匹配,未打印 + /// 未发运 /// - [Description("未打印")] + [Description("未发运")] Match = 2, /// - /// 已打印 + /// 已发运 /// - [Description("已打印")] + [Description("已发运")] Publish = 3, /// diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/DicItem.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/DicItem.cs index 74623e1..a4b39b1 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/DicItem.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/DicItem.cs @@ -72,6 +72,19 @@ namespace WY.NewJit.MsgBaseData /// public virtual string DicItemSort9 { get; set; } + /// + /// 分类9(零件大类对应 是否扫描 1 需要扫描 0 不需要扫描) + /// + public virtual string DicItemSort10 { get; set; } + + /// + /// + /// + public virtual string DicItemSort11 { get; set; } + /// + /// + /// + public virtual string DicItemSort12 { get; set; } protected DicItem() diff --git a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Entitys/BillM100.cs b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Entitys/BillM100.cs index d73462d..9d84b04 100644 --- a/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Entitys/BillM100.cs +++ b/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Entitys/BillM100.cs @@ -67,7 +67,7 @@ namespace WY.NewJit.MsgCheck public virtual DateTime? ReceiveTime { get; protected set; } /// - /// 单据状态(0 空;1 未匹配;2 已匹配未打印;3 已打印) + /// 单据状态(2 未发运;3 已发运),发运接口更新为3 /// public virtual BillStatusEnum BillStatus { get; protected set; } @@ -82,7 +82,7 @@ namespace WY.NewJit.MsgCheck public virtual DateTime? PrintTime { get; set; } /// - /// 打印单号【派格版本:不为空时表示已打印柱护板】 + /// 打印单号(已经打印时更新为单号) /// public virtual string PrintBillNum { get; set; } diff --git a/Shared/Win.Sfs.Shared/bin/Debug/Win.Sfs.Shared.2.0.0.nupkg b/Shared/Win.Sfs.Shared/bin/Debug/Win.Sfs.Shared.2.0.0.nupkg index 60cefce0b410c97dffc464768d3230d4d817d3b8..f3be9fbd56c5c56fb5cb03c38866386ffe63ca55 100644 GIT binary patch delta 31813 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 SKod-Xq!~l%_H0?ksZ0Qji%v@b delta 248 zcmZoTz|wGlWkLtb{O1v`H}?GbA@Fapfz#schg=(^-?#A2JFW|kI7 z25FYYMk#5@#;F!5mPTf2sYd2TNtUUm$%dw82Bs;ACe!x_Fe+@16kz<%&hoQO>g4no z3B~{ceZ&1Hg*9He&VGAS%UN!s!}L88j9Cg$QPXIsC`kR;hwo{YN(Qo0f#NAZF(aUwG$7B2!5oN_fFh|3 Zra%>jK++7T&lIRCk-=npwk+dRCIB?rP(lCz diff --git a/Shared/Win.Sfs.Shared/bin/Debug/netcoreapp5/Win.Sfs.Shared.pdb b/Shared/Win.Sfs.Shared/bin/Debug/netcoreapp5/Win.Sfs.Shared.pdb index af937c05b45a5a959cca65ceeb4130b71a05deee..472c778064acfce8081c9a6af8c5628b4eaf6c99 100644 GIT binary patch delta 4597 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 b@#JZ-+;{Mg5B}mQXcrk+?hH)dzb5GaS-1ZR diff --git a/Shared/Win.Sfs.Shared/bin/Debug/netcoreapp5/Win.Utils.dll b/Shared/Win.Sfs.Shared/bin/Debug/netcoreapp5/Win.Utils.dll index 769153a071be5973c734c6bb2cf678dfb95e10a6..04339d682eb119fd3415a0795169f7da6b00c970 100644 GIT binary patch delta 245 zcmZn&X$YCn!Lq&O-JFd*FJuG)cHg~JQdHo%OiqhWa?;tun_FZPm~G5VP17vR(~?sS zQc^6;4b4nb6H^RRjgym8Ee#Ws5{*raEG-h#OwAY=I2aj_fc0AaIg=F>0|bgruM9B1 z|HNaFMce7K>eru4Zct26fC_dfK?OmoZ$#|TXa8Zr;&^yw;wGgBEdFK;ra+j+V98(( zB$F9Z84MUwfY1WSH)H_GrZOY~`G!E+7$^@?VF~0VG9&@9F@p(%5s+^IWTyeunr+rs HzsLjt$a+d{ delta 245 zcmZn&X$YCn!LqG7>^}Cg1;+CpOKS+@P4C02Qoy2o(gW-t_A4S#~eW-EU1(?r&0hz~XPrV8oEdV9b!r zU=GA4K(-}=AwwdA8AB?NXAb0>0qImAZ3u+P3`t;lb0FIitjZjy-w3G27^v2OA#t<5 H`b8!H$z)7z diff --git a/Shared/Win.Sfs.Shared/bin/Debug/netcoreapp5/Win.Utils.pdb b/Shared/Win.Sfs.Shared/bin/Debug/netcoreapp5/Win.Utils.pdb index 603b1947ec5b77b03ba1baaad37b28e40652fa9e..b067310b1f9b033bebe979f8688cbd367d918aea 100644 GIT binary patch delta 71 zcmV-N0J#73sR8t<0g!wYa?7buH{aw)qBw@j%_rC7JFPFAv5;a2Afd&Ayc4+dUgb0+ d2@siw3>o7=>@19WGVmmwlM>1Ez_Stw;!6k2BFF#$ delta 71 zcmV-N0J#73sR8t<0g!wYk2>4<)?&#@p#n|+dC0P!K}hz+v5;a2AWjX@j2r1L1tyN# dg*5~RdXHr|$W*dNFCTuz2Z9Y?VY3nm;!EEeAF}`e diff --git a/Shared/Win.Sfs.Shared/obj/Debug/Win.Sfs.Shared.2.0.0.nuspec b/Shared/Win.Sfs.Shared/obj/Debug/Win.Sfs.Shared.2.0.0.nuspec index 7a8575a..a4187c7 100644 --- a/Shared/Win.Sfs.Shared/obj/Debug/Win.Sfs.Shared.2.0.0.nuspec +++ b/Shared/Win.Sfs.Shared/obj/Debug/Win.Sfs.Shared.2.0.0.nuspec @@ -5,7 +5,7 @@ 2.0.0 Win.Sfs.Shared Package Description - + diff --git a/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.AssemblyInfo.cs b/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.AssemblyInfo.cs index 4bf6f0b..6d53d66 100644 --- a/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.AssemblyInfo.cs +++ b/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Win.Sfs.Shared")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("2.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("2.0.0+55c68df95edc067cefe3d74120d28daebdd00649")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("2.0.0+a5a9bdc002c0bde27fed59155b4f42778c8a586e")] [assembly: System.Reflection.AssemblyProductAttribute("Win.Sfs.Shared")] [assembly: System.Reflection.AssemblyTitleAttribute("Win.Sfs.Shared")] [assembly: System.Reflection.AssemblyVersionAttribute("2.0.0.0")] diff --git a/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.AssemblyInfoInputs.cache b/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.AssemblyInfoInputs.cache index 6bbb8b8..7f783e5 100644 --- a/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.AssemblyInfoInputs.cache +++ b/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.AssemblyInfoInputs.cache @@ -1 +1 @@ -48b37d1c823a2c28ae1847b40d58f961e3a2bcf25479d6132ccf6601b7861fc4 +ce8bce8f0148848382678a78ba43b96b07f28bbbffd2234bcd66f38b2eecf85f diff --git a/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.csproj.AssemblyReference.cache b/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.csproj.AssemblyReference.cache index eea83342ce2ed98752098e28f0b1035bc5597523..0ad3b9a1aef9666f3caa5581f752c17ac12a8cc4 100644 GIT binary patch delta 19 bcmZ4Yk#XHe#tDgR0WYq-ICy1ax_boxX(S4o delta 19 bcmZ4Yk#XHe#tDgR$%cOqYoFMd?p^@^U+4)| diff --git a/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.dll b/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.dll index f34ed9b4654e2f2b8f76843176c30d476ef9a2bf..f88760c12407d14bb649d0deef0bfc3d632ef94d 100644 GIT binary patch delta 248 zcmZoTz|wGlWkLtbV+)0*wFJS(<#Nubv(w z!5APAcSYc_vahb|9+rD0GItN$oW4hbF-rj|stOYYsdwd(=z4Quz2v3K>)E%vNitqz z_D^ImWk_VOWJqF2VMt~$074@$4dSN)+2#ysKsp7e%96nlNSXpwngGR2z;fmc7C_Y& SKod-Xq!~l%_H0?ksZ0Qji%v@b delta 248 zcmZoTz|wGlWkLtb{O1v`H}?GbA@Fapfz#schg=(^-?#A2JFW|kI7 z25FYYMk#5@#;F!5mPTf2sYd2TNtUUm$%dw82Bs;ACe!x_Fe+@16kz<%&hoQO>g4no z3B~{ceZ&1Hg*9He&VGAS%UN!s!}L88j9Cg$QPXIsC`kR;hwo{YN(Qo0f#NAZF(aUwG$7B2!5oN_fFh|3 Zra%>jK++7T&lIRCk-=npwk+dRCIB?rP(lCz diff --git a/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.pdb b/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.pdb index af937c05b45a5a959cca65ceeb4130b71a05deee..472c778064acfce8081c9a6af8c5628b4eaf6c99 100644 GIT binary patch delta 4597 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 b@#JZ-+;{Mg5B}mQXcrk+?hH)dzb5GaS-1ZR diff --git a/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/ref/Win.Sfs.Shared.dll b/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/ref/Win.Sfs.Shared.dll index 3762e96d62a2148f6c53176eba8148d79bf0d17d..4be7eda70e80008356d00b0a3122f241f0ff645c 100644 GIT binary patch delta 207 zcmZoT!_;twX+j6f^+}xl8+%Ha1vXAIZVnW3bZGmuYBqD4Z`fu*miLUC|Fd3f#gux` z{fAR8(KOLADJ9v!z$n=uDJ9j&JS{cF)Y8z@G|42*#K_#-BH1F*)WR&4fx(%P!EW-! zX;Pb2rv2dYPh>D=H<_u{-It8f8lEDy2ngUgt0L4te Ya^?&cK-CsN6HI}m8AIyk?8Q@=0QiH`9JH$R!pe} z-G4asEYl3lEG?1@(kzXQQqq!*Q!P>~jm*+gjm(XbEK^OB4Nc7qOj8m~7#N%x8SExs zoF=tdW!euOe@lim215oj21^DDh9m|9AkUJ)n8Ao41;|PUvQmNKDL^qJpqexw&xpYs eh?9UKsSKt-6^20445-f(s49`cWOMf7sZ0Rir9J5Y diff --git a/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/refint/Win.Sfs.Shared.dll b/Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/refint/Win.Sfs.Shared.dll index 3762e96d62a2148f6c53176eba8148d79bf0d17d..4be7eda70e80008356d00b0a3122f241f0ff645c 100644 GIT binary patch delta 207 zcmZoT!_;twX+j6f^+}xl8+%Ha1vXAIZVnW3bZGmuYBqD4Z`fu*miLUC|Fd3f#gux` z{fAR8(KOLADJ9v!z$n=uDJ9j&JS{cF)Y8z@G|42*#K_#-BH1F*)WR&4fx(%P!EW-! zX;Pb2rv2dYPh>D=H<_u{-It8f8lEDy2ngUgt0L4te Ya^?&cK-CsN6HI}m8AIyk?8Q@=0QiH`9JH$R!pe} z-G4asEYl3lEG?1@(kzXQQqq!*Q!P>~jm*+gjm(XbEK^OB4Nc7qOj8m~7#N%x8SExs zoF=tdW!euOe@lim215oj21^DDh9m|9AkUJ)n8Ao41;|PUvQmNKDL^qJpqexw&xpYs eh?9UKsSKt-6^20445-f(s49`cWOMf7sZ0Rir9J5Y diff --git a/Shared/Win.Utils/bin/Debug/Win.Utils.2.0.0.nupkg b/Shared/Win.Utils/bin/Debug/Win.Utils.2.0.0.nupkg index 1d78a1f4a4f36c2e12b5db234bd2c117eda4b16f..d8c5b7db5849d483a7b991a230e7c3674dbedb9a 100644 GIT binary patch delta 5661 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 delta 5646 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 diff --git a/Shared/Win.Utils/bin/Debug/netcoreapp5/Win.Utils.dll b/Shared/Win.Utils/bin/Debug/netcoreapp5/Win.Utils.dll index 769153a071be5973c734c6bb2cf678dfb95e10a6..04339d682eb119fd3415a0795169f7da6b00c970 100644 GIT binary patch delta 245 zcmZn&X$YCn!Lq&O-JFd*FJuG)cHg~JQdHo%OiqhWa?;tun_FZPm~G5VP17vR(~?sS zQc^6;4b4nb6H^RRjgym8Ee#Ws5{*raEG-h#OwAY=I2aj_fc0AaIg=F>0|bgruM9B1 z|HNaFMce7K>eru4Zct26fC_dfK?OmoZ$#|TXa8Zr;&^yw;wGgBEdFK;ra+j+V98(( zB$F9Z84MUwfY1WSH)H_GrZOY~`G!E+7$^@?VF~0VG9&@9F@p(%5s+^IWTyeunr+rs HzsLjt$a+d{ delta 245 zcmZn&X$YCn!LqG7>^}Cg1;+CpOKS+@P4C02Qoy2o(gW-t_A4S#~eW-EU1(?r&0hz~XPrV8oEdV9b!r zU=GA4K(-}=AwwdA8AB?NXAb0>0qImAZ3u+P3`t;lb0FIitjZjy-w3G27^v2OA#t<5 H`b8!H$z)7z diff --git a/Shared/Win.Utils/bin/Debug/netcoreapp5/Win.Utils.pdb b/Shared/Win.Utils/bin/Debug/netcoreapp5/Win.Utils.pdb index 603b1947ec5b77b03ba1baaad37b28e40652fa9e..b067310b1f9b033bebe979f8688cbd367d918aea 100644 GIT binary patch delta 71 zcmV-N0J#73sR8t<0g!wYa?7buH{aw)qBw@j%_rC7JFPFAv5;a2Afd&Ayc4+dUgb0+ d2@siw3>o7=>@19WGVmmwlM>1Ez_Stw;!6k2BFF#$ delta 71 zcmV-N0J#73sR8t<0g!wYk2>4<)?&#@p#n|+dC0P!K}hz+v5;a2AWjX@j2r1L1tyN# dg*5~RdXHr|$W*dNFCTuz2Z9Y?VY3nm;!EEeAF}`e diff --git a/Shared/Win.Utils/obj/Debug/Win.Utils.2.0.0.nuspec b/Shared/Win.Utils/obj/Debug/Win.Utils.2.0.0.nuspec index 5ad4f77..7a63211 100644 --- a/Shared/Win.Utils/obj/Debug/Win.Utils.2.0.0.nuspec +++ b/Shared/Win.Utils/obj/Debug/Win.Utils.2.0.0.nuspec @@ -5,7 +5,7 @@ 2.0.0 Win.Utils Package Description - + diff --git a/Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.AssemblyInfo.cs b/Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.AssemblyInfo.cs index 69ddc12..508caa2 100644 --- a/Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.AssemblyInfo.cs +++ b/Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Win.Utils")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("2.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("2.0.0+55c68df95edc067cefe3d74120d28daebdd00649")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("2.0.0+655f97fce0dd87165ead1e3cce91aba34298af56")] [assembly: System.Reflection.AssemblyProductAttribute("Win.Utils")] [assembly: System.Reflection.AssemblyTitleAttribute("Win.Utils")] [assembly: System.Reflection.AssemblyVersionAttribute("2.0.0.0")] diff --git a/Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.AssemblyInfoInputs.cache b/Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.AssemblyInfoInputs.cache index be5fb63..ca30889 100644 --- a/Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.AssemblyInfoInputs.cache +++ b/Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.AssemblyInfoInputs.cache @@ -1 +1 @@ -319ab87b608dd5265bea28a1b45afd1f00fabe88367ebb4631ed6d98436c50fc +d35c56c2a77531ab3e36b55a499477cd4f9db824953aa80b990cafe5b4adf800 diff --git a/Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.dll b/Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.dll index 769153a071be5973c734c6bb2cf678dfb95e10a6..04339d682eb119fd3415a0795169f7da6b00c970 100644 GIT binary patch delta 245 zcmZn&X$YCn!Lq&O-JFd*FJuG)cHg~JQdHo%OiqhWa?;tun_FZPm~G5VP17vR(~?sS zQc^6;4b4nb6H^RRjgym8Ee#Ws5{*raEG-h#OwAY=I2aj_fc0AaIg=F>0|bgruM9B1 z|HNaFMce7K>eru4Zct26fC_dfK?OmoZ$#|TXa8Zr;&^yw;wGgBEdFK;ra+j+V98(( zB$F9Z84MUwfY1WSH)H_GrZOY~`G!E+7$^@?VF~0VG9&@9F@p(%5s+^IWTyeunr+rs HzsLjt$a+d{ delta 245 zcmZn&X$YCn!LqG7>^}Cg1;+CpOKS+@P4C02Qoy2o(gW-t_A4S#~eW-EU1(?r&0hz~XPrV8oEdV9b!r zU=GA4K(-}=AwwdA8AB?NXAb0>0qImAZ3u+P3`t;lb0FIitjZjy-w3G27^v2OA#t<5 H`b8!H$z)7z diff --git a/Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.pdb b/Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.pdb index 603b1947ec5b77b03ba1baaad37b28e40652fa9e..b067310b1f9b033bebe979f8688cbd367d918aea 100644 GIT binary patch delta 71 zcmV-N0J#73sR8t<0g!wYa?7buH{aw)qBw@j%_rC7JFPFAv5;a2Afd&Ayc4+dUgb0+ d2@siw3>o7=>@19WGVmmwlM>1Ez_Stw;!6k2BFF#$ delta 71 zcmV-N0J#73sR8t<0g!wYk2>4<)?&#@p#n|+dC0P!K}hz+v5;a2AWjX@j2r1L1tyN# dg*5~RdXHr|$W*dNFCTuz2Z9Y?VY3nm;!EEeAF}`e diff --git a/Shared/Win.Utils/obj/Debug/netcoreapp5/ref/Win.Utils.dll b/Shared/Win.Utils/obj/Debug/netcoreapp5/ref/Win.Utils.dll index 172dccfd524dddb36cbd4b4736cd0705ce1eb6fc..52cfa20313168e034aaaffb8f9ef50bae65b4618 100644 GIT binary patch delta 195 zcmZp$Xt0>j!J-?~zF}ie3A2E9o6gn~?RkFdT&hK$?VY%BvmncR#?Aj(19>r}5`;H1 zYM7atrdgV&C8rvsq*$06nwh31rWmFgCnu*`8YU(s8k-ndS|p~Knr*fgUCQil#$XDB zX$+PO=0Gx;A(g>^Aq5C6fP6y+kZdYLB9Lzgq>X{{AQhHCULr#h5F0a?Fc<;(7C?3y MP_5Z!eaVYV0CZF~(f|Me delta 195 zcmZp$Xt0>j!LmNCg>(WT7(#tcRb zX$-~;$qeQ|YyxCkG8i%>GMF)>0(s^@z8R2C1=5Bq}l_0swkrHzEK4 diff --git a/Shared/Win.Utils/obj/Debug/netcoreapp5/refint/Win.Utils.dll b/Shared/Win.Utils/obj/Debug/netcoreapp5/refint/Win.Utils.dll index 172dccfd524dddb36cbd4b4736cd0705ce1eb6fc..52cfa20313168e034aaaffb8f9ef50bae65b4618 100644 GIT binary patch delta 195 zcmZp$Xt0>j!J-?~zF}ie3A2E9o6gn~?RkFdT&hK$?VY%BvmncR#?Aj(19>r}5`;H1 zYM7atrdgV&C8rvsq*$06nwh31rWmFgCnu*`8YU(s8k-ndS|p~Knr*fgUCQil#$XDB zX$+PO=0Gx;A(g>^Aq5C6fP6y+kZdYLB9Lzgq>X{{AQhHCULr#h5F0a?Fc<;(7C?3y MP_5Z!eaVYV0CZF~(f|Me delta 195 zcmZp$Xt0>j!LmNCg>(WT7(#tcRb zX$-~;$qeQ|YyxCkG8i%>GMF)>0(s^@z8R2C1=5Bq}l_0swkrHzEK4