using PMS.BusinessModels.CloudMonitorManage; using PMS.BusinessModels.ExternalManage; using PMS.EntityModels.ExternalManage; using PMS.Plugins.Common; using QWPlatform.IService; using QWPlatform.Models; using QWPlatform.SystemLibrary; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Runtime.InteropServices; using System.Runtime.Remoting.Messaging; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Xml.Linq; namespace PMS.DBService.ExternalManage { public class ExternalManageService : DataServiceBase { public static string GenerateRandomString(int length) { Guid guid = Guid.NewGuid(); string uniqueString = guid.ToString("N").Substring(0, 8); // 获取 Guid 的前 8 位作为字符串 return uniqueString; } /// /// 关键字查询外部服务分类 /// /// /// public DataTable GetMenu (string keyword, string productId, int type) { if (type == 1) { string sql = "select a.*,(select b.分类名称 from 外部服务分类 b where a.上级ID = b.ID) as 上级名称 from 外部服务分类 a where a.产品ID = :产品ID"; var sqlbuilder = this.SqlBuilder; if (!(keyword.IsNullOrEmpty())) { sql += "and (upper(分类编码) like '%' || upper(:keyword) || '%' or upper(分类名称) like '%' || upper(:keyword) || '%' or upper(分类简码) like '%' || upper(:keyword) || '%')"; sqlbuilder.Parameters("keyword", keyword); } sql += " order by a.分类编码"; return sqlbuilder.SqlText(sql).Parameters("产品ID", productId).Select(); }else { string sql = @"WITH w AS ( SELECT a.* FROM 外部服务分类 a WHERE a.产品ID = :产品ID UNION ALL SELECT b.ID, b.分类ID AS 上级ID, b.服务编码 AS 分类编码, b.服务名称 AS 分类名称, b.服务简码 AS 分类简码, b.创建时间 ,b.更新时间, :产品ID AS 产品ID FROM 外部服务 b, 外部服务分类 a WHERE a.ID = b.分类ID AND a.产品ID = :产品ID ) SELECT w.* FROM w where 1 = 1 "; var sqlbuilder = this.SqlBuilder; if (!(keyword.IsNullOrEmpty())) { sql += "and (upper(w.分类编码) like '%' || upper(:keyword) || '%' or upper(w.分类名称) like '%' || upper(:keyword) || '%' or upper(w.分类简码) like '%' || upper(:keyword) || '%')"; sqlbuilder.Parameters("keyword", keyword); } sql += " order by w.分类编码"; return sqlbuilder.SqlText(sql).Parameters("产品ID", productId).Select(); } } /// /// 根据产品ID获取分类 /// /// /// public DataTable GetMenuByProduct(List productIds) { var parameterNames = productIds.Select((id, index) => $":产品ID{index}").ToArray(); string inClause = string.Join(", ", parameterNames); string sql = $"select a.*, b.名称 as 产品名称 from 外部服务分类 a, 产品系统配置 b where a.产品ID = b.ID and a.产品ID in ({inClause}) order by b.编码, a.分类编码"; var sqlBuilder = this.SqlBuilder.SqlText(sql); for (int i = 0; i < productIds.Count; i++) { sqlBuilder.Parameters($"产品ID{i}", productIds[i]); } return sqlBuilder.Select(); } /// /// 获取编码 /// /// 表名 /// public string GetMaxClassCode(string parent_id, int type, string productId) { var sql = ""; var sqlbuilder = this.SqlBuilder; string parentCode = "";//上级编码 if (!parent_id.IsNullOrEmpty()) { parentCode = this.SelectBuilder.From("外部服务分类").Columns("分类编码").Where("ID", parent_id).Select(); } if (type == 1) { sql += "select MAX(分类编码) from 外部服务分类 where 产品ID = :产品ID "; sqlbuilder.Parameters("产品ID", productId); if (!parent_id.IsNullOrEmpty()) { sql += "and 上级ID = :parent_id"; sqlbuilder.Parameters("parent_id", parent_id); } else { sql += "and 上级ID is null"; } } else { sql += "select MAX(服务编码) from 外部服务 where 1 = 1"; } var code = sqlbuilder.SqlText(sql).Select(); if (!code.IsNullOrEmpty() && !parentCode.IsNullOrEmpty()) { code = code.Substring(parentCode.Length); } return parentCode + "" + GetNextCode(code); } /// /// 获取指定编码的下一编码,支持字母、数字 /// /// /// public string GetNextCode(string code) { int bytAdd, bytUp = 0; Regex regNum = new Regex("^[0-9]"); string nextCode = code.IsNullOrEmpty() ? "00" : code; for (int i = nextCode.Length; i >= 1; i--) { bytAdd = (i == nextCode.Length) ? 1 : 0; string str = nextCode.Substring(i - 1, 1); if (regNum.IsMatch(str)) { if ((str.ToInt32() + bytAdd + bytUp) < 10) { nextCode = nextCode.Substring(0, i - 1) + (str.ToInt32() + bytAdd + bytUp).ToString() + nextCode.Substring(i); bytUp = 0; } else { nextCode = nextCode.Substring(0, i - 1) + "0" + nextCode.Substring(i); bytUp = 1; } } else { if ((Encoding.ASCII.GetBytes(str)[0] + bytAdd + bytUp) <= (Encoding.ASCII.GetBytes(str)[0] + Convert.ToInt16('Z') - Encoding.ASCII.GetBytes(str.ToUpper())[0])) { nextCode = nextCode.Substring(0, i - 1) + Convert.ToChar(Encoding.ASCII.GetBytes(str)[0] + bytAdd + bytUp) + nextCode.Substring(i); bytUp = 0; } else { nextCode = nextCode.Substring(0, i - 1) + "0" + nextCode.Substring(i); bytUp = 1; } } if (bytUp == 0) { break; } } if ("1".PadRight(nextCode.Length + 1, '0') == ("1" + nextCode)) { nextCode = "1" + nextCode; } return nextCode; } /// /// 保存服务分类 /// /// /// public bool SaveExternalClass(ExternalClass model) { if(model.ID.IsNullOrEmpty()) { return this.InsertBuilder.Insert("外部服务分类") .Column("ID", Guid.NewGuid().ToString()) .Column("上级ID", model.上级ID) .Column("分类编码", model.分类编码) .Column("分类名称", model.分类名称) .Column("分类简码", model.分类简码) .Column("产品ID", model.产品ID) .Column("创建时间", DateTime.Now) .Execute() > 0; }else { return this.UpdateBuilder.Update("外部服务分类") .Column("上级ID", model.上级ID) .Column("分类编码", model.分类编码) .Column("分类名称", model.分类名称) .Column("分类简码", model.分类简码) .Column("产品ID", model.产品ID) .Column("更新时间", DateTime.Now) .Where("ID", model.ID) .Execute() > 0; } } /// /// 删除服务分类 /// /// /// public bool DeleteClass(string id) { int i = this.SelectBuilder.From("外部服务") .Columns("Count(1)") .Where("分类ID", id) .Select(); if(i == 0) { return this.DeleteBulider.Delete("外部服务分类") .Where ("ID", id) .Execute() > 0 ; }else { return false; } } /// /// 获取服务目录 /// /// 分类id /// 关键字 /// public DataTable GetExternal (string class_id, string keyword, int pageSize, int pageNum, out int total) { string sql = "select a.*, ('【' || b.分类编码 || '】' || b.分类名称) as 分类名称 from 外部服务 a, 外部服务分类 b where a.分类ID = b.ID and a.分类ID = :class_id "; var sqlbuilder = this.SqlBuilder; if (!(keyword.IsNullOrEmpty())) { sql += "and (upper(a.服务编码) like '%' || upper(:keyword) || '%' or a.服务名称 like '%' || :keyword || '%' or upper(a.服务简码) like '%' || upper(:keyword) || '%')"; sqlbuilder.Parameters("keyword", keyword); } return sqlbuilder.SqlText(sql) .Parameters("class_id", class_id) .Paging(pageNum, pageSize) .Select(out total); } /// /// 保存服务 /// /// /// public bool SaveExternal(External model) { if (model.ID.IsNullOrEmpty()) { return this.InsertBuilder.Insert("外部服务") .Column("ID", Guid.NewGuid().ToString()) .Column("分类ID", model.分类ID) .Column("服务编码", model.服务编码) .Column("服务名称", model.服务名称) .Column("服务简码", model.服务简码) .Column("服务地址", model.服务地址) .Column("功能简述", model.功能简述) .Column("详细描述", model.详细描述) .Column("请求方式", model.请求方式) .Column("创建时间", DateTime.Now) .Execute() > 0; } else { return this.UpdateBuilder.Update("外部服务") .Column("分类ID", model.分类ID) .Column("服务编码", model.服务编码) .Column("服务名称", model.服务名称) .Column("服务简码", model.服务简码) .Column("服务地址", model.服务地址) .Column("功能简述", model.功能简述) .Column("详细描述", model.详细描述) .Column("请求方式", model.请求方式) .Column("更新时间", DateTime.Now) .Where("ID", model.ID) .Execute() > 0; } } /// /// 获取参数 /// /// /// /// public List GetParameter(string type, string id) { var sql = "SELECT a.*, (SELECT b.参数名称 FROM 外部服务参数 b WHERE b.ID = a.父节点ID) AS 父节点 FROM 外部服务参数 a where a.服务ID = :服务ID and 参数类型= :参数类型 order by a.序号"; return this.SqlBuilder.SqlText(sql) .Parameters("服务ID", id) .Parameters("参数类型", type) .Select().ToList(); } /// /// 参数设置 /// /// /// public v_parameter GetExternalParameter(string id) { var parmeter = new v_parameter(); var external = this.SelectBuilder.From("外部服务") .Columns("*") .Where ("ID", id) .Select().ToList()?.FirstOrDefault(); parmeter.服务ID = id; parmeter.出参 = external.出参; parmeter.入参 = external.入参; var sql = "SELECT a.*, (SELECT b.参数名称 FROM 外部服务参数 b WHERE b.ID = a.父节点ID) AS 父节点 FROM 外部服务参数 a where a.服务ID = :服务ID and 参数类型= :参数类型 order by a.序号"; parmeter.outParameter = this.SqlBuilder.SqlText(sql) .Parameters("服务ID", id) .Parameters("参数类型", "out") .Select().ToList(); parmeter.inParameter = this.SqlBuilder.SqlText(sql) .Parameters("服务ID", id) .Parameters("参数类型", "in") .Select().ToList(); return parmeter; } /// /// 保存参数设置 /// /// /// public bool SavaExternalSet(v_parameter model) { bool res = this.UpdateBuilder.Update("外部服务") .Column("入参", model.入参) .Column("出参", model.出参) .Where("ID", model.服务ID) .Execute() > 0; res = this.DeleteBulider.Delete("外部服务参数") .Where("服务ID", model.服务ID) .Execute() > 0; var inParameter = new List(); var outParameter = new List(); if (model.inParameter.Count > 0) { foreach (var item in model.inParameter) { item.ID = Guid.NewGuid().ToString(); } var sno = 1; foreach (var item in model.inParameter) { res = this.InsertBuilder.Insert("外部服务参数") .Column("ID", item.ID) .Column("服务ID", model.服务ID) .Column("参数名称", item.参数名称) .Column("数据类型", item.数据类型) .Column("是否必填", item.是否必填) .Column("是否数组", item.是否数组) .Column("参数说明", item.参数说明) .Column("参数类型", "in") .Column("序号", sno) .Column("父节点ID", (from s in model.inParameter where item.父节点 == s.参数名称 select s.ID).FirstOrDefault()) .Execute() > 0; sno++; } } if(model.outParameter != null && model.outParameter.Count > 0) { foreach (var item in model.outParameter) { item.ID = Guid.NewGuid().ToString(); } var sno = 1; foreach (var item in model.outParameter) { res = this.InsertBuilder.Insert("外部服务参数") .Column("ID", item.ID) .Column("服务ID", model.服务ID) .Column("参数名称", item.参数名称) .Column("数据类型", item.数据类型) .Column("是否必填", item.是否必填) .Column("是否数组", item.是否数组) .Column("参数说明", item.参数说明) .Column("参数类型", "out") .Column("序号", sno) .Column("父节点ID", (from s in model.outParameter where item.父节点 == s.参数名称 select s.ID).FirstOrDefault()) .Execute() > 0; sno++; } } return res; } /// /// 删除服务和出入参信息 /// /// /// public bool deleteExternal(string id) { bool res = this.DeleteBulider.Delete("外部服务参数") .Where("服务ID", id) .Execute() > 0; res = this.DeleteBulider.Delete("外部服务") .Where("ID", id) .Execute() > 0; return res; } /// /// 复制 /// /// /// public bool CopyExternalByClass(dto_copy_class model) { bool res = false; foreach (var item in model.classIds) { var externalClass = this.SelectBuilder.From("外部服务分类").Columns("*") .Where("ID", item) .Where("产品ID", model.oldProductId) .Select() .ToList()? .FirstOrDefault(); if(externalClass != null) { return true; } var externalClass1 = this.SelectBuilder.From("外部服务分类").Columns("*") .Where("分类编码", externalClass.分类编码) .Where("分类名称", externalClass.分类名称) .Where("产品ID", model.productId) .Select() .ToList()? .FirstOrDefault(); var class_id = Guid.NewGuid().ToString(); if (externalClass1 != null) { class_id = externalClass1.ID; } else { res = this.InsertBuilder.Insert("外部服务分类") .Column("ID", class_id) .Column("分类编码", externalClass.分类编码) .Column("分类名称", externalClass.分类名称) .Column("分类简码", externalClass.分类简码) .Column("产品ID", model.productId) .Column("创建时间", DateTime.Now) .Execute() > 0; } var external = this.SelectBuilder.From("外部服务").Columns("*") .Where("分类ID", externalClass.ID) .Select() .ToList(); if(external != null) { foreach (var data in external) { var external1 = this.SelectBuilder.From("外部服务").Columns("*") .Where("服务名称", data.服务名称) .Where("服务编码", data.服务编码) .Where("分类ID", class_id) .Select() .ToList()? .FirstOrDefault(); var external_id = Guid.NewGuid().ToString(); if (external1 != null) { external_id = external1.ID; } else { res = this.InsertBuilder.Insert("外部服务") .Column("ID", external_id) .Column("分类ID", class_id) .Column("服务编码", data.服务编码) .Column("服务名称", data.服务名称) .Column("服务简码", data.服务简码) .Column("服务地址", data.服务地址) .Column("功能简述", data.功能简述) .Column("详细描述", data.详细描述) .Column("入参", data.入参) .Column("出参", data.出参) .Column("创建时间", DateTime.Now) .Execute() > 0; } var externalParmaters = this.SelectBuilder.From("外部服务参数").Columns("*") .Where("服务ID", data.ID) .Select() .ToList(); res = this.DeleteBulider.Delete("外部服务参数") .Where("服务ID", external_id) .Execute() > 0; if(externalParmaters != null) { foreach (var parmater in externalParmaters) { res = this.InsertBuilder.Insert("外部服务参数") .Column("ID", Guid.NewGuid().ToString()) .Column("服务ID", external_id) .Column("参数名称", parmater.参数名称) .Column("数据类型", parmater.数据类型) .Column("是否必填", parmater.是否必填) .Column("是否数组", parmater.是否数组) .Column("参数说明", parmater.参数说明) .Column("参数类型", parmater.参数类型) .Column("序号", parmater.序号) .Column("父节点ID", parmater.父节点ID) .Execute() > 0; } } } } } return res; } /// /// 复制 /// /// /// public bool CopyExternal(dto_copy_external model) { bool res = false; foreach (var item in model.externalIds) { var external = this.SelectBuilder.From("外部服务").Columns("*") .Where("ID", item) .Select() .ToList().FirstOrDefault(); var external1 = this.SelectBuilder.From("外部服务").Columns("*") .Where("服务名称", external.服务名称) .Where("服务编码", external.服务编码) .Where("分类ID", model.classId) .Select() .ToList()? .FirstOrDefault(); if(external1 == null) { var external_id = Guid.NewGuid().ToString(); res = this.InsertBuilder.Insert("外部服务") .Column("ID", external_id) .Column("分类ID", model.classId) .Column("服务编码", external.服务编码) .Column("服务名称", external.服务名称) .Column("服务简码", external.服务简码) .Column("服务地址", external.服务地址) .Column("功能简述", external.功能简述) .Column("详细描述", external.详细描述) .Column("入参", external.入参) .Column("出参", external.出参) .Column("创建时间", DateTime.Now) .Execute() > 0; var externalParmaters = this.SelectBuilder.From("外部服务参数").Columns("*") .Where("服务ID", external.ID) .Select() .ToList(); res = this.DeleteBulider.Delete("外部服务参数") .Where("服务ID", external_id) .Execute() > 0; if (externalParmaters != null) { foreach (var parmater in externalParmaters) { res = this.InsertBuilder.Insert("外部服务参数") .Column("ID", Guid.NewGuid().ToString()) .Column("服务ID", external_id) .Column("参数名称", parmater.参数名称) .Column("数据类型", parmater.数据类型) .Column("是否必填", parmater.是否必填) .Column("是否数组", parmater.是否数组) .Column("参数说明", parmater.参数说明) .Column("参数类型", parmater.参数类型) .Column("序号", parmater.序号) .Column("父节点ID", parmater.父节点ID) .Execute() > 0; } } } } return res; } /// /// 查询授权接口 /// /// /// /// /// public DataTable GetAccredit(string keyword, int pageSize, int pageNum,int is_stop, out int total) { string sql = @"WITH w AS ( SELECT a.ID, a.地址标识, a.状态, a.产品ID, b.名称 AS 产品名称, '【' || c.分类编码 || '】' || c.分类名称 AS 分类名称, a.创建人, a.创建时间, a.分类IDS FROM 外部服务产品授权 a LEFT JOIN 产品系统配置 b ON a.产品ID = b.ID LEFT JOIN 外部服务分类 c ON ',' || a.分类IDS || ',' LIKE '%,' || c.ID || ',%' ) SELECT w.ID, w.地址标识, w.状态, w.产品ID, w.产品名称, LISTAGG(w.分类名称, ',') WITHIN GROUP (ORDER BY w.分类名称) AS 授权分类, w.创建人, w.创建时间, w.分类IDS FROM w where 1= 1 "; if(is_stop != 1) { sql += "and w.状态 <> 0"; } var sqlbuilder = this.SqlBuilder; if (!(keyword.IsNullOrEmpty())) { sql += "and (upper(w.地址标识) like '%' || upper(:keyword) || '%' or upper(w.产品名称) like '%' || upper(:keyword) || '%')"; sqlbuilder.Parameters("keyword", keyword); } sql += "GROUP BY w.ID, w.地址标识, w.状态, w.产品ID, w.产品名称, w.创建人, w.创建时间, w.分类IDS"; return sqlbuilder.SqlText(sql) .Paging(pageNum, pageSize) .Select(out total); } /// /// 保存校验时间 /// /// /// public bool SavaAccredit(ExternalAccredit model) { if(model.ID.IsNullOrEmpty()) { return this.InsertBuilder.Insert("外部服务产品授权") .Column("ID", Guid.NewGuid().ToString()) .Column("产品ID", model.产品ID) .Column("分类IDS", model.分类IDS) .Column("状态", model.状态) .Column("创建人", model.创建人) .Column("创建时间", DateTime.Now) .Column("地址标识", GenerateRandomString(8)) .Execute() > 0; }else { var updateBuilder = this.UpdateBuilder.Update("外部服务产品授权") .Column("状态", model.状态); if(!model.产品ID.IsNullOrEmpty()) { updateBuilder.Column("产品ID", model.产品ID) .Column("分类IDS", model.分类IDS) .Column("更新人", model.更新人) .Column("更新时间", DateTime.Now); } return updateBuilder.Where("ID", model.ID).Execute() > 0; } } /// /// 查询授权接口 /// /// /// /// /// public DataTable GetAccredView(string id, string channel_id, string project_id, int pageSize, int pageNum, int is_stop, out int total) { string sql = @"SELECT a.ID, a.过期时间, b.名称 AS 项目名称, a.授权验证码 , a.申请时间 , a.受理时间 , a.状态 , b.状态 as 项目状态 FROM 外部服务授权验证 a, 项目信息 b WHERE a.项目ID = b.ID"; if(is_stop != 1) { sql += " and a.状态 <> 0"; } var sqlbuilder = this.SqlBuilder; if (!id.IsNullOrEmpty()) { sql += " and a.授权产品ID = :授权产品ID"; sqlbuilder.Parameters("授权产品ID", id); }else { sql += " and a.授权验证码 is null"; } if(!channel_id.IsNullOrEmpty()) { sql += " and b.渠道ID = :渠道ID"; sqlbuilder.Parameters("渠道ID", channel_id); } if (!project_id.IsNullOrEmpty()) { sql += " and a.项目ID = :项目ID"; sqlbuilder.Parameters("项目D", project_id); } return sqlbuilder.SqlText(sql) .Paging(pageNum, pageSize) .Select(out total); } public DataTable GetRecords(dto_records_in model, out int total) { var sql = @"SELECT a.*, b.名称 AS 渠道名称, c.名称 AS 项目名称, d.地址标识 from 外部服务文档访问记录 a, 渠道信息 b, 项目信息 c, 外部服务产品授权 d WHERE a.渠道ID = b.ID AND a.项目ID = c.ID AND a.授权ID = d.ID "; var sqlBuilder = this.SqlBuilder; if(!model.渠道ID.IsNullOrEmpty()) { sql += " and a.渠道ID = :渠道ID"; sqlBuilder.Parameters("渠道ID", model.渠道ID); } if (!model.项目ID.IsNullOrEmpty()) { sql += " and a.项目ID = :项目ID"; sqlBuilder.Parameters("项目ID", model.项目ID); } if (!model.访问操作.IsNullOrEmpty()) { sql += " and a.访问操作 = :访问操作"; sqlBuilder.Parameters("访问操作", model.访问操作); } return sqlBuilder.SqlText(sql) .Paging(model.pageNum, model.pageSize) .Select(out total); } } }