VistarStarDataIntegration/admin.net.pro/Admin.NET/Vistar.Application/Service/OaOpenInterface/OaOpenInterfaceService.cs

552 lines
24 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

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.

// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using Admin.NET.Core;
using AngleSharp.Io;
using COSXML.Network;
using DocumentFormat.OpenXml.Drawing.Charts;
using DocumentFormat.OpenXml.Spreadsheet;
using DocumentFormat.OpenXml.Vml;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using NewLife.Xml;
using Newtonsoft.Json;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Vistar.Application.Const;
using Vistar.Application.Entity;
using Vistar.Application.Service.OaOpenInterface.Dto;
using Vistar.Application.SolidWorksManageService.Dto;
using Field = Vistar.Application.SolidWorksManageService.Dto.Field;
using HttpClient = System.Net.Http.HttpClient;
namespace Vistar.Application.Service.OaOpenInterface;
/// <summary>
/// 开放接口给OA
/// </summary>
[ApiDescriptionSettings(ApplicationConst.GroupName, Name = "OaOpenInterfaceService", Order = 100)]
public class OaOpenInterfaceService : IDynamicApiController, ITransient
{
public SqlSugarRepository<Obj109> _obj109Rep;
public SqlSugarRepository<Obj140> _obj140Rep;
public SolidWorksManageService.SolidWorksManageService _solidWorksManageService;
public SqlSugarRepository<ObjectFieldsGroups> _objectFieldsGroupsRep;
public SqlSugarRepository<FieldGroupDefault> _fieldGroupDefaultRep;
public SqlSugarRepository<Obj81> _obj81Rep;
public SqlSugarRepository<Obj118> _obj118Rep;
private readonly IServiceScopeFactory _scopeFactory;
public OaOpenInterfaceService(
SqlSugarRepository<Obj109> obj109Rep,
SqlSugarRepository<Obj140> obj140Rep,
SqlSugarRepository<Obj81> obj81Rep,
SolidWorksManageService.SolidWorksManageService solidWorksManageService,
SqlSugarRepository<ObjectFieldsGroups> objectFieldsGroupsRep,
SqlSugarRepository<FieldGroupDefault> fieldGroupDefaultRep,
SqlSugarRepository<Obj118> obj118Rep,
IServiceScopeFactory scopeFactory
)
{
_obj109Rep = obj109Rep;
_obj140Rep = obj140Rep;
_solidWorksManageService = solidWorksManageService;
_objectFieldsGroupsRep = objectFieldsGroupsRep;
_fieldGroupDefaultRep = fieldGroupDefaultRep;
_obj81Rep= obj81Rep;
_obj118Rep= obj118Rep;
_scopeFactory = scopeFactory;
}
/// <summary>
/// OA创建、修改项目
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme + "," + SignatureAuthenticationDefaults.AuthenticationScheme)]
[ApiDescriptionSettings(Name = "OaCreateProject"), HttpPost]
[DisplayName("OA创建、修改项目")]
public async Task<ManageResponse> OaCreateProject(OaCreateProjectInput input)
{
var response = new ManageResponse();
if (string.IsNullOrWhiteSpace(input._System_objNBS) || string.IsNullOrWhiteSpace(input._System_objDescription))
{
response.Success = true;
response.Message = "请输入必填字段";
return response;
}
if (input._System_objDescription.Length > 40)
{
response.Success = true;
response.Message = "项目名称不能超过40字符";
return response;
}
//判断是否存在项目记录
var clientExists = await _obj109Rep.AsQueryable().AnyAsync(x => x._System_objNBS == input._System_objNBS && x.deleted == false);
if (clientExists == false)
{
var fieldList = new List<Field>();
if (input.fld004503 != null)
{
fieldList.Add(new Field { key = "fld004503", value = input.fld004503.ToString() });
}
if (input.fld004503 != null)
{
fieldList.Add(new Field { key = "fld004504", value = input.fld004504.ToString() });
}
fieldList.Add(new Field { key = "fld004684", value = input.fld004684 });
fieldList.Add(new Field { key = "_System_objNBS", value = input._System_objNBS });
fieldList.Add(new Field { key = "_System_objDescription", value = input._System_objDescription });
fieldList.Add(new Field { key = "fld004728", value = input.fld004728 });
fieldList.Add(new Field { key = "fld005299", value = input.fld005299 });
fieldList.Add(new Field { key = "fld005300", value = input.fld005300 });
fieldList.Add(new Field { key = "fld005281", value = "SET" });
fieldList.Add(new Field { key = "fld004521", value = "M" });
fieldList.Add(new Field { key = "fld004519", value = "FERT" });
fieldList.Add(new Field { key = "fld004522", value = "1000" });
fieldList.Add(new Field { key = "fld004928", value = "E" });
fieldList.Add(new Field { key = "fld004935", value = "X" });
fieldList.Add(new Field { key = "fld004510", value = "A" });
fieldList.Add(new Field { key = "fld004514", value = "A" });
fieldList.Add(new Field { key = "fld004517", value = "A" });
fieldList.Add(new Field { key = "fld005753", value = "OA" });
var fieldGroupValue = await _fieldGroupDefaultRep.AsQueryable().Where(x => x.GroupObjid == input.object_id).ToListAsync();
for (int i = 0; i < fieldGroupValue.Count; i++)
{
fieldList.Add(new Field { key = "fld00" + fieldGroupValue[i].ColumnId, value = fieldGroupValue[i].DefaultValue });
}
var fieldGroup = await _objectFieldsGroupsRep.AsQueryable().Where(x => x.GroupName == input.field_group).FirstAsync();
var data = new CreateProjectInput
{
object_id = input.object_id,
field_group_id = fieldGroup.GroupObjId,
fields = fieldList
};
response = await _solidWorksManageService.CreateProject(data);
var projectData = await _obj109Rep.AsQueryable().Where(x => x._System_objNBS == input._System_objNBS).FirstAsync();
var CheckData = new CheckDataInput()
{
object_id = input.object_id,
record_guid = projectData.RecordGuid,
bom_level = 1
};
await _solidWorksManageService.CheckOut(CheckData);
await _solidWorksManageService.CheckIn(CheckData);
}
else if (clientExists == true)
{
var updateable = await _obj109Rep.AsUpdateable()
.SetColumns(it => new Obj109
{
fld004684 = input.fld004684,
_System_ObjDescription = input._System_objDescription,
fld004728 = input.fld004728,
fld005299 = input.fld005299,
fld005300 = input.fld005300,
fld004503 = input.fld004503,
fld004504 = input.fld004504
})
.Where(x => x._System_objNBS == input._System_objNBS && x.deleted == false)
.ExecuteCommandHasChangeAsync();
response.Success = true;
response.Message = updateable ? "修改成功" : "修改失败";
}
return response;
}
/// <summary>
/// OA创建问题报告
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme + "," + SignatureAuthenticationDefaults.AuthenticationScheme)]
[ApiDescriptionSettings(Name = "OaCreateProcess"), HttpPost]
[DisplayName("OA创建流程")]
public async Task<ManageResponse> OaCreateProcess(OaCreateProcessInput input)
{
var response = new ManageResponse();
if (
string.IsNullOrWhiteSpace(input._System_objNBS) ||
string.IsNullOrWhiteSpace(input._System_objDescription) ||
string.IsNullOrWhiteSpace(input.fld005831) ||
string.IsNullOrWhiteSpace(input.fld005832) ||
string.IsNullOrWhiteSpace(input.fld005833) ||
string.IsNullOrWhiteSpace(input.fld005836) ||
string.IsNullOrWhiteSpace(input.fld005842) ||
string.IsNullOrWhiteSpace(input.fld005847) ||
input.fld005849 == default(DateTime) ||
//string.IsNullOrWhiteSpace(input.fld005849.ToString("yyyy-MM-dd HH:mm:ss")) ||
string.IsNullOrWhiteSpace(input.fld005850) ||
input.fld005852 == default(DateTime) ||
//string.IsNullOrWhiteSpace(input.fld005852.ToString("yyyy-MM-dd HH:mm:ss")) ||
string.IsNullOrWhiteSpace(input.fld005853)
)
{
response.Success = true;
response.Message = "请输入必填字段";
return response;
}
//判断是否存在项目记录
var clientExists = await _obj140Rep.AsQueryable().AnyAsync(x => x._System_objNBS == input._System_objNBS && x.deleted == false);
if (clientExists == false)
{
var fieldList = new List<Field>();
fieldList.Add(new Field { key = "_System_objNBS", value = input._System_objNBS });
fieldList.Add(new Field { key = "_System_objDescription", value = input._System_objDescription });
fieldList.Add(new Field { key = "fld005831", value = input.fld005831 });
fieldList.Add(new Field { key = "fld005832", value = input.fld005832 });
fieldList.Add(new Field { key = "fld005833", value = input.fld005833 });
fieldList.Add(new Field { key = "fld005836", value = input.fld005836 });
fieldList.Add(new Field { key = "fld005842", value = input.fld005842 });
fieldList.Add(new Field { key = "fld005847", value = input.fld005847 });
fieldList.Add(new Field { key = "fld005849", value = input.fld005849.ToString("yyyy-MM-dd HH:mm:ss") });
fieldList.Add(new Field { key = "fld005850", value = input.fld005850 });
fieldList.Add(new Field { key = "fld005852", value = input.fld005852.ToString("yyyy-MM-dd HH:mm:ss") });
fieldList.Add(new Field { key = "fld005853", value = input.fld005853 });
fieldList.Add(new Field { key = "fld005855", value = "OA" });
fieldList.Add(new Field { key = "fld007040", value = input.fld007040 });
if (!string.IsNullOrWhiteSpace(input.fld005838))
{
fieldList.Add(new Field { key = "fld005838", value = input.fld005838 });
}
if (!string.IsNullOrWhiteSpace(input.fld005841))
{
fieldList.Add(new Field { key = "fld005841", value = input.fld005841 });
}
if (!string.IsNullOrWhiteSpace(input.fld005843))
{
fieldList.Add(new Field { key = "fld005843", value = input.fld005843 });
}
if (!string.IsNullOrWhiteSpace(input.fld005846))
{
fieldList.Add(new Field { key = "fld005846", value = input.fld005846 });
}
if (!string.IsNullOrWhiteSpace(input.fld005844))
{
fieldList.Add(new Field { key = "fld005844", value = input.fld005844 });
}
if (!string.IsNullOrWhiteSpace(input.fld005845))
{
fieldList.Add(new Field { key = "fld005845", value = input.fld005845 });
}
if (!string.IsNullOrWhiteSpace(input.fld006061))
{
fieldList.Add(new Field { key = "fld006061", value = input.fld006061 });
}
if (!string.IsNullOrWhiteSpace(input.fld006062))
{
fieldList.Add(new Field { key = "fld006062", value = input.fld006062 });
}
if (!string.IsNullOrWhiteSpace(input.fld005854))
{
fieldList.Add(new Field { key = "fld005854", value = input.fld005854 });
}
var fieldGroup = await _objectFieldsGroupsRep.AsQueryable().Where(x => x.GroupName == input.field_group && x.ObjectId == 140).FirstAsync();
var data = new CreateProjectInput
{
object_id = input.object_id,
field_group_id = fieldGroup.GroupObjId,
fields = fieldList
};
response = await _solidWorksManageService.CreateProcess(data);
if (response.Success== true && response.Message== "记录 已成功保存!")
{
var projectData = await _obj140Rep.AsQueryable().Where(x => x._System_objNBS == input._System_objNBS && x.deleted == false).OrderByDescending(x=>x.VersionIndex).FirstAsync();
long? fld005835 = null;
string fld005835_Rec = "";
var responsiblePersonOaData = await _obj81Rep.AsQueryable().Where(x => x.fld004900 == input.fld005836 && x.deleted == false).ToListAsync();
if (responsiblePersonOaData.Count != 0)
{
fld005835 = 81;
fld005835_Rec = responsiblePersonOaData[0].RecordGuid;
}
long? fld007039 = null;
string fld007039_Rec = "";
if (!string.IsNullOrEmpty(input.fld007040))
{
var responsiblePersonData = await _obj81Rep.AsQueryable().Where(x => x.fld004900 == input.fld007040 && x.deleted == false).ToListAsync();
if (responsiblePersonData.Count != 0)
{
fld007039 = 81;
fld007039_Rec = responsiblePersonData[0].RecordGuid;
}
}
long? fld005848 = null;
string fld005848_Rec = "";
var createPersonOaData = await _obj81Rep.AsQueryable().Where(x => x.fld004900 == input.fld005847 && x.deleted == false).ToListAsync();
if (createPersonOaData.Count != 0)
{
fld005848 = 81;
fld005848_Rec= createPersonOaData[0].RecordGuid;
}
long? fld005851 = null;
string fld005851_Rec = "";
var reviewerOaData = await _obj81Rep.AsQueryable().Where(x => x.fld004900 == input.fld005850 && x.deleted == false).ToListAsync();
if (reviewerOaData.Count != 0)
{
fld005851 = 81;
fld005851_Rec= reviewerOaData[0].RecordGuid;
}
long? fld005837 = null;
string fld005837_Rec = "";
if (!string.IsNullOrWhiteSpace(input.fld005838))
{
var mechanicalProblemHandlerOaId = await _obj81Rep.AsQueryable().Where(x => x.fld004900 == input.fld005838 && x.deleted == false).ToListAsync();
if (mechanicalProblemHandlerOaId.Count != 0)
{
fld005837 = 81;
fld005837_Rec= mechanicalProblemHandlerOaId[0].RecordGuid;
}
}
long? fld006063 = null;
string fld006063_Rec = "";
if (!string.IsNullOrWhiteSpace(input.fld006061))
{
var electricalProblemHandlerOaData = await _obj81Rep.AsQueryable().Where(x => x.fld004900 == input.fld006061 && x.deleted == false).ToListAsync();
if (electricalProblemHandlerOaData.Count != 0)
{
fld006063 = 81;
fld006063_Rec = electricalProblemHandlerOaData[0].RecordGuid;
}
}
long? fld006064 = null;
string fld006064_Rec = "";
if (!string.IsNullOrWhiteSpace(input.fld006062))
{
var softwareProblemHandlerOaData = await _obj81Rep.AsQueryable().Where(x => x.fld004900 == input.fld006062 && x.deleted == false).ToListAsync();
if (softwareProblemHandlerOaData.Count != 0)
{
fld006064 = 81;
fld006064_Rec = softwareProblemHandlerOaData[0].RecordGuid;
}
}
await _obj140Rep.AsUpdateable()
.SetColumns(it => new Obj140
{
fld005835 = fld005835,
fld005835_Rec= fld005835_Rec,
fld007039 = fld007039,
fld007039_Rec = fld007039_Rec,
fld005848 = fld005848,
fld005848_Rec = fld005848_Rec,
fld005851 = fld005851,
fld005851_Rec = fld005851_Rec,
fld005837 = fld005837,
fld005837_Rec = fld005837_Rec,
fld006063 = fld006063,
fld006063_Rec = fld006063_Rec,
fld006064 = fld006064,
fld006064_Rec = fld006064_Rec
})
.Where(it => it.idRecord == projectData.idRecord)
.ExecuteCommandAsync();
var CheckData = new CheckDataInput()
{
object_id = input.object_id,
record_guid = projectData.RecordGuid,
bom_level = 1
};
await _solidWorksManageService.CheckIn(CheckData);
}
}
else
{
response.Success = true;
response.Message = "编码已存在";
}
return response;
}
/// <summary>
/// OA创建问题报告文件
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme + "," + SignatureAuthenticationDefaults.AuthenticationScheme)]
[ApiDescriptionSettings(Name = "OaAddRelatedFiles"), HttpPost]
[DisplayName("OA创建问题报告文件")]
public async Task<ManageResponse> OaAddRelatedFiles(OaAddRelatedFilesInput input)
{
var response = new ManageResponse();
if (input.object_id == 0||string.IsNullOrEmpty(input._System_objNBS)|| input.file_structure_id ==0 || string.IsNullOrEmpty(input.file_name))
{
response.Success = true;
response.Message = "必填项不能为空";
return response;
}
//byte[] bytes = File.ReadAllBytes(input.file);
//string base64String = Convert.ToBase64String(bytes);
byte[] bytes = Convert.FromBase64String(input.file);
var AddRelatedFiles=new List<AddRelatedFilesInput>();
var data=await _obj140Rep.AsQueryable().Where(x=>x._System_objNBS==input._System_objNBS && x.deleted==false).OrderByDescending(x=>x.idRecord).ToListAsync();
if (data.Count > 0)
{
var CheckData = new CheckDataInput()
{
object_id = input.object_id,
record_guid = data[0].RecordGuid,
bom_level = 1
};
await _solidWorksManageService.CheckOut(CheckData);
var latestData = await _obj140Rep.AsQueryable().Where(x => x._System_objNBS == input._System_objNBS && x.deleted == false).OrderByDescending(x => x.idRecord).ToListAsync();
var AddRelatedFilesData = new AddRelatedFilesInput
{
object_id = input.object_id,
record_id = latestData[0].idRecord,
file_structure_id = input.file_structure_id,
file_name = input.file_name,
file = bytes
};
response = await _solidWorksManageService.AddRelatedFiles(AddRelatedFilesData);
await _solidWorksManageService.CheckIn(CheckData);
}
else {
response.Success = false;
response.Message = "编码不存在";
}
return response;
}
/// <summary>
/// ecn同步文件
/// </summary>
/// <returns></returns>
[ApiDescriptionSettings(Name = "SyncEcnAttach"), HttpGet]
[DisplayName("ecn同步文件")]
[AllowAnonymous]
public async Task<List<OaUploadFileOutput>> SyncEcnAttach()
{
using var serviceScope = _scopeFactory.CreateScope();
var db = serviceScope.ServiceProvider.GetRequiredService<ISqlSugarClient>().AsTenant().GetConnectionScope("启威星 1.94.4.74").CopyNew();
var data=await db.CopyNew().Queryable<Obj118>().Where(x=>x.deleted==false&&x.fld006778=="A"&&x._System_CurrentStage=="结束"&&!string.IsNullOrEmpty(x.fld006310_Rec)).ToListAsync();
var groupedData = data.GroupBy(item => item.RecordGuid)
.Select(group => group.OrderByDescending(item => item.idRecord).First())
.ToList();
var output = new List<OaUploadFileOutput>();
foreach (var item in groupedData)
{
var id = item.idRecord;
var input = new ExportRelatedFilesInput
{
record_id=id,
object_id=118
};
var manageOutput= await _solidWorksManageService.ExportRelatedFiles(input);
if (manageOutput.State=="成功")
{
var problemReport= await db.CopyNew().Queryable<Obj140>().Where(x=>x.RecordGuid==item.fld006310_Rec&&x.deleted==false).FirstAsync();
if (problemReport != null)
{
var oaUploadFileOutput = await OaUploadFile(problemReport._System_objNBS, manageOutput);
output.Add(oaUploadFileOutput);
db.CopyNew().Updateable<Obj118>()
.SetColumns(it => new Obj118
{
fld006778="N",
fld006780=DateTime.Now,
fld006779= oaUploadFileOutput.message
})
.Where(it => it.idRecord == id)
.ExecuteCommand();
}
}
}
return output;
}
/// <summary>
/// oa上传文件接口
/// </summary>
/// <param name="problemNum"></param>
/// <param name="input"></param>
/// <returns></returns>
public async Task<OaUploadFileOutput> OaUploadFile(string problemNum, ExportRelatedFilesOutput input)
{
//string url = "http://223.113.253.60:8000/papi/secondev/workflow/uploadFileByReportNo";
string url = "http://192.168.10.35:8000/papi/secondev/workflow/uploadFileByReportNo";
// 构建请求参数字典
var requestData = new
{
num = problemNum,
filename=input.FileName,
filesize="",
base64 = input.FileBate
};
var output = new OaUploadFileOutput();
using (HttpClient client = new HttpClient())
{
try
{
// 将对象序列化为JSON字符串
string json = JsonConvert.SerializeObject(requestData);
// 创建HttpContent设置为JSON格式的内容
HttpContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync(url,content);
if (response.IsSuccessStatusCode)
{
string contentOutput = await response.Content.ReadAsStringAsync();
output = JsonConvert.DeserializeObject<OaUploadFileOutput>(contentOutput);
return output;
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
return output;
}
}