You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

356 lines
14 KiB
C#

1 month ago
using AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models;
using DS.Module.SqlSugar;
using DS.WMS.Core.Fee.Entity;
using DS.WMS.Core.Invoice.Dtos;
using DS.WMS.Core.Sys.Interface;
using Microsoft.Extensions.DependencyInjection;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tea;
namespace DS.WMS.Core.Fee.Method
{
public class DingDing
{
/// <summary>
/// 获取token
/// </summary>
public static string GetDingToken(string Key, string Secret)
{
AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client client = CreateClient1();
AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetAccessTokenRequest getAccessTokenRequest = new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetAccessTokenRequest
{
AppKey = Key, //"dingplilbecwnldzcdwc",
AppSecret = Secret //"V1jtywZwJNtcTw9PfY5am2nsqacgserqNVOx-_yHsv-5YIypKKG2R0Qm19lpnHCj",
};
try
{
var p = client.GetAccessToken(getAccessTokenRequest);
return p.Body.AccessToken;
}
catch (TeaException err)
{
if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message))
{
// err 中含有 code 和 message 属性,可帮助开发定位问题
}
}
catch (Exception _err)
{
TeaException err = new TeaException(new Dictionary<string, object>
{
{ "message", _err.Message }
});
if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message))
{
// err 中含有 code 和 message 属性,可帮助开发定位问题
}
}
return "";
}
/// <summary>
/// 更新表单
/// </summary>
/// <param name="token">钉钉token</param>
/// <param name="ProcessCode">审批模板Id</param>
/// <param name="TenantId">租户Id</param>
public static void UpDingOAForm(string token, string ProcessCode, List<InInvoice> inInvoicesData)
{
AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client client = CreateClient();
FormCreateHeaders formCreateHeaders = new FormCreateHeaders();
formCreateHeaders.XAcsDingtalkAccessToken = token;
#region 费用类别
FormComponent fylx = new FormComponent
{
ComponentType = "DDSelectField",
Props = new FormComponentProps
{
ComponentId = "DDSelectField-fylx", // 控件id表单内唯一与bizAlias二选一
Required = true, // 控件是否必填
Label = "费用类别", // 控件标题
Placeholder = "请选择", // 输入提示
Print = "1",//是否参与打印
Disabled = false, //是否可编辑
Options = new List<SelectOption> {
new SelectOption{Value = "项目费用",Key = "1"},
new SelectOption { Value = "部门费用", Key = "2" },
new SelectOption { Value = "差旅费用", Key = "3" },
new SelectOption { Value = "其他", Key = "4" }
}
}
};
#endregion
#region 项目名称
FormComponent xmmc = new FormComponent
{
ComponentType = "TextField",
Props = new FormComponentProps
{
ComponentId = "TextField-abcd", // 控件id表单内唯一与bizAlias二选一
Required = true, // 控件是否必填
Label = "项目名称", // 控件标题
Placeholder = "请输入",// 输入提示
Print = "1",//是否参与打印
Disabled = false, //是否可编辑
}
};
#endregion
#region 费用明细
var taxinfo = inInvoicesData;
List<SelectOption> selectOptions = new List<SelectOption>();
foreach (var item in taxinfo)
{
SelectOption st = new SelectOption();
st.Value = ($"金额:{item.Amount};销方名称:{item.SellerName};发票号码:{item.InvoiceNumber}");
st.Key = item.InvoiceNumber;
selectOptions.Add(st);
}
FormComponent fymx = new FormComponent
{
ComponentType = "DDSelectField",
Props = new FormComponentProps
{
ComponentId = "DDSelectField-fymx", // 控件id表单内唯一与bizAlias二选一
Required = false, // 控件是否必填
Label = "费用明细", // 控件标题
Placeholder = "请选择", // 输入提示
Print = "1",//是否参与打印
Disabled = false, //是否可编辑
Options = selectOptions
}
};
#endregion
#region 金额
FormComponent xmmcA = new FormComponent
{
ComponentType = "MoneyField",
Props = new FormComponentProps
{
ComponentId = "MoneyField_1JZJIQ", // 控件id表单内唯一与bizAlias二选一
Required = true, // 控件是否必填
Label = "金额(元)", // 控件标题
Placeholder = "请输入金额",// 输入提示
Print = "1",//是否参与打印
Disabled = false, //是否可编辑
}
};
#endregion
#region 收款账户
FormComponent skzh = new FormComponent
{
ComponentType = "RecipientAccountField",
Props = new FormComponentProps
{
ComponentId = "RecipientAccountField_7KZ7T", // 控件id表单内唯一与bizAlias二选一
Required = true, // 控件是否必填
Label = "收款账户", // 控件标题
Placeholder = "请选择",// 输入提示
Disabled = false,
}
};
#endregion
#region 关联审批单
FormComponent glspd = new FormComponent
{
ComponentType = "RelateField",
Props = new FormComponentProps
{
ComponentId = "RelateField_7KZ7T", // 控件id表单内唯一与bizAlias二选一
Required = false, // 控件是否必填
Label = "关联审批单", // 控件标题
Placeholder = "请选择",// 输入提示
Disabled = false,
}
};
#endregion
FormCreateRequest formCreateRequest = new FormCreateRequest
{
ProcessCode = ProcessCode,// "PROC-528BFFFF-00D1-4AF0-AB5F-7BFB89787994",
Name = "测试费用报销(电子发票)",
Description = "测试费用报销使用",
FormComponents = new List<FormComponent>
{
fylx,//费用类别
xmmc,//项目名称
fymx,//费用明细
xmmcA,//金额
skzh,//收款账户
glspd //关联审批单
},
};
try
{
client.FormCreateWithOptions(formCreateRequest, formCreateHeaders, new AlibabaCloud.TeaUtil.Models.RuntimeOptions());
}
catch (TeaException err)
{
if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message))
{
// err 中含有 code 和 message 属性,可帮助开发定位问题
}
}
catch (Exception _err)
{
TeaException err = new TeaException(new Dictionary<string, object>
{
{ "message", _err.Message }
});
if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message))
{
// err 中含有 code 和 message 属性,可帮助开发定位问题
}
}
}
/**
* 使 Token Client
* @return Client
* @throws Exception
*/
public static AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client CreateClient1()
{
AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config();
config.Protocol = "https";
config.RegionId = "central";
return new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client(config);
}
public static AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client CreateClient()
{
AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config();
config.Protocol = "https";
config.RegionId = "central";
return new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client(config);
}
/// <summary>
/// 获取审批实例详情
/// </summary>
/// <param name="ProcessInstanceId">审批实例Id</param>
/// <param name="Token">钉钉token</param>
/// <returns></returns>
public static GetProcessInstanceResponse GetProcessInstanceWithOptions(string ProcessInstanceId, string Token)
{
AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client client = CreateClient();
AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.GetProcessInstanceHeaders getProcessInstanceHeaders = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.GetProcessInstanceHeaders();
getProcessInstanceHeaders.XAcsDingtalkAccessToken = Token;
AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.GetProcessInstanceRequest getProcessInstanceRequest = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.GetProcessInstanceRequest
{
ProcessInstanceId = ProcessInstanceId,
};
try
{
return client.GetProcessInstanceWithOptions(getProcessInstanceRequest, getProcessInstanceHeaders, new AlibabaCloud.TeaUtil.Models.RuntimeOptions());
}
catch (TeaException err)
{
if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message))
{
// err 中含有 code 和 message 属性,可帮助开发定位问题
}
}
catch (Exception _err)
{
TeaException err = new TeaException(new Dictionary<string, object>
{
{ "message", _err.Message }
});
if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message))
{
// err 中含有 code 和 message 属性,可帮助开发定位问题
}
}
return new GetProcessInstanceResponse();
}
/// <summary>
/// 获取钉钉报销审批列表
/// </summary>
/// <param name="token">钉钉token</param>
/// <param name="ProcessCode">钉钉模板Id</param>
/// <param name="StartTime">开始时间</param>
/// <param name="EndTime">结束时间</param>
/// <param name="Data">获取到的数据集</param>
/// <param name="NextToken">分页游标</param>
/// <returns></returns>
public static List<string> GetProcessList(string token, string ProcessCode, long StartTime, long EndTime, List<string> Data, int NextToken = 0)
{
AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client client = CreateClient();
ListProcessInstanceIdsHeaders listProcessInstanceIdsHeaders = new ListProcessInstanceIdsHeaders();
listProcessInstanceIdsHeaders.XAcsDingtalkAccessToken = token;
ListProcessInstanceIdsRequest listProcessInstanceIdsRequest = new ListProcessInstanceIdsRequest
{
ProcessCode = ProcessCode,
StartTime = StartTime,
EndTime = EndTime,
NextToken = NextToken,
MaxResults = 20
};
try
{
var data = client.ListProcessInstanceIdsWithOptions(listProcessInstanceIdsRequest, listProcessInstanceIdsHeaders, new AlibabaCloud.TeaUtil.Models.RuntimeOptions());
foreach (var item in data.Body.Result.List)
{
Data.Add(item);
}
if (data.Body.Result.NextToken != null)
{
GetProcessList(token, ProcessCode, StartTime, EndTime, Data, Convert.ToInt32(data.Body.Result.NextToken));
}
return Data;
}
catch (TeaException err)
{
if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message))
{
// err 中含有 code 和 message 属性,可帮助开发定位问题
}
}
catch (Exception _err)
{
TeaException err = new TeaException(new Dictionary<string, object>
{
{ "message", _err.Message }
});
if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message))
{
// err 中含有 code 和 message 属性,可帮助开发定位问题
}
}
return new List<string>();
}
}
}