Переглянути джерело

Merge branch 'feature-dgy-广电卡激活' into feature-dgy-后台测试

# Conflicts:
#	Startup.cs
DuGuYang 2 роки тому
батько
коміт
959302be2e

+ 129 - 1
AppStart/Helper/SIMPosMerchantTradeService.cs

@@ -5,6 +5,7 @@ using System.Data;
 using Library;
 using MySystem.Models;
 using System.Collections.Generic;
+using LitJson;
 
 /// <summary>
 /// 广电卡交易数据导入
@@ -20,9 +21,13 @@ namespace MySystem
 
         public void Start()//启动
         {
-            Thread thread = new Thread(ImportPostDo);
+            Thread thread = new Thread(ImportPostDo); // 广电卡导激活和交易
             thread.IsBackground = true;
             thread.Start();
+
+            // Thread thread1 = new Thread(SIMActDo); // 通过接口获取广电卡激活数据
+            // thread1.IsBackground = true;
+            // thread1.Start();
         }
 
         public void ImportPostDo()
@@ -370,5 +375,128 @@ namespace MySystem
                 }
             }
         }
+
+
+        /// <summary>
+        /// 通过接口获取广电卡激活数据
+        /// </summary>
+        public void SIMActDo()
+        {
+            while (true)
+            {
+                if (DateTime.Now.Hour > 2 && DateTime.Now.Hour < 19)
+                {
+                    try
+                    {
+                        var time = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
+                        string check = function.ReadInstance("/GetSIMActInfo/check" + time + ".txt");
+                        if (string.IsNullOrEmpty(check))
+                        {
+                            function.WritePage("/InstallmentDeduction/", "check" + DateTime.Now.ToString("yyyy-MM-20") + ".txt", DateTime.Now.ToString("HH:mm:ss"));
+                            var result = RadioCardHelper.Instance.QueryCardOrderInfo(time, time, "1", "99999");
+                            JsonData jsonObj = JsonMapper.ToObject(result);
+                            if (jsonObj["resultCode"].ToString() == "1")
+                            {
+                                SpModels.WebCMSEntities spdb = new SpModels.WebCMSEntities();
+                                var data = jsonObj["data"]["records"];
+                                for (int i = 0; i < data.Count; i++)
+                                {
+                                    var iccId = data["iccId"].ToString();
+                                    var bindRecord = spdb.BindRecord.FirstOrDefault(m => m.MerSnNo == iccId) ?? new SpModels.BindRecord();
+                                    var merchants = spdb.Merchants.FirstOrDefault(m => m.SnNo == iccId) ?? new SpModels.Merchants();
+                                    if (bindRecord.Id == 0 && merchants.Id == 0)
+                                    {
+                                        // {"orderNo":"B20240311214052744568","orderCreateTime":"03/11/2024 21:40:53","phoneNo":"19288438825","firstCharge":"否","initialChargeAmount":"0.00","province":"贵州省","city":"毕节市","productName":"双百套餐","promotionName":null,"productTypeName":"基础套餐","paidInAmount":"100.00","orderStatus":"已完成","activationStatusName":"已激活","activationTime":"03/11/2024 21:51:47","jobId":"VCH010198795","iccId":"89861500232320197354"}
+
+                                        string OrderNo = data["orderNo"].ToString(); //订单编码
+                                        string CreateDate = data["orderCreateTime"].ToString(); //订单创建时间
+                                        string PhoneNumber = data["phoneNo"].ToString(); //选择号码
+                                        string HasFirstCharge = data["firstCharge"].ToString(); //是否有首充
+                                        string FirstChargeAmount = data["initialChargeAmount"].ToString(); //首充金额(元)
+                                        string Province = data["province"].ToString(); //号码归属省份
+                                        string City = data["city"].ToString(); //号码归属地市
+                                        string ProductName = data["productName"].ToString(); //商品名称
+                                        string ActiveName = data["promotionName"].ToString(); //促销活动名称
+                                        string ProductType = data["productTypeName"].ToString(); //商品类型名称
+                                        string ActualAmount = data["paidInAmount"].ToString(); //实付金额(元)
+                                        string OrderStatus = data["orderStatus"].ToString(); //订单状态
+                                        string ActStatus = data["activationStatusName"].ToString(); //激活状态名称
+                                        string ActDate = data["activationTime"].ToString(); //激活时间
+                                        string WorkNo = data["jobId"].ToString(); //BOSS员工工号
+                                        // string AccountName = data[""].ToString(); //账号姓名
+                                        string AccountName = ""; //账号姓名
+                                        string SimNo = iccId; //SIM卡号
+
+                                        string json = "{";
+                                        json += "\"OrderNo\":\"" + OrderNo + "\",";
+                                        json += "\"CreateDate\":\"" + CreateDate + "\",";
+                                        json += "\"PhoneNumber\":\"" + PhoneNumber + "\",";
+                                        json += "\"HasFirstCharge\":\"" + HasFirstCharge + "\",";
+                                        json += "\"FirstChargeAmount\":\"" + FirstChargeAmount + "\",";
+                                        json += "\"Province\":\"" + Province + "\",";
+                                        json += "\"City\":\"" + City + "\",";
+                                        json += "\"ProductName\":\"" + ProductName + "\",";
+                                        json += "\"ActiveName\":\"" + ActiveName + "\",";
+                                        json += "\"ProductType\":\"" + ProductType + "\",";
+                                        json += "\"ActualAmount\":\"" + ActualAmount + "\",";
+                                        json += "\"OrderStatus\":\"" + OrderStatus + "\",";
+                                        json += "\"ActStatus\":\"" + ActStatus + "\",";
+                                        json += "\"ActDate\":\"" + ActDate + "\",";
+                                        json += "\"WorkNo\":\"" + WorkNo + "\",";
+                                        json += "\"AccountName\":\"" + AccountName + "\",";
+                                        json += "\"SimNo\":\"" + SimNo + "\"";
+                                        json += "}";
+
+                                        spdb.BindRecord.Add(new SpModels.BindRecord()
+                                        {
+                                            CreateDate = DateTime.Parse(CreateDate),
+                                            UpdateTime = DateTime.Parse(CreateDate), //机具绑定、解绑时间
+                                            CreateTime = DateTime.Parse(CreateDate), //商户操作时间
+                                            MerNewSnNo = PhoneNumber, //商户手机号
+                                            MerSnNo = SimNo, //序列号
+                                            MerName = AccountName, //商户名称
+                                            MerNo = PhoneNumber, //商户编号
+                                            Remark = ProductType,
+                                            Field1 = Province,
+                                            Field2 = ActiveName,
+                                            Field3 = ProductName,
+                                            Field4 = WorkNo,
+                                            Field5 = ActStatus,
+                                            SeoTitle = ActualAmount,
+                                            SeoKeyword = ActDate,
+                                            SeoDescription = json,
+                                            ProductType = "14",
+                                            Status = 1,
+                                        });
+
+                                        spdb.Merchants.Add(new SpModels.Merchants()
+                                        {
+                                            SnNo = SimNo,
+                                            CreateTime = DateTime.Parse(CreateDate),
+                                            UpdateTime = DateTime.Parse(CreateDate),
+                                            AgentName = AccountName,
+                                            MerRealName = AccountName,
+                                            MerMobile = PhoneNumber,
+                                            MerNo = PhoneNumber,
+                                            MerName = AccountName,
+                                            ProductType = "14",
+                                            Status = 1,
+                                        });
+
+                                        spdb.SaveChanges();
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                        function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "获取广电卡激活信息队列异常");
+                    }
+                }
+                Thread.Sleep(600000);
+            }
+        }
+
     }
 }

+ 68 - 0
AppStart/RadioCardHelper.cs

@@ -0,0 +1,68 @@
+using System;
+using Library;
+using System.Collections.Generic;
+using System.Security.Cryptography;
+
+/// <summary>
+/// 广电卡相关接口
+/// </summary>
+namespace MySystem
+{
+    public class RadioCardHelper
+    {
+        public readonly static RadioCardHelper Instance = new RadioCardHelper();
+        private RadioCardHelper()
+        {
+        }
+
+        //测试
+        // string pubKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCGvhfAXw0yoPgMwBfX6jgDT6XBjWqOFcGmsm/pfnGlqGSsMYZNjMLzwOMWfhB8IO7dyh4nu3caXjZTbBUJLQtIKcOoM/ZFZZiOXBW2xDg5WPSswmtCvaSmct9rrd0OGvZtNvgimcNjnHbiE1/1LPxwKHWyzdxzRul5NJdg0Vdw1QIDAQAB";
+        // string priKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAJVLd0ePGZ6fKK1TwcGIxvknF7liDhGyedk3IRxEwTP6P+YS7Y9WaKxDTxIc77ECFSWlvZIPKOXXufMTzwkEGvuAKO+kD9C5R2D+4U3IhztrzcHif8Pn5+I2fVUGuXisUJ+bPxEKSjw7sn5S94uCIsy7o79rHAovAwn+2veLw8xDAgMBAAECgYAqZ8gWnE/jnUOZj9vOFAKoTHFRp8dlQXOYvi76b5ENKXyy5hdyClIq8+dmtq9icLv++IfTD9lHB7J6l9rLrc3XyNmdRSzxSxOT/kPYv1qZoNCqAlTFjWwLNw8tkarcc9NbNXg9UOS/UE97Hs1vlEThOB12cz+5wEF62l+LvZCxeQJBAMrgiujwoKddhCNGuVr3Gac98j4PBqvgtakvYUzvF78gJ0ffngb0J6s1rmGgmaohJc5YE8RwHa4AbIAUjhsdTx0CQQC8YyPgtD44i6+IQMba5zZH1nISSI5yQlPv8dgLXRLDMTnWXx9F7JxXLzAmeJdpkZrdvv1tLzClqDStRClr28rfAkEArFuD6E62TjpWzpmBU9TmiH1KVorxggiQjUHhijj+lbO9a4SBfyrioMQkeHC23CD5O4r8kEEoFfHqPA46hLKryQJAcCHOvDRtCLlUbRSpiKixLYdedLWNXENQtPTN9M2cmmSVmZ0a/0L8OATVc0C6V1MczDqfnDrHiQMa/7sfsJyuHwJBAMLGVR4buHGR/zrnO7FJa4zPw0KK+xUSttDQ9T2+JzV+RcaffmwSm511q+lAZW8e+SrT08WBKhEY8bYUEV95VAM=";
+        // string orgNo = "YCJG10010003";
+        // string apiKey = "12345678";
+        // string host = "https://bmp-test.cbnyunchang.com";
+
+        //生产
+        string pubKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCZ+zsPxpoM85OFlHOqN3aauub5PqC8lmfFQKgWz7XITCPsWdYrBY/Niu29tSNchYZq+wrboyhrhCx9PacWeF5hQ0qkOIw/vcLQJe4RWXj3eBMfbqj7a2dJlcFI12TP0m1lCaI5z9lZ1FHtZDzU0lBBiRUCRNsJa/ktrt1MjU7nAQIDAQAB";
+        string priKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJBIQq3hyV0EseFd6X+nzRc++bZoljQqqou2NPUW5RD+wLBTk08LGwhGq7hR9WlG95aQ3NHbqNT/Tt8eiH9a8k7FzXHDzGAnGpYTh1fCzSx+lzmRA0E8WUH2CdjSLiNxb4Dxvqcrht5TpgFp2NRaGIIAvB+h8QZ1Uhjux5LGiJaJAgMBAAECgYBl65WmrSOIYOOi9qsWMRvwetz9HL5WFXmp/clFBKpFqh/FrxQVNxweaYWuS78XYjlNlAFZAVkvNTaq6C+1/zHAl3YmRowVz2ut1WoTT5MjZBJsR1d7SnSKp/ZuquKGGPG9l1jbUgY6CfekUhvKzUdk3/k7r3zUzUzEWq4dDdM/XQJBAP2SwEDg78nJxKMBmjKYwEpYYYL6DxTYje9J07/Ms7L8W7OtIj+Xm6I0siBWLe4Y5tVtBzaohxnbzoKfNODaNFMCQQCRqb+5fD02I+Sa62gTQepb1u1HgguS1KfFB0inmwMs+VEFYs73N8LC3PSzONhOLlIV/bzs4CvpnMHyF16qie4zAkEA9GBR2DTv41EIqPAKY2jDKOM0Vr4XeseZQlusLtRg+sYqumbI8vBxlUmjwXZMnYJyNI32vb59NXaY91nn5Ctm8QJAYSwkwtCm5R88ujygyXgHqAzRbgrLPcCvyzj4txcqHy6TZkxsVW/VdbmBZK5fXoh4KkODbWJ+6PGyUJZWiN5LEQJAelIs1KLSVQ+GAzDslXIyxYhTP9yLcxAMbCuQ3tY0jbsyYyB/WuxTvIdwGfGp/GLht36/6RqsRc9JtAyMeXkE1g==";
+        string orgNo = "YCJG10010003";
+        string apiKey = "n^ZbEjK%";
+        string host = "https://bmp.cbnyunchang.com";
+
+
+        #region 广电卡查询开卡订单数据
+        public string QueryCardOrderInfo(string queryBeginTime,string queryEndTime,string pageNo,string pageSize)
+        {
+            string timestamp = function.getTimeStamp(); //时间戳,精确到秒。签名用参数
+            SortedList<string, string> req = new SortedList<string, string>();
+            req.Add("queryBeginTime", queryBeginTime); //工号开通时间,开始时间。格式:yyyy-MM-dd
+            req.Add("queryEndTime", queryEndTime); //工号开通时间,结束时间。格式:yyyy-MM-dd
+            req.Add("pageNo", pageNo); //当前页
+            req.Add("pageSize", pageSize);//每页大小
+            req.Add("brhNo", orgNo);
+            req.Add("timestamp", timestamp);
+            string signstr = function.BuildQueryString(req);
+            function.WriteLog(DateTime.Now.ToString(), "广电卡查询开卡订单数据");
+            function.WriteLog("代签名串\n" + signstr, "广电卡查询开卡订单数据");
+            req.Add("sign", Sign(signstr));
+            string reqstr = Newtonsoft.Json.JsonConvert.SerializeObject(req);
+            function.WriteLog("请求参数\n" + reqstr, "广电卡查询开卡订单数据");
+            string reqUrl = host + "/ycsim-business/openapi/query_card_order_info";
+            function.WriteLog("请求地址\n" + reqUrl, "广电卡查询开卡订单数据");
+            string result = function.PostWebRequest(reqUrl, reqstr, "application/json");
+            function.WriteLog("响应数据\n" + result, "广电卡查询开卡订单数据");
+            return result;
+        }
+        #endregion
+
+        private string Sign(string message)
+        {
+            byte[] keyData = Convert.FromBase64String(priKey);
+            byte[] data = System.Text.Encoding.UTF8.GetBytes(message);
+            var rsa = RSA.Create();
+            rsa.ImportPkcs8PrivateKey(keyData, out _);
+            return Convert.ToBase64String(rsa.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1));
+        }
+
+    }
+}

