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; } } }