1492 lines
74 KiB
C#
Raw Normal View History

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("数字超出范围");
}
}
}
}