+ 318 - 0
AppStart/Redis/CustomRedisDbconn.cs

@@ -0,0 +1,318 @@
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+using CSRedis;
+using Library;
+using System.Linq;
+
+namespace MySystem
+{
+    public class CustomRedisDbconn
+    {
+        public CSRedis.CSRedisClient csredis;
+        public CustomRedisDbconn(string key, int Database = 0)
+        {
+            string connstr = Library.ConfigurationManager.AppSettings[key].ToString();
+            csredis = new CSRedis.CSRedisClient(connstr);
+        }
+
+        #region 设置单个字段
+        public bool Set(string key, object value, int sec = -1)
+        {
+            return csredis.Set(key, value, sec);
+            // return false;
+        }
+        #endregion
+
+        #region 整数累加
+        public long AddInt(string key, long value = 1)
+        {
+            return csredis.IncrBy(key, value);
+            // return 0;
+        }
+        #endregion
+
+        #region 数字累加
+        public decimal AddNumber(string key, decimal value = 1)
+        {
+            return csredis.IncrByFloat(key, value);
+            // return 0;
+        }
+        #endregion
+
+        #region 获取单个字段
+        public T Get<T>(string key)
+        {
+            return csredis.Get<T>(key);
+        }
+        #endregion
+
+        #region 设置散列字段
+        public bool HSet(string key, string field, object value)
+        {
+            return csredis.HSet(key, field, value);
+            // return false;
+        }
+        #endregion
+
+        #region 散列整数累加
+        public long HAddInt(string key, string field, long value = 1)
+        {
+            return csredis.HIncrBy(key, field, value);
+            // return 0;
+        }
+        #endregion
+
+        #region 散列数字累加
+        public decimal HAddNumber(string key, string field, decimal value = 1)
+        {
+            return csredis.HIncrByFloat(key, field, value);
+            // return 0;
+        }
+        #endregion
+
+        #region 获取散列元素
+        public T HGet<T>(string key, string field)
+        {
+            return csredis.HGet<T>(key, field);
+        }
+        #endregion
+
+        #region 获取散列所有元素
+        public Dictionary<string, T> HGetAll<T>(string key)
+        {
+            return csredis.HGetAll<T>(key);
+        }
+        #endregion
+
+        #region 添加列表对象
+        public long AddList(string key, object value)
+        {
+            return csredis.LPush(key, value);
+            // return 0;
+        }
+        public long AddList(string key, object[] value)
+        {
+            return csredis.LPush(key, value);
+            // return 0;
+        }
+        public long AddRightList(string key, object value)
+        {
+            return csredis.RPush(key, value);
+            // return 0;
+        }
+        public T RPop<T>(string key)
+        {
+            return csredis.RPop<T>(key);
+        }
+        #endregion
+
+        #region 添加集合对象
+        public long SAdd(string key, object value)
+        {
+            return csredis.SAdd(key, value);
+            // return 0;
+        }
+        public long SAdd(string key, object[] value)
+        {
+            return csredis.SAdd(key, value);
+            // return 0;
+        }
+        #endregion
+
+        #region 获取集合对象
+        public T[] SGetList<T>(string key)
+        {
+            return csredis.SMembers<T>(key);
+        }
+        #endregion
+
+        #region 判断元素是否存在
+        public bool SIsMember(string key, object value)
+        {
+            return csredis.SIsMember(key, value);
+        }
+        #endregion
+
+        #region 修改列表对象
+        public bool SetList(string key, int index, object value)
+        {
+            long itemindex = csredis.LLen(key) - index - 1;
+            return csredis.LSet(key, itemindex, value);
+            // return false;
+        }
+        #endregion
+
+        #region 删除列表对象
+        public long DelFromList(string key, object value)
+        {
+            return csredis.LRem(key, 0, value);
+            // return false;
+        }
+        #endregion
+
+        #region 获取列表
+        public List<T> GetList<T>(string key, int pageNum = 1, int pageSize = 10)
+        {
+            int start = (pageNum - 1) * pageSize;
+            int end = start + pageSize - 1;
+            T[] list = csredis.LRange<T>(key, start, end);
+            return list.ToList();
+        }
+        #endregion
+
+        #region 添加排序列表对象
+        public long AddSort(string key, object value, decimal score)
+        {
+            return csredis.ZAdd(key, (score, value));
+            // return 0;
+        }
+        #endregion
+
+        #region 获取排序列表
+        public List<T> GetSort<T>(string key, int pageNum = 1, int pageSize = 10)
+        {
+            int start = (pageNum - 1) * pageSize;
+            int end = start + pageSize;
+            string[] list = csredis.ZRangeByScore(key, start, end);
+            List<T> lists = new List<T>();
+            foreach (string record in list)
+            {
+                lists.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<T>(record));
+            }
+            return lists;
+        }
+        public List<T> GetSortDesc<T>(string key, int pageNum = 1, int pageSize = 10)
+        {
+            int start = (pageNum - 1) * pageSize;
+            int end = start + pageSize;
+            string[] list = csredis.ZRevRangeByScore(key, start, end);
+            List<T> lists = new List<T>();
+            foreach (string record in list)
+            {
+                lists.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<T>(record));
+            }
+            return lists;
+        }
+        #endregion
+
+        public bool Remove(string key, long start, long end)
+        {
+            return csredis.LTrim(key, start, end);
+        }
+
+        public bool RemoveTop(string key, long count)
+        {
+            return RedisDbconn.Instance.Remove(key, count, RedisDbconn.Instance.Count(key) - 1); ;
+        }
+
+        public long Count(string key)
+        {
+            return csredis.LLen(key);
+        }
+
+        public void Clear(string pattern)
+        {
+            string[] keys = csredis.Keys(pattern);
+            csredis.Del(keys);
+        }
+
+        public string[] GetKeys(string pattern)
+        {
+            string[] keys = csredis.Keys(pattern);
+            return keys;
+        }
+
+        public bool Exists(string key)
+        {
+            return csredis.Exists(key);
+        }
+
+        public bool HExists(string key, string field)
+        {
+            return csredis.HExists(key, field);
+        }        
+
+        public void SetExpire(string key, int expire)
+        {
+            csredis.Expire(key, expire); //秒为单位
+        }
+
+
+
+
+        /// <summary>
+        /// 锁key
+        /// </summary>
+        private readonly string lockKey = "RedisLock";
+        /// <summary>
+        /// 锁的过期秒数
+        /// </summary>
+        private readonly int lockTime = 20;
+        /// <summary>
+        /// 续命线程取消令牌
+        /// </summary>
+        private CancellationTokenSource tokenSource = new CancellationTokenSource();
+
+        /// <summary>
+        /// 获取锁
+        /// </summary>
+        /// <param name="requestId">请求id保证释放锁时的客户端和加锁的客户端一致</param>
+        /// <returns></returns>
+        public bool GetLock(string requestId)
+        {
+            //设置key 设置过期时间20s
+            while (true)
+            {
+                //设置key Redis2.6.12以上版本,可以用set获取锁。set可以实现setnx和expire,这个是原子操作
+                if (csredis.Set(lockKey, requestId, lockTime, RedisExistence.Nx))
+                {
+                    //设置成功后开启子线程为key续命
+                    CreateThredXm();
+                    return true;
+                }
+            }
+        }
+        /// <summary>
+        /// 为锁续命(防止业务操作时间大于锁自动释放时间,锁被自动释放掉)
+        /// </summary>
+        void CreateThredXm()
+        {
+            Task.Run(() =>
+            {
+                while (true)
+                {
+                    Thread.Sleep(10);
+                    //外部取消 退出子线程
+                    if (tokenSource.IsCancellationRequested)
+                    {
+                        return;
+                    }
+                    //查询key还有多少秒释放
+                    var Seconds = csredis.PTtl(lockKey) / 1000;
+                    //key还剩1/3秒时重设过期时间
+                    if (Seconds < (lockTime / 3))
+                    {
+                        //小于5秒则自动 重设过期时间
+                        csredis.Expire(lockKey, lockTime);
+                    }
+                }
+            }, tokenSource.Token);
+        }
+        /// <summary>
+        /// 释放锁操作
+        /// </summary>
+        /// <param name="requestId">请求id保证释放锁时的客户端和加锁的客户端一致</param>
+        public void ReleaseLock(string requestId)
+        {
+            //这里使用Lua脚本保证原子性操作
+            string script = "if  redis.call('get', KEYS[1]) == ARGV[1] then " +
+                    "return redis.call('del', KEYS[1]) " +
+                    "else return 0 end";
+            csredis.Eval(script, lockKey, requestId);
+            //取消续命线程
+            tokenSource.Cancel();
+        }
+    }
+}

