安虹睿 1 day ago
parent
commit
bb184f529a
  1. 5
      .gitignore
  2. 25
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport.sln
  3. 397
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Common/ReportHelper.cs
  4. 1
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Handlers/Handler1.ashx
  5. 94
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Handlers/Handler1.ashx.cs
  6. 35
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Properties/AssemblyInfo.cs
  7. 31
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Web.Debug.config
  8. 32
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Web.Release.config
  9. 29
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Web.config
  10. 140
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/WebApplicationGridJJReport.csproj
  11. 38
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/WebApplicationGridJJReport.csproj.user
  12. 3170
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/appcode/PostParam.cs
  13. 202
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/appcode/ReportGenerator.cs
  14. 336
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/appcode/ServerUtility.cs
  15. 517
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/common_code/DataTextProvider.cs
  16. 194
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/common_code/DbReportData.cs
  17. 239
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/common_code/ReportData.cs
  18. 1
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/1.grf
  19. 1
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/2.grf
  20. 1
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/3.grf
  21. 1
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/4.grf
  22. 1
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/5.grf
  23. 1
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/6.grf
  24. 353
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/C8-头枕.grf
  25. 1
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/C8-扶手.grf
  26. 355
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/Q5NF.grf
  27. 1
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/menban.grf
  28. 1
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/zhuhuban.grf
  29. 4
      Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/packages.config
  30. 26
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/Extends/MenBanReports/MenBanPackingListDto.cs
  31. 10
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/Extends/MenBanReports/MenBanPackingRecDto.cs
  32. 2
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/Extends/MenBanReports/MenBanPrintInputDto.cs
  33. 60
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/Dics/Dtos/DicItemDto.cs
  34. 51
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM100s/Dtos/BillM100Dto.cs
  35. 26
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM100s/Dtos/BillM100PartDto.cs
  36. 26
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Dtos/BillM110Dto.cs
  37. 28
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Dtos/BillM110PartDto.cs
  38. 6
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM110s/Interfaces/IBillM110AppService.cs
  39. 156
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/WY.NewJit.Application.Contracts.xml
  40. 14
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgBaseData/Dics/DicAppService.cs
  41. 783
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM100s/BillM100AppService.cs
  42. 320
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM100s/MenBanPackingRecService.cs
  43. 1020
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgCheck/BillM110s/BillM110AppService.cs
  44. 64
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/WY.NewJit.Application.xml
  45. 6
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain.Shared/Common/ObjectResultDto.cs
  46. 12
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain.Shared/MsgCheck/BillStatusEnum.cs
  47. 4
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/Extends/PaiGe/MenBanReports/MenBanPackingList.cs
  48. 8
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/Extends/PaiGe/MenBanReports/MenBanPackingRec.cs
  49. 37
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/DicItem.cs
  50. 4
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Services/LineSNDomianService.cs
  51. 4
      Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgCheck/Entitys/BillM100.cs
  52. BIN
      Shared/Win.Sfs.Shared/bin/Debug/Win.Sfs.Shared.2.0.0.nupkg
  53. BIN
      Shared/Win.Sfs.Shared/bin/Debug/netcoreapp5/Win.Sfs.Shared.dll
  54. BIN
      Shared/Win.Sfs.Shared/bin/Debug/netcoreapp5/Win.Sfs.Shared.pdb
  55. BIN
      Shared/Win.Sfs.Shared/bin/Debug/netcoreapp5/Win.Utils.dll
  56. BIN
      Shared/Win.Sfs.Shared/bin/Debug/netcoreapp5/Win.Utils.pdb
  57. 2
      Shared/Win.Sfs.Shared/obj/Debug/Win.Sfs.Shared.2.0.0.nuspec
  58. 2
      Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.AssemblyInfo.cs
  59. 2
      Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.AssemblyInfoInputs.cache
  60. BIN
      Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.csproj.AssemblyReference.cache
  61. BIN
      Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.dll
  62. BIN
      Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.pdb
  63. BIN
      Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/ref/Win.Sfs.Shared.dll
  64. BIN
      Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/refint/Win.Sfs.Shared.dll
  65. BIN
      Shared/Win.Utils/bin/Debug/Win.Utils.2.0.0.nupkg
  66. BIN
      Shared/Win.Utils/bin/Debug/netcoreapp5/Win.Utils.dll
  67. BIN
      Shared/Win.Utils/bin/Debug/netcoreapp5/Win.Utils.pdb
  68. 2
      Shared/Win.Utils/obj/Debug/Win.Utils.2.0.0.nuspec
  69. 2
      Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.AssemblyInfo.cs
  70. 2
      Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.AssemblyInfoInputs.cache
  71. BIN
      Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.dll
  72. BIN
      Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.pdb
  73. BIN
      Shared/Win.Utils/obj/Debug/netcoreapp5/ref/Win.Utils.dll
  74. BIN
      Shared/Win.Utils/obj/Debug/netcoreapp5/refint/Win.Utils.dll

5
.gitignore

