2025-04-10 09:38:34 +08:00

1492 lines
74 KiB
C#
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
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;
}
else if (saveResult.InteractionContext != null
&& saveResult.InteractionContext.Option.GetInteractionFlag().Count > 0)
{// 保存失败,需要用户确认问题
//billView.ShowErrMessage(saveResult.InteractionContext.SimpleMessage);
//saveResult.MergeValidateErrors();
//billView.ShowOperateResult(saveResult.OperateResult);
var dd = saveResult.ValidationErrors.FirstOrDefault();
if (dd != null)
billView.ShowErrMessage(dd.Message);
else
{
billView.ShowErrMessage("不知道为什么,反正就是保存失败了!");
}
return;
}
// 保存失败,显示错误信息
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("数字超出范围");
}
}
}
}