+ 218 - 4
Areas/Admin/Controllers/MainServer/CustomQueryController.cs

@@ -16,6 +16,8 @@ using MySystem.Models;
 using Library;
 using LitJson;
 using MySystemLib;
+using System.Text.RegularExpressions;
+using System.Data;
 
 namespace MySystem.Areas.Admin.Controllers
 {
@@ -56,15 +58,15 @@ namespace MySystem.Areas.Admin.Controllers
 
             Dictionary<string, string> Fields = new Dictionary<string, string>();
 
-            Fields.Add("Title", "1"); //标题
-
-
             string condition = " and Status>-1";
             if(SysUserName != "admin")
             {
                 condition += " and CONCAT(',', AdminNames,',') like '%," + SysUserName + ",%'";
             }
-
+            if(!string.IsNullOrEmpty(data.Title))
+            {
+                condition += " and Title like '%" + data.Title + "%'";
+            }
 
             Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("CustomQuery", Fields, "Id desc", "0", page, limit, condition);
             List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
@@ -316,5 +318,217 @@ namespace MySystem.Areas.Admin.Controllers
 
         #endregion
 
+
+
+        
+        #region 自定义提交
+
+        /// <summary>
+        /// 自定义提交
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Confirm(string right, int Id)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+            ViewBag.Id = Id.ToString();
+
+            CustomQuery item = db.CustomQuery.FirstOrDefault(m => m.Id == Id) ?? new CustomQuery();
+            if(SysUserName != "admin")
+            {
+                string checkString = "," + item.AdminNames + ",";
+                if(!checkString.Contains("," + SysUserName + ","))
+                {
+                    return Content("无权限");
+                }
+            }
+            Dictionary<string, string> query = new Dictionary<string, string>();
+            string sql = item.SqlContent;
+            MatchCollection mc = Regex.Matches(sql, @"\$\{.*?\}\$");
+            foreach(Match m in mc)
+            {
+                string[] fieldData = m.Value.Replace("${", "").Replace("}$", "").Split('|');
+                string fieldName = fieldData[0];
+                string Title = fieldData[1];
+                if(!query.ContainsKey(fieldName))
+                {
+                    query.Add(fieldName, Title);
+                }
+            }
+            List<CustomQuerySub> subItems = db.CustomQuerySub.Where(m => m.ParentId == Id).ToList();
+            foreach(CustomQuerySub sub in subItems)
+            {
+                sql = sub.SqlContent;
+                mc = Regex.Matches(sql, @"\$\{.*?\}\$");
+                foreach(Match m in mc)
+                {
+                    string[] fieldData = m.Value.Replace("${", "").Replace("}$", "").Split('|');
+                    string fieldName = fieldData[0];
+                    string Title = fieldData[1];
+                    if(!query.ContainsKey(fieldName))
+                    {
+                        query.Add(fieldName, Title);
+                    }
+                }
+            }
+            ViewBag.query = query;
+
+            return View();
+        }
+
+        #endregion
+
+        #region 自定义提交
+
+        /// <summary>
+        /// 自定义提交
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        public string Confirm(int Id)
+        {
+            var sysAdmin = bsdb.SysAdmin.FirstOrDefault(m => m.AdminName == SysUserName && m.Status > -1);
+            CustomQuery item = db.CustomQuery.FirstOrDefault(m => m.Id == Id) ?? new CustomQuery();
+            string ConnectStr = "";
+            Dictionary<string, string> dicVals = new Dictionary<string, string>();
+            List<CustomQuerySub> subItems = db.CustomQuerySub.Where(m => m.ParentId == Id).ToList();
+            foreach(CustomQuerySub sub in subItems)
+            {
+                ConnectStr = sub.DatabaseConnect;
+                if(!string.IsNullOrEmpty(ConnectStr))
+                {
+                    ConnectStr = GetConnectStr(sub.DatabaseConnect);
+                }
+                else
+                {
+                    if(item.ExcuteFlag == 2)
+                    {
+                        ConnectStr = MysqlConn.RedisConnStr;
+                    }
+                    else
+                    {
+                        ConnectStr = MysqlConn.ReadSqlConnStr;
+                    }
+                }
+
+                string sqlstr = sub.SqlContent;
+                MatchCollection mcsub = Regex.Matches(sqlstr, @"\$\{.*?\}\$");
+                foreach(Match m in mcsub)
+                {
+                    string[] fieldData = m.Value.Replace("${", "").Replace("}$", "").Split('|');
+                    string fieldName = fieldData[0];
+                    sqlstr = sqlstr.Replace(m.Value, Request.Query[fieldName].ToString());
+                }
+
+                mcsub = Regex.Matches(sqlstr, @"\#\{.*?\}\#");
+                foreach(Match m in mcsub)
+                {
+                    string fieldName = m.Value.Replace("#{", "").Replace("}#", "");
+                    if(dicVals.ContainsKey(fieldName))
+                    {
+                        sqlstr = sqlstr.Replace(m.Value, dicVals[fieldName]);
+                    }
+                }
+
+                DataTable dtsub = CustomerSqlConn.dtable(sqlstr, ConnectStr);
+                if(dtsub.Rows.Count > 0)
+                {
+                    if(dtsub.Rows.Count > 1)
+                    {
+                        string val = "";
+                        foreach(DataRow dr in dtsub.Rows)
+                        {
+                            val += dr[0].ToString() + ",";
+                        }
+                        val = val.TrimEnd(',');
+                        dicVals.Add(sub.Alias + "." + dtsub.Columns[0].ColumnName, val);
+                    }
+                    else
+                    {
+                        DataRow dr = dtsub.Rows[0];
+                        foreach(DataColumn dc in dtsub.Columns)
+                        {
+                            dicVals.Add(sub.Alias + "." + dc.ColumnName, dr[dc.ColumnName].ToString());
+                        }
+                    }
+                }
+            }
+            ConnectStr = item.DatabaseConnect;
+            if(!string.IsNullOrEmpty(ConnectStr))
+            {
+                ConnectStr = GetConnectStr(item.DatabaseConnect);
+            }
+            else
+            {
+                if(item.ExcuteFlag == 2)
+                {
+                    ConnectStr = MysqlConn.RedisConnStr;
+                }
+                else
+                {
+                    ConnectStr = MysqlConn.ReadSqlConnStr;
+                }
+            }
+            string sql = item.SqlContent;
+            MatchCollection mc = Regex.Matches(sql, @"\$\{.*?\}\$");
+            foreach(Match m in mc)
+            {
+                string[] fieldData = m.Value.Replace("${", "").Replace("}$", "").Split('|');
+                string fieldName = fieldData[0];
+                sql = sql.Replace(m.Value, Request.Form[fieldName].ToString());
+            }
+            mc = Regex.Matches(sql, @"\$\replace{.*?\}\$");
+            foreach(Match m in mc)
+            {
+                string[] fieldData = m.Value.Replace("$replace{", "").Replace("}$", "").Split('|');
+                string str = fieldData[0];
+                string oldStr = fieldData[1];
+                string newStr = fieldData[2];
+                str = str.Replace(oldStr, newStr);
+                sql = sql.Replace(m.Value, str);
+            }
+            if(item.ExcuteFlag == 1)
+            {
+                string SendData = "{\"Operater\":\"" + sysAdmin.Id + "\",\"SqlString\":\"" + sql + "\",\"FileName\":\"执行\",\"MaxCount\":\"50\",\"ConnectStr\":\"" + ConnectStr + "\"}";
+                RedisDbconn.Instance.AddList("ExportQueue", SendData);
+            }
+            else if(item.ExcuteFlag == 2)
+            {
+                string redisCommand = sql;
+                string[] redisCommandList = redisCommand.Split(' ');
+                string kind = redisCommandList[0];
+                string key = redisCommandList[1];
+                string val = redisCommandList[2];
+                if(kind == "lpush")
+                {
+                    new CustomRedisDbconn(ConnectStr).AddList(key, val);
+                }
+                else if(kind == "set")
+                {
+                    new CustomRedisDbconn(ConnectStr).Set(key, val);
+                }
+                else if(kind == "set")
+                {
+                    new CustomRedisDbconn(ConnectStr).AddInt(key, int.Parse(val));
+                }
+                else if(kind == "set")
+                {
+                    new CustomRedisDbconn(ConnectStr).AddNumber(key, decimal.Parse(val));
+                }
+            }
+            return "success";
+        }
+
+        #endregion
+
+        #region 获取链接数据库字符串
+
+        public string GetConnectStr(string key)
+        {
+            return Library.ConfigurationManager.AppSettings[key].ToString();
+        }
+
+        #endregion
+
     }
 }