@ -1 +1,6 @@
/*.rar /*.rar
packages
.vs
bin
obj
~bak

25
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

397
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;
// }
///// <summary>
// /// 获取发货单(带托盘明细的发货单)
// /// </summary>
// /// <param name="p_request"></param>
// /// <returns></returns>
// 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;
// }
///// <summary>
// /// 获取托盘
// /// </summary>
// /// <param name="p_request"></param>
// /// <returns></returns>
// 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<long>();
// _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<long>();
// _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<long>();
// _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();
}
}
}
}

1
Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Handlers/Handler1.ashx

@ -0,0 +1 @@
<%@ WebHandler Language="C#" CodeBehind="Handler1.ashx.cs" Class="WebApplicationGridJJReport.Handlers.Handler1" %>

94
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
{
/// <summary>
/// Handler1 的摘要说明
/// </summary>
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;
}
}
}
}

35
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")]

31
Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Web.Debug.config

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 有关使用 web.config 转换的详细信息,请访问 https://go.microsoft.com/fwlink/?LinkId=125889 -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<!--
在下例中,“SetAttributes”转换将更改
“connectionString”的值,以仅在“Match”定位器
找到值为“MyDB”的特性“name”时使用“ReleaseSQLServer”。
<connectionStrings>
<add name="MyDB"
connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
-->
<system.web>
<!--
在下例中,“Replace”转换将替换
web.config 文件的整个 <customErrors> 节。
请注意,由于
在 <system.web> 节点下仅有一个 customErrors 节,因此不需要使用“xdt:Locator”特性。
<customErrors defaultRedirect="GenericError.htm"
mode="RemoteOnly" xdt:Transform="Replace">
<error statusCode="500" redirect="InternalError.htm"/>
</customErrors>
-->
</system.web>
</configuration>

32
Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Web.Release.config

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 有关使用 web.config 转换的详细信息,请访问 https://go.microsoft.com/fwlink/?LinkId=125889 -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<!--
在下例中,“SetAttributes”转换将更改
“connectionString”的值,以仅在“Match”定位器
找到值为“MyDB”的特性“name”时使用“ReleaseSQLServer”。
<connectionStrings>
<add name="MyDB"
connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
-->
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
<!--
在下例中,“Replace”转换将替换
web.config 文件的整个 <customErrors> 节。
请注意,由于
在 <system.web> 节点下仅有一个 customErrors 节,因此不需要使用“xdt:Locator”特性。
<customErrors defaultRedirect="GenericError.htm"
mode="RemoteOnly" xdt:Transform="Replace">
<error statusCode="500" redirect="InternalError.htm"/>
</customErrors>
-->
</system.web>
</configuration>

29
Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/Web.config

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
有关如何配置 ASP.NET 应用程序的详细信息,请访问
https://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5.2" />
<httpRuntime targetFramework="4.5.2" />
</system.web>
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
</compilers>
</system.codedom>
</configuration>
<!--
测试调用:https ://localhost:44356//Handlers/Handler1.ashx?report=menban&returnfile=1
客户端调用:
this.$axios.posts("/Handlers/Handler1.ashx?report=menban",
qs.stringify(this.fileQuery)
)
this.fileQuery 是 load-menban-report 方法返回的字符串,然后转换成json
https://localhost:44356//Handlers/Handler1.ashx?report=C8-%E6%89%B6%E6%89%8B&returnfile=1
-->

140
Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/WebApplicationGridJJReport.csproj

@ -0,0 +1,140 @@
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>
</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{BF0F3ED4-41A8-4AD4-9C8E-EE7112151620}</ProjectGuid>
<ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>WebApplicationGridJJReport</RootNamespace>
<AssemblyName>WebApplicationGridJJReport</AssemblyName>
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
<UseIISExpress>true</UseIISExpress>
<Use64BitIISExpress />
<IISExpressSSLPort>44356</IISExpressSSLPort>
<IISExpressAnonymousAuthentication />
<IISExpressWindowsAuthentication />
<IISExpressUseClassicPipelineMode />
<UseGlobalApplicationHostFile />
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Interop.grsvr6Lib">
<HintPath>D:\~LYF\软件安装\闻荫软件安装\SCP(GridJJ_report_project)\SCP\SCP\obj\Debug\Interop.grsvr6Lib.dll</HintPath>
<EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.ServiceModel.Web" />
<Reference Include="System.Web.DynamicData" />
<Reference Include="System.Web.Entity" />
<Reference Include="System.Web.ApplicationServices" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Core" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Web.Extensions" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Drawing" />
<Reference Include="System.Web" />
<Reference Include="System.Xml" />
<Reference Include="System.Configuration" />
<Reference Include="System.Web.Services" />
<Reference Include="System.EnterpriseServices" />
</ItemGroup>
<ItemGroup>
<Reference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform">
<HintPath>..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Content Include="Web.config" />
</ItemGroup>
<ItemGroup>
<Compile Include="appcode\PostParam.cs" />
<Compile Include="appcode\ReportGenerator.cs" />
<Compile Include="appcode\ServerUtility.cs" />
<Compile Include="Common\ReportHelper.cs" />
<Compile Include="common_code\DataTextProvider.cs" />
<Compile Include="common_code\DbReportData.cs" />
<Compile Include="common_code\ReportData.cs" />
<Compile Include="Handlers\Handler1.ashx.cs">
<DependentUpon>Handler1.ashx</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<Content Include="Handlers\Handler1.ashx" />
<None Include="packages.config" />
<None Include="Web.Debug.config">
<DependentUpon>Web.config</DependentUpon>
</None>
<None Include="Web.Release.config">
<DependentUpon>Web.config</DependentUpon>
</None>
</ItemGroup>
<ItemGroup>
<Folder Include="grf\" />
</ItemGroup>
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
<ProjectExtensions>
<VisualStudio>
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
<WebProjectProperties>
<UseIIS>True</UseIIS>
<AutoAssignPort>True</AutoAssignPort>
<DevelopmentServerPort>56348</DevelopmentServerPort>
<DevelopmentServerVPath>/</DevelopmentServerVPath>
<IISUrl>https://localhost:44356/</IISUrl>
<NTLMAuthentication>False</NTLMAuthentication>
<UseCustomServer>False</UseCustomServer>
<CustomServerUrl>http://192.168.0.140/WebApplicationGridJJReport</CustomServerUrl>
<SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
</WebProjectProperties>
</FlavorProperties>
</VisualStudio>
</ProjectExtensions>
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

38
Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/WebApplicationGridJJReport.csproj.user

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<UseIISExpress>true</UseIISExpress>
<Use64BitIISExpress />
<IISExpressSSLPort>44356</IISExpressSSLPort>
<IISExpressAnonymousAuthentication />
<IISExpressWindowsAuthentication />
<IISExpressUseClassicPipelineMode />
<UseGlobalApplicationHostFile />
<LastActiveSolutionConfig>Debug|Any CPU</LastActiveSolutionConfig>
<ProjectView>ProjectFiles</ProjectView>
</PropertyGroup>
<ProjectExtensions>
<VisualStudio>
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
<WebProjectProperties>
<StartPageUrl>/Handlers/Handler1.ashx?report=menban&amp;returnfile=1</StartPageUrl>
<StartAction>SpecificPage</StartAction>
<AspNetDebugging>True</AspNetDebugging>
<SilverlightDebugging>False</SilverlightDebugging>
<NativeDebugging>False</NativeDebugging>
<SQLDebugging>False</SQLDebugging>
<ExternalProgram>
</ExternalProgram>
<StartExternalURL>
</StartExternalURL>
<StartCmdLineArguments>
</StartCmdLineArguments>
<StartWorkingDirectory>
</StartWorkingDirectory>
<EnableENC>True</EnableENC>
<AlwaysStartWebServerOnDebug>False</AlwaysStartWebServerOnDebug>
</WebProjectProperties>
</FlavorProperties>
</VisualStudio>
</ProjectExtensions>
</Project>

3170
Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/appcode/PostParam.cs

File diff suppressed because one or more lines are too long

202
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);
}
/// <summary>
/// 导入子报表【适用于柱护板报表】
/// </summary>
/// <param name="fileShortName">不含文件扩展名的文件名称</param>
/// <returns></returns>
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
}
}

336
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
{
/// <summary>
/// 将报表生成的二进制数据响应给 HTPP 请求客户端
/// </summary>
/// <param name="context"> HTPP 请求对象</param>
/// <param name="ExportResult">报表生成的二进制数据</param>
/// <param name="FileName">指定下载(或保存)文件时的默认文件名称</param>
/// <param name="ContentType">响应的ContentType</param>
/// <param name="OpenMode">指定生成的数据打开模式,可选[inline|attachment],"inline"表示在网页中内联显示,"attachment"表示以附件文件形式下载。如果不指定,由浏览器自动确定打开方式。</param>
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();
}
}
/// <summary>
/// 将异常信息文字响应给请求的客户端
/// </summary>
/// <param name="context"></param>
/// <param name="MessageText"></param>
public static void ResponseException(HttpContext context, string MessageText)
{
context.Response.ContentType = "text/plain";
context.Response.Write(MessageText);
}
/// <summary>
/// 为了文件名中的汉字与特殊字符能正确,必须进行分浏览器处理
/// </summary>
/// <param name="BrowserAgent"></param>
/// <param name="RawFileName"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 根据报表模板中的查询SQL获取报表数据
/// </summary>
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";
}
}
}

517
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
/// <summary>
/// 在这里集中产生整个项目的所有报表需要的 XML 或 JSON 文本数据
/// </summary>
public class DataTextProvider
{
/// <summary>
/// 根据查询SQL语句产生报表数据
/// </summary>
public static string Build(string QuerySQL)
{
return MyDbReportData.TextFromOneSQL(QuerySQL);
}
/// <summary>
/// 根据多条查询SQL语句产生报表数据,数据对应多记录集
/// </summary>
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 请求中的参数生成报表数据,主要是为例子报表自动分配合适的数据生成函数
/// <summary>
/// 为了避免 switch 语句的使用,建立数据名称与数据函数的映射(map)
/// 在 Global.asax 中创建映射,即在WEB服务启动时初始化映射数据
/// </summary>
//简单无参数报表数据的名称与函数映射表
private delegate string SimpleDataFun();
private static Dictionary<string, SimpleDataFun> SimpleDataFunMap = new Dictionary<string, SimpleDataFun>();
//有参数报表数据的名称与函数映射表,参数来自 HttpRequest
private delegate string SpecialDataFun(HttpRequest Request);
private static Dictionary<string, SpecialDataFun> SpecialDataFunMap = new Dictionary<string, SpecialDataFun>();
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
}
}

194
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);
}
}
}

239
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 = "<xml>\n";
while (dr.Read())
{
XMLText += "<row>";
for (int i = 0; i < dr.FieldCount; ++i)
{
string FldName = dr.GetName(i);
if (FldName == "")
FldName = "Fld" + i;
XMLText += String.Format("<{0}>{1}</{0}>", FldName, HttpUtility.HtmlEncode(dr.GetValue(i).ToString()));
}
XMLText += "</row>\n";
}
XMLText += "</xml>\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();
// }
//}
}
}

1
Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/1.grf

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

1
Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/2.grf

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

1
Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/3.grf

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

1
Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/4.grf

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

1
Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/5.grf

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

1
Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/6.grf

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

353
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}#]"
}
]
}
]
}
]
}

1
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

355
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}#]"
}
]
}
]
}
]
}

1
Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/menban.grf

@ -0,0 +1 @@
BASE64+D0AAHic7Vvdb9NWFH/uJP6HyWhvxfJH7Nh5S1JCGUkWmtBWo9XkJpfGw/GNbBfotj5sEtsYYn1gjCG0aQxpYhqqQNpgAzH+maalT/sXdn39ETu2a6dxWQitVCW53/d3zvkdn3Ov/33+8tNj70wR80DTZagSOYIneZIhKWLaLJ4Dq7JuAK0KUU1Z4Ge52vzJCls+e6rE1isfFvnC+4uz7LzIlsRT1dMF7v0iV+Fn2Go1I5T4k/xinj+XEc8KJRH/PMnzlUxpoVpg82fyJ3kme25RzNeyvGBNVoKqQeTM5UwRVakD0JS9revbL27i6imiLn+CymiKoyjKKlkA8mob9ck4BcW2pOkAldBsBhVs4HFrmqyiPThDf6DJQDWszZYltaU3pS6wpyiDC0ZF0lZlVElbRQ3YHSiZMycdKCtAw4Adt9CdewYYkqyc0uSWM329DS8XoVKWVbSZC5Kig2m3fA5eDpTnu12gtgqKpF5E3RbkltEmcgzJCs7EWsvdGxrFWFeAjnZ2fpkwSzbsJYMmaoeRsRsWoaqCpglD3UD4rKIui5WyBcMUcXYNaOv1s2VUOpNbWirW8o2lpQ5QVySV/FhH0NntSjJQ0M7O419T1tB96a3IilJd6xBWsbWU8FZ1oMlSwrZl2JSw+PZv2tXgJRlBU4QtENdU0ozGejeuGdITqSkb6/bmTd0wO+WI00i9VpEQ4haE1HBGMkCgv1nYkDuxyzQHwF0OugDYWmsaWMMONsIKogN1Xo6DHulrfKMWtgzdaYU/lj0qi5R9raM6umX3djpblYyzDcIxiyzJiTwuwwMue4dCGm8AtW8BszZ5cCQrZrlpxyw8TYtAUYLK7SxscBHIGjQArD6Gtgam+x1UQ4P9kfpj9fGvr63MgS7UDHe0/mbdOtpbWYIaQCuAyPaJEv7z1ubVZhtXIR7wFM/A5kWzPTIjb7GfRKyyeltqYaYKnwHRKlB9PTAy3sb9qg1vv9OIeLRhOrtfPcMgRlMwC2AG0j1kg9oQNpS5/Vzb2+FtTutFDep6Q1rxKOVYu4OLahwLXYrlljbUjXo1bhjQlpsKqCD/oHw0A6FWs3xsrLswYLcAr9SgLpt4xe8Ita/naxVE8smcnGHqgNV4BuhNTe4mcHcrQIGXh5oG9xh+Il2Ncx4HoXI6QOUkZ/H49DD8TwpDkj9tsr8gOPrb54RwVnB5QaQcWgghhiA1uPs4gIOhU3EwFdCBSGtD3ItdQ9MhjgLRkbfURY1k4ryH+xw6o0mX0TCfmZ+Yy/A3i8GW+zTv5XafGKJF4REHzXjkESGTcLkMzt0AV1At8Wrrl96NW73Np+4K+40OAi4TD675EyFLixTPhmBOkcJQmL85WPee3dq9+0N6WLOJsRaFDCu8VVjv3XvWe7aZHtaZhFgzZDYr0GF6jTibm1CwX734tffT9SVtSd27/WDnx5fmt+3n93d//jwl9LmE6HMkz3JvGats//XN7tbj7Rc30lN2PiHcPJlhxAhi4ScUbvTouXvtt53v76QHdzYh3FmSYrMiEwI3SwrZCcXbAntnc/PVy0cp4S0k9ZsUiR5/j9R7RLjFpHDTJEeJmSP1djNBy27kY225uKajzQwERQE0Arnx/oiBWPdQcnw4OxKuE07VUQyG+6HNLGhS14+xrRx5RV41JVORWy0FiQIn27yoSYZk56E8uaT9jTWBZCYpgOOynF8iBWjC5Qf7dcqpn9EbWU6TFPwJgwb1f8vJl1cdWVSTHTumLSufvcSlrkeWzSRFlmNnRlEHCCNL7ShAPWSxhR6wjCy2iQp0uddpbQgW8xB1H4lFH3CNLLajePmgYktibdEHmiMLbqIi73Gyt5gj5cOM4PFH8NC5IRsKcE9952VdXlF89+s8xmj/9nQMP589pcG1rj2wZ6Cp/U5uY7XfSXw4Pe1tDSYmEs/NHHhuJvoc371KYuNZA1oTDVWCWkcyB6DI48ffcy6DzOLm7v0c3dICc1T0vxHQiDGW42FgiSePuBKB6/o3IgrrYZeccFVZ7siGjsRQk1aBcz3IGX0WSD778YZNVIZzHZJ1Zcm8NeRY3CAaaVwv8FZhDkEkmhEZb/yGSZciGZrmeS+92rc7eJKieCqMjimSExhK8IYhY5DDPH+85rmDenw5nbwxEwQyBDI7cKZoPyo2kizJCP6K8UZy59rN3o1HO7ef7N3+I5cOjGxyGGkyQzGMOByMPCVwGWa8YOzdedC7+rS39ffeV5spwZhJbtZZkc1yQRD3s+o0QEwr+u8btX1bPC2D5pJrYjQ3vmkWvf3P3d6z73q3vux9+0Vv64l1KyIlneST6mQkP76JnsZ+uSC3jv5OVConWq13Z2dznU5O19PS1GxSYCMZ87CNPX1gi/ZLH2lhKAxj7RGU+ab5nb27yMCf7D5+3vv692Q2XpC0ppnNDsJo14Q8TtIIR9YXrdso0gLH+NIvNoxZkg/LpaGgX/ChjlTADGKdfC1aRBWqvrW52lKwns/TUhYx8S6Dx1nulWiejkr1jh2V+SMrnDMJgfnV/au7W4+t67kpuQw6RJ8YimTFMH2K9sGiyDF0CNTm63q0jyaHRzqb1gmTT1ndF+/SUlk6JD5hMojJ6CEivWilHV8kndcSUwMyJEKhzQNPQRgEMtL4OeRuoy4jpGH8GYZL2d2uBAnU/tJPGeLkxhkAug24Coy2mbAg8ooykDKzmpUgNEJzIIOeMo0kSH1dN0BnXtLCBeutDrvoM/hW3kDiNZgud/Nuuw8fUnv3/gxiZkOCP6yXYo5Z6bf/AH8/By4=

1
Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/grf/zhuhuban.grf

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

4
Modules/WebApplicationGridJJReport/WebApplicationGridJJReport/packages.config

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="2.0.1" targetFramework="net452" />
</packages>

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

@ -32,6 +32,10 @@ namespace WY.NewJit.Extends
/// </summary> /// </summary>
public string VehicleModel { get; set; } public string VehicleModel { get; set; }
/// <summary>
/// 报表显示车型
/// </summary>
public string VehicleModel_Disp { get; set; }
/// <summary> /// <summary>
/// 供应商厂家代码 /// 供应商厂家代码
@ -106,7 +110,10 @@ namespace WY.NewJit.Extends
/// </summary> /// </summary>
public string EndHostSN { set; get; } public string EndHostSN { set; get; }
/// <summary>
/// 排序字段
/// </summary>
public int SN { get; set; }
public MenBanPackingListDto() public MenBanPackingListDto()
{ {
@ -155,6 +162,23 @@ namespace WY.NewJit.Extends
} }
public class MenBanPackingListResultDto
{
public List<MenBanPackingListDto> MainList1 { get; set; }
public List<MenBanPackingListDto> MainList2 { get; set; }
public List<MenBanPackingRecDto> DetailList1 { get; set; }
public List<MenBanPackingRecDto> DetailList2 { get; set; }
public MenBanPackingListResultDto()
{
MainList1 = new List<MenBanPackingListDto>();
MainList2 = new List<MenBanPackingListDto>();
DetailList1 = new List<MenBanPackingRecDto>();
DetailList2 = new List<MenBanPackingRecDto>();
}
}
} }

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

@ -75,9 +75,15 @@ namespace WY.NewJit.Extends
/// </summary> /// </summary>
public virtual string SN { get; set; } public virtual string SN { get; set; }
/// <summary>
/// 扫描零件号,供发运使用
/// </summary>
public string ScanPartCode { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
} }

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

@ -37,7 +37,7 @@ namespace WY.NewJit.Extends
/// <summary> /// <summary>
/// 补打时使用 /// 补打时使用
/// </summary> /// </summary>
public virtual List<Guid> M100IdList { get; set; } //public virtual List<Guid> M100IdList { get; set; }
#endregion #endregion
} }

60
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgBaseData/Dics/Dtos/DicItemDto.cs

@ -27,5 +27,65 @@ namespace WY.NewJit.MsgBaseData
/// 字典项名称 /// 字典项名称
/// </summary> /// </summary>
public string DicItemName { get; set; } public string DicItemName { get; set; }
/// <summary>
/// 分类1(零件大类对应分组)
/// </summary>
public virtual string DicItemSort1 { get; set; }
/// <summary>
/// 分类2 (零件大类对应产线)
/// </summary>
public virtual string DicItemSort2 { get; set; }
/// <summary>
/// 分类3(零件大类对应车型)
/// </summary>
public virtual string DicItemSort3 { get; set; }
/// <summary>
/// 分类4(零件大类对应打印报表的三位零件大类)
/// </summary>
public virtual string DicItemSort4 { get; set; }
/// <summary>
/// 分类5 (零件大类对应客户零件号)
/// </summary>
public virtual string DicItemSort5 { get; set; }
/// <summary>
/// 分类6(零件大类对应显示车型)
/// </summary>
public virtual string DicItemSort6 { get; set; }
/// <summary>
/// 分类7(零件大类对应报表字段显示顺序)
/// </summary>
public virtual string DicItemSort7 { get; set; }
/// <summary>
/// 分类8(零件大类对应装箱清单号的前缀,例如C或T)
/// </summary>
public virtual string DicItemSort8 { get; set; }
/// <summary>
/// 分类9(零件大类对应 打印标准数量 12 或 24)
/// </summary>
public virtual string DicItemSort9 { get; set; }
/// <summary>
/// 分类10(零件大类对应 是否扫描 1 需要扫描 0 不需要扫描)
/// </summary>
public virtual string DicItemSort10 { get; set; }
/// <summary>
///
/// </summary>
public virtual string DicItemSort11 { get; set; }
/// <summary>
///
/// </summary>
public virtual string DicItemSort12 { get; set; }
} }
} }

51
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM100s/Dtos/BillM100Dto.cs

@ -45,14 +45,14 @@ namespace WY.NewJit.MsgCheck
/// <summary> /// <summary>
/// 总成ID /// 总成ID
/// </summary> /// </summary>
[ExporterHeader(DisplayName = "总成ID")] [ExporterHeader(IsIgnore =true)]
[ImporterHeader(Name = "总成ID")] [ImporterHeader(IsIgnore = true)]
public Guid? AssemblyID { get; set; } public Guid? AssemblyID { get; set; }
/// <summary> /// <summary>
/// 上线时间 /// 上线时间
/// </summary> /// </summary>
[ExporterHeader(DisplayName = "上线时间")] [ExporterHeader(DisplayName = "上线时间", Format ="yyyy-MM-dd HH:mm")]
[ImporterHeader(Name = "上线时间")] [ImporterHeader(Name = "上线时间")]
public DateTime? OnlineTime { get; set; } public DateTime? OnlineTime { get; set; }
@ -73,14 +73,14 @@ namespace WY.NewJit.MsgCheck
/// <summary> /// <summary>
/// 版本 /// 版本
/// </summary> /// </summary>
[ExporterHeader(DisplayName = "版本")] [ExporterHeader(IsIgnore = true)]
[ImporterHeader(Name = "版本")] [ImporterHeader(IsIgnore = true)]
public string Version { get; set; } public string Version { get; set; }
/// <summary> /// <summary>
/// 接收时间 /// 接收时间
/// </summary> /// </summary>
[ExporterHeader(DisplayName = "接收时间")] [ExporterHeader(DisplayName = "接收时间", Format = "yyyy-MM-dd HH:mm")]
[ImporterHeader(Name = "接收时间")] [ImporterHeader(Name = "接收时间")]
public DateTime? ReceiveTime { get; set; } public DateTime? ReceiveTime { get; set; }
@ -101,28 +101,55 @@ namespace WY.NewJit.MsgCheck
/// <summary> /// <summary>
/// 涂装重复单据包含的零件列表 /// 涂装重复单据包含的零件列表
/// </summary> /// </summary>
[ExporterHeader(IsIgnore = true)]
[ImporterHeader(IsIgnore = true)]
public List<BillM100PartDto> BillM100Parts { get; set; } public List<BillM100PartDto> BillM100Parts { get; set; }
/// <summary> /// <summary>
/// 手工操作类型:0 none,1 手工添加,2 手工修改 /// 手工操作类型:0 none,1 手工添加,2 手工修改
/// </summary> /// </summary>
[ExporterHeader(DisplayName = "手工操作类型")] [ExporterHeader(IsIgnore = true)]
[ImporterHeader(Name = "手工操作类型")] [ImporterHeader(IsIgnore = true)]
public ManualOperationTypeEnum OperationType { get; set; } public ManualOperationTypeEnum OperationType { get; set; }
/// <summary> /// <summary>
/// 手工操作员 /// 手工操作员
/// </summary> /// </summary>
[ExporterHeader(DisplayName = "手工操作员")] [ExporterHeader(IsIgnore = true)]
[ImporterHeader(Name = "手工操作员")] [ImporterHeader(IsIgnore = true)]
public string Operator { get; set; } public string Operator { get; set; }
/// <summary> /// <summary>
/// 手工操作日期 /// 手工操作日期
/// </summary> /// </summary>
[ExporterHeader(DisplayName = "手工操作日期")] [ExporterHeader(IsIgnore = true)]
[ImporterHeader(Name = "手工操作日期")] [ImporterHeader(IsIgnore = true)]
public DateTime? OperationTime { get; set; } 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; }
} }
} }

26
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/MsgCheck/BillM100s/Dtos/BillM100PartDto.cs

@ -34,5 +34,31 @@ namespace WY.NewJit.MsgCheck
[ExporterHeader(DisplayName = "描述")] [ExporterHeader(DisplayName = "描述")]
[ImporterHeader(Name = "描述")] [ImporterHeader(Name = "描述")]
public string Description { get; set; } public string Description { get; set; }
/// <summary>
/// 零件类型:产线
/// </summary>
public virtual string PartType { get; set; }
/// <summary>
/// 零件类型:分组
/// </summary>
public virtual string PartType2 { get; set; }
/// <summary>
/// 零件类型:零件大类
/// </summary>
public virtual string PartType3 { get; set; }
/// <summary>
/// 零件在主表横向排列顺序
/// </summary>
public int? DisplaySN { get; set; }
/// <summary>
/// 零件在主表横向排列显示的列名
/// </summary>
public string DisplayColumnName { get; set; }
} }
} }

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

@ -124,5 +124,31 @@ namespace WY.NewJit.MsgCheck
[ImporterHeader(Name = "手工操作日期")] [ImporterHeader(Name = "手工操作日期")]
public DateTime? OperationTime { get; set; } 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
} }
} }

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

@ -34,5 +34,33 @@ namespace WY.NewJit.MsgCheck
[ExporterHeader(DisplayName = "描述")] [ExporterHeader(DisplayName = "描述")]
[ImporterHeader(Name = "描述")] [ImporterHeader(Name = "描述")]
public string Description { get; set; } public string Description { get; set; }
#region 新增
/// <summary>
/// 零件类型:产线
/// </summary>
public virtual string PartType { get; set; }
/// <summary>
/// 零件类型:分组
/// </summary>
public virtual string PartType2 { get; set; }
/// <summary>
/// 零件类型:零件大类
/// </summary>
public virtual string PartType3 { get; set; }
/// <summary>
/// 零件在主表横向排列顺序
/// </summary>
public int? DisplaySN { get; set; }
/// <summary>
/// 零件在主表横向排列显示的列名
/// </summary>
public string DisplayColumnName { get; set; }
#endregion
} }
} }

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

@ -67,14 +67,14 @@ namespace WY.NewJit.MsgCheck
/// </summary> /// </summary>
/// <param name="productLine">生产线</param> /// <param name="productLine">生产线</param>
/// <returns>起始大众顺序号</returns> /// <returns>起始大众顺序号</returns>
Task<ObjectResultDto<int?>> GetPrintStartHostSN2(string productLine, string isZhuHuBan,string GroupName = null); //Task<ObjectResultDto<int?>> GetPrintStartHostSN2(string productLine, string isZhuHuBan,string GroupName = null);
/// <summary> /// <summary>
/// 打印前检查门板大众顺序号是否断号 /// 打印前检查门板大众顺序号是否断号
/// </summary> /// </summary>
/// <param name="input"></param> /// <param name="input"></param>
/// <returns>断号时Item不为空</returns> /// <returns>断号时Item不为空</returns>
Task<ListResultDto<string>> CheckMBHostSNBreakNum(MenBanPrintInputDto input); //Task<ListResultDto<string>> CheckMBHostSNBreakNum(MenBanPrintInputDto input);
/// <summary> /// <summary>
/// 打印前检查柱护板大众顺序号是否断号 /// 打印前检查柱护板大众顺序号是否断号
@ -105,7 +105,7 @@ namespace WY.NewJit.MsgCheck
/// </summary> /// </summary>
/// <param name="input">生产线编号列表</param> /// <param name="input">生产线编号列表</param>
/// <returns>生产线超时情况</returns> /// <returns>生产线超时情况</returns>
Task<ListResultDto<TimeOutRemindResultDto>> ProductLineTimeoutRemind(TimeOutRemindInputDto input); //Task<ListResultDto<TimeOutRemindResultDto>> ProductLineTimeoutRemind(TimeOutRemindInputDto input);
//Task<PagedResultDto<ResultBillM110Dto>> GetReplenishPrintListAsync(QueryBillM110Dto input); //Task<PagedResultDto<ResultBillM110Dto>> GetReplenishPrintListAsync(QueryBillM110Dto input);

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

@ -24,6 +24,11 @@
左或右 左或右
</summary> </summary>
</member> </member>
<member name="P:WY.NewJit.Extends.MenBanPackingListDto.VehicleModel_Disp">
<summary>
报表显示车型
</summary>
</member>
<member name="P:WY.NewJit.Extends.MenBanPackingListDto.ProviderCode"> <member name="P:WY.NewJit.Extends.MenBanPackingListDto.ProviderCode">
<summary> <summary>
供应商厂家代码 供应商厂家代码
@ -94,6 +99,11 @@
顺序号结束 顺序号结束
</summary> </summary>
</member> </member>
<member name="P:WY.NewJit.Extends.MenBanPackingListDto.SN">
<summary>
排序字段
</summary>
</member>
<member name="P:WY.NewJit.Extends.MenBanPackingListRequestDto.ProductLine"> <member name="P:WY.NewJit.Extends.MenBanPackingListRequestDto.ProductLine">
<summary> <summary>
生产线 生产线
@ -184,6 +194,16 @@
上箱位号 上箱位号
</summary> </summary>
</member> </member>
<member name="P:WY.NewJit.Extends.MenBanPackingRecDto.ScanPartCode">
<summary>
扫描零件号,供发运使用
</summary>
</member>
<member name="P:WY.NewJit.Extends.MenBanPackingRecDto.Remark">
<summary>
备注
</summary>
</member>
<member name="P:WY.NewJit.Extends.MenBanPrintInputDto.PrintType"> <member name="P:WY.NewJit.Extends.MenBanPrintInputDto.PrintType">
<summary> <summary>
打印类型:提供初次打印、重新打印、针对重新解析后单据的补打功能 打印类型:提供初次打印、重新打印、针对重新解析后单据的补打功能
@ -209,11 +229,6 @@
装箱单主表ID列表,报废时传入一个,重打时可传入多个 装箱单主表ID列表,报废时传入一个,重打时可传入多个
</summary> </summary>
</member> </member>
<member name="P:WY.NewJit.Extends.MenBanPrintInputDto.M100IdList">
<summary>
补打时使用
</summary>
</member>
<member name="P:WY.NewJit.Extends.MenBanPrintResultDto.MasterList"> <member name="P:WY.NewJit.Extends.MenBanPrintResultDto.MasterList">
<summary> <summary>
门板主实体列表 门板主实体列表
@ -945,6 +960,66 @@
字典项名称 字典项名称
</summary> </summary>
</member> </member>
<member name="P:WY.NewJit.MsgBaseData.DicItemDto.DicItemSort1">
<summary>
分类1(零件大类对应分组)
</summary>
</member>
<member name="P:WY.NewJit.MsgBaseData.DicItemDto.DicItemSort2">
<summary>
分类2 (零件大类对应产线)
</summary>
</member>
<member name="P:WY.NewJit.MsgBaseData.DicItemDto.DicItemSort3">
<summary>
分类3(零件大类对应车型)
</summary>
</member>
<member name="P:WY.NewJit.MsgBaseData.DicItemDto.DicItemSort4">
<summary>
分类4(零件大类对应打印报表的三位零件大类)
</summary>
</member>
<member name="P:WY.NewJit.MsgBaseData.DicItemDto.DicItemSort5">
<summary>
分类5 (零件大类对应客户零件号)
</summary>
</member>
<member name="P:WY.NewJit.MsgBaseData.DicItemDto.DicItemSort6">
<summary>
分类6(零件大类对应显示车型)
</summary>
</member>
<member name="P:WY.NewJit.MsgBaseData.DicItemDto.DicItemSort7">
<summary>
分类7(零件大类对应报表字段显示顺序)
</summary>
</member>
<member name="P:WY.NewJit.MsgBaseData.DicItemDto.DicItemSort8">
<summary>
分类8(零件大类对应装箱清单号的前缀,例如C或T)
</summary>
</member>
<member name="P:WY.NewJit.MsgBaseData.DicItemDto.DicItemSort9">
<summary>
分类9(零件大类对应 打印标准数量 12 或 24)
</summary>
</member>
<member name="P:WY.NewJit.MsgBaseData.DicItemDto.DicItemSort10">
<summary>
分类10(零件大类对应 是否扫描 1 需要扫描 0 不需要扫描)
</summary>
</member>
<member name="P:WY.NewJit.MsgBaseData.DicItemDto.DicItemSort11">
<summary>
</summary>
</member>
<member name="P:WY.NewJit.MsgBaseData.DicItemDto.DicItemSort12">
<summary>
</summary>
</member>
<!-- Badly formed XML comment ignored for member "M:WY.NewJit.MsgBaseData.IDicAppService.GetDicListAsync(System.String)" --> <!-- Badly formed XML comment ignored for member "M:WY.NewJit.MsgBaseData.IDicAppService.GetDicListAsync(System.String)" -->
<member name="P:WY.NewJit.MsgBaseData.CreateUpdateExcludePartCfgDto.VehicleModelCode"> <member name="P:WY.NewJit.MsgBaseData.CreateUpdateExcludePartCfgDto.VehicleModelCode">
<summary> <summary>
@ -1546,6 +1621,31 @@
描述 描述
</summary> </summary>
</member> </member>
<member name="P:WY.NewJit.MsgCheck.BillM100PartDto.PartType">
<summary>
零件类型:产线
</summary>
</member>
<member name="P:WY.NewJit.MsgCheck.BillM100PartDto.PartType2">
<summary>
零件类型:分组
</summary>
</member>
<member name="P:WY.NewJit.MsgCheck.BillM100PartDto.PartType3">
<summary>
零件类型:零件大类
</summary>
</member>
<member name="P:WY.NewJit.MsgCheck.BillM100PartDto.DisplaySN">
<summary>
零件在主表横向排列顺序
</summary>
</member>
<member name="P:WY.NewJit.MsgCheck.BillM100PartDto.DisplayColumnName">
<summary>
零件在主表横向排列显示的列名
</summary>
</member>
<member name="P:WY.NewJit.MsgCheck.CreateUpdateBillM100Dto.SerialNum"> <member name="P:WY.NewJit.MsgCheck.CreateUpdateBillM100Dto.SerialNum">
<summary> <summary>
流水号# 流水号#
@ -2092,6 +2192,31 @@
描述 描述
</summary> </summary>
</member> </member>
<member name="P:WY.NewJit.MsgCheck.BillM110PartDto.PartType">
<summary>
零件类型:产线
</summary>
</member>
<member name="P:WY.NewJit.MsgCheck.BillM110PartDto.PartType2">
<summary>
零件类型:分组
</summary>
</member>
<member name="P:WY.NewJit.MsgCheck.BillM110PartDto.PartType3">
<summary>
零件类型:零件大类
</summary>
</member>
<member name="P:WY.NewJit.MsgCheck.BillM110PartDto.DisplaySN">
<summary>
零件在主表横向排列顺序
</summary>
</member>
<member name="P:WY.NewJit.MsgCheck.BillM110PartDto.DisplayColumnName">
<summary>
零件在主表横向排列显示的列名
</summary>
</member>
<member name="P:WY.NewJit.MsgCheck.CreateUpdateBillM110Dto.SerialNum"> <member name="P:WY.NewJit.MsgCheck.CreateUpdateBillM110Dto.SerialNum">
<summary> <summary>
流水号# 流水号#
@ -2441,27 +2566,6 @@
<param name="input">导入文件流</param> <param name="input">导入文件流</param>
<returns>执行成功返回真</returns> <returns>执行成功返回真</returns>
</member> </member>
<member name="M:WY.NewJit.MsgCheck.IBillM110AppService.GetPrintStartHostSN2(System.String,System.String,System.String)">
<summary>
根据生产线获取正常打印单据的起始大众顺序号
</summary>
<param name="productLine">生产线</param>
<returns>起始大众顺序号</returns>
</member>
<member name="M:WY.NewJit.MsgCheck.IBillM110AppService.CheckMBHostSNBreakNum(WY.NewJit.Extends.MenBanPrintInputDto)">
<summary>
打印前检查门板大众顺序号是否断号
</summary>
<param name="input"></param>
<returns>断号时Item不为空</returns>
</member>
<member name="M:WY.NewJit.MsgCheck.IBillM110AppService.ProductLineTimeoutRemind(WY.NewJit.MsgCheck.TimeOutRemindInputDto)">
<summary>
生产线超时提醒
</summary>
<param name="input">生产线编号列表</param>
<returns>生产线超时情况</returns>
</member>
<member name="T:WY.NewJit.MsgCheck.BillR100Dto"> <member name="T:WY.NewJit.MsgCheck.BillR100Dto">
<summary> <summary>
零件查询结果DTO 零件查询结果DTO

14
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application/MsgBaseData/Dics/DicAppService.cs

@ -77,12 +77,18 @@ namespace WY.NewJit.MsgBaseData
{ {
List<DicItem> lst = _dicDomainService.GetDicItems(dicTypeName); List<DicItem> lst = _dicDomainService.GetDicItems(dicTypeName);
List<DicItemDto> items = List<DicItemDto> dtoLst = ObjectMapper.Map<List<DicItem>, List<DicItemDto>>(lst);
ObjectMapper.Map<List<DicItem>, List<DicItemDto>>(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<DicItemDto>(items); return new ListResultDto<DicItemDto>(dtoLst);
} }
catch (Exception ex) catch (Exception ex)
{ {

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

File diff suppressed because it is too large

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

@ -225,45 +225,45 @@ namespace Win.Sfs.SettleAccount.FISes
/// </summary> /// </summary>
/// <param name="ids">IDs</param> /// <param name="ids">IDs</param>
/// <returns>是否执行成功</returns> /// <returns>是否执行成功</returns>
[HttpPost] //[HttpPost]
[Route("delete")] //[Route("delete")]
[UnitOfWork(isTransactional: false)] //[UnitOfWork(isTransactional: false)]
public virtual async Task<List<string>> DeleteListAsync(List<Guid> ids) //public virtual async Task<List<string>> DeleteListAsync(List<Guid> ids)
{ //{
var _list=await _menBanPackingListRepository.Where(p => ids.Contains(p.Id)).ToListAsync(); // var _list=await _menBanPackingListRepository.Where(p => ids.Contains(p.Id)).ToListAsync();
var sortList=_list.Select(p => p.SortId).Distinct().ToList();//筛选出匹配门板 // var sortList=_list.Select(p => p.SortId).Distinct().ToList();//筛选出匹配门板
_list = _menBanPackingListRepository.Where(p => sortList.Contains(p.SortId)).ToList(); // _list = _menBanPackingListRepository.Where(p => sortList.Contains(p.SortId)).ToList();
var idList = _list.Select(p => p.Id).ToList(); // var idList = _list.Select(p => p.Id).ToList();
var _ls=_list.Select(p => p.BillNum).ToList(); // var _ls=_list.Select(p => p.BillNum).ToList();
var _strList = new List<string> (); // var _strList = new List<string> ();
_ls.ForEach(p=>{ // _ls.ForEach(p=>{
_strList.Add(string.Format("'{0}'", p)); // _strList.Add(string.Format("'{0}'", p));
}); // });
string str=string.Join(",", _strList.ToArray()); // string str=string.Join(",", _strList.ToArray());
var _lst=_wmsRepository.GetListBySql<TB_BILL>(string.Format("select * from TB_BILL where (state=1 or state=2) and BillNum in ({0}) ", str)); // var _lst=_wmsRepository.GetListBySql<TB_BILL>(string.Format("select * from TB_BILL where (state=1 or state=2) and BillNum in ({0}) ", str));
if (_lst.Count() == 0) // if (_lst.Count() == 0)
{ // {
await _menBanPackingListRepository.DeleteManyAsync(idList.ToArray()); // await _menBanPackingListRepository.DeleteManyAsync(idList.ToArray());
var _childList = await _menBanPackingListRepository.Where(p => idList.Contains(p.Id)).SelectMany(p => p.Details).ToListAsync(); // 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 _child = _childList.Select(p => p.M100BillId).Distinct().ToList();
var _lst1= await _billM100Repository.Where(p => _child.Contains(p.Id)).ToListAsync(); // var _lst1= await _billM100Repository.Where(p => _child.Contains(p.Id)).ToListAsync();
_lst1.ForEach(p => // _lst1.ForEach(p =>
{ // {
if (p.BillStatus == BillStatusEnum.Publish) // if (p.BillStatus == BillStatusEnum.Publish)
{ // {
p.SetBillStatus(BillStatusEnum.Match); // p.SetBillStatus(BillStatusEnum.Match);
} // }
}); // });
await _billM100Repository.UpdateManyAsync(_lst1); // await _billM100Repository.UpdateManyAsync(_lst1);
} // }
return _lst.Select(p => p.BillNum).ToList(); // return _lst.Select(p => p.BillNum).ToList();
} //}
/// <summary> /// <summary>
/// 取待报废的全部数据,用于展示 /// 取待报废的全部数据,用于展示
@ -286,109 +286,109 @@ namespace Win.Sfs.SettleAccount.FISes
/// </summary> /// </summary>
/// <param name="ids">IDs</param> /// <param name="ids">IDs</param>
/// <returns>是否执行成功</returns> /// <returns>是否执行成功</returns>
[HttpPost] //[HttpPost]
[Route("scrap")] //[Route("scrap")]
[UnitOfWork(isTransactional: false)] //[UnitOfWork(isTransactional: false)]
public virtual async Task<List<string>> ScrapAsync(List<Guid> ids) //public virtual async Task<List<string>> ScrapAsync(List<Guid> ids)
{ //{
var selLst = await _menBanPackingListRepository.Where(p => ids.Contains(p.Id)).ToListAsync(); // var selLst = await _menBanPackingListRepository.Where(p => ids.Contains(p.Id)).ToListAsync();
if (selLst == null || selLst.Count == 0) // if (selLst == null || selLst.Count == 0)
{ // {
throw new BusinessException("1001", "没有选中要作废的已打印装箱单!"); // throw new BusinessException("1001", "没有选中要作废的已打印装箱单!");
} // }
foreach (var _obj in selLst) // foreach (var _obj in selLst)
{ // {
string maxBillNum = await _menBanPackingListRepository.Where(itm => itm.ProductLine == _obj.ProductLine && itm.ReportStatus == ReportStatusEnum.).MaxAsync(itm => itm.BillNum); //取当前生产线的最大装箱单号 // string maxBillNum = await _menBanPackingListRepository.Where(itm => itm.ProductLine == _obj.ProductLine && itm.ReportStatus == ReportStatusEnum.已打印).MaxAsync(itm => itm.BillNum); //取当前生产线的最大装箱单号
if (string.IsNullOrEmpty(maxBillNum) == false) // if (string.IsNullOrEmpty(maxBillNum) == false)
{ // {
MenBanPackingList firObj = await _menBanPackingListRepository.FirstOrDefaultAsync(itm => itm.BillNum == maxBillNum); // MenBanPackingList firObj = await _menBanPackingListRepository.FirstOrDefaultAsync(itm => itm.BillNum == maxBillNum);
if (firObj != null) // if (firObj != null)
{ // {
if (_obj.SortId != firObj.SortId) // if (_obj.SortId != firObj.SortId)
{ // {
throw new BusinessException("1001", "只能报废当前生产线的最后打印单据,要报废的单据不是最后打印单据!"); // throw new BusinessException("1001", "只能报废当前生产线的最后打印单据,要报废的单据不是最后打印单据!");
} // }
} // }
} // }
} // }
var sortList = selLst.Select(p => p.SortId).Distinct().ToList();//筛选出匹配门板 // var sortList = selLst.Select(p => p.SortId).Distinct().ToList();//筛选出匹配门板
List<MenBanPackingList> pairlist = _menBanPackingListRepository.Where(p => sortList.Contains(p.SortId)).ToList(); // List<MenBanPackingList> pairlist = _menBanPackingListRepository.Where(p => sortList.Contains(p.SortId)).ToList();
var idList = pairlist.Select(p => p.Id).ToList(); // var idList = pairlist.Select(p => p.Id).ToList();
var _ls = pairlist.Select(p => p.BillNum).ToList(); // var _ls = pairlist.Select(p => p.BillNum).ToList();
var _strList = new List<string>(); // var _strList = new List<string>();
_ls.ForEach(p => { // _ls.ForEach(p => {
_strList.Add(string.Format("'{0}'", p)); // _strList.Add(string.Format("'{0}'", p));
}); // });
string str = string.Join(",", _strList.ToArray()); // string str = string.Join(",", _strList.ToArray());
var wmsLst = _wmsRepository.GetListBySql<TB_BILL>(string.Format("select top 100 * from TB_BILL with(nolock) where (state=1 or state=2) and BillNum in ({0}) ", str)); // var wmsLst = _wmsRepository.GetListBySql<TB_BILL>(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) //库存没有排序 // if (wmsLst.Count() == 0) //库存没有排序
{ // {
//调用库存系统接口 // //调用库存系统接口
List<string> billNumLst = pairlist.Select(itm => itm.BillNum).Distinct().ToList(); // List<string> billNumLst = pairlist.Select(itm => itm.BillNum).Distinct().ToList();
foreach (string billNumStr in billNumLst) // foreach (string billNumStr in billNumLst)
{ // {
DelOrScrapWMSInterface(billNumStr, true); // DelOrScrapWMSInterface(billNumStr, true);
} // }
#region 作废时单据序号减一 // #region 作废时单据序号减一
string curProductLine = selLst[0].ProductLine; // string curProductLine = selLst[0].ProductLine;
DateTime curPrintDate = selLst[0].PrintDate; // DateTime curPrintDate = selLst[0].PrintDate;
//string curPartType = selLst[0].PartType; // //string curPartType = selLst[0].PartType;
var priorLst = _menBanPackingListRepository.Where(itm => itm.ReportStatus == ReportStatusEnum. && itm.ProductLine == curProductLine && idList.Contains(itm.Id) == false); // var priorLst = _menBanPackingListRepository.Where(itm => itm.ReportStatus == ReportStatusEnum.已打印 && itm.ProductLine == curProductLine && idList.Contains(itm.Id) == false);
if (priorLst.Any()) // if (priorLst.Any())
{ // {
string maxBillNum = priorLst.Max(itm => itm.BillNum); //除去要作废记录,取当前生产线的最大单据号 // string maxBillNum = priorLst.Max(itm => itm.BillNum); //除去要作废记录,取当前生产线的最大单据号
MenBanPackingList priorObj = priorLst.FirstOrDefault(itm => itm.BillNum == maxBillNum); //除去要作废记录,取当前生产线的最后打印记录 // MenBanPackingList priorObj = priorLst.FirstOrDefault(itm => itm.BillNum == maxBillNum); //除去要作废记录,取当前生产线的最后打印记录
double updRecCnt = await _lineSNDomianServic.SetMaxSN(ProductTypeEnum., curProductLine, "", priorObj.PrintDate, priorObj.BillSerialNum.TryToDoubleZero(), null); //调用减号接口 // double updRecCnt = await _lineSNDomianServic.SetMaxSN(ProductTypeEnum.门板, curProductLine, "", priorObj.PrintDate, priorObj.BillSerialNum.TryToDoubleZero(), null); //调用减号接口
} // }
else // else
{ // {
double updRecCnt2 = await _lineSNDomianServic.SetMaxSN(ProductTypeEnum., curProductLine, "", curPrintDate, 0, null); //调用减号接口,没有上条记录时 单据号传0 // double updRecCnt2 = await _lineSNDomianServic.SetMaxSN(ProductTypeEnum.门板, curProductLine, "", curPrintDate, 0, null); //调用减号接口,没有上条记录时 单据号传0
} // }
#endregion // #endregion
foreach (var itm in pairlist) // foreach (var itm in pairlist)
{ // {
itm.ReportStatus = WY.NewJit.Extends.PaiGe.ReportStatusEnum.; // itm.ReportStatus = WY.NewJit.Extends.PaiGe.ReportStatusEnum.已作废;
} // }
await _menBanPackingListRepository.UpdateManyAsync(pairlist); // await _menBanPackingListRepository.UpdateManyAsync(pairlist);
//批量改为未打印 // //批量改为未打印
var _childList = await _menBanPackingListRepository.Where(p => idList.Contains(p.Id)).SelectMany(p => p.Details).ToListAsync(); // 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 _child = _childList.Select(p => p.M100BillId).Distinct().ToList();
var m100Lst = await _billM100Repository.Where(p => _child.Contains(p.Id)).ToListAsync(); // var m100Lst = await _billM100Repository.Where(p => _child.Contains(p.Id)).ToListAsync();
m100Lst.ForEach(p => // m100Lst.ForEach(p =>
{ // {
if (p.BillStatus == BillStatusEnum.Publish) // if (p.BillStatus == BillStatusEnum.Publish)
{ // {
p.SetBillStatus(BillStatusEnum.Match); // p.SetBillStatus(BillStatusEnum.Match);
} // }
p.PrintTime = null; // p.PrintTime = null;
}); // });
await _billM100Repository.UpdateManyAsync(m100Lst); // await _billM100Repository.UpdateManyAsync(m100Lst);
} // }
else // else
{ // {
throw new BusinessException("1001", "WMS已经排序,不能报废!"); // throw new BusinessException("1001", "WMS已经排序,不能报废!");
} // }
return wmsLst.Select(p => p.BillNum).ToList(); // return wmsLst.Select(p => p.BillNum).ToList();
} //}
#region 格拉默 #region 格拉默
[HttpGet] [HttpGet]
[Route("get-packinglist-by-billnum")] [Route("get-packinglist-by-billnum")]
public async Task<List<MenBanPackingListDto>> GetPackingListByBillNum(string billNum) public async Task<WY.NewJit.ListResultDto<MenBanPackingListDto>> GetPackingListByBillNum(string billNum)
{ {
_logger.LogDebug(_errorMessagePrefix + "GetPackingListByBillNum 进入"); _logger.LogDebug(_errorMessagePrefix + "GetPackingListByBillNum 进入");
WY.NewJit.ListResultDto<MenBanPackingListDto> ret = new WY.NewJit.ListResultDto<MenBanPackingListDto>();
try try
{ {
List<DicItem> dicItemLst = await _dicItemRepository.GetListAsync(itm => itm.DicTypeCode == "零件大类"); List<DicItem> partLargeTypeLst = await _dicItemRepository.GetListAsync(itm => itm.DicTypeCode == "零件大类");
List<PartCfg> partCfgLst = await _partCfgRepository.GetListAsync(); List<PartCfg> partCfgLst = await _partCfgRepository.GetListAsync();
@ -443,16 +443,17 @@ namespace Win.Sfs.SettleAccount.FISes
//第一个零件 //第一个零件
if (detailObj.PartCode1.HasValue() && detailObj.PartCode1.Length >= 9) 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); var partCfgObj = partCfgLst.FirstOrDefault(itm => itm.PartCode == detailObj.PartCode1);
if (dicItemObj.DicItemSort5 == "客户零件") if (partLargeTypeObj.DicItemSort5 == "客户零件")
{ {
if (partCfgObj != null) if (partCfgObj != null)
{ {
detailObj.PartCode1 = partCfgObj.PartCode; detailObj.PartCode1 = partCfgObj.PartCode;
} }
} }
else if (dicItemObj.DicItemSort5 == "厂内零件") else if (partLargeTypeObj.DicItemSort5 == "厂内零件")
{ {
if (partCfgObj != null) if (partCfgObj != null)
{ {
@ -463,16 +464,16 @@ namespace Win.Sfs.SettleAccount.FISes
//第二个零件 //第二个零件
if (detailObj.PartCode2.HasValue() && detailObj.PartCode2.Length >= 9) 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); var partCfgObj = partCfgLst.FirstOrDefault(itm => itm.PartCode == detailObj.PartCode2);
if (dicItemObj.DicItemSort5 == "客户零件") if (dicItemObj.DicItemSort5 == "客户零件")
{ {
if (partCfgObj != null) if (partCfgObj != null)
{ {
detailObj.PartCode2 = partCfgObj.PartCode; detailObj.PartCode2 = partCfgObj.PartCode;
} }
} }
else if (dicItemObj.DicItemSort5 == "厂内零件") else if (dicItemObj.DicItemSort5 == "厂内零件")
{ {
if (partCfgObj != null) if (partCfgObj != null)
{ {
@ -483,16 +484,16 @@ namespace Win.Sfs.SettleAccount.FISes
//第三个零件 //第三个零件
if (detailObj.PartCode3.HasValue() && detailObj.PartCode3.Length >= 9) 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); var partCfgObj = partCfgLst.FirstOrDefault(itm => itm.PartCode == detailObj.PartCode3);
if (dicItemObj.DicItemSort5 == "客户零件") if (dicItemObj.DicItemSort5 == "客户零件")
{ {
if (partCfgObj != null) if (partCfgObj != null)
{ {
detailObj.PartCode3 = partCfgObj.PartCode; detailObj.PartCode3 = partCfgObj.PartCode;
} }
} }
else if (dicItemObj.DicItemSort5 == "厂内零件") else if (dicItemObj.DicItemSort5 == "厂内零件")
{ {
if (partCfgObj != null) if (partCfgObj != null)
{ {
@ -503,16 +504,16 @@ namespace Win.Sfs.SettleAccount.FISes
//第四个零件 //第四个零件
if (detailObj.PartCode4.HasValue() && detailObj.PartCode4.Length >= 9) 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); var partCfgObj = partCfgLst.FirstOrDefault(itm => itm.PartCode == detailObj.PartCode4);
if (dicItemObj.DicItemSort5 == "客户零件") if (dicItemObj.DicItemSort5 == "客户零件")
{ {
if (partCfgObj != null) if (partCfgObj != null)
{ {
detailObj.PartCode4 = partCfgObj.PartCode; detailObj.PartCode4 = partCfgObj.PartCode;
} }
} }
else if (dicItemObj.DicItemSort5 == "厂内零件") else if (dicItemObj.DicItemSort5 == "厂内零件")
{ {
if (partCfgObj != null) if (partCfgObj != null)
{ {
@ -526,27 +527,42 @@ namespace Win.Sfs.SettleAccount.FISes
#endregion #endregion
#endregion #endregion
return targetLst; ret.Status = true;
ret.Item = targetLst;
return ret;
} }
catch (Exception ex) catch (Exception ex)
{ {
string errorMsg = _errorMessagePrefix + "GetPackingListByBillNum 执行出错:" + ex.Message; string errorMsg = _errorMessagePrefix + "GetPackingListByBillNum 执行出错:" + ex.Message;
_logger.LogError(errorMsg); _logger.LogError(errorMsg);
throw new UserFriendlyException(errorMsg); ret.Status = false;
ret.Message = errorMsg;
return ret;
} }
} }
[HttpPost] [HttpPost]
[Route("update-scan-status")] [Route("update-scan-status")]
public virtual async Task<bool> UpdateScanStatus(string billNum) public virtual async Task<ObjectResultDto> UpdateScanStatus(string billNum)
{ {
var lst = await _menBanPackingListRepository.GetListAsync(itm => itm.BillNum == billNum); ObjectResultDto ret = new ObjectResultDto();
foreach (var item in lst) 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.; ret.Status = false;
var succ = await _menBanPackingListRepository.UpdateAsync(item); ret.Message = $"调用UpdateScanStatus方法报错:{ex.Message}";
throw;
} }
return true;
} }
#endregion #endregion

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

File diff suppressed because it is too large

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

@ -1013,6 +1013,20 @@
根据筛选条件获取实体列表 根据筛选条件获取实体列表
</summary> </summary>
</member> </member>
<member name="M:WY.NewJit.MsgCheck.BillM100AppService.QueryByConditionAsync2(WY.NewJit.MsgCheck.QueryBillM100Dto)">
<summary>
包含主表横向排列零件字段
</summary>
<param name="input"></param>
<returns></returns>
</member>
<member name="M:WY.NewJit.MsgCheck.BillM100AppService.FillPartCodeField(System.Collections.Generic.List{WY.NewJit.MsgCheck.BillM110Dto})">
<summary>
填充M110主表横向零件字段
</summary>
<param name="m110Dtos"></param>
<returns></returns>
</member>
<member name="M:WY.NewJit.MsgCheck.BillM100AppService.GetMBReportDetailList(WY.NewJit.Extends.MenBanPrintInputDto,System.Boolean)"> <member name="M:WY.NewJit.MsgCheck.BillM100AppService.GetMBReportDetailList(WY.NewJit.Extends.MenBanPrintInputDto,System.Boolean)">
<summary> <summary>
根据条件取用于打印的门板单据列表 根据条件取用于打印的门板单据列表
@ -1031,17 +1045,16 @@
<param name="billLst"></param> <param name="billLst"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:WY.NewJit.MsgCheck.BillM100AppService.DoMBPrint(WY.NewJit.Extends.MenBanPrintInputDto,System.Int32,System.Double,System.Collections.Generic.List{WY.NewJit.MsgCheck.BillM100},System.String,System.String[])"> <member name="M:WY.NewJit.MsgCheck.BillM100AppService.DoMBPrint(WY.NewJit.Extends.MenBanPrintInputDto,System.Int32,System.Double,System.Collections.Generic.List{WY.NewJit.MsgCheck.BillM100},System.String,System.Collections.Generic.List{WY.NewJit.MsgBaseData.DicItem},System.Guid)">
<summary> <summary>
打印左侧或右侧门板 将M100转换成MenBanPackingList主子表
</summary> </summary>
<param name="input"></param> <param name="input"></param>
<param name="pageIdx"></param> <param name="pageIdx"></param>
<param name="maxBillNum"></param>
<param name="maxSN"></param> <param name="maxSN"></param>
<param name="printTime"></param>
<param name="billLst"></param> <param name="billLst"></param>
<param name="partLargeType"></param> <param name="reportSort">报表分类,对应DicItemSort4</param>
<param name="partLargeTypeLst">零件大类字典项</param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:WY.NewJit.MsgCheck.BillM100AppService.CheckMBHostSNBreakNum(WY.NewJit.Extends.MenBanPrintInputDto)"> <member name="M:WY.NewJit.MsgCheck.BillM100AppService.CheckMBHostSNBreakNum(WY.NewJit.Extends.MenBanPrintInputDto)">
@ -1118,6 +1131,11 @@
<param name="input">生产线编号列表</param> <param name="input">生产线编号列表</param>
<returns>生产线超时情况</returns> <returns>生产线超时情况</returns>
</member> </member>
<member name="P:WY.NewJit.MsgCheck.M100_M110_Result.PartDisplayColumnName">
<summary>
零件在主表横向排列显示的列名
</summary>
</member>
<member name="T:WY.NewJit.MsgCheck.NewM100AppService"> <member name="T:WY.NewJit.MsgCheck.NewM100AppService">
<summary> <summary>
M100单据管理应用服务实现 M100单据管理应用服务实现
@ -1392,35 +1410,6 @@
<param name="billLst"></param> <param name="billLst"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:WY.NewJit.MsgCheck.BillM110AppService.DoMBPrint(WY.NewJit.Extends.MenBanPrintInputDto,System.Int32,System.Double,System.Collections.Generic.List{WY.NewJit.MsgCheck.BillM110},System.String,System.String[])">
<summary>
打印左侧或右侧门板
</summary>
<param name="input"></param>
<param name="pageIdx"></param>
<param name="maxBillNum"></param>
<param name="maxSN"></param>
<param name="printTime"></param>
<param name="billLst"></param>
<param name="partLargeType"></param>
<returns></returns>
</member>
<member name="M:WY.NewJit.MsgCheck.BillM110AppService.CheckMBHostSNBreakNum(WY.NewJit.Extends.MenBanPrintInputDto)">
<summary>
打印前检查大众顺序号是否断号
</summary>
<param name="input"></param>
<returns>断号时Item不为空</returns>
</member>
<member name="M:WY.NewJit.MsgCheck.BillM110AppService.GetPrintStartHostSN2(System.String,System.String,System.String)">
<summary>
根据生产线获取正常打印单据的起始大众顺序号2
</summary>
<param name="productLine">生产线</param>
<param name="isZhuHuBan">柱护板是1 门板是非1</param>
<param name="groupName">柱护板分组类型</param>
<returns>起始大众顺序号</returns>
</member>
<member name="M:WY.NewJit.MsgCheck.BillM110AppService.GetListAsync(WY.NewJit.MsgCheck.QueryBillM110Dto)"> <member name="M:WY.NewJit.MsgCheck.BillM110AppService.GetListAsync(WY.NewJit.MsgCheck.QueryBillM110Dto)">
<summary> <summary>
根据筛选条件获取分页实体列表 根据筛选条件获取分页实体列表
@ -1472,13 +1461,6 @@
<param name="input">导入文件流</param> <param name="input">导入文件流</param>
<returns>执行成功返回真</returns> <returns>执行成功返回真</returns>
</member> </member>
<member name="M:WY.NewJit.MsgCheck.BillM110AppService.ProductLineTimeoutRemind(WY.NewJit.MsgCheck.TimeOutRemindInputDto)">
<summary>
生产线超时提醒
</summary>
<param name="input">生产线编号列表</param>
<returns>生产线超时情况</returns>
</member>
<member name="T:WY.NewJit.MsgCheck.BillR100AppService"> <member name="T:WY.NewJit.MsgCheck.BillR100AppService">
<summary> <summary>
R100单据管理应用服务实现 R100单据管理应用服务实现

6
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain.Shared/Common/ObjectResultDto.cs

@ -7,7 +7,6 @@ namespace WY.NewJit
public class ObjectResultDto public class ObjectResultDto
{ {
private bool isRepeat;
public ObjectResultDto() public ObjectResultDto()
{ {
@ -15,11 +14,6 @@ namespace WY.NewJit
this.Message = ""; this.Message = "";
} }
public ObjectResultDto(bool isRepeat)
{
this.isRepeat = isRepeat;
}
public ObjectResultDto(bool status, string errorMessage) public ObjectResultDto(bool status, string errorMessage)
{ {
this.Status = status; this.Status = status;

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

@ -13,19 +13,19 @@ namespace WY.NewJit.MsgCheck
/// <summary> /// <summary>
/// 未匹配 /// 未匹配
/// </summary> /// </summary>
[Description("未匹配")] //[Description("未匹配")]
NotMatch = 1, //NotMatch = 1,
/// <summary> /// <summary>
/// 已匹配,未打印 /// 未发运
/// </summary> /// </summary>
[Description("已匹配")] [Description("未发运")]
Match = 2, Match = 2,
/// <summary> /// <summary>
/// 已打印 /// 已发运
/// </summary> /// </summary>
[Description("已打印")] [Description("已发运")]
Publish = 3, Publish = 3,
/// <summary> /// <summary>

4
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/Extends/PaiGe/MenBanReports/MenBanPackingList.cs

@ -30,6 +30,10 @@ namespace WY.NewJit.Extends
/// </summary> /// </summary>
public string VehicleModel { get; set; } public string VehicleModel { get; set; }
/// <summary>
/// 报表显示车型
/// </summary>
public string VehicleModel_Disp { get; set; }
/// <summary> /// <summary>
/// 供应商厂家代码 /// 供应商厂家代码

8
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/Extends/PaiGe/MenBanReports/MenBanPackingRec.cs

@ -64,7 +64,15 @@ namespace WY.NewJit.Extends
/// </summary> /// </summary>
public virtual string SN { get; set; } public virtual string SN { get; set; }
/// <summary>
/// 扫描零件号,供发运使用
/// </summary>
public string ScanPartCode { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
public void SetId(Guid id) public void SetId(Guid id)
{ {

37
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Entitys/DicItem.cs

@ -48,10 +48,45 @@ namespace WY.NewJit.MsgBaseData
public virtual string DicItemSort4 { get; set; } public virtual string DicItemSort4 { get; set; }
/// <summary> /// <summary>
/// 分类5 /// 分类5 (零件大类对应客户零件号)
/// </summary> /// </summary>
public virtual string DicItemSort5 { get; set; } public virtual string DicItemSort5 { get; set; }
/// <summary>
/// 分类6(零件大类对应显示车型)
/// </summary>
public virtual string DicItemSort6 { get; set; }
/// <summary>
/// 分类7(零件大类对应报表字段显示顺序)
/// </summary>
public virtual string DicItemSort7 { get; set; }
/// <summary>
/// 分类8(零件大类对应装箱清单号的前缀,例如C或T)
/// </summary>
public virtual string DicItemSort8 { get; set; }
/// <summary>
/// 分类9(零件大类对应 打印标准数量 12 或 24)
/// </summary>
public virtual string DicItemSort9 { get; set; }
/// <summary>
/// 分类9(零件大类对应 是否扫描 1 需要扫描 0 不需要扫描)
/// </summary>
public virtual string DicItemSort10 { get; set; }
/// <summary>
///
/// </summary>
public virtual string DicItemSort11 { get; set; }
/// <summary>
///
/// </summary>
public virtual string DicItemSort12 { get; set; }
protected DicItem() protected DicItem()
{ {
//此构造函数是提供给ORM用来从数据库中获取实体. //此构造函数是提供给ORM用来从数据库中获取实体.

4
Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Domain/MsgBaseData/Services/LineSNDomianService.cs

@ -19,7 +19,7 @@ namespace WY.NewJit.MsgBaseData
} }
/// <summary> /// <summary>
/// 生成门板或柱护板右上角顺序号 /// 生成门板或柱护板右上角顺序号,每天零点开始往复循环1-99
/// </summary> /// </summary>
/// <param name="productType">门板或柱护板</param> /// <param name="productType">门板或柱护板</param>
/// <param name="productLine">产线</param> /// <param name="productLine">产线</param>
@ -38,7 +38,7 @@ namespace WY.NewJit.MsgBaseData
} }
DateTime now = DateTime.Now; 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) if (typeObj != null)
{ {

4
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; } public virtual DateTime? ReceiveTime { get; protected set; }
/// <summary> /// <summary>
/// 单据状态(0 空;1 未匹配;2 已匹配未打印;3 已打印) /// 单据状态(2 未发运;3 已发运),发运接口更新为3
/// </summary> /// </summary>
public virtual BillStatusEnum BillStatus { get; protected set; } public virtual BillStatusEnum BillStatus { get; protected set; }
@ -82,7 +82,7 @@ namespace WY.NewJit.MsgCheck
public virtual DateTime? PrintTime { get; set; } public virtual DateTime? PrintTime { get; set; }
/// <summary> /// <summary>
/// 打印单号【派格版本:不为空时表示已打印柱护板】 /// 打印单号(已经打印时更新为单号)
/// </summary> /// </summary>
public virtual string PrintBillNum { get; set; } public virtual string PrintBillNum { get; set; }

BIN
Shared/Win.Sfs.Shared/bin/Debug/Win.Sfs.Shared.2.0.0.nupkg

Binary file not shown.

BIN
Shared/Win.Sfs.Shared/bin/Debug/netcoreapp5/Win.Sfs.Shared.dll

Binary file not shown.

BIN
Shared/Win.Sfs.Shared/bin/Debug/netcoreapp5/Win.Sfs.Shared.pdb

Binary file not shown.

BIN
Shared/Win.Sfs.Shared/bin/Debug/netcoreapp5/Win.Utils.dll

Binary file not shown.

BIN
Shared/Win.Sfs.Shared/bin/Debug/netcoreapp5/Win.Utils.pdb

Binary file not shown.

2
Shared/Win.Sfs.Shared/obj/Debug/Win.Sfs.Shared.2.0.0.nuspec

@ -5,7 +5,7 @@
<version>2.0.0</version> <version>2.0.0</version>
<authors>Win.Sfs.Shared</authors> <authors>Win.Sfs.Shared</authors>
<description>Package Description</description> <description>Package Description</description>
<repository type="git" commit="9f1698b0f932dfc3e8d926fe272b9e5c15605da4" /> <repository type="git" commit="a5a9bdc002c0bde27fed59155b4f42778c8a586e" />
<dependencies> <dependencies>
<group targetFramework="net5.0"> <group targetFramework="net5.0">
<dependency id="Win.Utils" version="2.0.0" exclude="Build,Analyzers" /> <dependency id="Win.Utils" version="2.0.0" exclude="Build,Analyzers" />

2
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.AssemblyCompanyAttribute("Win.Sfs.Shared")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("2.0.0.0")] [assembly: System.Reflection.AssemblyFileVersionAttribute("2.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("2.0.0+9f1698b0f932dfc3e8d926fe272b9e5c15605da4")] [assembly: System.Reflection.AssemblyInformationalVersionAttribute("2.0.0+a5a9bdc002c0bde27fed59155b4f42778c8a586e")]
[assembly: System.Reflection.AssemblyProductAttribute("Win.Sfs.Shared")] [assembly: System.Reflection.AssemblyProductAttribute("Win.Sfs.Shared")]
[assembly: System.Reflection.AssemblyTitleAttribute("Win.Sfs.Shared")] [assembly: System.Reflection.AssemblyTitleAttribute("Win.Sfs.Shared")]
[assembly: System.Reflection.AssemblyVersionAttribute("2.0.0.0")] [assembly: System.Reflection.AssemblyVersionAttribute("2.0.0.0")]

2
Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.AssemblyInfoInputs.cache

@ -1 +1 @@
d755eed168280a373eeb0870bc5023deded8bf4c7a53f8c511dbfc9601ca31ed ce8bce8f0148848382678a78ba43b96b07f28bbbffd2234bcd66f38b2eecf85f

BIN
Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.csproj.AssemblyReference.cache

Binary file not shown.

BIN
Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.dll

Binary file not shown.

BIN
Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/Win.Sfs.Shared.pdb

Binary file not shown.

BIN
Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/ref/Win.Sfs.Shared.dll

Binary file not shown.

BIN
Shared/Win.Sfs.Shared/obj/Debug/netcoreapp5/refint/Win.Sfs.Shared.dll

Binary file not shown.

BIN
Shared/Win.Utils/bin/Debug/Win.Utils.2.0.0.nupkg

Binary file not shown.

BIN
Shared/Win.Utils/bin/Debug/netcoreapp5/Win.Utils.dll

Binary file not shown.

BIN
Shared/Win.Utils/bin/Debug/netcoreapp5/Win.Utils.pdb

Binary file not shown.

2
Shared/Win.Utils/obj/Debug/Win.Utils.2.0.0.nuspec

@ -5,7 +5,7 @@
<version>2.0.0</version> <version>2.0.0</version>
<authors>Win.Utils</authors> <authors>Win.Utils</authors>
<description>Package Description</description> <description>Package Description</description>
<repository type="git" commit="32f3c7c4f91a6e47f64ef11cb91719a67226370a" /> <repository type="git" commit="655f97fce0dd87165ead1e3cce91aba34298af56" />
<dependencies> <dependencies>
<group targetFramework="net5.0"> <group targetFramework="net5.0">
<dependency id="NPOI" version="2.5.2" exclude="Build,Analyzers" /> <dependency id="NPOI" version="2.5.2" exclude="Build,Analyzers" />

2
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.AssemblyCompanyAttribute("Win.Utils")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("2.0.0.0")] [assembly: System.Reflection.AssemblyFileVersionAttribute("2.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("2.0.0+32f3c7c4f91a6e47f64ef11cb91719a67226370a")] [assembly: System.Reflection.AssemblyInformationalVersionAttribute("2.0.0+655f97fce0dd87165ead1e3cce91aba34298af56")]
[assembly: System.Reflection.AssemblyProductAttribute("Win.Utils")] [assembly: System.Reflection.AssemblyProductAttribute("Win.Utils")]
[assembly: System.Reflection.AssemblyTitleAttribute("Win.Utils")] [assembly: System.Reflection.AssemblyTitleAttribute("Win.Utils")]
[assembly: System.Reflection.AssemblyVersionAttribute("2.0.0.0")] [assembly: System.Reflection.AssemblyVersionAttribute("2.0.0.0")]

2
Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.AssemblyInfoInputs.cache

@ -1 +1 @@
b809d5ff0b4e2ed0d2cfb967cbf1ed268b666995e296a8a123408bdd3804a21c d35c56c2a77531ab3e36b55a499477cd4f9db824953aa80b990cafe5b4adf800

BIN
Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.dll

Binary file not shown.

BIN
Shared/Win.Utils/obj/Debug/netcoreapp5/Win.Utils.pdb

Binary file not shown.

BIN
Shared/Win.Utils/obj/Debug/netcoreapp5/ref/Win.Utils.dll

Binary file not shown.

BIN
Shared/Win.Utils/obj/Debug/netcoreapp5/refint/Win.Utils.dll

Binary file not shown.
Loading…
Cancel
Save