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 WMS.DAL; using WMS.Entity.Context; 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; //æ“作日志 public InterfaceServer(IOperationSysServer operation) { _operation = operation; } /// <summary> /// èŽ·å–æŽ¥å£åˆ—表 /// </summary> /// <param name="model"></param> /// <param name="count"></param> /// <returns></returns> public List<InterfaceDto> GetInterfaceList(InterfaceVm model, out int count) { string sqlString = string.Empty; string sqlCount = string.Empty; string sqlPub = string.Empty; try { sqlCount += "SELECT DISTINCT COUNT(tb1.Id) FROM SysInterface AS tb1 "; sqlString += "SELECT DISTINCT tb1.*,tb2.RealName as CreateUserName,tb3.RealName as UpdateUserName FROM SysInterface AS tb1 "; sqlPub += "LEFT JOIN SysUserInfor AS tb2 ON tb1.CreateUser = tb2.Id "; sqlPub += "LEFT JOIN SysUserInfor AS tb3 ON tb1.UpdateUser = tb3.Id "; sqlPub += $"WHERE tb1.IsDel=0 "; if (!string.IsNullOrEmpty(model.InterfaceNo)) { sqlPub += $"AND tb1.InterfaceNo LIKE '%{model.InterfaceNo}%' "; } if (!string.IsNullOrEmpty(model.InterfaceName)) { sqlPub += $"AND tb1.InterfaceName LIKE '%{model.InterfaceName}%' "; } if (!string.IsNullOrEmpty(model.Direction)) { sqlPub += $"AND tb1.Direction = '{model.Direction}' "; } sqlCount += sqlPub; sqlPub += " order by tb1.Id "; if (model.Page == 0) { model.Page = 1; } sqlString += sqlPub + $" offset {((model.Page - 1) * model.Limit)} rows fetch next {model.Limit} rows only;"; var com = new Common(); count = com.GetRowCount(sqlCount); var modelList = Db.Ado.SqlQuery<InterfaceDto>(sqlString); return modelList; } catch (Exception ex) { throw ex; } } /// <summary> /// èŽ·å–æŽ¥å£æ˜Žç»†åˆ—表 /// </summary> /// <param name="model"></param> /// <param name="count"></param> /// <returns></returns> public List<InterfaceDetailDto> GetInterfaceDetailList(InterfaceDetailVm model, out int count) { string sqlString = string.Empty; string sqlCount = string.Empty; int rowCount = 1; try { if (model.Page == 0) { model.Page = 1; } sqlCount += $"SELECT COUNT(ID) FROM SysInterfaceDetail where InterfaceNo = '{model.InterfaceNo}' and isdel = '0';"; var com = new Common(); count = com.GetRowCount(sqlCount); if (count != 0) { rowCount = count; } sqlString += "SELECT tb1.*,tb2.RealName as CreateUserName,tb3.RealName as UpdateUserName FROM SysInterfaceDetail AS tb1 "; sqlString += "LEFT JOIN SysUserInfor AS tb2 ON tb1.CreateUser = tb2.Id "; sqlString += "LEFT JOIN SysUserInfor AS tb3 ON tb1.UpdateUser = tb3.Id "; sqlString += $"WHERE tb1.InterfaceNo = '{model.InterfaceNo}' AND tb1.IsDel = '0' order by tb1.Id "; sqlString += $"offset {((model.Page - 1) * model.Limit)} rows fetch next {rowCount} rows only;"; var modelList = Db.Ado.SqlQuery<InterfaceDetailDto>(sqlString); return modelList; } catch (Exception ex) { throw ex; } } /// <summary> /// æ·»åŠ æŽ¥å£ä¿¡æ¯ /// </summary> /// <param name="model"></param> /// <returns></returns> public string AddInterface(InterfaceVm model) { string strMessage = ""; string sqlString = string.Empty; string sqlDetailStr = string.Empty; try { string sqlCount = $"SELECT COUNT(ID) FROM SysInterface where InterfaceNo = '{model.InterfaceNo}' and isdel = '0';"; var com = new Common().GetRowCount(sqlCount); if (com > 0) { strMessage = "-1:接å£ç¼–å·å·²å˜åœ¨ï¼Œè¯·å‹¿é‡å¤æ·»åŠ ï¼"; return strMessage; } //æŽ¥å£æ€»ä¿¡æ¯ sqlString += "Insert into SysInterface (InterfaceNo,InterfaceName,Direction,TransmissionMode,Remark,Url,DataSources,CreateUser) values ( "; sqlString += $"'{model.InterfaceNo}','{model.InterfaceName}','{model.Direction}','{model.TransmissionMode}','{model.Remark}','{model.Url}','{model.DataSources}','{model.CreateUser}' );"; //æŽ¥å£æ˜Žç»† var detailModels = model.InterfaceDetail; foreach (InterfaceDetailVm detailModel in detailModels) { sqlDetailStr += "Insert into SysInterfaceDetail (InterfaceNo,ExtField,MapField,Field,"; sqlDetailStr += "FieldType,DataType,IsNull,Remark,FieldFather,CreateUser) values ( "; sqlDetailStr += $"'{model.InterfaceNo}','{detailModel.ExtField}','{detailModel.MapField}','{detailModel.Field}', "; sqlDetailStr += $"'{detailModel.FieldType}','{detailModel.DataType}','{detailModel.IsNull}','{detailModel.Remark}','{detailModel.FieldFather}','{model.CreateUser}'); "; } if (sqlDetailStr == string.Empty) { return strMessage; } Db.Ado.BeginTran(); int rowCount = Db.Ado.ExecuteCommand(sqlString); var rowDetailCount = 1; if (sqlDetailStr.Length > 0) { rowDetailCount = Db.Ado.ExecuteCommand(sqlDetailStr); } Db.Ado.CommitTran(); if (rowCount > 0 && rowDetailCount > 0) { //维护æ“作日志 _operation.InsertOperation("系统设置", "接å£ç®¡ç†", model.InterfaceNo, "æ·»åŠ ", $"æ·»åŠ äº†æŽ¥å£ç¼–å·ä¸º{model.InterfaceNo}的接å£ä¿¡æ¯", Convert.ToInt32(model.CreateUser)); return strMessage; } else { Db.Ado.RollbackTran(); return "-2:æ·»åŠ å¤±è´¥æ•°æ®å›žæ»š!"; } } catch (Exception ex) { throw new Exception(ex.Message); } } /// <summary> /// 编辑接å£ä¿¡æ¯ /// </summary> /// <param name="model"></param> /// <returns></returns> public string EditInterface(InterfaceVm model) { string strMessage = ""; string sqlString = string.Empty; string sqlDetailStr = string.Empty; try { sqlString = "UPDATE SysInterface SET "; sqlString += $"InterfaceName = '{model.InterfaceName}',Direction = '{model.Direction}',"; sqlString += $"TransmissionMode = '{model.TransmissionMode}',Remark = '{model.Remark}',Url = '{model.Url}',DataSources = '{model.DataSources}', "; sqlString += $"UpdateTime = GETDATE(),UpdateUser = '{model.CreateUser}' "; sqlString += $"WHERE InterfaceNo = '{model.InterfaceNo}'"; var detailModels = model.InterfaceDetail; sqlDetailStr += $"SELECT * FROM SysInterfaceDetail WHERE InterfaceNo = '{model.InterfaceNo}' and isDel = '0';"; var dbDetailModels = DataContext.Db.Ado.SqlQuery<SysInterfaceDetail>(sqlDetailStr); sqlDetailStr = string.Empty; // 处ç†å·²åˆ 除的明细 foreach (SysInterfaceDetail dbDetailModel in dbDetailModels) { if (detailModels.Count(it => it.Id == dbDetailModel.Id) == 0) { sqlDetailStr += $"UPDATE SysInterfaceDetail SET IsDel = '1',"; sqlDetailStr += $"UpdateTime = GETDATE(),UpdateUser = '{model.CreateUser}' "; sqlDetailStr += $"WHERE Id = {dbDetailModel.Id};"; } } // 处ç†ä¿®æ”¹å’Œæ·»åŠ çš„æ˜Žç»† foreach (InterfaceDetailVm detailModel in detailModels) { if (detailModel.Id == 0 || detailModel.Id == null) { sqlDetailStr += "Insert into SysInterfaceDetail (InterfaceNo,ExtField,MapField,Field,"; sqlDetailStr += "FieldType,DataType,IsNull,Remark,FieldFather,CreateUser) values ( "; sqlDetailStr += $"'{model.InterfaceNo}','{detailModel.ExtField}','{detailModel.MapField}','{detailModel.Field}', "; sqlDetailStr += $"'{detailModel.FieldType}','{detailModel.DataType}','{detailModel.IsNull}','{detailModel.Remark}','{detailModel.FieldFather}','{model.CreateUser}'); "; } else { //åˆ¤æ–æ˜¯å¦æ›´æ”¹ int rowNum = dbDetailModels .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; } sqlDetailStr += $"UPDATE SysInterfaceDetail SET "; sqlDetailStr += $"ExtField = '{detailModel.ExtField}',MapField = '{detailModel.MapField}',Field='{detailModel.Field}',FieldFather='{detailModel.FieldFather}', "; sqlDetailStr += $"FieldType = '{detailModel.FieldType}',DataType = '{detailModel.DataType}', "; sqlDetailStr += $"IsNull = '{detailModel.IsNull}',Remark = '{detailModel.Remark}', "; sqlDetailStr += $"UpdateTime = GETDATE(),UpdateUser = '{model.CreateUser}' "; sqlDetailStr += $"WHERE Id = {detailModel.Id};"; } } Db.Ado.BeginTran(); int rowCount = Db.Ado.ExecuteCommand(sqlString); var rowDetailCount = 1; if (sqlDetailStr.Length > 0) { rowDetailCount = Db.Ado.ExecuteCommand(sqlDetailStr); } Db.Ado.CommitTran(); if (rowCount > 0 && rowDetailCount > 0) { //维护æ“作日志 _operation.InsertOperation("系统设置", "接å£ç®¡ç†", model.InterfaceNo, "编辑", $"编辑了接å£ç¼–å·ä¸º{model.InterfaceNo}的接å£ä¿¡æ¯", Convert.ToInt32(model.CreateUser)); return strMessage; } else { Db.Ado.RollbackTran(); return "-2:æ·»åŠ å¤±è´¥æ•°æ®å›žæ»š!"; } } catch (Exception ex) { throw ex; } } /// <summary> /// åˆ é™¤æŽ¥å£ä¿¡æ¯ /// </summary> /// <param name="model"></param> /// <returns></returns> public string DelInterface(InterfaceVm model) { try { string sqlString = ""; // åˆ é™¤æ€» sqlString = $"UPDATE SysInterface SET IsDel = '1',"; sqlString += $"UpdateTime = GETDATE(),UpdateUser = '{model.CreateUser}' "; sqlString += $"WHERE InterfaceNo = '{model.InterfaceNo}';"; // åˆ é™¤æ˜Žç»† sqlString += $"UPDATE SysInterfaceDetail SET IsDel = '1',"; sqlString += $"UpdateTime = GETDATE(),UpdateUser = '{model.CreateUser}' "; sqlString += $"WHERE InterfaceNo = '{model.InterfaceNo}';"; Db.Ado.BeginTran(); int rowCount = Db.Ado.ExecuteCommand(sqlString); if (rowCount < 2) { Db.RollbackTran(); return "-1:åˆ é™¤å¤±è´¥ï¼"; } Db.Ado.CommitTran(); _operation.InsertOperation("系统设置", "接å£ç®¡ç†", model.InterfaceNo, "åˆ é™¤", $"åˆ é™¤äº†æŽ¥å£ç¼–å·ä¸º{model.InterfaceNo}的接å£ä¿¡æ¯", Convert.ToInt32(model.CreateUser)); return ""; } catch (Exception ex) { throw ex; } } /// <summary> /// åˆ é™¤æŽ¥å£æ˜Žç»†ä¿¡æ¯ /// </summary> /// <param name="model"></param> /// <returns></returns> public string DelInterfaceDetail(InterfaceDetailVm model) { try { string sqlString = ""; // åˆ é™¤æ˜Žç»† sqlString += $"UPDATE SysInterfaceDetail SET IsDel = '1',"; sqlString += $"UpdateTime = GETDATE(),UpdateUser = '{model.CreateUser}' "; sqlString += $"WHERE Id = '{model.Id}';"; Db.Ado.BeginTran(); int rowCount = Db.Ado.ExecuteCommand(sqlString); if (rowCount < 1) { Db.RollbackTran(); return "-1:åˆ é™¤å¤±è´¥ï¼"; } Db.Ado.CommitTran(); _operation.InsertOperation("系统设置", "接å£ç®¡ç†", model.InterfaceNo, "åˆ é™¤", $"åˆ é™¤äº†æŽ¥å£ç¼–å·ä¸º{model.InterfaceNo}ï¼Œæœ¬ç³»ç»Ÿå—æ®µä¸º{model.Field}的接å£ä¿¡æ¯", Convert.ToInt32(model.CreateUser)); return ""; } catch (Exception ex) { throw ex; } } //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; } } }