+ 236 - 119
Areas/Admin/Controllers/MainServer/CustomQueryDoController.cs

@@ -103,6 +103,7 @@ namespace MySystem.Areas.Admin.Controllers
         public JsonResult IndexData(int Id, int page = 1, int limit = 30)
         {
             Dictionary<string, string> dicVals = new Dictionary<string, string>();
+            Dictionary<string, Dictionary<string, string>> dicValsJson = new Dictionary<string, Dictionary<string, string>>();
             string ConnectStr = "";
             List<CustomQuerySub> subItems = db.CustomQuerySub.Where(m => m.ParentId == Id).ToList();
             foreach(CustomQuerySub sub in subItems)
@@ -144,20 +145,36 @@ namespace MySystem.Areas.Admin.Controllers
                 {
                     if(dtsub.Rows.Count > 1)
                     {
-                        string val = "";
-                        foreach(DataRow dr in dtsub.Rows)
+                        if(!string.IsNullOrEmpty(sub.DataKey))
                         {
-                            val += dr[0].ToString() + ",";
+                            string[] TextFields = sub.DataText.Split(',');
+                            Dictionary<string, string> vals = new Dictionary<string, string>();
+                            foreach(DataRow dr in dtsub.Rows)
+                            {
+                                foreach(string key in TextFields)
+                                {
+                                    vals.Add(key, dr[key].ToString());
+                                }
+                            }
+                            dicValsJson.Add(sub.Alias + "." + sub.DataKey, vals);
+                        }
+                        else
+                        {
+                            string val = "";
+                            foreach(DataRow dr in dtsub.Rows)
+                            {
+                                val += dr[0].ToString() + ",";
+                            }
+                            val = val.TrimEnd(',');
+                            dicVals.Add(sub.Alias + "." + dtsub.Columns[0].ColumnName, val);
                         }
-                        val = val.TrimEnd(',');
-                        dicVals.Add(sub.Alias + "_" + dtsub.Columns[0].ColumnName, val);
                     }
                     else
                     {
                         DataRow dr = dtsub.Rows[0];
                         foreach(DataColumn dc in dtsub.Columns)
                         {
-                            dicVals.Add(sub.Alias + "_" + dc.ColumnName, dr[dc.ColumnName].ToString());
+                            dicVals.Add(sub.Alias + "." + dc.ColumnName, dr[dc.ColumnName].ToString());
                         }
                     }
                 }
@@ -170,7 +187,14 @@ namespace MySystem.Areas.Admin.Controllers
             }
             else
             {
-                ConnectStr = MysqlConn.ReadSqlConnStr;
+                if(item.ExcuteFlag == 2 || item.ExcuteFlag == 3)
+                {
+                    ConnectStr = MysqlConn.RedisConnStr;
+                }
+                else
+                {
+                    ConnectStr = MysqlConn.ReadSqlConnStr;
+                }
             }
             string sql = item.SqlContent;
             MatchCollection mc = Regex.Matches(sql, @"\$\{.*?\}\$");
