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
}
///
/// 获取接口列表
///
///
///
///
public async Task GetInterfaceList(InterfaceVm model)
{
return await Db.Queryable()
.LeftJoin((a, b) => a.CreateUser == b.Id)
.LeftJoin((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((a, b, c) => new InterfaceDto()
{
Id = a.Id,
CreateUserName = b.RealName,
UpdateUserName = c.RealName,
}, true)
.ToPagedListAsync(model.Page, model.Limit);
}
///
/// 获取接口明细列表
///
///
///
///
public async Task GetInterfaceDetailList(InterfaceDetailVm model)
{
return await Db.Queryable()
.LeftJoin((a, b) => a.CreateUser == b.Id)
.LeftJoin((a, b, c) => a.UpdateUser == c.Id)
.Where(a => a.IsDel == "0")
.WhereIF(!string.IsNullOrEmpty(model.InterfaceNo), a => a.InterfaceNo == model.InterfaceNo)
.Select((a, b, c) => new InterfaceDetailDto()
{
Id = a.Id,
CreateUserName = b.RealName,
UpdateUserName = c.RealName,
}, true)
.ToPagedListAsync(model.Page, model.Limit);
}
///
/// 添加接口信息
///
///
///
public async Task AddInterface(InterfaceVm model)
{
if (await Db.Queryable().AnyAsync(s => s.InterfaceNo == model.InterfaceNo))
{
throw Oops.Bah("接口编号已存在,请勿重复添加");
}
SysInterface modInterface = _mapper.Map(model);
modInterface.CreateUser = _userManager.UserId;
modInterface.CreateTime = DateTime.Now;
await Db.Insertable(modInterface).ExecuteCommandAsync();
List listDetails = new List();
foreach (InterfaceDetailVm detailModel in model.InterfaceDetail)
{
SysInterfaceDetail modDetail = _mapper.Map(detailModel);
modDetail.CreateTime = modInterface.CreateTime;
modDetail.CreateUser = _userManager.UserId;
listDetails.Add(modDetail);
}
await Db.Insertable(listDetails).ExecuteCommandAsync();
}
///
/// 编辑接口信息
///
///
///
public async Task EditInterface(InterfaceVm model)
{
SysInterface modInterface = _mapper.Map(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().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()
.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(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(detailModel);
modDetail.UpdateUser = _userManager.UserId;
modDetail.UpdateTime = DateTime.Now;
await Db.Updateable(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();
}
}
}
///
/// 删除接口信息
///
///
///
public async Task DelInterface(InterfaceVm model)
{
await Db.Updateable()
.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()
.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();
}
///
/// 删除接口明细信息
///
///
///
public async Task DelInterfaceDetail(InterfaceDetailVm model)
{
await Db.Updateable()
.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);
//}
///
/// 回传上游系统公共方法
///
/// 接口编号
/// 存储过程参数
public void RespondResult(string InterfaceNo, string param)
{
try
{
var outDto = new Dictionary();
string sqlString = $@"select * from SysInterface where IsDel=0 and InterfaceNo='{InterfaceNo}'";
//接口总信息
var interfaceModel = Db.Ado.SqlQuery(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 _detailList = Db.Ado.SqlQuery(detailSql).ToList();
if (_detailList.Count <= 0)
{
throw new Exception("未查询到接口明细信息");
}
//执行存储过程查询数据
string querySql = $@"EXEC {interfaceModel.DataSources} {param}";
var requestDataList = Db.Ado.SqlQuery(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>();
foreach (var item2 in requestDataList)//行数据
{
var dicDetailModel = new Dictionary();
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)
{
}
}
///
/// 通过字段名获取字段值
///
///
///
///
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; }
}
}