2025-04-07 21:06:39 +08:00
using Kingdee.BOS ;
using Kingdee.BOS.Core ;
using Kingdee.BOS.Core.Bill ;
using Kingdee.BOS.Core.DynamicForm ;
using Kingdee.BOS.Core.DynamicForm.PlugIn ;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args ;
using Kingdee.BOS.Core.Enums ;
using Kingdee.BOS.Core.Interaction ;
using Kingdee.BOS.Core.Metadata ;
using Kingdee.BOS.Core.Metadata.FormElement ;
using Kingdee.BOS.JSON ;
using Kingdee.BOS.Orm ;
using Kingdee.BOS.Orm.DataEntity ;
using Kingdee.BOS.ServiceHelper ;
using Kingdee.BOS.Util ;
using Newtonsoft.Json ;
using Newtonsoft.Json.Linq ;
using System ;
using System.Collections.Generic ;
using System.Data ;
using System.Drawing ;
using System.IO ;
using System.Linq ;
using System.Net ;
using System.Text ;
using Xceed.Document.NET ;
using Xceed.Words.NET ;
namespace Pilot_KD_Parino.Common
{
public static class CommonHelper
{
public static void DolondWord ( string templatePath , DataSet data , string outputPath , string FType )
{
List < string > List = new List < string > ( ) { "CS" , "ES" } ;
// 加载模板文档
using ( var document = DocX . Load ( templatePath ) )
{
//int n = data.Tables.Count;
var datatable = data . Tables [ 0 ] ;
foreach ( DataRow item in datatable . Rows )
{
document . ReplaceText ( "{" + Convert . ToString ( item [ "Key" ] ) + "}" , Convert . ToString ( item [ "Value" ] ) ) ;
}
int x = document . Tables . Count ;
if ( FType = = "D" )
{
}
else if ( FType = = "S" )
{
// 假设模板中的表格是第一个表格
var table = document . Tables [ 2 ] ;
Row previousRow = ( Row ) table . Rows [ 1 ] ;
//for (int i = table.Rows.Count - 4; i >= 1; i--) // 从最后一行开始删除,避免索引超出范围
//{
// table.Rows[i].Remove();
//}
table . Rows [ 1 ] . Remove ( ) ;
var datatable2 = data . Tables [ 1 ] ;
foreach ( DataRow item in datatable2 . Rows )
{
Row newRow = table . InsertRow ( previousRow , table . Rows . Count - 1 ) ;
foreach ( var cell in newRow . Cells )
{
{
// 注意:如果单元格中有多个段落或更复杂的结构,你可能需要遍历它们并分别复制样式
Border Border = new Border ( ) { Size = BorderSize . four , Color = Color . Black } ;
cell . SetBorder ( TableCellBorderType . Left , Border ) ;
cell . SetBorder ( TableCellBorderType . Right , Border ) ;
cell . SetBorder ( TableCellBorderType . Top , Border ) ;
cell . SetBorder ( TableCellBorderType . Bottom , Border ) ;
}
}
for ( int i = 0 ; i < datatable2 . Columns . Count ; i + + )
{
newRow . Cells [ i ] . ReplaceText ( "{" + i . ToString ( ) + "}" , Convert . ToString ( item [ i ] ) ) ;
}
}
}
else if ( FType = = "W" )
{
// 假设模板中的表格是第一个表格
var table = document . Tables [ 1 ] ;
Row previousRow = ( Row ) table . Rows [ 1 ] ;
//for (int i = table.Rows.Count - 4; i >= 1; i--) // 从最后一行开始删除,避免索引超出范围
//{
// table.Rows[i].Remove();
//}
table . Rows [ 1 ] . Remove ( ) ;
var datatable2 = data . Tables [ 1 ] ;
foreach ( DataRow item in datatable2 . Rows )
{
Row newRow = table . InsertRow ( previousRow , table . Rows . Count - 2 ) ;
foreach ( var cell in newRow . Cells )
{
{
// 注意:如果单元格中有多个段落或更复杂的结构,你可能需要遍历它们并分别复制样式
Border Border = new Border ( ) { Size = BorderSize . four , Color = Color . Black } ;
cell . SetBorder ( TableCellBorderType . Left , Border ) ;
cell . SetBorder ( TableCellBorderType . Right , Border ) ;
cell . SetBorder ( TableCellBorderType . Top , Border ) ;
cell . SetBorder ( TableCellBorderType . Bottom , Border ) ;
}
}
for ( int i = 0 ; i < datatable2 . Columns . Count ; i + + )
{
newRow . Cells [ i ] . ReplaceText ( "{" + i . ToString ( ) + "}" , Convert . ToString ( item [ i ] ) ) ;
}
}
}
else if ( FType = = "SX-1" | | FType = = "SX-2" )
{
#region 这 里 开 始 复 制
// 假设模板中的表格是第一个表格
var table = document . Tables [ 2 ] ;
//// 清空表格中的所有行(除了表头,如果有的话)
//// 注意:这里假设第一行是表头,不删除
Row previousRowNew = ( Row ) table . Rows [ 1 ] ;
Row previousRowthreeNew = ( Row ) table . Rows [ 2 ] ;
Row previousRowfourNew = ( Row ) table . Rows [ 3 ] ;
for ( int i = 3 ; i > = 1 ; i - - )
{
table . Rows [ i ] . Remove ( ) ;
}
var datatable2 = data . Tables [ 2 ] ;
// 使用LINQ来获取去重后的FType字段
var DistinctFTypes = datatable2 . AsEnumerable ( )
. Select ( row = > row . Field < string > ( "FType" ) )
. Distinct ( )
. ToList ( ) ;
int Index = DistinctFTypes . Count ;
foreach ( var item in DistinctFTypes )
{
Row previousRow = previousRowNew ;
var previousRowthree = previousRowthreeNew ;
var previousRowfour = previousRowfourNew ;
//插入组合中具体的数据行
var Rows = datatable2 . AsEnumerable ( ) . Where ( t = > Convert . ToString ( t [ "FType" ] ) = = item ) . ToList ( ) ;
//插入一个组合
#region
Row newRowfour = table . InsertRow ( previousRowfour , 1 ) ;
newRowfour . Cells [ 1 ] . ReplaceText ( "{9}" , Convert . ToString ( Rows [ 0 ] [ 11 ] ) ) ;
foreach ( var Row in Rows )
{
Row newRowthree = table . InsertRow ( previousRowthree , 1 ) ;
for ( int i = 0 ; i < 9 ; i + + )
{
newRowthree . Cells [ i ] . ReplaceText ( "{" + i . ToString ( ) + "}" , Convert . ToString ( Row [ i ] ) ) ;
}
document . ReplaceText ( "{10}" , Convert . ToString ( Row [ 10 ] ) ) ;
}
Row newRow = table . InsertRow ( previousRow , 1 ) ;
newRow . Cells [ 0 ] . ReplaceText ( "{0}" , string . Format ( "{0}、{1}" , ConvertToChineseUppercase ( Index ) , Convert . ToString ( item ) ) ) ;
#endregion
Index - - ;
}
#endregion
}
else if ( ! List . Contains ( FType ) & & FType ! = "HH" & & FType ! = "TH" )
{
// 假设模板中的表格是第一个表格
var table = document . Tables [ 1 ] ;
Row previousRow = ( Row ) table . Rows [ 1 ] ;
//for (int i = table.Rows.Count - 4; i >= 1; i--) // 从最后一行开始删除,避免索引超出范围
//{
// table.Rows[i].Remove();
//}
table . Rows [ 1 ] . Remove ( ) ;
var datatable2 = data . Tables [ 1 ] ;
foreach ( DataRow item in datatable2 . Rows )
{
Row newRow = table . InsertRow ( previousRow , table . Rows . Count - 3 ) ;
foreach ( var cell in newRow . Cells )
{
{
// 注意:如果单元格中有多个段落或更复杂的结构,你可能需要遍历它们并分别复制样式
Border Border = new Border ( ) { Size = BorderSize . four , Color = Color . Black } ;
cell . SetBorder ( TableCellBorderType . Left , Border ) ;
cell . SetBorder ( TableCellBorderType . Right , Border ) ;
cell . SetBorder ( TableCellBorderType . Top , Border ) ;
cell . SetBorder ( TableCellBorderType . Bottom , Border ) ;
}
}
for ( int i = 0 ; i < datatable2 . Columns . Count ; i + + )
{
newRow . Cells [ i ] . ReplaceText ( "{" + i . ToString ( ) + "}" , Convert . ToString ( item [ i ] ) ) ;
}
}
}
else if ( List . Contains ( FType ) )
{
#region 这 里 开 始 复 制
// 假设模板中的表格是第一个表格
var table = document . Tables [ 3 ] ;
//// 清空表格中的所有行(除了表头,如果有的话)
//// 注意:这里假设第一行是表头,不删除
Row previousRowNew = ( Row ) table . Rows [ 1 ] ;
Row previousRowthreeNew = ( Row ) table . Rows [ 2 ] ;
Row previousRowfourNew = ( Row ) table . Rows [ 3 ] ;
for ( int i = 3 ; i > = 1 ; i - - )
{
table . Rows [ i ] . Remove ( ) ;
}
var datatable2 = data . Tables [ 2 ] ;
// 使用LINQ来获取去重后的FType字段
var DistinctFTypes = datatable2 . AsEnumerable ( )
. Select ( row = > row . Field < string > ( "FType" ) )
. Distinct ( )
. ToList ( ) ;
int Index = DistinctFTypes . Count ;
foreach ( var item in DistinctFTypes )
{
Row previousRow = previousRowNew ;
var previousRowthree = previousRowthreeNew ;
var previousRowfour = previousRowfourNew ;
//插入组合中具体的数据行
var Rows = datatable2 . AsEnumerable ( ) . Where ( t = > Convert . ToString ( t [ "FType" ] ) = = item ) . ToList ( ) ;
//插入一个组合
#region
Row newRowfour = table . InsertRow ( previousRowfour , 1 ) ;
newRowfour . Cells [ 1 ] . ReplaceText ( "{9}" , Convert . ToString ( Rows [ 0 ] [ 11 ] ) ) ;
foreach ( var Row in Rows )
{
Row newRowthree = table . InsertRow ( previousRowthree , 1 ) ;
for ( int i = 0 ; i < 9 ; i + + )
{
newRowthree . Cells [ i ] . ReplaceText ( "{" + i . ToString ( ) + "}" , Convert . ToString ( Row [ i ] ) ) ;
}
document . ReplaceText ( "{10}" , Convert . ToString ( Row [ 10 ] ) ) ;
}
Row newRow = table . InsertRow ( previousRow , 1 ) ;
newRow . Cells [ 0 ] . ReplaceText ( "{0}" , string . Format ( "{0}、{1}" , ConvertToChineseUppercase ( Index ) , Convert . ToString ( item ) ) ) ;
#endregion
Index - - ;
}
#endregion
}
else if ( FType = = "HH" )
{
// 获取模板文档中的表格
var table = document . Tables [ 1 ] ;
Row previousRow = ( Row ) table . Rows [ 1 ] ;
var roww = table . Rows ;
table . Rows [ 1 ] . Remove ( ) ;
//获取存储过程的查询
var datatable2 = data . Tables [ 3 ] ;
foreach ( DataRow item in datatable2 . Rows )
{
int textn = table . Rows . Count ;
Row newRow = table . InsertRow ( previousRow , table . Rows . Count - 3 ) ;
foreach ( var cell in newRow . Cells )
{
{
// 注意:如果单元格中有多个段落或更复杂的结构,你可能需要遍历它们并分别复制样式
Border Border = new Border ( ) { Size = BorderSize . four , Color = Color . Black } ;
cell . SetBorder ( TableCellBorderType . Left , Border ) ;
cell . SetBorder ( TableCellBorderType . Right , Border ) ;
cell . SetBorder ( TableCellBorderType . Top , Border ) ;
cell . SetBorder ( TableCellBorderType . Bottom , Border ) ;
}
}
for ( int i = 0 ; i < datatable2 . Columns . Count ; i + + )
{
newRow . Cells [ i ] . ReplaceText ( "{" + i . ToString ( ) + "}" , Convert . ToString ( item [ i ] ) ) ;
}
}
}
else
{
// 获取模板文档中的表格
var table = document . Tables [ 1 ] ;
Row previousRow = ( Row ) table . Rows [ 1 ] ;
var roww = table . Rows ;
table . Rows [ 1 ] . Remove ( ) ;
//获取存储过程的查询
var datatable2 = data . Tables [ 4 ] ;
foreach ( DataRow item in datatable2 . Rows )
{
int textn = table . Rows . Count ;
Row newRow = table . InsertRow ( previousRow , table . Rows . Count - 3 ) ;
foreach ( var cell in newRow . Cells )
{
{
// 注意:如果单元格中有多个段落或更复杂的结构,你可能需要遍历它们并分别复制样式
Border Border = new Border ( ) { Size = BorderSize . four , Color = Color . Black } ;
cell . SetBorder ( TableCellBorderType . Left , Border ) ;
cell . SetBorder ( TableCellBorderType . Right , Border ) ;
cell . SetBorder ( TableCellBorderType . Top , Border ) ;
cell . SetBorder ( TableCellBorderType . Bottom , Border ) ;
}
}
for ( int i = 0 ; i < datatable2 . Columns . Count ; i + + )
{
newRow . Cells [ i ] . ReplaceText ( "{" + i . ToString ( ) + "}" , Convert . ToString ( item [ i ] ) ) ;
}
}
}
if ( ! Directory . Exists ( Path . GetDirectoryName ( outputPath ) ) )
{
Directory . CreateDirectory ( Path . GetDirectoryName ( outputPath ) ) ;
}
// 保存新文档
document . SaveAs ( outputPath ) ;
}
}
public static void DolondWord2 ( DataSet data )
{
// 模板文件路径
string templatePath = @"D:\模板\模板.docx" ;
// 输出文件路径
string outputPath = @"D:\模板\重新导出的结果.docx" ;
//// 模板文件路径
//string templatePath = @"D:\模板\模板.docx";
//// 输出文件路径
//string outputPath = @"D:\模板\重新导出的结果.docx";
//using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(templatePath, false))
//{
// // 获取主文档部分
// MainDocumentPart mainPart = wordDoc.MainDocumentPart;
// // 获取文档中的所有表格
// IEnumerable<Table> tables = mainPart.Document.Body.Elements<Table>();
// foreach (Table table in tables)
// {
// // 遍历表格中的所有行
// foreach (TableRow row in table.Elements<TableRow>())
// {
// // 遍历行中的所有单元格
// foreach (TableCell cell in row.Elements<TableCell>())
// {
// // 获取单元格的段落(可能有多个)
// foreach (Paragraph paragraph in cell.Elements<DocumentFormat.OpenXml.Wordprocessing.Paragraph>())
// {
// // 获取段落的属性(这些属性可以包含字体、字号等信息)
// ParagraphProperties paragraphProperties = paragraph.ParagraphProperties;
// // 示例:打印段落的对齐方式
// if (paragraphProperties.Justification != null)
// {
// Console.WriteLine($"Cell in table {table.TableId.Value} row {row.RowIndex.Value} has paragraph justification: {paragraphProperties.Justification.Value}");
// }
// // 获取段落中的运行( Run) , 它们包含文本及其格式
// foreach (Run run in paragraph.Elements<Run>())
// {
// // 获取运行的属性(这些属性可以包含字体、字号、颜色等信息)
// RunProperties runProperties = run.RunProperties;
// // 示例:打印运行的字体和字号
// if (runProperties.RunFonts != null && runProperties.FontSize != null)
// {
// Console.WriteLine($"Cell in table {table.TableId.Value} row {row.RowIndex.Value} has run font: {runProperties.RunFonts.Ascii}, size: {runProperties.FontSize.Val}");
// }
// // 注意:如果单元格中有多个运行,每个运行可能有不同的样式
// }
// }
// // 注意:单元格也可能包含其他元素,如表格嵌套、图片等,这里只处理了段落和运行
// }
// }
// }
//}
List < string > List = new List < string > ( ) { "CS" , "ES" , "S" } ;
// 加载模板文档
using ( var document = DocX . Load ( templatePath ) )
{
var datatable = data . Tables [ 0 ] ;
//foreach (DataRow item in datatable.Rows)
//{
// document.ReplaceText("{" + Convert.ToString(item["Key"]) + "}", Convert.ToString(item["Value"]));
//}
if ( ! List . Contains ( "D" ) )
{
// 假设模板中的表格是第一个表格
var table = document . Tables [ 1 ] ;
Row previousRow = ( Row ) table . Rows [ 1 ] ;
//for (int i = table.Rows.Count - 4; i >= 1; i--) // 从最后一行开始删除,避免索引超出范围
//{
// table.Rows[i].Remove();
//}
table . Rows [ 1 ] . Remove ( ) ;
var datatable2 = data . Tables [ 1 ] ;
foreach ( DataRow item in datatable2 . Rows )
{
Row newRow = table . InsertRow ( previousRow , table . Rows . Count - 3 ) ;
foreach ( var cell in newRow . Cells )
{
{
// 注意:如果单元格中有多个段落或更复杂的结构,你可能需要遍历它们并分别复制样式
Border Border = new Border ( ) { Size = BorderSize . four , Color = Color . Black } ;
cell . SetBorder ( TableCellBorderType . Left , Border ) ;
cell . SetBorder ( TableCellBorderType . Right , Border ) ;
cell . SetBorder ( TableCellBorderType . Top , Border ) ;
cell . SetBorder ( TableCellBorderType . Bottom , Border ) ;
}
}
for ( int i = 0 ; i < datatable2 . Columns . Count ; i + + )
{
newRow . Cells [ i ] . ReplaceText ( "{" + i . ToString ( ) + "}" , Convert . ToString ( item [ i ] ) ) ;
}
}
}
if ( ! Directory . Exists ( Path . GetDirectoryName ( outputPath ) ) )
{
Directory . CreateDirectory ( Path . GetDirectoryName ( outputPath ) ) ;
}
// 保存新文档
document . SaveAs ( outputPath ) ;
}
}
/// <summary>
/// 保存Txt到服务器商
/// </summary>
/// <param name="Data">接口调用数据</param>
/// <param name="path">Txt地址</param>
/// <param name="Result">接口返回数据</param>
public static void SaveTxt ( string Data , string path , string Result )
{
if ( ! Directory . Exists ( Path . GetDirectoryName ( path ) ) )
{
Directory . CreateDirectory ( Path . GetDirectoryName ( path ) ) ;
}
StringBuilder sb = new StringBuilder ( ) ;
sb . AppendLine ( "\r\n" ) ;
sb . AppendLine ( "----------------------调用接口所用JSon----------------------" ) ;
sb . AppendLine ( Data ) ;
sb . AppendLine ( "\r\n" ) ;
sb . AppendLine ( "----------------------调用接口返回JSon----------------------" ) ;
sb . AppendLine ( Result ) ;
FileStream fs = new FileStream ( path , FileMode . Create ) ;
StreamWriter sw = new StreamWriter ( fs ) ;
fs . Position = fs . Length ;
//开始写入
sw . Write ( sb . ToString ( ) ) ;
//清空缓冲区
sw . Flush ( ) ;
//关闭流
sw . Close ( ) ;
fs . Close ( ) ;
}
public static String ApiUrl = "http://doc.pmac.com.cn/api/services" ; //正式地址
public static String CustApiUrl = "http://10.0.110.12:8090/Api" ; //正式地址 创建多级文件夹使用,8090端口
public static String integrationKey = "675cb5b3-6405-78ab-4834-82c25131851b" ; //正式 集成登录秘钥
//测试环境
//public static String username = "erp1";//正式 集成登录秘钥
//public static String password = "edoc@erp";//正式 集成登录秘钥
//正式环境
public static String username = "admin" ; //正式 集成登录秘钥
public static String password = "PIL@edoc3" ; //正式 集成登录秘钥
/// <summary>
/// 获取文档云的Token
/// </summary>
/// <param name="username">用户名</param>
/// <param name="password">密码</param>
/// <returns></returns>
public static string UserLogin ( string FApiPath )
{
///声明返回Token
String token = "" ;
//声明接口名称
String url = "/Org/UserLogin" ;
String postJson = "{\"userName\": \"" + username + "\",\"password\": \"" + password + "\" } " ;
HttpClient httpClient = new HttpClient ( ) ;
httpClient . Url = ApiUrl + url ;
httpClient . Content = postJson ;
var resule = JsonConvert . DeserializeObject < JObject > ( httpClient . Post ( ) ) ;
token = Convert . ToString ( resule [ "data" ] ) ;
//写入Txt到服务器地址
SaveTxt ( Convert . ToString ( httpClient . Url ) , FApiPath , JsonConvert . SerializeObject ( resule ) ) ;
return token ;
}
///
public static string GetFolderInfoByNamePath ( string Token , string FPath , string FApiPath , Context ctx )
{
///声明返回Token
String FolderId = "" ;
//声明接口名称
String url = string . Format ( @"/Folder/GetFolderInfoByNamePath?token={0}&folderNamePath={1}" , Token , FPath ) ;
HttpClient httpClient = new HttpClient ( ) ;
httpClient . Url = ApiUrl + url ;
var resule = JsonConvert . DeserializeObject < JObject > ( httpClient . Get ( ) ) ;
if ( resule [ "data" ] ! = null )
{
try
{
FolderId = Convert . ToString ( resule [ "data" ] [ "FolderId" ] ) ;
}
catch
{
FolderId = "" ;
}
}
//写入Txt到服务器地址
SaveTxt ( Convert . ToString ( httpClient . Url ) , FApiPath , JsonConvert . SerializeObject ( resule ) ) ;
return FolderId ;
}
public static string CreateFolder ( string Token , string parentFolderId , string folderName , string FApiPath , Context ctx )
{
///声明返回Token
String FolderId = "" ;
//声明接口名称
String url = "/Folder/CreateFolder" ;
HttpClient httpClient = new HttpClient ( ) ;
httpClient . Url = ApiUrl + url ;
httpClient . Content = "{\"token\": \"" + Token + "\",\"name\": \"" + folderName + "\",\"parentFolderId\":" + parentFolderId + " } " ;
var resule = JsonConvert . DeserializeObject < JObject > ( httpClient . Post ( ) ) ;
if ( resule [ "data" ] ! = null )
{
FolderId = Convert . ToString ( resule [ "data" ] [ "FolderId" ] ) ;
}
//写入Txt到服务器地址
SaveTxt ( Convert . ToString ( httpClient . Url ) + "\r\n" + httpClient . Content , FApiPath , JsonConvert . SerializeObject ( resule ) ) ;
return FolderId ;
}
/// <summary>
/// 创建多层级文件夹
/// </summary>
/// <param name="Token"></param>
/// <param name="parentFolderId">父级文件夹id</param>
/// <param name="FYear">年份</param>
/// <param name="contractFolderName">合同文件夹名称</param>
/// <returns></returns>
public static string batchCreateFolder ( string Token , string parentFolderId , string FYear , string contractFolderName , string FApiPath )
{
///声明返回Token
String FolderId = "" ;
//声明接口名称
String url = "/Folder/CreateFolder" ;
//声明对象
HttpClient httpClient = new HttpClient ( ) ;
//赋值接口Url
httpClient . Url = ApiUrl + url ;
#region 设 置 A阶段文件夹
JSONObject obj1 = new JSONObject ( ) ;
obj1 . Add ( "Name" , "A-商机至合同阶段" ) ;
JSONArray arry1 = new JSONArray ( ) ;
String [ ] jd1Array = { "A01-合同扫描件" , "A02-技术方案资料" , "A04-中标相关资料" , "A05-其他资料" } ;
for ( int i = 0 ; i < jd1Array . Length ; i + + )
{
JSONObject obj11 = new JSONObject ( ) ;
obj11 . Add ( "Name" , jd1Array [ i ] ) ;
arry1 . Add ( obj11 ) ;
}
obj1 . Add ( "FolderChildren" , arry1 ) ;
#endregion
#region 设 置 B阶段文件夹
JSONObject obj2 = new JSONObject ( ) ;
obj2 . Add ( "Name" , "B-实施准备阶段" ) ;
JSONArray arry2 = new JSONArray ( ) ;
String [ ] jd2rray = { "B01-项目需求分析" , "B02-项目启动会议" , "B03-施工组织计划" , "B04-供货采购计划" , "B05-成本管理计划" , "B06-项目管理计划" , "B07-施工方案" , "B08-施工分包管理" , "B09-施工布线指导" , "B10-其他文件" } ;
for ( int i = 0 ; i < jd2rray . Length ; i + + )
{
JSONObject obj22 = new JSONObject ( ) ;
obj22 . Add ( "Name" , jd2rray [ i ] ) ;
arry2 . Add ( obj22 ) ;
}
obj2 . Add ( "FolderChildren" , arry2 ) ;
#endregion
#region 设 置 C阶段文件夹
JSONObject obj3 = new JSONObject ( ) ;
obj3 . Add ( "Name" , "C-实施执行阶段" ) ;
JSONArray arry3 = new JSONArray ( ) ;
String [ ] jd3rray = { "C01-网络拓扑图" , "C02-设计院成套厂图纸" , "C03-机柜原理及结构图" , "C04-深化施工平面图" , "C05-项目设备点表" , "C06-采集器配置备份" , "C07-系统及数据库备份" , "C08-第三方产品资料库" , "C09-工程签证单" , "C10-分项工程报验单" , "C11-工程联络单" , "C12-分包成本管理" , "C13-整套竣工图纸" , "C14-产品定制单" , "C15-前最终施工图纸全套" , "C16-报价工程量清单" , "C17-项目交接单" , "C18-注册码" , "C19-机柜出厂测试报告" , "C20-系统调试方案" , "C21-项目日志" , "C22-其他文件" } ;
for ( int i = 0 ; i < jd3rray . Length ; i + + )
{
JSONObject obj33 = new JSONObject ( ) ;
obj33 . Add ( "Name" , jd3rray [ i ] ) ;
arry3 . Add ( obj33 ) ;
}
obj3 . Add ( "FolderChildren" , arry3 ) ;
#endregion
#region 设 置 D阶段文件夹
JSONObject obj4 = new JSONObject ( ) ;
obj4 . Add ( "Name" , "D-验收交付阶段" ) ;
JSONArray arry4 = new JSONArray ( ) ;
String [ ] jd4rray = { "D01-验收报告扫描件" , "D02-设备调试记录报告" , "D03-发货单(签字回单)" , "D04-试运行或真实运行报告" , "D05-审计结算资料" , "D06-项目总结报告" , "D07-遗留问题清单" , "D08-说明书或操作手册" , "D09-现场照片或界面截图" , "D10-移交甲方的资料" , "D11-其他文件" } ;
for ( int i = 0 ; i < jd4rray . Length ; i + + )
{
JSONObject obj44 = new JSONObject ( ) ;
obj44 . Add ( "Name" , jd4rray [ i ] ) ;
arry4 . Add ( obj44 ) ;
}
obj4 . Add ( "FolderChildren" , arry4 ) ;
#endregion
#region 设 置 E阶段文件夹
JSONObject obj5 = new JSONObject ( ) ;
obj5 . Add ( "Name" , "E-验收后运维阶段" ) ;
JSONArray arry5 = new JSONArray ( ) ;
String [ ] jd5rray = { "E01-用户证明和客户评价文件" , "E02-巡检报告" , "E03-售后满意度调查表" , "E04-现场更新资料备份" , "E05-其他文件" } ;
for ( int i = 0 ; i < jd5rray . Length ; i + + )
{
JSONObject obj55 = new JSONObject ( ) ;
obj55 . Add ( "Name" , jd5rray [ i ] ) ;
arry5 . Add ( obj55 ) ;
}
obj5 . Add ( "FolderChildren" , arry5 ) ;
#endregion
//5个阶段的所有文件夹放入到对应合同目录下
//合同文件夹
JSONObject dataObj = new JSONObject ( ) ;
JSONArray arry0 = new JSONArray ( ) ;
arry0 . Add ( obj1 ) ;
arry0 . Add ( obj2 ) ;
arry0 . Add ( obj3 ) ;
arry0 . Add ( obj4 ) ;
arry0 . Add ( obj5 ) ;
dataObj . Add ( "FolderChildren" , arry0 ) ;
//将合同目录放到对应年份的目录下
JSONArray yearArray = new JSONArray ( ) ;
yearArray . Add ( dataObj ) ;
JSONObject yearobj = new JSONObject ( ) ;
yearobj . Add ( "FolderName" , FYear ) ;
yearobj . Add ( "FolderChildren" , yearArray ) ;
//开始创建
JSONObject obj = new JSONObject ( ) ;
obj . Add ( "Token" , Token ) ;
obj . Add ( "ParentFolderId" , parentFolderId ) ;
obj . Add ( "name" , contractFolderName ) ;
obj . Add ( "FolderChildren" , arry0 ) ;
String postJson = obj . ToString ( ) ;
httpClient . Content = postJson ;
var resule = JsonConvert . DeserializeObject < JObject > ( httpClient . Post ( ) ) ;
if ( resule [ "data" ] ! = null )
{
FolderId = Convert . ToString ( resule [ "data" ] [ "FolderId" ] ) ;
}
//写入Txt到服务器地址
SaveTxt ( Convert . ToString ( httpClient . Url ) + "\r\n" + httpClient . Content , FApiPath , JsonConvert . SerializeObject ( resule ) ) ;
return FolderId ;
}
/// <summary>
/// 创建BPM流程发起产品生产出货预置单
/// </summary>
public static string CreateDocument2 ( DynamicObjectCollection data , Context ctx )
{
StringBuilder xml = new StringBuilder ( "FormData=<FormData>" ) ;
xml . Append ( "<productshipinit>" ) ;
xml . Append ( "<SN></SN>" ) ;
xml . Append ( "<ReqDate>" + Convert . ToString ( data [ 0 ] [ "创建时间" ] ) + "</ReqDate>" ) ; //创建时间
xml . Append ( "<Applicant>" + Convert . ToString ( data [ 0 ] [ "填单人" ] ) + "</Applicant>" ) ; //填单人
xml . Append ( "<DeptName>" + Convert . ToString ( data [ 0 ] [ "填单人部门" ] ) + "</DeptName>" ) ; //填单人部门
xml . Append ( "<Model>" + Convert . ToString ( data [ 0 ] [ "规格型号" ] ) + "</Model>" ) ; //规格型号
xml . Append ( "<Customer>" + Convert . ToString ( data [ 0 ] [ "购货单位" ] ) + "</Customer>" ) ; //购货单位
xml . Append ( "<Project>" + Convert . ToString ( data [ 0 ] [ "项目名称" ] ) + "</Project>" ) ; //项目名称
xml . Append ( "<Seller>" + Convert . ToString ( data [ 0 ] [ "销售人员" ] ) + "</Seller>" ) ; //销售人员
xml . Append ( "<SellerDept>" + Convert . ToString ( data [ 0 ] [ "销售人员部门" ] ) + "</SellerDept>" ) ; //销售人员部门
xml . Append ( "<Position>" + Convert . ToString ( data [ 0 ] [ "填单人职位" ] ) + "</Position>" ) ; //填单人职位
xml . Append ( "<ContractNo>" + Convert . ToString ( data [ 0 ] [ "合同号" ] ) + "</ContractNo>" ) ; //合同号
xml . Append ( "<deliverydate>" + Convert . ToString ( data [ 0 ] [ "发货日期" ] ) + "</deliverydate>" ) ; //发货日期
xml . Append ( "</productshipinit>" ) ;
foreach ( var item in data )
{
xml . Append ( "<productshipinit_item>" ) ;
xml . Append ( "<itemnumber>" + Convert . ToString ( item [ "物料代码" ] ) + "</itemnumber>" ) ; //物料代码
xml . Append ( "<itemmodel>" + Convert . ToString ( item [ "物料名称" ] ) + "</itemmodel>" ) ; //物料名称
xml . Append ( "<qty>" + Convert . ToString ( item [ "数量" ] ) + "</qty>" ) ; //数量
xml . Append ( "<Brand>" + Convert . ToString ( item [ "品牌" ] ) + "</Brand>" ) ; //品牌
xml . Append ( "<demand>" + Convert . ToString ( item [ "备注" ] ) + "</demand>" ) ; //定制单出货次数
xml . Append ( "</productshipinit_item>" ) ;
}
xml . Append ( "</FormData>" ) ;
//HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://10.0.120.98/bpm/YZSoft/WebService/YZService.ashx?Method=PostTask&UserAccount=" + data[0]["bpm账号"] + "&ProcessName=产品生产出货预置单&Action=提交&Comment=''&" + xml);
HttpWebRequest request = ( HttpWebRequest ) WebRequest . Create ( "http://10.0.120.98/bpm/YZSoft/WebService/YZService.ashx?Method=PostTask&UserAccount=" + data [ 0 ] [ "bpm账号" ] + "&ProcessName=产品生产出货预置单&Action=提交&Comment=''&" + xml ) ;
request . Method = "POST" ;
request . ContentType = "text/xml" ;
Encoding encoding = Encoding . GetEncoding ( "UTF-8" ) ;
// 要发送的数据
byte [ ] buffer = encoding . GetBytes ( xml . ToString ( ) ) ;
// 获取请求流
using ( Stream writer = request . GetRequestStream ( ) )
{
// 写入数据
writer . Write ( buffer , 0 , buffer . Length ) ;
}
string retString = "" ;
string sn = "失败" ;
//获取响应
using ( HttpWebResponse response = ( HttpWebResponse ) request . GetResponse ( ) )
{
// 处理响应
Stream myResponseStream = response . GetResponseStream ( ) ; //获取返回值
using ( StreamReader reader = new StreamReader ( myResponseStream , Encoding . UTF8 ) )
{
try
{
retString = reader . ReadToEnd ( ) ;
//获取SN数据
var snOBJ = JsonConvert . DeserializeObject < JObject > ( retString ) ;
if ( Convert . ToString ( snOBJ [ "success" ] ) . ToUpper ( ) = = "TRUE" )
{
sn = Convert . ToString ( snOBJ [ "SN" ] ) ;
}
}
catch
{
}
}
}
//写入Txt到服务器地址
//SaveTxt("http://10.0.120.98/bpm/YZSoft/WebService/YZService.ashx?Method=PostTask&UserAccount="+data[0]["bpm账号"] + "&ProcessName=产品生产出货预置单&Action=提交&Comment=''&" + xml,
// string.Format(@"D:\Api日志\{2}\创建流程\{0}\创建流程\{1}.txt",
// Convert.ToString(data[0]["单据编号"]), DateTime.Now.ToString("yyyyMMddHHmmssfff"), ctx.DataCenterName), retString);
SaveTxt ( "http://bpm.pmac.com.cn/bpm/YZSoft/WebService/YZService.ashx?Method=PostTask&UserAccount=" + data [ 0 ] [ "bpm账号" ] + "&ProcessName=产品生产出货预置单&Action=提交&Comment=''&" + xml ,
string . Format ( @"D:\Api日志\{2}\创建流程\{0}\创建流程\{1}.txt" ,
Convert . ToString ( data [ 0 ] [ "单据编号" ] ) , DateTime . Now . ToString ( "yyyyMMddHHmmssfff" ) , ctx . DataCenterName ) , retString ) ;
return sn ;
}
/// <summary>
/// 创建BPM流程发起产品定制再次出货确认单
/// </summary>
public static string CreateDocument ( DynamicObjectCollection data , Context ctx )
{
StringBuilder xml = new StringBuilder ( "FormData=<FormData>" ) ;
xml . Append ( "<CustMadeAgain>" ) ;
xml . Append ( "<SN></SN>" ) ;
xml . Append ( "<ReqDate>" + Convert . ToString ( data [ 0 ] [ "创建时间" ] ) + "</ReqDate>" ) ; //创建时间
xml . Append ( "<Applicant>" + Convert . ToString ( data [ 0 ] [ "填单人" ] ) + "</Applicant>" ) ; //填单人
xml . Append ( "<DeptName>" + Convert . ToString ( data [ 0 ] [ "填单人部门" ] ) + "</DeptName>" ) ; //填单人部门
xml . Append ( "<Position>" + Convert . ToString ( data [ 0 ] [ "填单人职位" ] ) + "</Position>" ) ; //填单人职位
xml . Append ( "<ContactNo>" + Convert . ToString ( data [ 0 ] [ "合同号" ] ) + "</ContactNo>" ) ; //合同号
xml . Append ( "<Customer>" + Convert . ToString ( data [ 0 ] [ "购货单位" ] ) + "</Customer>" ) ; //购货单位
xml . Append ( "<Project>" + Convert . ToString ( data [ 0 ] [ "项目名称" ] ) + "</Project>" ) ; //项目名称
xml . Append ( "<Seller>" + Convert . ToString ( data [ 0 ] [ "销售人员" ] ) + "</Seller>" ) ; //销售人员
xml . Append ( "<SellerDept>" + Convert . ToString ( data [ 0 ] [ "销售人员部门" ] ) + "</SellerDept>" ) ; //销售人员部门
xml . Append ( "<vModel>" + Convert . ToString ( data [ 0 ] [ "规格型号" ] ) + "</vModel>" ) ; //规格型号
xml . Append ( "</CustMadeAgain>" ) ;
foreach ( var item in data )
{
xml . Append ( "<CustMadeAgain_Item>" ) ;
xml . Append ( "<MaterialCode>" + Convert . ToString ( item [ "物料代码" ] ) + "</MaterialCode>" ) ; //物料代码
xml . Append ( "<MaterialName>" + Convert . ToString ( item [ "物料名称" ] ) + "</MaterialName>" ) ; //物料名称
xml . Append ( "<Model>" + Convert . ToString ( item [ "规格型号" ] ) + "</Model>" ) ; //规格型号
xml . Append ( "<Brand>" + Convert . ToString ( item [ "品牌" ] ) + "</Brand>" ) ; //品牌
xml . Append ( "<Qty>" + Convert . ToString ( item [ "数量" ] ) + "</Qty>" ) ; //数量
xml . Append ( "<Remarks>" + Convert . ToString ( item [ "备注" ] ) + "</Remarks>" ) ; //备注
xml . Append ( "<CustMadeQty>" + Convert . ToString ( item [ "定制单出货次数" ] ) + "</CustMadeQty>" ) ; //定制单出货次数
xml . Append ( "</CustMadeAgain_Item>" ) ;
}
xml . Append ( "</FormData>" ) ;
HttpWebRequest request = ( HttpWebRequest ) WebRequest . Create ( "http://bpm.pmac.com.cn/bpm/YZSoft/WebService/YZService.ashx?Method=PostTask&UserAccount=" + data [ 0 ] [ "bpm账号" ] + "&ProcessName=产品定制再次出货确认单&Action=提交&Comment=''&" + xml ) ;
//HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://10.0.120.98/bpm/YZSoft/WebService/YZService.ashx?Method=PostTask&UserAccount=" + data[0]["bpm账号"] + "&ProcessName=产品定制再次出货确认单&Action=提交&Comment=''&" + xml);
request . Method = "POST" ;
request . ContentType = "text/xml" ;
Encoding encoding = Encoding . GetEncoding ( "UTF-8" ) ;
// 要发送的数据
byte [ ] buffer = encoding . GetBytes ( xml . ToString ( ) ) ;
// 获取请求流
using ( Stream writer = request . GetRequestStream ( ) )
{
// 写入数据
writer . Write ( buffer , 0 , buffer . Length ) ;
}
string retString = "" ;
string sn = "失败" ;
//获取响应
using ( HttpWebResponse response = ( HttpWebResponse ) request . GetResponse ( ) )
{
// 处理响应
Stream myResponseStream = response . GetResponseStream ( ) ; //获取返回值
using ( StreamReader reader = new StreamReader ( myResponseStream , Encoding . UTF8 ) )
{
try
{
retString = reader . ReadToEnd ( ) ;
//获取SN数据
var snOBJ = JsonConvert . DeserializeObject < JObject > ( retString ) ;
if ( Convert . ToString ( snOBJ [ "success" ] ) . ToUpper ( ) = = "TRUE" )
{
sn = Convert . ToString ( snOBJ [ "SN" ] ) ;
}
}
catch
{
}
}
}
////写入Txt到服务器地址
//SaveTxt("http://10.0.120.98/bpm/YZSoft/WebService/YZService.ashx?Method=PostTask&UserAccount=" + data[0]["bpm账号"] + "&ProcessName=产品定制再次出货确认单&Action=提交&Comment=''&" + xml,
// string.Format(@"D:\Api日志\{2}\创建流程\{0}\创建流程\{1}.txt",
// Convert.ToString(data[0]["单据编号"]), DateTime.Now.ToString("yyyyMMddHHmmssfff"), ctx.DataCenterName), retString);
//写入Txt到服务器地址
SaveTxt ( "http://bpm.pmac.com.cn/bpm/YZSoft/WebService/YZService.ashx?Method=PostTask&UserAccount=" + data [ 0 ] [ "bpm账号" ] + "&ProcessName=产品定制再次出货确认单&Action=提交&Comment=''&" + xml ,
string . Format ( @"D:\Api日志\{2}\创建流程\{0}\创建流程\{1}.txt" ,
Convert . ToString ( data [ 0 ] [ "单据编号" ] ) , DateTime . Now . ToString ( "yyyyMMddHHmmssfff" ) , ctx . DataCenterName ) , retString ) ;
return sn ;
}
/// <summary>
/// 创建工程项目
/// </summary>
public static string CreateItemData ( Context ctx , string FOrgId , string FNumber , string FName )
{
string FID ;
string FBILLNO ;
// 构建一个IBillView实例, 通过此实例, 可以方便的填写
IBillView billView = CommonHelper . CreateBillView ( ctx , "BAS_PreBaseDataOne" ) ;
// 新建一个空白劳动合同
// billView.CreateNewModelData();
( ( IBillViewService ) billView ) . LoadData ( ) ;
// 触发插件的OnLoad事件:
// 组织控制基类插件, 在OnLoad事件中, 对主业务组织改变是否提示选项进行初始化。
// 如果不触发OnLoad事件, 会导致主业务组织赋值不成功
DynamicFormViewPlugInProxy eventProxy = billView . GetService < DynamicFormViewPlugInProxy > ( ) ;
eventProxy . FireOnLoad ( ) ;
// 填写每日打卡记录
CreateItem ( billView , ctx , FOrgId , FNumber , FName ) ;
// 保存每日打卡记录
OperateOption saveOption = OperateOption . Create ( ) ;
Form form = billView . BillBusinessInfo . GetForm ( ) ;
if ( form . FormIdDynamicProperty ! = null )
{
form . FormIdDynamicProperty . SetValue ( billView . Model . DataObject , form . Id ) ;
}
//保存工程项目
CommonHelper . SaveBill ( ctx , billView , saveOption , true , out FID , out FBILLNO ) ;
return FID ;
}
private static void CreateItem ( IBillView billView , Context ctx , string FOrgId , string FNumber , string FName )
{
//赋值创建组织
billView . Model . SetValue ( "FCreateOrgId" , FOrgId , 0 ) ;
//赋值使用组织
billView . Model . SetValue ( "FUseOrgId" , FOrgId , 0 ) ;
//赋值编码
billView . Model . SetValue ( "FNumber" , FNumber , 0 ) ;
//赋值名称
billView . Model . SetValue ( "FName" , FName , 0 ) ;
}
/// <summary>
/// 调用PMS接口
/// </summary>
/// <param name="templatePath"></param>
/// <param name="data"></param>
/// <param name="outputPath"></param>
public static string PMSLogin ( DynamicObjectCollection data , Context ctx , string Json , string FType )
{
String userName = "test" ;
String password = "crm@2022.PMS" ;
String url_str = "http://portal.pmac.com.cn/distributor.action?serviceName=" ;
String getUserBinding_url = url_str + "clogin&userName=" + userName + "&password=" + password ;
WebClient client = new WebClient ( ) ;
client . Headers [ HttpRequestHeader . ContentType ] = "application/x-www-form-urlencoded" ;
client . Encoding = Encoding . UTF8 ;
string result = client . UploadString ( getUserBinding_url , "" ) ;
SaveTxt ( getUserBinding_url ,
string . Format ( @"D:\Api日志\{2}\创建待分配项目\{0}\{3}\登录\{1}.txt" ,
Convert . ToString ( data [ 0 ] [ "单据编号" ] ) , DateTime . Now . ToString ( "yyyyMMddHHmmssfff" ) , ctx . DataCenterName , FType ) , result ) ;
JObject jo = ( JObject ) JsonConvert . DeserializeObject ( result ) ; //获取binding
string userBinding = jo [ "binding" ] = = null ? "" : jo [ "binding" ] . ToString ( ) ;
return userBinding ;
}
public static string PushPMSItem ( DynamicObjectCollection data , Context ctx , string Json , string FType , string Token )
{
//String userName = "test";
//String password = "crm@2022.PMS";
//String url_str = "http://portal.pmac.com.cn/distributor.action?serviceName=";
//String getUserBinding_url = url_str + "clogin&userName=" + userName + "&password=" + password;
//WebClient client = new WebClient();
//client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
//client.Encoding = Encoding.UTF8;
//string result = client.UploadString(getUserBinding_url, "");
//SaveTxt(getUserBinding_url,
// string.Format(@"D:\Api日志\{2}\创建待分配项目\{0}\登录\{1}.txt",
// Convert.ToString(data[0]["单据编号"]), DateTime.Now.ToString("yyyyMMddHHmmssfff"), ctx.DataCenterName), result);
//JObject jo = (JObject)JsonConvert.DeserializeObject(result);//获取binding
string userBinding = Token ;
string up_url = "" ;
up_url = "http://portal.pmac.com.cn/distributor.action?serviceName=insert&objectApiName=" + FType + "&data=[" + Json + "]&binding=" + userBinding ;
WebClient client2 = new WebClient ( ) ;
client2 . Headers [ HttpRequestHeader . ContentType ] = "application/x-www-form-urlencoded" ;
client2 . Encoding = Encoding . UTF8 ;
String result2 = client2 . UploadString ( up_url , "" ) ;
//写入Txt到服务器地址
SaveTxt ( up_url ,
string . Format ( @"D:\Api日志\{2}\创建待分配项目\{0}\{3}\创建待分配项目\{1}.txt" ,
Convert . ToString ( data [ 0 ] [ "单据编号" ] ) , DateTime . Now . ToString ( "yyyyMMddHHmmssfff" ) , ctx . DataCenterName , FType ) , result2 ) ;
return result2 ;
}
public static BillOpenParameter CreateOpenParameter ( Kingdee . BOS . Context ctx , FormMetadata meta )
{
Form form = meta . BusinessInfo . GetForm ( ) ;
// 指定FormId, LayoutId
BillOpenParameter openParam = new BillOpenParameter ( form . Id , meta . GetLayoutInfo ( ) . Id ) ;
// 数据库上下文
openParam . Context = ctx ;
// 本单据模型使用的MVC框架
openParam . ServiceName = form . FormServiceName ;
// 随机产生一个不重复的PageId, 作为视图的标识
openParam . PageId = Guid . NewGuid ( ) . ToString ( ) ;
// 元数据
openParam . FormMetaData = meta ;
// 界面状态:新增 (修改、查看)
openParam . Status = OperationStatus . ADDNEW ;
// 单据主键:本案例演示新建商品类型,不需要设置主键
openParam . PkValue = null ;
// 界面创建目的:普通无特殊目的 (为工作流、为下推、为复制等)
openParam . CreateFrom = CreateFrom . Default ;
// 基础资料分组维度:基础资料允许添加多个分组字段,每个分组字段会有一个分组维度
// 具体分组维度Id, 请参阅 form.FormGroups 属性
openParam . GroupId = "" ;
// 基础资料分组:如果需要为新建的基础资料指定所在分组,请设置此属性
openParam . ParentId = 0 ;
// 单据类型
openParam . DefaultBillTypeId = "" ;
// 业务流程
openParam . DefaultBusinessFlowId = "" ;
// 主业务组织改变时,不用弹出提示界面
openParam . SetCustomParameter ( "ShowConfirmDialogWhenChangeOrg" , false ) ;
// 插件
List < AbstractDynamicFormPlugIn > plugs = form . CreateFormPlugIns ( ) ;
openParam . SetCustomParameter ( FormConst . PlugIns , plugs ) ;
PreOpenFormEventArgs args = new PreOpenFormEventArgs ( ctx , openParam ) ;
foreach ( var plug in plugs )
{ // 触发插件PreOpenForm事件, 供插件确认是否允许打开界面
plug . PreOpenForm ( args ) ;
}
if ( args . Cancel = = true )
{ // 插件不允许打开界面
// 本案例不理会插件的诉求,继续....
}
// 返回
return openParam ;
}
public static IBillView CreateBillView ( Kingdee . BOS . Context ctx , string FKEY )
{
// 读取商品类型的元数据
FormMetadata meta = MetaDataServiceHelper . Load ( ctx , FKEY ) as FormMetadata ;
Form form = meta . BusinessInfo . GetForm ( ) ;
// 创建用于引入数据的单据view
Type type = Type . GetType ( "Kingdee.BOS.Web.Import.ImportBillView,Kingdee.BOS.Web" ) ;
var billView = ( IDynamicFormViewService ) Activator . CreateInstance ( type ) ;
// 开始初始化billView:
// 创建视图加载参数对象, 指定各种参数, 如FormId, 视图(LayoutId)等
BillOpenParameter openParam = CommonHelper . CreateOpenParameter ( ctx , meta ) ;
// 动态领域模型服务提供类, 通过此类, 构建MVC实例
var provider = form . GetFormServiceProvider ( ) ;
billView . Initialize ( openParam , provider ) ;
return billView as IBillView ;
}
/// <summary>
/// 保存单据
/// </summary>
/// <param name="ctx"></param>
/// <param name="billView"></param>
/// <param name="saveOption"></param>
/// <param name="IsAutoSubmitAudit">是否自动提交审核</param>
public static void SaveBill ( Context ctx , IBillView billView , OperateOption saveOption , bool IsAutoSubmitAudit , out string Id , out string FBILLNO )
{
FBILLNO = "" ;
Id = "" ;
// 调用保存操作
IOperationResult saveResult = BusinessDataServiceHelper . Save (
ctx ,
billView . BillBusinessInfo ,
billView . Model . DataObject ,
saveOption ,
"Save" ) ;
// 显示处理结果
if ( saveResult = = null )
{
billView . ShowErrMessage ( "未知原因导致保存失败!" ) ;
return ;
}
else if ( saveResult . IsSuccess = = true )
{ // 保存成功,直接显示
billView . ShowOperateResult ( saveResult . OperateResult ) ;
object [ ] pkArray = new object [ ] { saveResult . OperateResult [ 0 ] . PKValue } ;
//获取保存成功的单据编号
//FBillno = saveResult.OperateResult[0].Number;
//获取保存成功的FID
Id = Convert . ToString ( pkArray [ 0 ] ) ;
FBILLNO = saveResult . OperateResult [ 0 ] . Number ;
//是否自动提交审核
if ( IsAutoSubmitAudit )
{
OperateOption submitOption = OperateOption . Create ( ) ;
//提交
if ( Submit ( ctx , Convert . ToString ( pkArray [ 0 ] ) , billView . BusinessInfo . GetForm ( ) . Id ) = = "提交成功!" )
{
//如果提交成功,则进行审核
Audit ( ctx , Convert . ToString ( pkArray [ 0 ] ) , billView . BusinessInfo . GetForm ( ) . Id ) ;
}
}
return ;
}
2025-04-10 09:38:34 +08:00
else if ( saveResult . IsSuccess = = false )
{
saveResult . IsShowMessage = true ;
//billView.ShowErrMessage(saveResult.InteractionContext.SimpleMessage);
var dd = saveResult . ValidationErrors . FirstOrDefault ( ) ;
if ( dd ! = null )
billView . ShowErrMessage ( dd . Message ) ;
else
{
billView . ShowErrMessage ( "不知道为什么,反正就是保存失败了!" ) ;
}
return ;
}
2025-04-07 21:06:39 +08:00
else if ( saveResult . InteractionContext ! = null
& & saveResult . InteractionContext . Option . GetInteractionFlag ( ) . Count > 0 )
{ // 保存失败,需要用户确认问题
2025-04-10 09:38:34 +08:00
//billView.ShowErrMessage(saveResult.InteractionContext.SimpleMessage);
//saveResult.MergeValidateErrors();
//billView.ShowOperateResult(saveResult.OperateResult);
2025-04-07 21:06:39 +08:00
2025-04-10 09:38:34 +08:00
var dd = saveResult . ValidationErrors . FirstOrDefault ( ) ;
if ( dd ! = null )
billView . ShowErrMessage ( dd . Message ) ;
else
{
billView . ShowErrMessage ( "不知道为什么,反正就是保存失败了!" ) ;
}
return ;
2025-04-07 21:06:39 +08:00
}
// 保存失败,显示错误信息
if ( saveResult . IsShowMessage )
{
saveResult . MergeValidateErrors ( ) ;
billView . ShowOperateResult ( saveResult . OperateResult ) ;
return ;
}
}
/// <summary>
/// 审核单据
/// </summary>
/// <param name="ctx"></param>
/// <param name="fid"></param>
/// <param name="Key"></param>
/// <returns></returns>
public static string Audit ( Context ctx , string fid , string Key )
{
//声明错误信息变量
string _Message = string . Empty ;
#region 审 核
//获取单据信息
FormMetadata meta = MetaDataServiceHelper . Load ( ctx , Key ) as FormMetadata ;
var data1 = BusinessDataServiceHelper . LoadSingle ( ctx , fid , meta . BusinessInfo . GetDynamicObjectType ( ) ) ;
object [ ] idlist = new object [ 1 ] ;
idlist [ 0 ] = fid ;
//审核
OperateOption auditOption = OperateOption . Create ( ) ;
//auditOption.SetIgnoreWarning(true);
auditOption . SetIgnoreWarning ( false ) ;
auditOption . SetIgnoreInteractionFlag ( true ) ;
auditOption . AddInteractionFlag ( "STK_InvCheckResult" ) ; // 跳过序列号校验
IOperationResult auditResult = BusinessDataServiceHelper . Audit ( ctx , meta . BusinessInfo , idlist , auditOption ) ;
//审核成功
if ( auditResult . IsSuccess = = true )
{
_Message = "审核成功!" ;
}
//审核失败
else
{
//遍历错误信息并拼接
foreach ( var item in auditResult . ValidationErrors )
{
_Message = _Message + string . Format ( "{0}\r\n" , item . Message ) ;
}
if ( auditResult . InteractionContext ! = null )
{
_Message = _Message + auditResult . InteractionContext . SimpleMessage + "\r\n" ;
}
_Message = _Message . Remove ( _Message . LastIndexOf ( "\r\n" ) , 2 ) ;
}
//返回错误信息
return _Message ;
#endregion
}
/// <summary>
/// 提交单据
/// </summary>
/// <param name="ctx"></param>
/// <param name="fid"></param>
/// <param name="Key"></param>
/// <returns></returns>
public static string Submit ( Context ctx , string fid , string Key )
{
//声明错误信息变量
string _Message = string . Empty ;
//获取单据元数据
FormMetadata meta = MetaDataServiceHelper . Load ( ctx , Key ) as FormMetadata ;
//根据单据内码获取对应单据数据包
var data1 = BusinessDataServiceHelper . LoadSingle ( ctx , fid , meta . BusinessInfo . GetDynamicObjectType ( ) ) ;
//声明单据内码集合
object [ ] idlist = new object [ 1 ] ;
//将接口的单据内码添加到集合中
idlist [ 0 ] = fid ;
//提交
OperateOption submitOption = null ;
//调用提交操作
IOperationResult subResult = BusinessDataServiceHelper . Submit ( ctx , meta . BusinessInfo , idlist , "Submit" , submitOption ) ;
//提交成功
if ( subResult . IsSuccess = = true )
{
_Message = "提交成功!" ;
}
//提交失败
else
{
//遍历错误信息并拼接
foreach ( var item in subResult . ValidationErrors )
{
_Message = _Message + string . Format ( "{0}\r\n" , item . Message ) ;
}
if ( subResult . InteractionContext ! = null )
{
_Message = _Message + subResult . InteractionContext . SimpleMessage + "\r\n" ;
}
_Message = _Message . Remove ( _Message . LastIndexOf ( "\r\n" ) , 2 ) ;
}
//返回错误信息
return _Message ;
}
/// <summary>
/// 分配
/// </summary>
/// <param name="ctx"></param>
/// <param name="fid"></param>
/// <param name="Key"></param>
/// <returns></returns>
public static string Allocate ( Context ctx , string fid , string Key , string orgId , string OrgName )
{
//声明错误信息变量
string _Message = string . Empty ;
//获取单据元数据
FormMetadata meta = MetaDataServiceHelper . Load ( ctx , Key ) as FormMetadata ;
//根据单据内码获取对应单据数据包
var data1 = BusinessDataServiceHelper . LoadSingle ( ctx , fid , meta . BusinessInfo . GetDynamicObjectType ( ) ) ;
//声明单据内码集合
object [ ] idlist = new object [ 1 ] ;
//将接口的单据内码添加到集合中
idlist [ 0 ] = fid ;
//提交
OperateOption submitOption = null ;
var allocateParameter = new Kingdee . BOS . Core . Metadata . Operation . AllocateParameter
( meta . BusinessInfo , meta . InheritPath ,
1 , BOSEnums . Enu_AllocateType . Allocate , "Allocate" ) ;
allocateParameter . PkId = new List < object > { fid } ;
allocateParameter . DestOrgId = Convert . ToInt64 ( orgId ) ;
allocateParameter . DestOrgName = OrgName ;
allocateParameter . AutoSubmitAndAudit = true ;
allocateParameter . AllocateUserId = ctx . UserId ;
//调用分配操作
IOperationResult subResult = BusinessDataServiceHelper . Allocate ( ctx , allocateParameter ) ;
//分配成功
if ( subResult . IsSuccess = = true )
{
_Message = "分配成功!" ;
}
//提交失败
else
{
//遍历错误信息并拼接
foreach ( var item in subResult . ValidationErrors )
{
_Message = _Message + string . Format ( "{0}\r\n" , item . Message ) ;
}
if ( subResult . InteractionContext ! = null )
{
_Message = _Message + subResult . InteractionContext . SimpleMessage + "\r\n" ;
}
_Message = _Message . Remove ( _Message . LastIndexOf ( "\r\n" ) , 2 ) ;
}
//返回错误信息
return _Message ;
}
/// <summary>
/// 创建核销记录单
/// </summary>
public static string CreateAutoWrireRecord ( Context ctx , string FOrgId , List < DynamicObject > DATA1 , DynamicObjectCollection DATA2 )
{
string FBILLNO ;
string FID ;
// 构建一个IBillView实例, 通过此实例, 可以方便的填写
IBillView billView = CommonHelper . CreateBillView ( ctx , "QPHY_AutoWrireRecord" ) ;
// billView.CreateNewModelData();
( ( IBillViewService ) billView ) . LoadData ( ) ;
// 触发插件的OnLoad事件:
// 组织控制基类插件, 在OnLoad事件中, 对主业务组织改变是否提示选项进行初始化。
// 如果不触发OnLoad事件, 会导致主业务组织赋值不成功
DynamicFormViewPlugInProxy eventProxy = billView . GetService < DynamicFormViewPlugInProxy > ( ) ;
eventProxy . FireOnLoad ( ) ;
CreateAutoWrireRecordData ( billView , ctx , FOrgId , DATA1 , DATA2 ) ;
OperateOption saveOption = OperateOption . Create ( ) ;
Form form = billView . BillBusinessInfo . GetForm ( ) ;
if ( form . FormIdDynamicProperty ! = null )
{
form . FormIdDynamicProperty . SetValue ( billView . Model . DataObject , form . Id ) ;
}
//保存工程项目
CommonHelper . SaveBill ( ctx , billView , saveOption , true , out FID , out FBILLNO ) ;
return FBILLNO ;
}
private static void CreateAutoWrireRecordData ( IBillView billView , Context ctx , string FOrgId , List < DynamicObject > DATA1 , DynamicObjectCollection DATA2 )
{
billView . Model . SetValue ( "FOrgId" , FOrgId , 0 ) ;
for ( int i = 0 ; i < DATA1 . Count ; i + + )
{
var Rowindex = billView . Model . GetEntryRowCount ( "FEntity" ) ;
billView . Model . CreateNewEntryRow ( "FEntity" ) ;
billView . Model . SetValue ( "FBILLNO2" , DATA1 [ i ] [ "FBILLNO3" ] , Rowindex ) ;
billView . Model . SetValue ( "FDate2" , DATA1 [ i ] [ "FDate3" ] , Rowindex ) ;
billView . Model . SetValue ( "FALLAMOUNT2" , DATA1 [ i ] [ "FALLAMOUNT3" ] , Rowindex ) ;
billView . Model . SetValue ( "FCONTRACTNUMBER" , DATA1 [ i ] [ "FCONTRACTNUMBER3" ] , Rowindex ) ;
billView . Model . SetValue ( "FClient" , DATA1 [ i ] [ "FClient3" ] , Rowindex ) ;
billView . Model . SetValue ( "FProject" , DATA1 [ i ] [ "FProject3" ] , Rowindex ) ;
billView . Model . SetValue ( "FCreated" , DATA1 [ i ] [ "FCreated3" ] , Rowindex ) ;
billView . Model . SetValue ( "FAmountY" , DATA1 [ i ] [ "FAmountY3" ] , Rowindex ) ;
billView . Model . SetValue ( "FCurr" , DATA1 [ i ] [ "FCurr3" ] , Rowindex ) ;
}
for ( int i = 0 ; i < DATA2 . Count ; i + + )
{
var Rowindex = billView . Model . GetEntryRowCount ( "FEntity2" ) ;
billView . Model . CreateNewEntryRow ( "FEntity2" ) ;
billView . Model . SetValue ( "FBILLNO3" , DATA2 [ i ] [ "FBILLNO4" ] , Rowindex ) ;
billView . Model . SetValue ( "FDate3" , DATA2 [ i ] [ "FDate4" ] , Rowindex ) ;
billView . Model . SetValue ( "FALLAMOUNT3" , DATA2 [ i ] [ "FALLAMOUNT4" ] , Rowindex ) ;
billView . Model . SetValue ( "FClient2" , DATA2 [ i ] [ "FClient4" ] , Rowindex ) ;
billView . Model . SetValue ( "FRemark" , DATA2 [ i ] [ "FRemark4" ] , Rowindex ) ;
billView . Model . SetValue ( "FCurr2" , DATA2 [ i ] [ "FCurr4" ] , Rowindex ) ;
billView . Model . SetValue ( "FAmountY2" , DATA2 [ i ] [ "FAmountY4" ] , Rowindex ) ;
}
}
/// <summary>
/// 创建核销记录单(收款单为主)
/// </summary>
public static string CreateAutoWrireRecord2 ( Context ctx , string FOrgId , List < CombinaAddClass1 > DATA1 , CombinaAddSK DATA2 )
{
string FBILLNO ;
string FID ;
// 构建一个IBillView实例, 通过此实例, 可以方便的填写
IBillView billView = CommonHelper . CreateBillView ( ctx , "QPHY_AutoWrireRecord" ) ;
// billView.CreateNewModelData();
( ( IBillViewService ) billView ) . LoadData ( ) ;
// 触发插件的OnLoad事件:
// 组织控制基类插件, 在OnLoad事件中, 对主业务组织改变是否提示选项进行初始化。
// 如果不触发OnLoad事件, 会导致主业务组织赋值不成功
DynamicFormViewPlugInProxy eventProxy = billView . GetService < DynamicFormViewPlugInProxy > ( ) ;
eventProxy . FireOnLoad ( ) ;
CreateAutoWrireRecordData2 ( billView , ctx , FOrgId , DATA1 , DATA2 ) ;
OperateOption saveOption = OperateOption . Create ( ) ;
Form form = billView . BillBusinessInfo . GetForm ( ) ;
if ( form . FormIdDynamicProperty ! = null )
{
form . FormIdDynamicProperty . SetValue ( billView . Model . DataObject , form . Id ) ;
}
//保存工程项目
CommonHelper . SaveBill ( ctx , billView , saveOption , true , out FID , out FBILLNO ) ;
return FBILLNO ;
}
private static void CreateAutoWrireRecordData2 ( IBillView billView , Context ctx , string FOrgId , List < CombinaAddClass1 > DATA1 , CombinaAddSK DATA2 )
{
billView . Model . SetValue ( "FOrgId" , FOrgId , 0 ) ;
decimal amount = DATA2 . FALLAMOUNT ;
for ( int i = 0 ; i < DATA1 . Count ; i + + )
{
decimal amount2 = 0 ;
//考虑到手动核销金额不一定相等的情况
if ( amount = = DATA1 [ 0 ] . FALLAMOUNT )
{
amount2 = DATA2 . FALLAMOUNT ;
}
else if ( amount > DATA1 [ 0 ] . FALLAMOUNT )
{
amount2 = DATA1 [ i ] . FALLAMOUNT ;
}
else if ( amount - DATA1 [ i ] . FALLAMOUNT > 0 )
{
amount2 = DATA1 [ i ] . FALLAMOUNT ;
amount - = DATA1 [ i ] . FALLAMOUNT ;
}
else
{
amount2 = amount ;
}
var Rowindex = billView . Model . GetEntryRowCount ( "FEntity" ) ;
billView . Model . CreateNewEntryRow ( "FEntity" ) ;
billView . Model . SetValue ( "FBILLNO2" , DATA1 [ i ] . FBIllNO , Rowindex ) ;
billView . Model . SetValue ( "FDate2" , DATA1 [ i ] . FDate , Rowindex ) ;
billView . Model . SetValue ( "FALLAMOUNT2" , amount2 , Rowindex ) ;
billView . Model . SetValue ( "FCONTRACTNUMBER" , DATA1 [ i ] . FCONTRACTNUMBER , Rowindex ) ;
billView . Model . SetValue ( "FClient" , DATA1 [ i ] . FClient , Rowindex ) ;
billView . Model . SetValue ( "FCreated" , DATA1 [ i ] . FCreated , Rowindex ) ;
billView . Model . SetValue ( "FSalesman" , DATA1 [ i ] . FSalesman , Rowindex ) ;
//billView.Model.SetValue("FProject", DATA1[i]["FProject3"], Rowindex);
//billView.Model.SetValue("FCreated", DATA1[i]["FCreated3"], Rowindex);
//billView.Model.SetValue("FAmountY", DATA1[i]["FAmountY3"], Rowindex);
//billView.Model.SetValue("FCurr", DATA1[i]["FCurr3"], Rowindex);
}
//考虑到手动核销金额不一定相等的情况
decimal amount1 = Convert . ToDecimal ( DATA1 . Sum ( a = > a . FALLAMOUNT ) ) ;
if ( DATA2 . FALLAMOUNT < amount1 )
{
amount1 = DATA2 . FALLAMOUNT ;
}
var Rowindex2 = billView . Model . GetEntryRowCount ( "FEntity2" ) ;
billView . Model . CreateNewEntryRow ( "FEntity2" ) ;
billView . Model . SetValue ( "FBILLNO3" , DATA2 . FBIllNO , Rowindex2 ) ;
billView . Model . SetValue ( "FDate3" , DATA2 . FDate , Rowindex2 ) ;
billView . Model . SetValue ( "FALLAMOUNT3" , amount1 , Rowindex2 ) ;
billView . Model . SetValue ( "FClient2" , DATA2 . FClient , Rowindex2 ) ;
billView . Model . SetValue ( "FRemark" , DATA2 . FRemark , Rowindex2 ) ;
billView . Model . SetValue ( "FCreated2" , DATA2 . FCreated , Rowindex2 ) ;
billView . Model . SetValue ( "FSalesman2" , DATA2 . FSalesman , Rowindex2 ) ;
billView . Model . SetValue ( "FCONTRACTNUMBER2" , DATA2 . FCONTRACTNUMBER , Rowindex2 ) ;
//billView.Model.SetValue("FCurr2", DATA2[i]["FCurr4"], Rowindex);
//billView.Model.SetValue("FAmountY2", DATA2[i]["FAmountY4"], Rowindex);
}
/// <summary>
/// 创建核销记录单(销售订单/应收单为主)
/// </summary>
public static string CreateAutoWrireRecord3 ( Context ctx , string FOrgId , CombinaAddClass1 DATA1 , List < CombinaAddSK > DATA2 )
{
string FBILLNO ;
string FID ;
// 构建一个IBillView实例, 通过此实例, 可以方便的填写
IBillView billView = CommonHelper . CreateBillView ( ctx , "QPHY_AutoWrireRecord" ) ;
// billView.CreateNewModelData();
( ( IBillViewService ) billView ) . LoadData ( ) ;
// 触发插件的OnLoad事件:
// 组织控制基类插件, 在OnLoad事件中, 对主业务组织改变是否提示选项进行初始化。
// 如果不触发OnLoad事件, 会导致主业务组织赋值不成功
DynamicFormViewPlugInProxy eventProxy = billView . GetService < DynamicFormViewPlugInProxy > ( ) ;
eventProxy . FireOnLoad ( ) ;
CreateAutoWrireRecordData3 ( billView , ctx , FOrgId , DATA1 , DATA2 ) ;
OperateOption saveOption = OperateOption . Create ( ) ;
Form form = billView . BillBusinessInfo . GetForm ( ) ;
if ( form . FormIdDynamicProperty ! = null )
{
form . FormIdDynamicProperty . SetValue ( billView . Model . DataObject , form . Id ) ;
}
//保存工程项目
CommonHelper . SaveBill ( ctx , billView , saveOption , true , out FID , out FBILLNO ) ;
return FBILLNO ;
}
private static void CreateAutoWrireRecordData3 ( IBillView billView , Context ctx , string FOrgId , CombinaAddClass1 DATA1 , List < CombinaAddSK > DATA2 )
{
billView . Model . SetValue ( "FOrgId" , FOrgId , 0 ) ;
var Rowindex = billView . Model . GetEntryRowCount ( "FEntity" ) ;
billView . Model . CreateNewEntryRow ( "FEntity" ) ;
billView . Model . SetValue ( "FBILLNO2" , DATA1 . FBIllNO , Rowindex ) ;
billView . Model . SetValue ( "FDate2" , DATA1 . FDate , Rowindex ) ;
billView . Model . SetValue ( "FALLAMOUNT2" , DATA1 . FALLAMOUNT , Rowindex ) ;
billView . Model . SetValue ( "FCONTRACTNUMBER" , DATA1 . FCONTRACTNUMBER , Rowindex ) ;
billView . Model . SetValue ( "FClient" , DATA1 . FClient , Rowindex ) ;
billView . Model . SetValue ( "FCreated" , DATA1 . FCreated , Rowindex ) ;
billView . Model . SetValue ( "FSalesman" , DATA1 . FSalesman , Rowindex ) ;
//billView.Model.SetValue("FProject", DATA1[i]["FProject3"], Rowindex);
//billView.Model.SetValue("FCreated", DATA1[i]["FCreated3"], Rowindex);
//billView.Model.SetValue("FAmountY", DATA1[i]["FAmountY3"], Rowindex);
//billView.Model.SetValue("FCurr", DATA1[i]["FCurr3"], Rowindex);
for ( int i = 0 ; i < DATA2 . Count ; i + + )
{
var Rowindex2 = billView . Model . GetEntryRowCount ( "FEntity2" ) ;
billView . Model . CreateNewEntryRow ( "FEntity2" ) ;
billView . Model . SetValue ( "FBILLNO3" , DATA2 [ i ] . FBIllNO , Rowindex2 ) ;
billView . Model . SetValue ( "FDate3" , DATA2 [ i ] . FDate , Rowindex2 ) ;
billView . Model . SetValue ( "FALLAMOUNT3" , DATA2 [ i ] . FALLAMOUNT , Rowindex2 ) ;
billView . Model . SetValue ( "FClient2" , DATA2 [ i ] . FClient , Rowindex2 ) ;
billView . Model . SetValue ( "FCONTRACTNUMBER2" , DATA2 [ i ] . FCONTRACTNUMBER , Rowindex2 ) ;
billView . Model . SetValue ( "FRemark" , DATA2 [ i ] . FRemark , Rowindex2 ) ;
billView . Model . SetValue ( "FCreated2" , DATA2 [ i ] . FCreated , Rowindex2 ) ;
billView . Model . SetValue ( "FSalesman2" , DATA2 [ i ] . FSalesman , Rowindex2 ) ;
//billView.Model.SetValue("FCurr2", DATA2[i]["FCurr4"], Rowindex);
//billView.Model.SetValue("FAmountY2", DATA2[i]["FAmountY4"], Rowindex);
}
}
/// <summary>
/// 数字小写转大写
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static string ConvertToChineseUppercase ( int number )
{
// 定义一个字典来存储数字到大写汉字的映射
Dictionary < int , string > numberToChineseMap = new Dictionary < int , string >
{
{ 0 , "零" } ,
{ 1 , "一" } ,
{ 2 , "二" } ,
{ 3 , "三" } ,
{ 4 , "四" } ,
{ 5 , "五" } ,
{ 6 , "六" } ,
{ 7 , "七" } ,
{ 8 , "八" } ,
{ 9 , "九" }
} ;
// 检查字典中是否包含该数字
if ( numberToChineseMap . ContainsKey ( number ) )
{
return numberToChineseMap [ number ] ;
}
else
{
// 处理超出范围的情况,可以抛出异常或者返回默认值
throw new ArgumentException ( "数字超出范围" ) ;
}
}
}
}