@@ -203,32 +227,110 @@ namespace MySystem.Areas.Admin.Controllers
                 str = str.Replace(oldStr, newStr);
                 sql = sql.Replace(m.Value, str);
             }
-            if(page > 1)
-            {
-                int skip = (page - 1) * limit;
-                sql += " limit " + skip + "," + limit;
-            }
-            else
+            List<Dictionary<string, string>> diclist = new List<Dictionary<string, string>>();
+            if(item.ExcuteFlag == 0)
             {
-                sql += " limit " + limit;
+                if(page > 1)
+                {
+                    int skip = (page - 1) * limit;
+                    sql += " limit " + skip + "," + limit;
+                }
+                else
+                {
+                    sql += " limit " + limit;
+                }
+                DataTable dt = CustomerSqlConn.dtable(sql, ConnectStr);
+                foreach(DataRow dr in dt.Rows)
+                {
+                    Dictionary<string, string> row = new Dictionary<string, string>();
+                    foreach(DataColumn dc in dt.Columns)
+                    {
+                        Match m = Regex.Match(dr[dc.ColumnName].ToString(), @"\#\{.*?\}\#");
+                        if(m.Success)
+                        {
+                            string fieldName = m.Value.Replace("#{", "").Replace("}#", "");
+                            Dictionary<string, string> fieldVals = dicValsJson[fieldName];
+                            foreach(string field in fieldVals.Keys)
+                            {
+                                row.Add(dc.ColumnName + field, fieldVals[field]);
+                            }
+                        }
+                        else
+                        {
+                            if (dc.DataType == typeof(DateTime))
+                            {
+                                row.Add(dc.ColumnName, string.IsNullOrEmpty(dr[dc.ColumnName].ToString()) ? "" : DateTime.Parse(dr[dc.ColumnName].ToString()).ToString("yyyy-MM-dd HH:mm:ss"));
+                            }
+                            else
+                            {
+                                row.Add(dc.ColumnName, dr[dc.ColumnName].ToString());
+                            }
+                        }
+                    }
+                    diclist.Add(row);
+                }
             }
-            DataTable dt = CustomerSqlConn.dtable(sql, ConnectStr);
-            List<Dictionary<string, string>> diclist = new List<Dictionary<string, string>>();
-            foreach(DataRow dr in dt.Rows)
+            else if(item.ExcuteFlag == 2)
             {
-                Dictionary<string, string> row = new Dictionary<string, string>();
-                foreach(DataColumn dc in dt.Columns)
-                {                 
-                    if (dc.DataType == typeof(DateTime))
+                string redisCommand = sql;
+                string[] redisCommandList = redisCommand.Split(' ');
+                string kind = redisCommandList[0];
+                string key = redisCommandList[1];
+                if(kind == "lrange_json")
+                {
+                    List<Dictionary<string, string>> list = new CustomRedisDbconn(ConnectStr).GetList<Dictionary<string, string>>(key, page, limit);
+                    foreach(Dictionary<string, string> dr in list)
                     {
-                        row.Add(dc.ColumnName, string.IsNullOrEmpty(dr[dc.ColumnName].ToString()) ? "" : DateTime.Parse(dr[dc.ColumnName].ToString()).ToString("yyyy-MM-dd HH:mm:ss"));
+                        Dictionary<string, string> row = new Dictionary<string, string>();
+                        foreach(string ColumnName in dr.Keys)
+                        {
+                            Match m = Regex.Match(dr[ColumnName], @"\#\{.*?\}\#");
+                            if(m.Success)
+                            {
+                                string fieldName = m.Value.Replace("#{", "").Replace("}#", "");
+                                Dictionary<string, string> fieldVals = dicValsJson[fieldName];
+                                foreach(string field in fieldVals.Keys)
+                                {
+                                    row.Add(ColumnName + field, fieldVals[field]);
+                                }
+                            }
+                            else
+                            {
+                                row.Add(ColumnName, dr[ColumnName]);
+                            }
+                        }
+                        diclist.Add(row);
                     }
-                    else
+                }
+                else if(kind == "lrange_str")
+                {
+                    List<string> list = new CustomRedisDbconn(ConnectStr).GetList<string>(key, page, limit);
+                    foreach(string val in list)
                     {
-                        row.Add(dc.ColumnName, dr[dc.ColumnName].ToString());
+                        Dictionary<string, string> row = new Dictionary<string, string>();
+                        Match m = Regex.Match(val, @"\#\{.*?\}\#");
+                        if(m.Success)
+                        {
+                            string fieldName = m.Value.Replace("#{", "").Replace("}#", "");
+                            Dictionary<string, string> fieldVals = dicValsJson[fieldName];
+                            foreach(string field in fieldVals.Keys)
+                            {
+                                row.Add(field, fieldVals[field]);
+                            }
+                        }
+                        else
+                        {
+                            row.Add("值", val);
+                        }
+                        diclist.Add(row);
                     }
                 }
-                diclist.Add(row);
+                else if (kind == "get")
+                {
+                    Dictionary<string, string> row = new Dictionary<string, string>();
+                    row.Add("值", new CustomRedisDbconn(ConnectStr).Get<string>(key));
+                    diclist.Add(row);
+                }
             }
             Dictionary<string, object> obj = new Dictionary<string, object>();
             obj.Add("code", 0);
@@ -251,9 +353,12 @@ namespace MySystem.Areas.Admin.Controllers
             var sysAdmin = bsdb.SysAdmin.FirstOrDefault(m => m.AdminName == SysUserName && m.Status > -1);
 
             Dictionary<string, string> dicVals = new Dictionary<string, string>();
+            List<Dictionary<string, string>> subJson = new List<Dictionary<string, string>>();
             List<CustomQuerySub> subItems = db.CustomQuerySub.Where(m => m.ParentId == Id).ToList();
             foreach(CustomQuerySub sub in subItems)
             {
+                Dictionary<string, string> subJsonItem = new Dictionary<string, string>();
+
                 string ConnectStr = sub.DatabaseConnect;
                 if(!string.IsNullOrEmpty(ConnectStr))
                 {
@@ -283,7 +388,7 @@ namespace MySystem.Areas.Admin.Controllers
                     }
                 }
 
-                DataTable dtsub = CustomerSqlConn.dtable(sqlstr, MysqlConn.ReadSqlConnStr);
+                DataTable dtsub = CustomerSqlConn.dtable(sqlstr, ConnectStr);
                 if(dtsub.Rows.Count > 0)
                 {
                     if(dtsub.Rows.Count > 1)
@@ -294,17 +399,24 @@ namespace MySystem.Areas.Admin.Controllers
                             val += dr[0].ToString() + ",";
                         }
                         val = val.TrimEnd(',');
-                        dicVals.Add(sub.Alias + "_" + dtsub.Columns[0].ColumnName, val);
+                        dicVals.Add(sub.Alias + "." + dtsub.Columns[0].ColumnName, val);
                     }
                     else
                     {
                         DataRow dr = dtsub.Rows[0];
                         foreach(DataColumn dc in dtsub.Columns)
                         {
-                            dicVals.Add(sub.Alias + "_" + dc.ColumnName, dr[dc.ColumnName].ToString());
+                            dicVals.Add(sub.Alias + "." + dc.ColumnName, dr[dc.ColumnName].ToString());
                         }
                     }
                 }
