using AutoMapper;
|
using Model.ModelDto.LogDto;
|
using Model.ModelDto.SysDto;
|
using Model.ModelVm.SysVm;
|
using Newtonsoft.Json;
|
using SqlSugar;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Reflection;
|
using System.Text;
|
using System.Threading.Tasks;
|
using Utility;
|
using WMS.DAL;
|
using WMS.Entity.Context;
|
using WMS.Entity.LogEntity;
|
using WMS.Entity.SysEntity;
|
using WMS.IBLL.ILogServer;
|
using WMS.IBLL.ISysServer;
|
|
namespace WMS.BLL.SysServer
|
{
|
public class InterfaceServer : IInterfaceServer
|
{
|
private static readonly SqlSugarScope Db = DataContext.Db;
|
|
private readonly IOperationSysServer _operation; //操作日志
|
private readonly UserManager _userManager;
|
private readonly IMapper _mapper;
|
public InterfaceServer(IOperationSysServer operation, IMapper mapper, UserManager userManager)
|
{
|
_operation = operation;
|
_userManager = userManager;
|
_mapper = mapper;//automapper
|
}
|
/// <summary>
|
/// 获取接口列表
|
/// </summary>
|
/// <param name="model"></param>
|
/// <param name="count"></param>
|
/// <returns></returns>
|
public async Task<SqlSugarPagedList> GetInterfaceList(InterfaceVm model)
|
{
|
return await Db.Queryable<SysInterface>()
|
.LeftJoin<SysUserInfor>((a, b) => a.CreateUser == b.Id)
|
.LeftJoin<SysUserInfor>((a, b, c) => a.UpdateUser == c.Id)
|
.Where(a => a.IsDel == "0")
|
.WhereIF(!string.IsNullOrEmpty(model.InterfaceNo), a => a.InterfaceNo.Contains(model.InterfaceNo))
|
.WhereIF(!string.IsNullOrEmpty(model.InterfaceName), a => a.InterfaceName.Contains(model.InterfaceName))
|
.WhereIF(!string.IsNullOrEmpty(model.Direction), a => a.Direction == model.Direction)
|
.OrderBy(a => a.Id)
|
.Select<InterfaceDto>((a, b, c) => new InterfaceDto()
|
{
|
Id = a.Id,
|
CreateUserName = b.RealName,
|
UpdateUserName = c.RealName,
|
}, true)
|
.ToPagedListAsync(model.Page, model.Limit);
|
}
|
/// <summary>
|
/// 获取接口明细列表
|
/// </summary>
|
/// <param name="model"></param>
|
/// <param name="count"></param>
|
/// <returns></returns>
|
public async Task<SqlSugarPagedList> GetInterfaceDetailList(InterfaceDetailVm model)
|
{
|
return await Db.Queryable<SysInterfaceDetail>()
|
.LeftJoin<SysUserInfor>((a, b) => a.CreateUser == b.Id)
|
.LeftJoin<SysUserInfor>((a, b, c) => a.UpdateUser == c.Id)
|
.Where(a => a.IsDel == "0")
|
.WhereIF(!string.IsNullOrEmpty(model.InterfaceNo), a => a.InterfaceNo == model.InterfaceNo)
|
.Select<InterfaceDetailDto>((a, b, c) => new InterfaceDetailDto()
|
{
|
Id = a.Id,
|
CreateUserName = b.RealName,
|
UpdateUserName = c.RealName,
|
}, true)
|
.ToPagedListAsync(model.Page, model.Limit);
|
}
|
|
/// <summary>
|
/// 添加接口信息
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
public async Task AddInterface(InterfaceVm model)
|
{
|
if (await Db.Queryable<SysInterface>().AnyAsync(s => s.InterfaceNo == model.InterfaceNo))
|
{
|
throw Oops.Bah("接口编号已存在,请勿重复添加");
|
}
|
SysInterface modInterface = _mapper.Map<SysInterface>(model);
|
modInterface.CreateUser = _userManager.UserId;
|
modInterface.CreateTime = DateTime.Now;
|
await Db.Insertable<SysInterface>(modInterface).ExecuteCommandAsync();
|
|
List<SysInterfaceDetail> listDetails = new List<SysInterfaceDetail>();
|
foreach (InterfaceDetailVm detailModel in model.InterfaceDetail)
|
{
|
SysInterfaceDetail modDetail = _mapper.Map<SysInterfaceDetail>(detailModel);
|
modDetail.CreateTime = modInterface.CreateTime;
|
modDetail.CreateUser = _userManager.UserId;
|
listDetails.Add(modDetail);
|
}
|
await Db.Insertable(listDetails).ExecuteCommandAsync();
|
|
}
|
|
/// <summary>
|
/// 编辑接口信息
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
public async Task EditInterface(InterfaceVm model)
|
{
|
SysInterface modInterface = _mapper.Map<SysInterface>(model);
|
modInterface.UpdateUser = _userManager.UserId;
|
modInterface.UpdateTime = DateTime.Now;
|
await Db.Updateable(modInterface)
|
.UpdateColumns(s => new { s.InterfaceName, s.Direction, s.TransmissionMode, s.Remark, s.Url, s.DataSources, s.UpdateTime, s.UpdateUser })
|
.ExecuteCommandAsync();
|
|
var listDetails = await Db.Queryable<SysInterfaceDetail>().Where(s => s.InterfaceNo == model.InterfaceNo && s.IsDel == "0").ToListAsync();
|
foreach (SysInterfaceDetail dbDetailModel in listDetails)
|
{
|
if (!model.InterfaceDetail.Any(s => s.Id == dbDetailModel.Id))
|
{
|
await Db.Updateable<SysInterfaceDetail>()
|
.SetColumns(s => s.IsDel == "1")
|
.SetColumns(s => s.UpdateTime == DateTime.Now)
|
.SetColumns(s => s.UpdateUser == _userManager.UserId)
|
.Where(s => s.Id == dbDetailModel.Id && s.IsDel == "0")
|
.ExecuteCommandAsync();
|
}
|
}
|
|
// 处理修改和添加的明细
|
foreach (InterfaceDetailVm detailModel in model.InterfaceDetail)
|
{
|
if (detailModel.Id == 0 || detailModel.Id == null)
|
{
|
var modDetail = _mapper.Map<SysInterfaceDetail>(detailModel);
|
modDetail.CreateTime = DateTime.Now;
|
modDetail.CreateUser = _userManager.UserId;
|
modDetail.UpdateUser = _userManager.UserId;
|
modDetail.UpdateTime = DateTime.Now;
|
await Db.Insertable(modDetail).ExecuteCommandAsync();
|
}
|
else
|
{
|
int rowNum = listDetails.Count(it => it.Id == detailModel.Id
|
&& it.ExtField == detailModel.ExtField
|
&& it.MapField == detailModel.MapField
|
&& it.Field == detailModel.Field
|
&& it.FieldType == detailModel.FieldType
|
&& it.DataType == detailModel.DataType
|
&& it.IsNull == detailModel.IsNull
|
&& it.Remark == detailModel.Remark
|
&& it.FieldFather == detailModel.FieldFather);
|
if (rowNum > 0)
|
{
|
continue;
|
}
|
var modDetail = _mapper.Map<SysInterfaceDetail>(detailModel);
|
modDetail.UpdateUser = _userManager.UserId;
|
modDetail.UpdateTime = DateTime.Now;
|
await Db.Updateable<SysInterfaceDetail>(modDetail)
|
.UpdateColumns(s => new { s.ExtField, s.MapField, s.Field, s.FieldFather, s.FieldType, s.DataType, s.IsNull, s.Remark, s.UpdateUser, s.UpdateTime })
|
.ExecuteCommandAsync();
|
}
|
}
|
}
|
|
/// <summary>
|
/// 删除接口信息
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
public async Task DelInterface(InterfaceVm model)
|
{
|
await Db.Updateable<SysInterface>()
|
.SetColumns(s => s.IsDel == "1")
|
.SetColumns(s => s.UpdateTime == DateTime.Now)
|
.SetColumns(s => s.UpdateUser == _userManager.UserId)
|
.Where(s => s.InterfaceNo == model.InterfaceNo && s.IsDel == "0")
|
.ExecuteCommandAsync();
|
|
await Db.Updateable<SysInterfaceDetail>()
|
.SetColumns(s => s.IsDel == "1")
|
.SetColumns(s => s.UpdateTime == DateTime.Now)
|
.SetColumns(s => s.UpdateUser == _userManager.UserId)
|
.Where(s => s.InterfaceNo == model.InterfaceNo && s.IsDel == "0")
|
.ExecuteCommandAsync();
|
}
|
|
/// <summary>
|
/// 删除接口明细信息
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
public async Task DelInterfaceDetail(InterfaceDetailVm model)
|
{
|
await Db.Updateable<SysInterfaceDetail>()
|
.SetColumns(s => s.IsDel == "1")
|
.SetColumns(s => s.UpdateTime == DateTime.Now)
|
.SetColumns(s => s.UpdateUser == _userManager.UserId)
|
.Where(s => s.Id == model.Id)
|
.ExecuteCommandAsync();
|
}
|
|
//public void ceshi()
|
//{
|
// string interfaceNo = "A0001";
|
// string param = "'ASN2023110200002'";
|
// RespondResult(interfaceNo, param);
|
//}
|
|
/// <summary>
|
/// 回传上游系统公共方法
|
/// </summary>
|
/// <param name="InterfaceNo">接口编号</param>
|
/// <param name="param">存储过程参数</param>
|
public void RespondResult(string InterfaceNo, string param)
|
{
|
try
|
{
|
var outDto = new Dictionary<string, object>();
|
string sqlString = $@"select * from SysInterface where IsDel=0 and InterfaceNo='{InterfaceNo}'";
|
//接口总信息
|
var interfaceModel = Db.Ado.SqlQuery<SysInterface>(sqlString).FirstOrDefault();
|
if (interfaceModel == null)
|
{
|
throw new Exception("未查询到接口信息");
|
}
|
if (string.IsNullOrEmpty(interfaceModel.DataSources))
|
{
|
throw new Exception("数据来源为空");
|
}
|
string detailSql = $@"select * from SysInterfaceDetail where IsDel=0 and InterfaceNo='{interfaceModel.InterfaceNo}'";
|
//接口明细信息
|
List<SysInterfaceDetail> _detailList = Db.Ado.SqlQuery<SysInterfaceDetail>(detailSql).ToList();
|
if (_detailList.Count <= 0)
|
{
|
throw new Exception("未查询到接口明细信息");
|
}
|
//执行存储过程查询数据
|
string querySql = $@"EXEC {interfaceModel.DataSources} {param}";
|
var requestDataList = Db.Ado.SqlQuery<RequestData>(querySql).ToList();
|
//组织请求参数
|
foreach (var item in _detailList)
|
{
|
if (item.DataType == "0")//表头数据
|
{
|
var fileldFatherList = _detailList.Where(it => it.FieldFather == item.ExtField).ToList();//判找到该表头下的所有行
|
if (fileldFatherList.Count > 0)//判断该表头是否有行
|
{
|
var dicDetailList = new List<Dictionary<string, object>>();
|
foreach (var item2 in requestDataList)//行数据
|
{
|
var dicDetailModel = new Dictionary<string, object>();
|
foreach (var item3 in fileldFatherList)
|
{
|
// 使用反射获取字段值
|
string value = GetFieldValue(item2, item3.MapField);
|
dicDetailModel.Add(item3.ExtField, value);
|
}
|
dicDetailList.Add(dicDetailModel);
|
}
|
outDto.Add(item.ExtField, dicDetailList);
|
}
|
else
|
{
|
var requestDataModel = requestDataList.FirstOrDefault();
|
// 使用反射获取字段值
|
string value = GetFieldValue(requestDataModel, item.MapField);
|
|
outDto.Add(item.ExtField, value);
|
}
|
}
|
}
|
//请求方式,0:Http+Xml 1:Http+Xml
|
if (interfaceModel.TransmissionMode == "0")
|
{
|
//请求参数
|
var jsonData = Newtonsoft.Json.JsonConvert.SerializeObject(outDto);
|
//发起请求
|
var response = Utility.Tools.HttpHelper.DoPost(interfaceModel.Url, jsonData, interfaceModel.InterfaceName, interfaceModel.Remark);
|
}
|
else
|
{
|
|
}
|
}
|
catch (Exception ex)
|
{
|
|
}
|
}
|
/// <summary>
|
/// 通过字段名获取字段值
|
/// </summary>
|
/// <param name="obj"></param>
|
/// <param name="fieldName"></param>
|
/// <returns></returns>
|
public static string GetFieldValue(object obj, string fieldName)
|
{
|
//使用反射获取字段值
|
Type type = obj.GetType();
|
PropertyInfo propertyInfo = type.GetProperty(fieldName);
|
if (propertyInfo != null)
|
{
|
return propertyInfo.GetValue(obj) == null ? "" : propertyInfo.GetValue(obj).ToString();
|
}
|
return null;
|
}
|
}
|
public class RequestData
|
{
|
public string Field1 { get; set; }
|
public string Field2 { get; set; }
|
public string Field3 { get; set; }
|
public string Field4 { get; set; }
|
public string Field5 { get; set; }
|
public string Field6 { get; set; }
|
public string Field7 { get; set; }
|
public string Field8 { get; set; }
|
public string Field9 { get; set; }
|
public string Field10 { get; set; }
|
public string Field11 { get; set; }
|
public string Field12 { get; set; }
|
public string Field13 { get; set; }
|
public string Field14 { get; set; }
|
public string Field15 { get; set; }
|
public string Field16 { get; set; }
|
public string Field17 { get; set; }
|
public string Field18 { get; set; }
|
public string Field19 { get; set; }
|
public string Field20 { get; set; }
|
}
|
}
|