using Hh.Mes.Common.Infrastructure; using Hh.Mes.Common.log; using Hh.Mes.Common.Request; using Hh.Mes.POJO.Entity; using Hh.Mes.POJO.Response; using Hh.Mes.Service.Repository; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using Hh.Mes.Pojo.System; using NPOI.SS.Formula.Functions; namespace Hh.Mes.Service.Base { /// <summary> /// OPENVPN信息 /// </summary> public class BaseVpnService : RepositorySqlSugar<base_vpn> { public dynamic Load(PageReq pageReq, base_vpn entity) { return ExceptionsHelp.Instance.ExecuteT(() => { var result = new Response(); var expression = LinqWhere(entity); //先组合查询表达式(多表查询查看IOT 设备列表案例) var query = Context.Queryable<base_vpn>().Where(expression); //Exel false 分页 if (!entity.Exel) { int total = 0; result.Result = query.ToOffsetPage(pageReq.page, pageReq.limit, ref total); result.Count = total; } else { result.Result = query.ToList(); result.Count = result.Result.Count; } return result; }, catchRetrunValue: "list"); } public dynamic Ins(base_vpn entity) { return ExceptionsHelp.Instance.ExecuteT(() => { var response = new Response(); var key = Guid.NewGuid(); entity.vpnKey = key; entity.createBy = sysWebUser.Account; entity.createTime = DateTime.Now; response.Status = Add(entity); if (!response.Status)response.Message = SystemVariable.dataActionError; return response; }); } public dynamic Upd(base_vpn entity) { return ExceptionsHelp.Instance.ExecuteT(() => { var response = new Response(); //如果关联了SIM卡,不允许修改VPN账号 var vpnSimRel = Context.Queryable<base_vpn, base_sim_vpn_rel>((x, y) => x.vpnKey == y.vpnKey) .Where((x, y) => x.id == entity.id) .Select((x, y) => new { x.id, x.vpnNumber }) .First(); if (vpnSimRel != null && entity.vpnNumber != vpnSimRel.vpnNumber) { response.Code = 500; response.Status = false; response.Message = $"当前有sim卡已经关联了VPN,禁止修改VPN账号【{vpnSimRel.vpnNumber}】,如果要修改请先解绑vpn账号SIM卡绑定关系!"; return response; } entity.updateBy = sysWebUser.Account; entity.updateTime = DateTime.Now; response.Status = Update(entity); if (!response.Status) response.Message = SystemVariable.dataActionError; return response; }); } public dynamic DelByIds(int[] ids) { return ExceptionsHelp.Instance.ExecuteT(() => { var response = new Response(); var svQuery = Context.Queryable<base_sim_vpn_rel>(); var vpnQuery = Context.Queryable<base_vpn>(); foreach(var id in ids) { var vpnInfo = vpnQuery.Where(x => x.id == id).First(); //如果关联了SIM,禁止删除 var isSimRel = svQuery.Where(x => x.vpnKey == vpnInfo.vpnKey); var vpnNumber = vpnInfo.vpnNumber; if (isSimRel.Any()) { response.Code = 500; response.Status = false; response.Message = $"选中的VPN:{vpnNumber}关联了SIM卡{isSimRel.First().simKey},禁止删除VPN信息,如果要删除请先解绑VPN账号SIM卡关联关系!如果不解绑,就先不要勾选删除该条VPN信息"; return response; } } Context.Deleteable<base_vpn>().In(ids).ExecuteCommand(); return response; }); } public Response ExportData(base_vpn entity) { return Load(null, entity); } public Expression<Func<base_vpn, bool>> LinqWhere(base_vpn model) { try { var exp = Expressionable.Create<base_vpn>(); //数据过滤条件 //if (!string.IsNullOrWhiteSpace(model.XXX)) exp.And(x => x.XXX.Contains(model.XXX)); if (!string.IsNullOrWhiteSpace(model.vpnNumber)) { exp.And(x => x.vpnNumber.Contains(model.vpnNumber)); } if (!string.IsNullOrWhiteSpace(model.vpnIP)) { exp.And(x => x.vpnIP.Contains(model.vpnIP)); } if (!string.IsNullOrWhiteSpace(model.virtualIP)) { exp.And(x => x.virtualIP.Contains(model.virtualIP)); } return exp.ToExpression();//拼接表达式 } catch (Exception ex) { throw new Exception($"{ex.Message}"); } } } }