+
+                subJsonItem.Add("DatabaseConnect", sub.DatabaseConnect);
+                subJsonItem.Add("SqlContent", sqlstr);
+                subJsonItem.Add("DataKey", sub.DataKey);
+                subJsonItem.Add("DataText", sub.DataText);
+                subJsonItem.Add("Alias", sub.Alias);
+                subJson.Add(subJsonItem);
             }
             CustomQuery item = db.CustomQuery.FirstOrDefault(m => m.Id == Id) ?? new CustomQuery();
             string sql = item.SqlContent;
@@ -326,7 +438,12 @@ namespace MySystem.Areas.Admin.Controllers
                 sql = sql.Replace(m.Value, str);
             }
             var FileName = item.Title + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
-            string SendData = "{\"Operater\":\"" + sysAdmin.Id + "\",\"SqlString\":\"" + sql + "\",\"FileName\":\"" + FileName + "\",\"MaxCount\":\"0\"}";
+            string SubSqlString = "";
+            if(subJson.Count > 0)
+            {
+                SubSqlString = ",\"SubSqlString\":" + Newtonsoft.Json.JsonConvert.SerializeObject(subJson);
+            }
+            string SendData = "{\"Operater\":\"" + sysAdmin.Id + "\",\"SqlString\":\"" + sql + "\",\"FileName\":\"" + FileName + "\",\"MaxCount\":\"0\"" + SubSqlString + "}";
             RedisDbconn.Instance.AddList("ExportQueue", SendData);
             return "success";
         }
@@ -339,99 +456,99 @@ namespace MySystem.Areas.Admin.Controllers
         /// 执行
         /// </summary>
         /// <returns></returns>
-        public string Excute(int Id)
-        {
-            var sysAdmin = bsdb.SysAdmin.FirstOrDefault(m => m.AdminName == SysUserName && m.Status > -1);
-            string ConnectStr = "";
-            Dictionary<string, string> dicVals = new Dictionary<string, string>();
-            List<CustomQuerySub> subItems = db.CustomQuerySub.Where(m => m.ParentId == Id).ToList();
-            foreach(CustomQuerySub sub in subItems)
-            {
-                ConnectStr = sub.DatabaseConnect;
-                if(!string.IsNullOrEmpty(ConnectStr))
-                {
-                    ConnectStr = GetConnectStr(sub.DatabaseConnect);
-                }
-                else
-                {
-                    ConnectStr = MysqlConn.ReadSqlConnStr;
-                }
+        // public string Excute(int Id)
+        // {
+        //     var sysAdmin = bsdb.SysAdmin.FirstOrDefault(m => m.AdminName == SysUserName && m.Status > -1);
+        //     string ConnectStr = "";
+        //     Dictionary<string, string> dicVals = new Dictionary<string, string>();
+        //     List<CustomQuerySub> subItems = db.CustomQuerySub.Where(m => m.ParentId == Id).ToList();
+        //     foreach(CustomQuerySub sub in subItems)
+        //     {
+        //         ConnectStr = sub.DatabaseConnect;
+        //         if(!string.IsNullOrEmpty(ConnectStr))
+        //         {
+        //             ConnectStr = GetConnectStr(sub.DatabaseConnect);
+        //         }
+        //         else
+        //         {
+        //             ConnectStr = MysqlConn.ReadSqlConnStr;
+        //         }
 
-                string sqlstr = sub.SqlContent;
-                MatchCollection mcsub = Regex.Matches(sqlstr, @"\$\{.*?\}\$");
-                foreach(Match m in mcsub)
-                {
-                    string[] fieldData = m.Value.Replace("${", "").Replace("}$", "").Split('|');
-                    string fieldName = fieldData[0];
-                    sqlstr = sqlstr.Replace(m.Value, Request.Query[fieldName].ToString());
-                }
+        //         string sqlstr = sub.SqlContent;
+        //         MatchCollection mcsub = Regex.Matches(sqlstr, @"\$\{.*?\}\$");
+        //         foreach(Match m in mcsub)
+        //         {
+        //             string[] fieldData = m.Value.Replace("${", "").Replace("}$", "").Split('|');
+        //             string fieldName = fieldData[0];
+        //             sqlstr = sqlstr.Replace(m.Value, Request.Query[fieldName].ToString());
+        //         }
 
-                mcsub = Regex.Matches(sqlstr, @"\#\{.*?\}\#");
-                foreach(Match m in mcsub)
-                {
-                    string fieldName = m.Value.Replace("#{", "").Replace("}#", "");
-                    if(dicVals.ContainsKey(fieldName))
-                    {
-                        sqlstr = sqlstr.Replace(m.Value, dicVals[fieldName]);
-                    }
-                }
+        //         mcsub = Regex.Matches(sqlstr, @"\#\{.*?\}\#");
+        //         foreach(Match m in mcsub)
+        //         {
+        //             string fieldName = m.Value.Replace("#{", "").Replace("}#", "");
+        //             if(dicVals.ContainsKey(fieldName))
+        //             {
+        //                 sqlstr = sqlstr.Replace(m.Value, dicVals[fieldName]);
+        //             }
+        //         }
 
-                DataTable dtsub = CustomerSqlConn.dtable(sqlstr, ConnectStr);
-                if(dtsub.Rows.Count > 0)
-                {
-                    if(dtsub.Rows.Count > 1)
-                    {
-                        string val = "";
-                        foreach(DataRow dr in dtsub.Rows)
-                        {
-                            val += dr[0].ToString() + ",";
-                        }
-                        val = val.TrimEnd(',');
-                        dicVals.Add(sub.Alias + "_" + dtsub.Columns[0].ColumnName, val);
-                    }
-                    else
-                    {
-                        DataRow dr = dtsub.Rows[0];
-                        foreach(DataColumn dc in dtsub.Columns)
-                        {
-                            dicVals.Add(sub.Alias + "_" + dc.ColumnName, dr[dc.ColumnName].ToString());
-                        }
-                    }
-                }
-            }
-            CustomQuery item = db.CustomQuery.FirstOrDefault(m => m.Id == Id) ?? new CustomQuery();
-            ConnectStr = item.DatabaseConnect;
-            if(!string.IsNullOrEmpty(ConnectStr))
-            {
-                ConnectStr = GetConnectStr(item.DatabaseConnect);
-            }
-            else
-            {
-                ConnectStr = MysqlConn.ReadSqlConnStr;
-            }
-            string sql = item.SqlContent;
-            MatchCollection mc = Regex.Matches(sql, @"\$\{.*?\}\$");
-            foreach(Match m in mc)
-            {
-                string[] fieldData = m.Value.Replace("${", "").Replace("}$", "").Split('|');
-                string fieldName = fieldData[0];
-                sql = sql.Replace(m.Value, Request.Query[fieldName].ToString());
-            }
-            mc = Regex.Matches(sql, @"\$\replace{.*?\}\$");
-            foreach(Match m in mc)
-            {
-                string[] fieldData = m.Value.Replace("$replace{", "").Replace("}$", "").Split('|');
-                string str = fieldData[0];
-                string oldStr = fieldData[1];
-                string newStr = fieldData[2];
-                str = str.Replace(oldStr, newStr);
-                sql = sql.Replace(m.Value, str);
-            }
-            var FileName = item.Title + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
-            string SendData = "{\"Operater\":\"" + sysAdmin.Id + "\",\"SqlString\":\"" + sql + "\",\"FileName\":\"执行\",\"MaxCount\":\"" + item.ExcuteFlag + "\",\"ConnectStr\":\"" + ConnectStr + "\"}";
-            RedisDbconn.Instance.AddList("ExportQueue", SendData);
-            return "success";
-        }
+        //         DataTable dtsub = CustomerSqlConn.dtable(sqlstr, ConnectStr);
+        //         if(dtsub.Rows.Count > 0)
+        //         {
+        //             if(dtsub.Rows.Count > 1)
+        //             {
+        //                 string val = "";
+        //                 foreach(DataRow dr in dtsub.Rows)
+        //                 {
+        //                     val += dr[0].ToString() + ",";
+        //                 }
+        //                 val = val.TrimEnd(',');
+        //                 dicVals.Add(sub.Alias + "." + dtsub.Columns[0].ColumnName, val);
+        //             }
+        //             else
+        //             {
+        //                 DataRow dr = dtsub.Rows[0];
+        //                 foreach(DataColumn dc in dtsub.Columns)
+        //                 {
+        //                     dicVals.Add(sub.Alias + "." + dc.ColumnName, dr[dc.ColumnName].ToString());
+        //                 }
+        //             }
+        //         }
+        //     }
+        //     CustomQuery item = db.CustomQuery.FirstOrDefault(m => m.Id == Id) ?? new CustomQuery();
+        //     ConnectStr = item.DatabaseConnect;
+        //     if(!string.IsNullOrEmpty(ConnectStr))
+        //     {
+        //         ConnectStr = GetConnectStr(item.DatabaseConnect);
+        //     }
+        //     else
+        //     {
+        //         ConnectStr = MysqlConn.ReadSqlConnStr;
+        //     }
+        //     string sql = item.SqlContent;
+        //     MatchCollection mc = Regex.Matches(sql, @"\$\{.*?\}\$");
+        //     foreach(Match m in mc)
+        //     {
+        //         string[] fieldData = m.Value.Replace("${", "").Replace("}$", "").Split('|');
+        //         string fieldName = fieldData[0];
+        //         sql = sql.Replace(m.Value, Request.Query[fieldName].ToString());
+        //     }
+        //     mc = Regex.Matches(sql, @"\$\replace{.*?\}\$");
+        //     foreach(Match m in mc)
+        //     {
+        //         string[] fieldData = m.Value.Replace("$replace{", "").Replace("}$", "").Split('|');
+        //         string str = fieldData[0];
+        //         string oldStr = fieldData[1];
+        //         string newStr = fieldData[2];
+        //         str = str.Replace(oldStr, newStr);
+        //         sql = sql.Replace(m.Value, str);
+        //     }
+        //     var FileName = item.Title + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+        //     string SendData = "{\"Operater\":\"" + sysAdmin.Id + "\",\"SqlString\":\"" + sql + "\",\"FileName\":\"执行\",\"MaxCount\":\"" + item.ExcuteFlag + "\",\"ConnectStr\":\"" + ConnectStr + "\"}";
+        //     RedisDbconn.Instance.AddList("ExportQueue", SendData);
+        //     return "success";
+        // }
 
         #endregion
 

+ 9 - 3
Areas/Admin/Views/MainServer/CustomQuery/Add.cshtml

@@ -56,10 +56,16 @@
                             </div>
                         </div>
                         <div class="layui-form-item">
-                            <label class="layui-form-label">是否执行(条数/次)</label>
+                            <label class="layui-form-label">执行类型</label>
                             <div class="layui-input-inline">
-                                <input class="layui-input" type="text" id="ExcuteFlag" name="ExcuteFlag" maxlength="10" autocomplete="off"
-                                    placeholder="请输入执行条数">
+                                <select id="ExcuteFlag" name="ExcuteFlag" lay-search="">
+                                    <option value="">请选择</option>
+                                    <option value="0">sql查询</option>
+                                    <option value="1">sql执行</option>
+                                    <option value="2">redis查询</option>
+                                    <option value="3">redis执行</option>
+                                    <option value="4">查看日志</option>
+                                </select>
                             </div>
                         </div>
                         <div class="layui-form-item">

+ 100 - 0
Areas/Admin/Views/MainServer/CustomQuery/Confirm.cshtml

@@ -0,0 +1,100 @@
+@{
+    string RightInfo = ViewBag.RightInfo as string;
+    string right = ViewBag.right as string;
+    string Id = ViewBag.Id as string;
+    Dictionary<string, string> query = ViewBag.query as Dictionary<string, string>;
+}
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <title>自定义提交</title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <link rel="stylesheet" href="/layuiadmin/layui/css/layui.css" media="all">
+    <script src="/admin/js/jquery-1.10.1.min.js"></script>
+</head>
+<body>
+
+    <div class="layui-form" lay-filter="layuiadmin-form-useradmin" id="layuiadmin-form-useradmin">
+        <input type="hidden" name="Id" value="@Id" />
+        <div class="layui-card">
+          <div class="layui-card-body">
+            <div class="layui-tab" lay-filter="mytabbar">
+                <ul class="layui-tab-title">
+                    <li class="layui-this" lay-id="1">基本信息</li>
+                </ul>
+                <div class="layui-tab-content mt20">
+                    <div class="layui-tab-item layui-show">
+                        <div class="layui-form-item">
+                            <label class="layui-form-label">标题</label>
+                            <div class="layui-input-inline">
+                                <input class="layui-input" type="text" id="Title" name="Title" maxlength="50"
+                                    lay-verify="required|" autocomplete="off" placeholder="请输入标题">
+                            </div>
+                        </div>
+                        @foreach(string key in query.Keys)
+                        {
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">@(query[key])</label>
+                                <div class="layui-input-block">
+                                    <input class="layui-input" type="text" id="@(key)" name="@(key)" lay-verify="required|" autocomplete="off" placeholder="请输入@(query[key])">
+                                </div>
+                            </div>
+                        }
+                    </div>
+
+                    </div>
+            </div>
+            <div class="layui-form-item layui-hide">
+                <input type="button" lay-submit lay-filter="LAY-list-front-submit" id="LAY-list-front-submit" value="确认">
+            </div>
+          </div>
+        </div>
+    </div>
+
+    <script src="/layuiadmin/layui/layui.js"></script>
+    <script src="/other/mybjq/lang/zh_CN.js"></script>
+    <script>
+        
+        layui.config({
+            base: '/layuiadmin/' //静态资源所在路径
+        }).extend({
+            index: 'lib/index' //主入口模块
+        }).use(['index', 'form', 'upload', 'layedit', 'laydate', 'element', 'croppers', 'transfer', 'tree', 'util'], function () {
+            var $ = layui.$
+                , form = layui.form
+                , layer = layui.layer
+                , layedit = layui.layedit
+                , laydate = layui.laydate
+                , croppers = layui.croppers
+                , transfer = layui.transfer
+                , util = layui.util;
+        
+            //Hash地址的定位
+            var layid = location.hash.replace(/^#test=/, '');
+            element.tabChange('test', layid);
+            element.on('tab(test)', function (elem) {
+                location.hash = 'test=' + $(this).attr('lay-id');
+            });
+    
+            //日期
+            
+
+            //上传文件
+            
+
+            //穿梭框
+            
+
+            //TreeView,比如权限管理
+            
+
+            //省市区
+            
+        })
+
+    </script>
+</body>
+</html>

+ 9 - 4
Areas/Admin/Views/MainServer/CustomQuery/Edit.cshtml

@@ -60,11 +60,16 @@
                             </div>
                         </div>
                         <div class="layui-form-item">
-                            <label class="layui-form-label">是否执行(条数/次)</label>
+                            <label class="layui-form-label">执行类型</label>
                             <div class="layui-input-inline">
-                                <input class="layui-input" type="text" id="ExcuteFlag" name="ExcuteFlag"
-                                    value="@editData.ExcuteFlag" maxlength="10" autocomplete="off"
-                                    placeholder="请输入执行条数">
+                                <select id="ExcuteFlag" name="ExcuteFlag" lay-search="">
+                                    <option value="">请选择</option>
+                                    <option value="0" @(editData.ExcuteFlag == 0 ? "selected=selected" : "")>sql查询</option>
+                                    <option value="1" @(editData.ExcuteFlag == 1 ? "selected=selected" : "")>sql执行</option>
+                                    <option value="2" @(editData.ExcuteFlag == 2 ? "selected=selected" : "")>redis查询</option>
+                                    <option value="3" @(editData.ExcuteFlag == 3 ? "selected=selected" : "")>redis执行</option>
+                                    <option value="4" @(editData.ExcuteFlag == 4 ? "selected=selected" : "")>查看日志</option>
+                                </select>
                             </div>
                         </div>
                         <div class="layui-form-item">

+ 5 - 0
Areas/Admin/Views/MainServer/CustomQuery/Index.cshtml

@@ -82,7 +82,12 @@
                     {
                     <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>
                     }
+                    @("{{#if (d.ExcuteFlag == 0 || d.ExcuteFlag == 2 || d.ExcuteFlag == 4){ }}")
                     <a class="layui-btn layui-btn-normal layui-btn-xs" lay-href="/Admin/CustomQueryDo/Index?right=@right&Id=@("{{d.Id}}")"><i class="layui-icon layui-icon-edit"></i>查询</a>
+                    @("{{#} }}")                    
+                    @("{{#if (d.ExcuteFlag == 1 || d.ExcuteFlag == 3){ }}")
+                    <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="confirm"><i class="layui-icon layui-icon-edit"></i>提交</a>
+                    @("{{#} }}")
                     @if (RightInfo.Contains("," + right + "_edit,"))
                     {
                     }

+ 0 - 4
Areas/Admin/Views/MainServer/CustomQueryDo/Index.cshtml

@@ -61,10 +61,6 @@
             <div class="layui-card-body">
                 <div style="padding-bottom: 10px;">
                     <button class="layui-btn" data-type="ExportExcel"><i class="layui-icon layui-icon-export layuiadmin-button-btn"></i>导出</button>
-                    @if (RightInfo.Contains("," + right + "_edit,"))
-                    {
-                    <button class="layui-btn" data-type="Excute"><i class="layui-icon layui-icon-add-1 layuiadmin-button-btn"></i>执行</button>
-                    }
                 </div>
                 
                 <table id="LAY-list-manage" lay-filter="LAY-list-manage"></table>

+ 2 - 1
Config/MysqlConn.cs

@@ -10,6 +10,7 @@ namespace MySystem
         public static string connstr = ConfigurationManager.AppSettings["SqlConnStr"].ToString();
         public static string SqlConnStr = ConfigurationManager.AppSettings["SqlConnStr"].ToString();
         public static string ReadSqlConnStr = ConfigurationManager.AppSettings["ReadSqlConnStr"].ToString();
-
+        public static string RedisConnStr = ConfigurationManager.AppSettings["RedisConnStr"].ToString();
+        
     }
 }

+ 2 - 0
Models/CustomQuerySub.cs

@@ -24,5 +24,7 @@ namespace MySystem.Models
         public string AdminNames { get; set; }
         public string Title { get; set; }
         public string DatabaseConnect { get; set; }
+        public string DataKey { get; set; }
+        public string DataText { get; set; }
     }
 }

+ 12 - 1
Models/WebCMSEntities.cs

@@ -2875,6 +2875,18 @@ namespace MySystem.Models
                     .HasCharSet("utf8")
                     .HasCollation("utf8_general_ci");
 
+                entity.Property(e => e.DataKey)
+                    .HasColumnType("varchar(50)")
+                    .HasComment("key字段")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.DataText)
+                    .HasColumnType("varchar(200)")
+                    .HasComment("text字段")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
                 entity.Property(e => e.DatabaseConnect)
                     .HasColumnType("varchar(50)")
                     .HasComment("链接数据库")
@@ -13425,7 +13437,6 @@ namespace MySystem.Models
                     .HasCollation("utf8_general_ci");
 
                 entity.Property(e => e.OprInviteCode)
-                    .HasColumnName("oprInviteCode")
                     .HasColumnType("varchar(50)")
                     .HasComment("邀请码")
                     .HasCharSet("utf8")

+ 1 - 0
MySystem.csproj

@@ -2,6 +2,7 @@
 <Project Sdk="Microsoft.NET.Sdk.Web">
   <PropertyGroup>
     <TargetFramework>netcoreapp3.0</TargetFramework>
+    <SatelliteResourceLanguages>e</SatelliteResourceLanguages>
   </PropertyGroup>
   <ItemGroup>
     <DotNetCliToolReference Include="dotnet-svcutil" Version="1.0.*"/>

+ 3 - 1
Startup.cs

@@ -153,7 +153,9 @@ namespace MySystem
                 ExcelHelper.Instance.Start();
                 OpExcelHelper.Instance.Start();
                 SIMPosMerchantTradeService.Instance.Start(); //导入广电卡数据
-                // GetRadioCardInfoService.Instance.Start(); //获取行销宝信息
+                GetRadioCardInfoService.Instance.Start(); //获取行销宝信息
+                SIMPosMerchantTradeService.Instance.SIMActDo(); //通过接口获取广电卡激活数据
+                GetRadioCardInfoService.Instance.Start(); //获取行销宝信息
                 SycnUserMachineCountHelper.Instance.Start(); //重置创客机具数量
 
                 TestHelper.Instance.Start(); //生成兑换券

+ 0 - 5
global.json

@@ -1,5 +0,0 @@
-{
-  "sdk": {
-    "version": "3.0.100"
-  }
-}

+ 48 - 0
wwwroot/layuiadmin/modules_main/CustomQuery_Admin.js

@@ -164,6 +164,54 @@ layui.config({
                 }
             });
             layer.full(perContent);
+        } else if (obj.event === 'confirm') {
+            var tr = $(obj.tr);
+            var perContent = layer.open({
+                type: 2
+                , title: '自定义提交'
+                , content: 'Confirm?Id=' + data.Id + ''
+                , maxmin: true
+                , area: ['500px', '450px']
+                , btn: ['确定', '取消']
+                , yes: function (index, layero) {
+                    var iframeWindow = window['layui-layer-iframe' + index]
+                        , submitID = 'LAY-list-front-submit'
+                        , submit = layero.find('iframe').contents().find('#' + submitID);
+
+                    
+                    //监听提交
+                    iframeWindow.layui.form.on('submit(' + submitID + ')', function (data) {
+                        var field = data.field; //获取提交的字段
+                        var userdata = "";
+                        for (var prop in field) {
+                            userdata += prop + "=" + encodeURIComponent(field[prop]) + "&";
+                        }
+                        //提交 Ajax 成功后,静态更新表格中的数据
+                        //$.ajax({});
+                        
+                        $.ajax({
+                            type: "POST",
+                            url: "/Admin/CustomQuery/Confirm?r=" + Math.random(1),
+                            data: userdata,
+                            dataType: "text",
+                            success: function (data) {
+                                layer.close(index); //关闭弹层
+                                if (data == "success") {
+                                    layer.msg("提交成功!等待结果");
+                                } else {
+                                    layer.msg(data);
+                                }
+                            }
+                        });
+                    });
+
+                    submit.trigger('click');
+                }
+                , success: function (layero, index) {
+
+                }
+            });
+            layer.full(perContent);
         }
     });