Browse Source

代码提交

zhaozhiqiang 3 years ago
parent
commit
2050fa17dd
29 changed files with 4739 additions and 0 deletions
  1. 3 0
      RMYY_CallCenter_Api.Bll/RMYY_CallCenter_Api.Bll.csproj
  2. 134 0
      RMYY_CallCenter_Api.Bll/T_QC_IndexBase.cs
  3. 134 0
      RMYY_CallCenter_Api.Bll/T_QC_IndexCategory.cs
  4. 134 0
      RMYY_CallCenter_Api.Bll/T_QC_IndexRes.cs
  5. 20 0
      RMYY_CallCenter_Api.Bll/T_Sys_Login_Logs.cs
  6. 3 0
      RMYY_CallCenter_Api.Dal/RMYY_CallCenter_Api.Dal.csproj
  7. 360 0
      RMYY_CallCenter_Api.Dal/T_QC_IndexBase.cs
  8. 333 0
      RMYY_CallCenter_Api.Dal/T_QC_IndexCategory.cs
  9. 297 0
      RMYY_CallCenter_Api.Dal/T_QC_IndexRes.cs
  10. 52 0
      RMYY_CallCenter_Api.Dal/T_Sys_Login_Logs.cs
  11. 37 0
      RMYY_CallCenter_Api.Model/PageData.cs
  12. 131 0
      RMYY_CallCenter_Api.Model/QCModel.cs
  13. 5 0
      RMYY_CallCenter_Api.Model/RMYY_CallCenter_Api.Model.csproj
  14. 133 0
      RMYY_CallCenter_Api.Model/T_QC_IndexBase.cs
  15. 106 0
      RMYY_CallCenter_Api.Model/T_QC_IndexCategory.cs
  16. 70 0
      RMYY_CallCenter_Api.Model/T_QC_IndexRes.cs
  17. 44 0
      RMYY_CallCenter_Api.Model/T_Sys_Login_Logs.cs
  18. 25 0
      RMYY_CallCenter_Api/Controllers/HomeController.cs
  19. 247 0
      RMYY_CallCenter_Api/Controllers/Quality/DaysTalkTimeController.cs
  20. 188 0
      RMYY_CallCenter_Api/Controllers/Quality/IndexBaseController.cs
  21. 159 0
      RMYY_CallCenter_Api/Controllers/Quality/IndexCategoryController.cs
  22. 391 0
      RMYY_CallCenter_Api/Controllers/Quality/QCManageController.cs
  23. 312 0
      RMYY_CallCenter_Api/Controllers/Quality/QCResultController.cs
  24. 357 0
      RMYY_CallCenter_Api/Controllers/Quality/SwitchedlossCallController.cs
  25. 379 0
      RMYY_CallCenter_Api/Controllers/Quality/TalkTimeController.cs
  26. 140 0
      RMYY_CallCenter_Api/Controllers/report/HourCallTotalController.cs
  27. 248 0
      RMYY_CallCenter_Api/Controllers/report/TotalCallController.cs
  28. 289 0
      RMYY_CallCenter_Api/Controllers/report/YearContrastController.cs
  29. 8 0
      RMYY_CallCenter_Api/RMYY_CallCenter_Api.csproj

+ 3 - 0
RMYY_CallCenter_Api.Bll/RMYY_CallCenter_Api.Bll.csproj

@@ -64,6 +64,9 @@
64 64
     <Compile Include="T_Msg_Chat.cs" />
65 65
     <Compile Include="T_Msg_Chat_Map.cs" />
66 66
     <Compile Include="T_Msg_NoticeInfo.cs" />
67
+    <Compile Include="T_QC_IndexBase.cs" />
68
+    <Compile Include="T_QC_IndexCategory.cs" />
69
+    <Compile Include="T_QC_IndexRes.cs" />
67 70
     <Compile Include="T_Sys_Accessories.cs" />
68 71
     <Compile Include="T_Sys_Department.cs" />
69 72
     <Compile Include="T_Sys_DictionaryBase.cs" />

+ 134 - 0
RMYY_CallCenter_Api.Bll/T_QC_IndexBase.cs

@@ -0,0 +1,134 @@
1
+using System;
2
+using System.Collections.Generic;
3
+using System.Data;
4
+using System.Linq;
5
+using System.Text;
6
+using System.Threading.Tasks;
7
+
8
+namespace RMYY_CallCenter_Api.Bll
9
+{
10
+   public  class T_QC_IndexBase
11
+    {
12
+        private readonly Dal.T_QC_IndexBase dal = new Dal.T_QC_IndexBase();
13
+        public T_QC_IndexBase()
14
+        { }
15
+        #region  BasicMethod
16
+        /// <summary>
17
+        /// 是否存在该记录
18
+        /// </summary>
19
+        public bool Exists(int F_IndexId)
20
+        {
21
+            return dal.Exists(F_IndexId);
22
+        }
23
+
24
+        /// <summary>
25
+        /// 增加一条数据
26
+        /// </summary>
27
+        public int Add(Model.T_QC_IndexBase model)
28
+        {
29
+            return dal.Add(model);
30
+        }
31
+
32
+        /// <summary>
33
+        /// 更新一条数据
34
+        /// </summary>
35
+        public bool Update(Model.T_QC_IndexBase model)
36
+        {
37
+            return dal.Update(model);
38
+        }
39
+
40
+        /// <summary>
41
+        /// 删除一条数据
42
+        /// </summary>
43
+        public bool Delete(int F_IndexId)
44
+        {
45
+
46
+            return dal.Delete(F_IndexId);
47
+        }
48
+        /// <summary>
49
+        /// 删除一条数据
50
+        /// </summary>
51
+        public bool DeleteList(string F_IndexIdlist)
52
+        {
53
+            return dal.DeleteList(F_IndexIdlist);
54
+        }
55
+
56
+        /// <summary>
57
+        /// 得到一个对象实体
58
+        /// </summary>
59
+        public Model.T_QC_IndexBase GetModel(int F_IndexId)
60
+        {
61
+
62
+            return dal.GetModel(F_IndexId);
63
+        }
64
+
65
+        /// <summary>
66
+        /// 获得数据列表
67
+        /// </summary>
68
+        public DataSet GetList(string strWhere)
69
+        {
70
+            return dal.GetList(strWhere);
71
+        }
72
+        /// <summary>
73
+        /// 获得前几行数据
74
+        /// </summary>
75
+        public DataSet GetList(int Top, string strWhere, string filedOrder)
76
+        {
77
+            return dal.GetList(Top, strWhere, filedOrder);
78
+        }
79
+        /// <summary>
80
+        /// 获得数据列表
81
+        /// </summary>
82
+        public List<Model.T_QC_IndexBase> GetModelList(string strWhere)
83
+        {
84
+            DataSet ds = dal.GetList(strWhere);
85
+            return DataTableToList(ds.Tables[0]);
86
+        }
87
+        /// <summary>
88
+        /// 获得数据列表
89
+        /// </summary>
90
+        public List<Model.T_QC_IndexBase> DataTableToList(DataTable dt)
91
+        {
92
+            List<Model.T_QC_IndexBase> modelList = new List<Model.T_QC_IndexBase>();
93
+            int rowsCount = dt.Rows.Count;
94
+            if (rowsCount > 0)
95
+            {
96
+                Model.T_QC_IndexBase model;
97
+                for (int n = 0; n < rowsCount; n++)
98
+                {
99
+                    model = dal.DataRowToModel(dt.Rows[n]);
100
+                    if (model != null)
101
+                    {
102
+                        modelList.Add(model);
103
+                    }
104
+                }
105
+            }
106
+            return modelList;
107
+        }
108
+
109
+        /// <summary>
110
+        /// 获得数据列表
111
+        /// </summary>
112
+        public DataSet GetAllList()
113
+        {
114
+            return GetList("");
115
+        }
116
+
117
+        /// <summary>
118
+        /// 分页获取数据列表
119
+        /// </summary>
120
+        public int GetRecordCount(string strWhere)
121
+        {
122
+            return dal.GetRecordCount(strWhere);
123
+        }
124
+        /// <summary>
125
+        /// 分页获取数据列表
126
+        /// </summary>
127
+        public DataSet GetListByPage(string strWhere, string orderby, int startIndex, int endIndex)
128
+        {
129
+            return dal.GetListByPage(strWhere, orderby, startIndex, endIndex);
130
+        }
131
+
132
+        #endregion  BasicMethod
133
+    }
134
+}

+ 134 - 0
RMYY_CallCenter_Api.Bll/T_QC_IndexCategory.cs

@@ -0,0 +1,134 @@
1
+using System;
2
+using System.Collections.Generic;
3
+using System.Data;
4
+using System.Linq;
5
+using System.Text;
6
+using System.Threading.Tasks;
7
+
8
+namespace RMYY_CallCenter_Api.Bll
9
+{
10
+   public  class T_QC_IndexCategory
11
+    {
12
+        private readonly  Dal.T_QC_IndexCategory Dal = new  Dal.T_QC_IndexCategory();
13
+        public T_QC_IndexCategory()
14
+        { }
15
+        #region  BasicMethod
16
+        /// <summary>
17
+        /// 是否存在该记录
18
+        /// </summary>
19
+        public bool Exists(int F_CategoryId)
20
+        {
21
+            return Dal.Exists(F_CategoryId);
22
+        }
23
+
24
+        /// <summary>
25
+        /// 增加一条数据
26
+        /// </summary>
27
+        public int Add( Model.T_QC_IndexCategory model)
28
+        {
29
+            return Dal.Add(model);
30
+        }
31
+
32
+        /// <summary>
33
+        /// 更新一条数据
34
+        /// </summary>
35
+        public bool Update( Model.T_QC_IndexCategory model)
36
+        {
37
+            return Dal.Update(model);
38
+        }
39
+
40
+        /// <summary>
41
+        /// 删除一条数据
42
+        /// </summary>
43
+        public bool Delete(int F_CategoryId)
44
+        {
45
+
46
+            return Dal.Delete(F_CategoryId);
47
+        }
48
+        /// <summary>
49
+        /// 删除一条数据
50
+        /// </summary>
51
+        public bool DeleteList(string F_CategoryIdlist)
52
+        {
53
+            return Dal.DeleteList(F_CategoryIdlist);
54
+        }
55
+
56
+        /// <summary>
57
+        /// 得到一个对象实体
58
+        /// </summary>
59
+        public  Model.T_QC_IndexCategory GetModel(int F_CategoryId)
60
+        {
61
+
62
+            return Dal.GetModel(F_CategoryId);
63
+        }
64
+
65
+        /// <summary>
66
+        /// 获得数据列表
67
+        /// </summary>
68
+        public DataSet GetList(string strWhere)
69
+        {
70
+            return Dal.GetList(strWhere);
71
+        }
72
+        /// <summary>
73
+        /// 获得前几行数据
74
+        /// </summary>
75
+        public DataSet GetList(int Top, string strWhere, string filedOrder)
76
+        {
77
+            return Dal.GetList(Top, strWhere, filedOrder);
78
+        }
79
+        /// <summary>
80
+        /// 获得数据列表
81
+        /// </summary>
82
+        public List< Model.T_QC_IndexCategory> GetModelList(string strWhere)
83
+        {
84
+            DataSet ds = Dal.GetList(strWhere);
85
+            return DataTableToList(ds.Tables[0]);
86
+        }
87
+        /// <summary>
88
+        /// 获得数据列表
89
+        /// </summary>
90
+        public List< Model.T_QC_IndexCategory> DataTableToList(DataTable dt)
91
+        {
92
+            List< Model.T_QC_IndexCategory> modelList = new List< Model.T_QC_IndexCategory>();
93
+            int rowsCount = dt.Rows.Count;
94
+            if (rowsCount > 0)
95
+            {
96
+                 Model.T_QC_IndexCategory model;
97
+                for (int n = 0; n < rowsCount; n++)
98
+                {
99
+                    model = Dal.DataRowToModel(dt.Rows[n]);
100
+                    if (model != null)
101
+                    {
102
+                        modelList.Add(model);
103
+                    }
104
+                }
105
+            }
106
+            return modelList;
107
+        }
108
+
109
+        /// <summary>
110
+        /// 获得数据列表
111
+        /// </summary>
112
+        public DataSet GetAllList()
113
+        {
114
+            return GetList("");
115
+        }
116
+
117
+        /// <summary>
118
+        /// 分页获取数据列表
119
+        /// </summary>
120
+        public int GetRecordCount(string strWhere)
121
+        {
122
+            return Dal.GetRecordCount(strWhere);
123
+        }
124
+        /// <summary>
125
+        /// 分页获取数据列表
126
+        /// </summary>
127
+        public DataSet GetListByPage(string strWhere, string orderby, int startIndex, int endIndex)
128
+        {
129
+            return Dal.GetListByPage(strWhere, orderby, startIndex, endIndex);
130
+        }
131
+
132
+        #endregion  BasicMethod
133
+    }
134
+}

+ 134 - 0
RMYY_CallCenter_Api.Bll/T_QC_IndexRes.cs

@@ -0,0 +1,134 @@
1
+using System;
2
+using System.Collections.Generic;
3
+using System.Data;
4
+using System.Linq;
5
+using System.Text;
6
+using System.Threading.Tasks;
7
+
8
+namespace RMYY_CallCenter_Api.Bll
9
+{
10
+   public  class T_QC_IndexRes
11
+    {
12
+        private readonly  Dal.T_QC_IndexRes dal = new  Dal.T_QC_IndexRes();
13
+        public T_QC_IndexRes()
14
+        { }
15
+        #region  BasicMethod
16
+        /// <summary>
17
+        /// 是否存在该记录
18
+        /// </summary>
19
+        public bool Exists(int F_Id)
20
+        {
21
+            return dal.Exists(F_Id);
22
+        }
23
+
24
+        /// <summary>
25
+        /// 增加一条数据
26
+        /// </summary>
27
+        public int Add( Model.T_QC_IndexRes model)
28
+        {
29
+            return dal.Add(model);
30
+        }
31
+
32
+        /// <summary>
33
+        /// 更新一条数据
34
+        /// </summary>
35
+        public bool Update( Model.T_QC_IndexRes model)
36
+        {
37
+            return dal.Update(model);
38
+        }
39
+
40
+        /// <summary>
41
+        /// 删除一条数据
42
+        /// </summary>
43
+        public bool Delete(int F_Id)
44
+        {
45
+
46
+            return dal.Delete(F_Id);
47
+        }
48
+        /// <summary>
49
+        /// 删除一条数据
50
+        /// </summary>
51
+        public bool DeleteList(string F_Idlist)
52
+        {
53
+            return dal.DeleteList(F_Idlist);
54
+        }
55
+
56
+        /// <summary>
57
+        /// 得到一个对象实体
58
+        /// </summary>
59
+        public  Model.T_QC_IndexRes GetModel(int F_Id)
60
+        {
61
+
62
+            return dal.GetModel(F_Id);
63
+        }
64
+
65
+        /// <summary>
66
+        /// 获得数据列表
67
+        /// </summary>
68
+        public DataSet GetList(string strWhere)
69
+        {
70
+            return dal.GetList(strWhere);
71
+        }
72
+        /// <summary>
73
+        /// 获得前几行数据
74
+        /// </summary>
75
+        public DataSet GetList(int Top, string strWhere, string filedOrder)
76
+        {
77
+            return dal.GetList(Top, strWhere, filedOrder);
78
+        }
79
+        /// <summary>
80
+        /// 获得数据列表
81
+        /// </summary>
82
+        public List< Model.T_QC_IndexRes> GetModelList(string strWhere)
83
+        {
84
+            DataSet ds = dal.GetList(strWhere);
85
+            return DataTableToList(ds.Tables[0]);
86
+        }
87
+        /// <summary>
88
+        /// 获得数据列表
89
+        /// </summary>
90
+        public List< Model.T_QC_IndexRes> DataTableToList(DataTable dt)
91
+        {
92
+            List< Model.T_QC_IndexRes> modelList = new List< Model.T_QC_IndexRes>();
93
+            int rowsCount = dt.Rows.Count;
94
+            if (rowsCount > 0)
95
+            {
96
+                 Model.T_QC_IndexRes model;
97
+                for (int n = 0; n < rowsCount; n++)
98
+                {
99
+                    model = dal.DataRowToModel(dt.Rows[n]);
100
+                    if (model != null)
101
+                    {
102
+                        modelList.Add(model);
103
+                    }
104
+                }
105
+            }
106
+            return modelList;
107
+        }
108
+
109
+        /// <summary>
110
+        /// 获得数据列表
111
+        /// </summary>
112
+        public DataSet GetAllList()
113
+        {
114
+            return GetList("");
115
+        }
116
+
117
+        /// <summary>
118
+        /// 分页获取数据列表
119
+        /// </summary>
120
+        public int GetRecordCount(string strWhere)
121
+        {
122
+            return dal.GetRecordCount(strWhere);
123
+        }
124
+        /// <summary>
125
+        /// 分页获取数据列表
126
+        /// </summary>
127
+        public DataSet GetListByPage(string strWhere, string orderby, int startIndex, int endIndex)
128
+        {
129
+            return dal.GetListByPage(strWhere, orderby, startIndex, endIndex);
130
+        }
131
+
132
+        #endregion  BasicMethod
133
+    }
134
+}

+ 20 - 0
RMYY_CallCenter_Api.Bll/T_Sys_Login_Logs.cs

@@ -0,0 +1,20 @@
1
+using System;
2
+using System.Collections.Generic;
3
+using System.Linq;
4
+using System.Text;
5
+using System.Threading.Tasks;
6
+
7
+namespace RMYY_CallCenter_Api.Bll
8
+{
9
+   public  class T_Sys_Login_Logs
10
+    {
11
+        private readonly RMYY_CallCenter_Api.Dal.T_Sys_Login_Logs dal = new RMYY_CallCenter_Api.Dal.T_Sys_Login_Logs();
12
+        /// <summary>
13
+        /// 增加一条数据
14
+        /// </summary>
15
+        public int Add(RMYY_CallCenter_Api.Model.T_Sys_Login_Logs model)
16
+        {
17
+            return dal.Add(model);
18
+        }
19
+    }
20
+}

+ 3 - 0
RMYY_CallCenter_Api.Dal/RMYY_CallCenter_Api.Dal.csproj

@@ -64,6 +64,9 @@
64 64
     <Compile Include="T_Msg_Chat.cs" />
65 65
     <Compile Include="T_Msg_Chat_Map.cs" />
66 66
     <Compile Include="T_Msg_NoticeInfo.cs" />
67
+    <Compile Include="T_QC_IndexBase.cs" />
68
+    <Compile Include="T_QC_IndexCategory.cs" />
69
+    <Compile Include="T_QC_IndexRes.cs" />
67 70
     <Compile Include="T_Sys_Accessories.cs" />
68 71
     <Compile Include="T_Sys_Department.cs" />
69 72
     <Compile Include="T_Sys_DictionaryBase.cs" />

+ 360 - 0
RMYY_CallCenter_Api.Dal/T_QC_IndexBase.cs

@@ -0,0 +1,360 @@
1
+using RMYY_CallCenter_Api.DB;
2
+using System;
3
+using System.Collections.Generic;
4
+using System.Data;
5
+using System.Data.SqlClient;
6
+using System.Linq;
7
+using System.Text;
8
+using System.Threading.Tasks;
9
+
10
+namespace RMYY_CallCenter_Api.Dal
11
+{
12
+    public class T_QC_IndexBase
13
+    {
14
+        public T_QC_IndexBase()
15
+        { }
16
+        #region  BasicMethod
17
+        /// <summary>
18
+        /// 是否存在该记录
19
+        /// </summary>
20
+        public bool Exists(int F_IndexId)
21
+        {
22
+            StringBuilder strSql = new StringBuilder();
23
+            strSql.Append("select count(1) from T_QC_IndexBase with(nolock)");
24
+            strSql.Append(" where F_IndexId=@F_IndexId");
25
+            SqlParameter[] parameters = {
26
+                    new SqlParameter("@F_IndexId", SqlDbType.Int,4)
27
+            };
28
+            parameters[0].Value = F_IndexId;
29
+
30
+            return DbHelperSQL.Exists(strSql.ToString(), parameters);
31
+        }
32
+
33
+
34
+        /// <summary>
35
+        /// 增加一条数据
36
+        /// </summary>
37
+        public int Add( Model.T_QC_IndexBase model)
38
+        {
39
+            StringBuilder strSql = new StringBuilder();
40
+            strSql.Append("insert into T_QC_IndexBase(");
41
+            strSql.Append("F_CategoryId,F_Score,F_Title,F_Content,F_Remark,F_CreateOn,F_CreateBy,F_ModifyOn,F_ModifyBy,F_DeleteFlag,F_Sort,F_DeleteOn)");
42
+            strSql.Append(" values (");
43
+            strSql.Append("@F_CategoryId,@F_Score,@F_Title,@F_Content,@F_Remark,@F_CreateOn,@F_CreateBy,@F_ModifyOn,@F_ModifyBy,@F_DeleteFlag,@F_Sort,@F_DeleteOn)");
44
+            strSql.Append(";select @@IDENTITY");
45
+            SqlParameter[] parameters = {
46
+                    new SqlParameter("@F_CategoryId", SqlDbType.Int,4),
47
+                    new SqlParameter("@F_Score", SqlDbType.Int,4),
48
+                    new SqlParameter("@F_Title", SqlDbType.VarChar,1000),
49
+                    new SqlParameter("@F_Content", SqlDbType.VarChar,2000),
50
+                    new SqlParameter("@F_Remark", SqlDbType.VarChar,500),
51
+                    new SqlParameter("@F_CreateOn", SqlDbType.DateTime),
52
+                    new SqlParameter("@F_CreateBy", SqlDbType.Int,4),
53
+                    new SqlParameter("@F_ModifyOn", SqlDbType.DateTime),
54
+                    new SqlParameter("@F_ModifyBy", SqlDbType.Int,4),
55
+                    new SqlParameter("@F_DeleteFlag", SqlDbType.Int,4),
56
+                    new SqlParameter("@F_Sort", SqlDbType.Int,4),
57
+                    new SqlParameter("@F_DeleteOn", SqlDbType.DateTime)};
58
+            parameters[0].Value = model.F_CategoryId;
59
+            parameters[1].Value = model.F_Score;
60
+            parameters[2].Value = model.F_Title;
61
+            parameters[3].Value = model.F_Content;
62
+            parameters[4].Value = model.F_Remark;
63
+            parameters[5].Value = model.F_CreateOn;
64
+            parameters[6].Value = model.F_CreateBy;
65
+            parameters[7].Value = model.F_ModifyOn;
66
+            parameters[8].Value = model.F_ModifyBy;
67
+            parameters[9].Value = model.F_DeleteFlag;
68
+            parameters[10].Value = model.F_Sort;
69
+            parameters[11].Value = model.F_DeleteOn;
70
+
71
+            object obj = DbHelperSQL.GetSingle(strSql.ToString(), parameters);
72
+            if (obj == null)
73
+            {
74
+                return 0;
75
+            }
76
+            else
77
+            {
78
+                return Convert.ToInt32(obj);
79
+            }
80
+        }
81
+        /// <summary>
82
+        /// 更新一条数据
83
+        /// </summary>
84
+        public bool Update( Model.T_QC_IndexBase model)
85
+        {
86
+            StringBuilder strSql = new StringBuilder();
87
+            strSql.Append("update T_QC_IndexBase set ");
88
+            strSql.Append("F_CategoryId=@F_CategoryId,");
89
+            strSql.Append("F_Score=@F_Score,");
90
+            strSql.Append("F_Title=@F_Title,");
91
+            strSql.Append("F_Content=@F_Content,");
92
+            strSql.Append("F_Remark=@F_Remark,");
93
+            strSql.Append("F_CreateOn=@F_CreateOn,");
94
+            strSql.Append("F_CreateBy=@F_CreateBy,");
95
+            strSql.Append("F_ModifyOn=@F_ModifyOn,");
96
+            strSql.Append("F_ModifyBy=@F_ModifyBy,");
97
+            strSql.Append("F_DeleteFlag=@F_DeleteFlag,");
98
+            strSql.Append("F_Sort=@F_Sort,");
99
+            strSql.Append("F_DeleteOn=@F_DeleteOn");
100
+            strSql.Append(" where F_IndexId=@F_IndexId");
101
+            SqlParameter[] parameters = {
102
+                    new SqlParameter("@F_CategoryId", SqlDbType.Int,4),
103
+                    new SqlParameter("@F_Score", SqlDbType.Int,4),
104
+                    new SqlParameter("@F_Title", SqlDbType.VarChar,1000),
105
+                    new SqlParameter("@F_Content", SqlDbType.VarChar,2000),
106
+                    new SqlParameter("@F_Remark", SqlDbType.VarChar,500),
107
+                    new SqlParameter("@F_CreateOn", SqlDbType.DateTime),
108
+                    new SqlParameter("@F_CreateBy", SqlDbType.Int,4),
109
+                    new SqlParameter("@F_ModifyOn", SqlDbType.DateTime),
110
+                    new SqlParameter("@F_ModifyBy", SqlDbType.Int,4),
111
+                    new SqlParameter("@F_DeleteFlag", SqlDbType.Int,4),
112
+                    new SqlParameter("@F_Sort", SqlDbType.Int,4),
113
+                    new SqlParameter("@F_DeleteOn", SqlDbType.DateTime),
114
+                    new SqlParameter("@F_IndexId", SqlDbType.Int,4)};
115
+            parameters[0].Value = model.F_CategoryId;
116
+            parameters[1].Value = model.F_Score;
117
+            parameters[2].Value = model.F_Title;
118
+            parameters[3].Value = model.F_Content;
119
+            parameters[4].Value = model.F_Remark;
120
+            parameters[5].Value = model.F_CreateOn;
121
+            parameters[6].Value = model.F_CreateBy;
122
+            parameters[7].Value = model.F_ModifyOn;
123
+            parameters[8].Value = model.F_ModifyBy;
124
+            parameters[9].Value = model.F_DeleteFlag;
125
+            parameters[10].Value = model.F_Sort;
126
+            parameters[11].Value = model.F_DeleteOn;
127
+            parameters[12].Value = model.F_IndexId;
128
+
129
+            int rows = DbHelperSQL.ExecuteSql(strSql.ToString(), parameters);
130
+            if (rows > 0)
131
+            {
132
+                return true;
133
+            }
134
+            else
135
+            {
136
+                return false;
137
+            }
138
+        }
139
+
140
+        /// <summary>
141
+        /// 删除一条数据
142
+        /// </summary>
143
+        public bool Delete(int F_IndexId)
144
+        {
145
+
146
+            StringBuilder strSql = new StringBuilder();
147
+            strSql.Append("delete from T_QC_IndexBase ");
148
+            strSql.Append(" where F_IndexId=@F_IndexId");
149
+            SqlParameter[] parameters = {
150
+                    new SqlParameter("@F_IndexId", SqlDbType.Int,4)
151
+            };
152
+            parameters[0].Value = F_IndexId;
153
+
154
+            int rows = DbHelperSQL.ExecuteSql(strSql.ToString(), parameters);
155
+            if (rows > 0)
156
+            {
157
+                return true;
158
+            }
159
+            else
160
+            {
161
+                return false;
162
+            }
163
+        }
164
+        /// <summary>
165
+        /// 批量删除数据
166
+        /// </summary>
167
+        public bool DeleteList(string F_IndexIdlist)
168
+        {
169
+            StringBuilder strSql = new StringBuilder();
170
+            strSql.Append("delete from T_QC_IndexBase ");
171
+            strSql.Append(" where F_IndexId in (" + F_IndexIdlist + ")  ");
172
+            int rows = DbHelperSQL.ExecuteSql(strSql.ToString());
173
+            if (rows > 0)
174
+            {
175
+                return true;
176
+            }
177
+            else
178
+            {
179
+                return false;
180
+            }
181
+        }
182
+
183
+
184
+        /// <summary>
185
+        /// 得到一个对象实体
186
+        /// </summary>
187
+        public Model.T_QC_IndexBase GetModel(int F_IndexId)
188
+        {
189
+
190
+            StringBuilder strSql = new StringBuilder();
191
+            strSql.Append("select  top 1 F_IndexId,F_CategoryId,F_Score,F_Title,F_Content,F_Remark,F_CreateOn,F_CreateBy,F_ModifyOn,F_ModifyBy,F_DeleteFlag,F_Sort,F_DeleteOn from T_QC_IndexBase with(nolock)");
192
+            strSql.Append(" where F_IndexId=@F_IndexId");
193
+            SqlParameter[] parameters = {
194
+                    new SqlParameter("@F_IndexId", SqlDbType.Int,4)
195
+            };
196
+            parameters[0].Value = F_IndexId;
197
+
198
+            Model.T_QC_IndexBase model = new Model.T_QC_IndexBase();
199
+            DataSet ds = DbHelperSQL.Query(strSql.ToString(), parameters);
200
+            if (ds.Tables[0].Rows.Count > 0)
201
+            {
202
+                return DataRowToModel(ds.Tables[0].Rows[0]);
203
+            }
204
+            else
205
+            {
206
+                return null;
207
+            }
208
+        }
209
+
210
+
211
+        /// <summary>
212
+        /// 得到一个对象实体
213
+        /// </summary>
214
+        public Model.T_QC_IndexBase DataRowToModel(DataRow row)
215
+        {
216
+            Model.T_QC_IndexBase model = new Model.T_QC_IndexBase();
217
+            if (row != null)
218
+            {
219
+                if (row["F_IndexId"] != null && row["F_IndexId"].ToString() != "")
220
+                {
221
+                    model.F_IndexId = int.Parse(row["F_IndexId"].ToString());
222
+                }
223
+                if (row["F_CategoryId"] != null && row["F_CategoryId"].ToString() != "")
224
+                {
225
+                    model.F_CategoryId = int.Parse(row["F_CategoryId"].ToString());
226
+                }
227
+                if (row["F_Score"] != null && row["F_Score"].ToString() != "")
228
+                {
229
+                    model.F_Score = int.Parse(row["F_Score"].ToString());
230
+                }
231
+                if (row["F_Title"] != null)
232
+                {
233
+                    model.F_Title = row["F_Title"].ToString();
234
+                }
235
+                if (row["F_Content"] != null)
236
+                {
237
+                    model.F_Content = row["F_Content"].ToString();
238
+                }
239
+                if (row["F_Remark"] != null)
240
+                {
241
+                    model.F_Remark = row["F_Remark"].ToString();
242
+                }
243
+                if (row["F_CreateOn"] != null && row["F_CreateOn"].ToString() != "")
244
+                {
245
+                    model.F_CreateOn = DateTime.Parse(row["F_CreateOn"].ToString());
246
+                }
247
+                if (row["F_CreateBy"] != null && row["F_CreateBy"].ToString() != "")
248
+                {
249
+                    model.F_CreateBy = int.Parse(row["F_CreateBy"].ToString());
250
+                }
251
+                if (row["F_ModifyOn"] != null && row["F_ModifyOn"].ToString() != "")
252
+                {
253
+                    model.F_ModifyOn = DateTime.Parse(row["F_ModifyOn"].ToString());
254
+                }
255
+                if (row["F_ModifyBy"] != null && row["F_ModifyBy"].ToString() != "")
256
+                {
257
+                    model.F_ModifyBy = int.Parse(row["F_ModifyBy"].ToString());
258
+                }
259
+                if (row["F_DeleteFlag"] != null && row["F_DeleteFlag"].ToString() != "")
260
+                {
261
+                    model.F_DeleteFlag = int.Parse(row["F_DeleteFlag"].ToString());
262
+                }
263
+                if (row["F_Sort"] != null && row["F_Sort"].ToString() != "")
264
+                {
265
+                    model.F_Sort = int.Parse(row["F_Sort"].ToString());
266
+                }
267
+                if (row["F_DeleteOn"] != null && row["F_DeleteOn"].ToString() != "")
268
+                {
269
+                    model.F_DeleteOn = DateTime.Parse(row["F_DeleteOn"].ToString());
270
+                }
271
+            }
272
+            return model;
273
+        }
274
+
275
+        /// <summary>
276
+        /// 获得数据列表
277
+        /// </summary>
278
+        public DataSet GetList(string strWhere)
279
+        {
280
+            StringBuilder strSql = new StringBuilder();
281
+            strSql.Append("select F_IndexId,F_CategoryId,F_Score,F_Title,F_Content,F_Remark,F_CreateOn,F_CreateBy,F_ModifyOn,F_ModifyBy,F_DeleteFlag,F_Sort,F_DeleteOn ");
282
+            strSql.Append(" FROM T_QC_IndexBase with(nolock)");
283
+            if (strWhere.Trim() != "")
284
+            {
285
+                strSql.Append(" where " + strWhere);
286
+            }
287
+            return DbHelperSQL.Query(strSql.ToString());
288
+        }
289
+
290
+        /// <summary>
291
+        /// 获得前几行数据
292
+        /// </summary>
293
+        public DataSet GetList(int Top, string strWhere, string filedOrder)
294
+        {
295
+            StringBuilder strSql = new StringBuilder();
296
+            strSql.Append("select ");
297
+            if (Top > 0)
298
+            {
299
+                strSql.Append(" top " + Top.ToString());
300
+            }
301
+            strSql.Append(" F_IndexId,F_CategoryId,F_Score,F_Title,F_Content,F_Remark,F_CreateOn,F_CreateBy,F_ModifyOn,F_ModifyBy,F_DeleteFlag,F_Sort,F_DeleteOn ");
302
+            strSql.Append(" FROM T_QC_IndexBase with(nolock)");
303
+            if (strWhere.Trim() != "")
304
+            {
305
+                strSql.Append(" where " + strWhere);
306
+            }
307
+            strSql.Append(" order by " + filedOrder);
308
+            return DbHelperSQL.Query(strSql.ToString());
309
+        }
310
+
311
+        /// <summary>
312
+        /// 获取记录总数
313
+        /// </summary>
314
+        public int GetRecordCount(string strWhere)
315
+        {
316
+            StringBuilder strSql = new StringBuilder();
317
+            strSql.Append("select count(1) FROM T_QC_IndexBase with(nolock)");
318
+            if (strWhere.Trim() != "")
319
+            {
320
+                strSql.Append(" where " + strWhere);
321
+            }
322
+            object obj = DbHelperSQL.GetSingle(strSql.ToString());
323
+            if (obj == null)
324
+            {
325
+                return 0;
326
+            }
327
+            else
328
+            {
329
+                return Convert.ToInt32(obj);
330
+            }
331
+        }
332
+        /// <summary>
333
+        /// 分页获取数据列表
334
+        /// </summary>
335
+        public DataSet GetListByPage(string strWhere, string orderby, int startIndex, int endIndex)
336
+        {
337
+            StringBuilder strSql = new StringBuilder();
338
+            strSql.Append("SELECT * FROM ( ");
339
+            strSql.Append(" SELECT ROW_NUMBER() OVER (");
340
+            if (!string.IsNullOrEmpty(orderby.Trim()))
341
+            {
342
+                strSql.Append("order by T." + orderby);
343
+            }
344
+            else
345
+            {
346
+                strSql.Append("order by T.F_IndexId desc");
347
+            }
348
+            strSql.Append(")AS Row, T.*  from T_QC_IndexBase T ");
349
+            if (!string.IsNullOrEmpty(strWhere.Trim()))
350
+            {
351
+                strSql.Append(" WHERE " + strWhere);
352
+            }
353
+            strSql.Append(" ) TT");
354
+            strSql.AppendFormat(" WHERE TT.Row between {0} and {1}", startIndex, endIndex);
355
+            return DbHelperSQL.Query(strSql.ToString());
356
+        }
357
+
358
+        #endregion  BasicMethod
359
+    }
360
+}

+ 333 - 0
RMYY_CallCenter_Api.Dal/T_QC_IndexCategory.cs

@@ -0,0 +1,333 @@
1
+using RMYY_CallCenter_Api.DB;
2
+using System;
3
+using System.Collections.Generic;
4
+using System.Data;
5
+using System.Data.SqlClient;
6
+using System.Linq;
7
+using System.Text;
8
+using System.Threading.Tasks;
9
+
10
+namespace RMYY_CallCenter_Api.Dal
11
+{
12
+    public  class T_QC_IndexCategory
13
+    {
14
+        public T_QC_IndexCategory()
15
+        { }
16
+        #region  BasicMethod
17
+        /// <summary>
18
+        /// 是否存在该记录
19
+        /// </summary>
20
+        public bool Exists(int F_CategoryId)
21
+        {
22
+            StringBuilder strSql = new StringBuilder();
23
+            strSql.Append("select count(1) from T_QC_IndexCategory with(nolock)");
24
+            strSql.Append(" where F_CategoryId=@F_CategoryId");
25
+            SqlParameter[] parameters = {
26
+                    new SqlParameter("@F_CategoryId", SqlDbType.Int,4)
27
+            };
28
+            parameters[0].Value = F_CategoryId;
29
+
30
+            return DbHelperSQL.Exists(strSql.ToString(), parameters);
31
+        }
32
+
33
+
34
+        /// <summary>
35
+        /// 增加一条数据
36
+        /// </summary>
37
+        public int Add( Model.T_QC_IndexCategory model)
38
+        {
39
+            StringBuilder strSql = new StringBuilder();
40
+            strSql.Append("insert into T_QC_IndexCategory(");
41
+            strSql.Append("F_CategoryName,F_Layer,F_ParentId,F_Sort,F_Score,F_CreateOn,F_CreateBy,F_DeleteFlag,F_DeleteOn)");
42
+            strSql.Append(" values (");
43
+            strSql.Append("@F_CategoryName,@F_Layer,@F_ParentId,@F_Sort,@F_Score,@F_CreateOn,@F_CreateBy,@F_DeleteFlag,@F_DeleteOn)");
44
+            strSql.Append(";select @@IDENTITY");
45
+            SqlParameter[] parameters = {
46
+                    new SqlParameter("@F_CategoryName", SqlDbType.NVarChar,50),
47
+                    new SqlParameter("@F_Layer", SqlDbType.Int,4),
48
+                    new SqlParameter("@F_ParentId", SqlDbType.Int,4),
49
+                    new SqlParameter("@F_Sort", SqlDbType.Int,4),
50
+                    new SqlParameter("@F_Score", SqlDbType.Int,4),
51
+                    new SqlParameter("@F_CreateOn", SqlDbType.DateTime),
52
+                    new SqlParameter("@F_CreateBy", SqlDbType.Int,4),
53
+                    new SqlParameter("@F_DeleteFlag", SqlDbType.Int,4),
54
+                    new SqlParameter("@F_DeleteOn", SqlDbType.DateTime)};
55
+            parameters[0].Value = model.F_CategoryName;
56
+            parameters[1].Value = model.F_Layer;
57
+            parameters[2].Value = model.F_ParentId;
58
+            parameters[3].Value = model.F_Sort;
59
+            parameters[4].Value = model.F_Score;
60
+            parameters[5].Value = model.F_CreateOn;
61
+            parameters[6].Value = model.F_CreateBy;
62
+            parameters[7].Value = model.F_DeleteFlag;
63
+            parameters[8].Value = model.F_DeleteOn;
64
+
65
+            object obj = DbHelperSQL.GetSingle(strSql.ToString(), parameters);
66
+            if (obj == null)
67
+            {
68
+                return 0;
69
+            }
70
+            else
71
+            {
72
+                return Convert.ToInt32(obj);
73
+            }
74
+        }
75
+        /// <summary>
76
+        /// 更新一条数据
77
+        /// </summary>
78
+        public bool Update( Model.T_QC_IndexCategory model)
79
+        {
80
+            StringBuilder strSql = new StringBuilder();
81
+            strSql.Append("update T_QC_IndexCategory set ");
82
+            strSql.Append("F_CategoryName=@F_CategoryName,");
83
+            strSql.Append("F_Layer=@F_Layer,");
84
+            strSql.Append("F_ParentId=@F_ParentId,");
85
+            strSql.Append("F_Sort=@F_Sort,");
86
+            strSql.Append("F_Score=@F_Score,");
87
+            strSql.Append("F_CreateOn=@F_CreateOn,");
88
+            strSql.Append("F_CreateBy=@F_CreateBy,");
89
+            strSql.Append("F_DeleteFlag=@F_DeleteFlag,");
90
+            strSql.Append("F_DeleteOn=@F_DeleteOn");
91
+            strSql.Append(" where F_CategoryId=@F_CategoryId");
92
+            SqlParameter[] parameters = {
93
+                    new SqlParameter("@F_CategoryName", SqlDbType.NVarChar,50),
94
+                    new SqlParameter("@F_Layer", SqlDbType.Int,4),
95
+                    new SqlParameter("@F_ParentId", SqlDbType.Int,4),
96
+                    new SqlParameter("@F_Sort", SqlDbType.Int,4),
97
+                    new SqlParameter("@F_Score", SqlDbType.Int,4),
98
+                    new SqlParameter("@F_CreateOn", SqlDbType.DateTime),
99
+                    new SqlParameter("@F_CreateBy", SqlDbType.Int,4),
100
+                    new SqlParameter("@F_DeleteFlag", SqlDbType.Int,4),
101
+                    new SqlParameter("@F_DeleteOn", SqlDbType.DateTime),
102
+                    new SqlParameter("@F_CategoryId", SqlDbType.Int,4)};
103
+            parameters[0].Value = model.F_CategoryName;
104
+            parameters[1].Value = model.F_Layer;
105
+            parameters[2].Value = model.F_ParentId;
106
+            parameters[3].Value = model.F_Sort;
107
+            parameters[4].Value = model.F_Score;
108
+            parameters[5].Value = model.F_CreateOn;
109
+            parameters[6].Value = model.F_CreateBy;
110
+            parameters[7].Value = model.F_DeleteFlag;
111
+            parameters[8].Value = model.F_DeleteOn;
112
+            parameters[9].Value = model.F_CategoryId;
113
+
114
+            int rows = DbHelperSQL.ExecuteSql(strSql.ToString(), parameters);
115
+            if (rows > 0)
116
+            {
117
+                return true;
118
+            }
119
+            else
120
+            {
121
+                return false;
122
+            }
123
+        }
124
+
125
+        /// <summary>
126
+        /// 删除一条数据
127
+        /// </summary>
128
+        public bool Delete(int F_CategoryId)
129
+        {
130
+
131
+            StringBuilder strSql = new StringBuilder();
132
+            strSql.Append("delete from T_QC_IndexCategory ");
133
+            strSql.Append(" where F_CategoryId=@F_CategoryId");
134
+            SqlParameter[] parameters = {
135
+                    new SqlParameter("@F_CategoryId", SqlDbType.Int,4)
136
+            };
137
+            parameters[0].Value = F_CategoryId;
138
+
139
+            int rows = DbHelperSQL.ExecuteSql(strSql.ToString(), parameters);
140
+            if (rows > 0)
141
+            {
142
+                return true;
143
+            }
144
+            else
145
+            {
146
+                return false;
147
+            }
148
+        }
149
+        /// <summary>
150
+        /// 批量删除数据
151
+        /// </summary>
152
+        public bool DeleteList(string F_CategoryIdlist)
153
+        {
154
+            StringBuilder strSql = new StringBuilder();
155
+            strSql.Append("delete from T_QC_IndexCategory ");
156
+            strSql.Append(" where F_CategoryId in (" + F_CategoryIdlist + ")  ");
157
+            int rows = DbHelperSQL.ExecuteSql(strSql.ToString());
158
+            if (rows > 0)
159
+            {
160
+                return true;
161
+            }
162
+            else
163
+            {
164
+                return false;
165
+            }
166
+        }
167
+
168
+
169
+        /// <summary>
170
+        /// 得到一个对象实体
171
+        /// </summary>
172
+        public  Model.T_QC_IndexCategory GetModel(int F_CategoryId)
173
+        {
174
+
175
+            StringBuilder strSql = new StringBuilder();
176
+            strSql.Append("select  top 1 F_CategoryId,F_CategoryName,F_Layer,F_ParentId,F_Sort,F_Score,F_CreateOn,F_CreateBy,F_DeleteFlag,F_DeleteOn from T_QC_IndexCategory with(nolock)");
177
+            strSql.Append(" where F_CategoryId=@F_CategoryId");
178
+            SqlParameter[] parameters = {
179
+                    new SqlParameter("@F_CategoryId", SqlDbType.Int,4)
180
+            };
181
+            parameters[0].Value = F_CategoryId;
182
+
183
+             Model.T_QC_IndexCategory model = new  Model.T_QC_IndexCategory();
184
+            DataSet ds = DbHelperSQL.Query(strSql.ToString(), parameters);
185
+            if (ds.Tables[0].Rows.Count > 0)
186
+            {
187
+                return DataRowToModel(ds.Tables[0].Rows[0]);
188
+            }
189
+            else
190
+            {
191
+                return null;
192
+            }
193
+        }
194
+
195
+
196
+        /// <summary>
197
+        /// 得到一个对象实体
198
+        /// </summary>
199
+        public  Model.T_QC_IndexCategory DataRowToModel(DataRow row)
200
+        {
201
+             Model.T_QC_IndexCategory model = new  Model.T_QC_IndexCategory();
202
+            if (row != null)
203
+            {
204
+                if (row["F_CategoryId"] != null && row["F_CategoryId"].ToString() != "")
205
+                {
206
+                    model.F_CategoryId = int.Parse(row["F_CategoryId"].ToString());
207
+                }
208
+                if (row["F_CategoryName"] != null)
209
+                {
210
+                    model.F_CategoryName = row["F_CategoryName"].ToString();
211
+                }
212
+                if (row["F_Layer"] != null && row["F_Layer"].ToString() != "")
213
+                {
214
+                    model.F_Layer = int.Parse(row["F_Layer"].ToString());
215
+                }
216
+                if (row["F_ParentId"] != null && row["F_ParentId"].ToString() != "")
217
+                {
218
+                    model.F_ParentId = int.Parse(row["F_ParentId"].ToString());
219
+                }
220
+                if (row["F_Sort"] != null && row["F_Sort"].ToString() != "")
221
+                {
222
+                    model.F_Sort = int.Parse(row["F_Sort"].ToString());
223
+                }
224
+                if (row["F_Score"] != null && row["F_Score"].ToString() != "")
225
+                {
226
+                    model.F_Score = int.Parse(row["F_Score"].ToString());
227
+                }
228
+                if (row["F_CreateOn"] != null && row["F_CreateOn"].ToString() != "")
229
+                {
230
+                    model.F_CreateOn = DateTime.Parse(row["F_CreateOn"].ToString());
231
+                }
232
+                if (row["F_CreateBy"] != null && row["F_CreateBy"].ToString() != "")
233
+                {
234
+                    model.F_CreateBy = int.Parse(row["F_CreateBy"].ToString());
235
+                }
236
+                if (row["F_DeleteFlag"] != null && row["F_DeleteFlag"].ToString() != "")
237
+                {
238
+                    model.F_DeleteFlag = int.Parse(row["F_DeleteFlag"].ToString());
239
+                }
240
+                if (row["F_DeleteOn"] != null && row["F_DeleteOn"].ToString() != "")
241
+                {
242
+                    model.F_DeleteOn = DateTime.Parse(row["F_DeleteOn"].ToString());
243
+                }
244
+            }
245
+            return model;
246
+        }
247
+
248
+        /// <summary>
249
+        /// 获得数据列表
250
+        /// </summary>
251
+        public DataSet GetList(string strWhere)
252
+        {
253
+            StringBuilder strSql = new StringBuilder();
254
+            strSql.Append("select F_CategoryId,F_CategoryName,F_Layer,F_ParentId,F_Sort,F_Score,F_CreateOn,F_CreateBy,F_DeleteFlag,F_DeleteOn ");
255
+            strSql.Append(" FROM T_QC_IndexCategory with(nolock)");
256
+            if (strWhere.Trim() != "")
257
+            {
258
+                strSql.Append(" where " + strWhere);
259
+            }
260
+            return DbHelperSQL.Query(strSql.ToString());
261
+        }
262
+
263
+        /// <summary>
264
+        /// 获得前几行数据
265
+        /// </summary>
266
+        public DataSet GetList(int Top, string strWhere, string filedOrder)
267
+        {
268
+            StringBuilder strSql = new StringBuilder();
269
+            strSql.Append("select ");
270
+            if (Top > 0)
271
+            {
272
+                strSql.Append(" top " + Top.ToString());
273
+            }
274
+            strSql.Append(" F_CategoryId,F_CategoryName,F_Layer,F_ParentId,F_Sort,F_Score,F_CreateOn,F_CreateBy,F_DeleteFlag,F_DeleteOn ");
275
+            strSql.Append(" FROM T_QC_IndexCategory with(nolock)");
276
+            if (strWhere.Trim() != "")
277
+            {
278
+                strSql.Append(" where " + strWhere);
279
+            }
280
+            strSql.Append(" order by " + filedOrder);
281
+            return DbHelperSQL.Query(strSql.ToString());
282
+        }
283
+
284
+        /// <summary>
285
+        /// 获取记录总数
286
+        /// </summary>
287
+        public int GetRecordCount(string strWhere)
288
+        {
289
+            StringBuilder strSql = new StringBuilder();
290
+            strSql.Append("select count(1) FROM T_QC_IndexCategory with(nolock)");
291
+            if (strWhere.Trim() != "")
292
+            {
293
+                strSql.Append(" where " + strWhere);
294
+            }
295
+            object obj = DbHelperSQL.GetSingle(strSql.ToString());
296
+            if (obj == null)
297
+            {
298
+                return 0;
299
+            }
300
+            else
301
+            {
302
+                return Convert.ToInt32(obj);
303
+            }
304
+        }
305
+        /// <summary>
306
+        /// 分页获取数据列表
307
+        /// </summary>
308
+        public DataSet GetListByPage(string strWhere, string orderby, int startIndex, int endIndex)
309
+        {
310
+            StringBuilder strSql = new StringBuilder();
311
+            strSql.Append("SELECT * FROM ( ");
312
+            strSql.Append(" SELECT ROW_NUMBER() OVER (");
313
+            if (!string.IsNullOrEmpty(orderby.Trim()))
314
+            {
315
+                strSql.Append("order by T." + orderby);
316
+            }
317
+            else
318
+            {
319
+                strSql.Append("order by T.F_CategoryId desc");
320
+            }
321
+            strSql.Append(")AS Row, T.*  from T_QC_IndexCategory T with(nolock)");
322
+            if (!string.IsNullOrEmpty(strWhere.Trim()))
323
+            {
324
+                strSql.Append(" WHERE " + strWhere);
325
+            }
326
+            strSql.Append(" ) TT");
327
+            strSql.AppendFormat(" WHERE TT.Row between {0} and {1}", startIndex, endIndex);
328
+            return DbHelperSQL.Query(strSql.ToString());
329
+        }
330
+
331
+        #endregion  BasicMethod
332
+    }
333
+}

+ 297 - 0
RMYY_CallCenter_Api.Dal/T_QC_IndexRes.cs

@@ -0,0 +1,297 @@
1
+using RMYY_CallCenter_Api.DB;
2
+using System;
3
+using System.Collections.Generic;
4
+using System.Data;
5
+using System.Data.SqlClient;
6
+using System.Linq;
7
+using System.Text;
8
+using System.Threading.Tasks;
9
+
10
+namespace RMYY_CallCenter_Api.Dal
11
+{
12
+  public   class T_QC_IndexRes
13
+    {
14
+        public T_QC_IndexRes()
15
+        { }
16
+        #region  BasicMethod
17
+        /// <summary>
18
+        /// 是否存在该记录
19
+        /// </summary>
20
+        public bool Exists(int F_Id)
21
+        {
22
+            StringBuilder strSql = new StringBuilder();
23
+            strSql.Append("select count(1) from T_QC_IndexRes with(nolock)");
24
+            strSql.Append(" where F_Id=@F_Id");
25
+            SqlParameter[] parameters = {
26
+                    new SqlParameter("@F_Id", SqlDbType.Int,4)
27
+            };
28
+            parameters[0].Value = F_Id;
29
+
30
+            return DbHelperSQL.Exists(strSql.ToString(), parameters);
31
+        }
32
+
33
+
34
+        /// <summary>
35
+        /// 增加一条数据
36
+        /// </summary>
37
+        public int Add( Model.T_QC_IndexRes model)
38
+        {
39
+            StringBuilder strSql = new StringBuilder();
40
+            strSql.Append("insert into T_QC_IndexRes(");
41
+            strSql.Append("CallRecordsId,F_IndexId,F_Score,F_QCScore,F_Remark)");
42
+            strSql.Append(" values (");
43
+            strSql.Append("@CallRecordsId,@F_IndexId,@F_Score,@F_QCScore,@F_Remark)");
44
+            strSql.Append(";select @@IDENTITY");
45
+            SqlParameter[] parameters = {
46
+                    new SqlParameter("@CallRecordsId", SqlDbType.Int,4),
47
+                    new SqlParameter("@F_IndexId", SqlDbType.Int,4),
48
+                    new SqlParameter("@F_Score", SqlDbType.Int,4),
49
+                    new SqlParameter("@F_QCScore", SqlDbType.Int,4),
50
+                    new SqlParameter("@F_Remark", SqlDbType.NVarChar,2000)};
51
+            parameters[0].Value = model.CallRecordsId;
52
+            parameters[1].Value = model.F_IndexId;
53
+            parameters[2].Value = model.F_Score;
54
+            parameters[3].Value = model.F_QCScore;
55
+            parameters[4].Value = model.F_Remark;
56
+
57
+            object obj = DbHelperSQL.GetSingle(strSql.ToString(), parameters);
58
+            if (obj == null)
59
+            {
60
+                return 0;
61
+            }
62
+            else
63
+            {
64
+                return Convert.ToInt32(obj);
65
+            }
66
+        }
67
+        /// <summary>
68
+        /// 更新一条数据
69
+        /// </summary>
70
+        public bool Update( Model.T_QC_IndexRes model)
71
+        {
72
+            StringBuilder strSql = new StringBuilder();
73
+            strSql.Append("update T_QC_IndexRes set ");
74
+            strSql.Append("CallRecordsId=@CallRecordsId,");
75
+            strSql.Append("F_IndexId=@F_IndexId,");
76
+            strSql.Append("F_Score=@F_Score,");
77
+            strSql.Append("F_QCScore=@F_QCScore,");
78
+            strSql.Append("F_Remark=@F_Remark");
79
+            strSql.Append(" where F_Id=@F_Id");
80
+            SqlParameter[] parameters = {
81
+                    new SqlParameter("@CallRecordsId", SqlDbType.Int,4),
82
+                    new SqlParameter("@F_IndexId", SqlDbType.Int,4),
83
+                    new SqlParameter("@F_Score", SqlDbType.Int,4),
84
+                    new SqlParameter("@F_QCScore", SqlDbType.Int,4),
85
+                    new SqlParameter("@F_Remark", SqlDbType.NVarChar,2000),
86
+                    new SqlParameter("@F_Id", SqlDbType.Int,4)};
87
+            parameters[0].Value = model.CallRecordsId;
88
+            parameters[1].Value = model.F_IndexId;
89
+            parameters[2].Value = model.F_Score;
90
+            parameters[3].Value = model.F_QCScore;
91
+            parameters[4].Value = model.F_Remark;
92
+            parameters[5].Value = model.F_Id;
93
+
94
+            int rows = DbHelperSQL.ExecuteSql(strSql.ToString(), parameters);
95
+            if (rows > 0)
96
+            {
97
+                return true;
98
+            }
99
+            else
100
+            {
101
+                return false;
102
+            }
103
+        }
104
+
105
+        /// <summary>
106
+        /// 删除一条数据
107
+        /// </summary>
108
+        public bool Delete(int F_Id)
109
+        {
110
+
111
+            StringBuilder strSql = new StringBuilder();
112
+            strSql.Append("delete from T_QC_IndexRes ");
113
+            strSql.Append(" where F_Id=@F_Id");
114
+            SqlParameter[] parameters = {
115
+                    new SqlParameter("@F_Id", SqlDbType.Int,4)
116
+            };
117
+            parameters[0].Value = F_Id;
118
+
119
+            int rows = DbHelperSQL.ExecuteSql(strSql.ToString(), parameters);
120
+            if (rows > 0)
121
+            {
122
+                return true;
123
+            }
124
+            else
125
+            {
126
+                return false;
127
+            }
128
+        }
129
+        /// <summary>
130
+        /// 批量删除数据
131
+        /// </summary>
132
+        public bool DeleteList(string F_Idlist)
133
+        {
134
+            StringBuilder strSql = new StringBuilder();
135
+            strSql.Append("delete from T_QC_IndexRes ");
136
+            strSql.Append(" where F_Id in (" + F_Idlist + ")  ");
137
+            int rows = DbHelperSQL.ExecuteSql(strSql.ToString());
138
+            if (rows > 0)
139
+            {
140
+                return true;
141
+            }
142
+            else
143
+            {
144
+                return false;
145
+            }
146
+        }
147
+
148
+
149
+        /// <summary>
150
+        /// 得到一个对象实体
151
+        /// </summary>
152
+        public  Model.T_QC_IndexRes GetModel(int F_Id)
153
+        {
154
+
155
+            StringBuilder strSql = new StringBuilder();
156
+            strSql.Append("select  top 1 F_Id,CallRecordsId,F_IndexId,F_Score,F_QCScore,F_Remark from T_QC_IndexRes with(nolock)");
157
+            strSql.Append(" where F_Id=@F_Id");
158
+            SqlParameter[] parameters = {
159
+                    new SqlParameter("@F_Id", SqlDbType.Int,4)
160
+            };
161
+            parameters[0].Value = F_Id;
162
+
163
+             Model.T_QC_IndexRes model = new  Model.T_QC_IndexRes();
164
+            DataSet ds = DbHelperSQL.Query(strSql.ToString(), parameters);
165
+            if (ds.Tables[0].Rows.Count > 0)
166
+            {
167
+                return DataRowToModel(ds.Tables[0].Rows[0]);
168
+            }
169
+            else
170
+            {
171
+                return null;
172
+            }
173
+        }
174
+
175
+
176
+        /// <summary>
177
+        /// 得到一个对象实体
178
+        /// </summary>
179
+        public  Model.T_QC_IndexRes DataRowToModel(DataRow row)
180
+        {
181
+             Model.T_QC_IndexRes model = new  Model.T_QC_IndexRes();
182
+            if (row != null)
183
+            {
184
+                if (row["F_Id"] != null && row["F_Id"].ToString() != "")
185
+                {
186
+                    model.F_Id = int.Parse(row["F_Id"].ToString());
187
+                }
188
+                if (row["CallRecordsId"] != null && row["CallRecordsId"].ToString() != "")
189
+                {
190
+                    model.CallRecordsId = int.Parse(row["CallRecordsId"].ToString());
191
+                }
192
+                if (row["F_IndexId"] != null && row["F_IndexId"].ToString() != "")
193
+                {
194
+                    model.F_IndexId = int.Parse(row["F_IndexId"].ToString());
195
+                }
196
+                if (row["F_Score"] != null && row["F_Score"].ToString() != "")
197
+                {
198
+                    model.F_Score = int.Parse(row["F_Score"].ToString());
199
+                }
200
+                if (row["F_QCScore"] != null && row["F_QCScore"].ToString() != "")
201
+                {
202
+                    model.F_QCScore = int.Parse(row["F_QCScore"].ToString());
203
+                }
204
+                if (row["F_Remark"] != null)
205
+                {
206
+                    model.F_Remark = row["F_Remark"].ToString();
207
+                }
208
+            }
209
+            return model;
210
+        }
211
+
212
+        /// <summary>
213
+        /// 获得数据列表
214
+        /// </summary>
215
+        public DataSet GetList(string strWhere)
216
+        {
217
+            StringBuilder strSql = new StringBuilder();
218
+            strSql.Append("select F_Id,CallRecordsId,F_IndexId,F_Score,F_QCScore,F_Remark ");
219
+            strSql.Append(" FROM T_QC_IndexRes with(nolock)");
220
+            if (strWhere.Trim() != "")
221
+            {
222
+                strSql.Append(" where " + strWhere);
223
+            }
224
+            return DbHelperSQL.Query(strSql.ToString());
225
+        }
226
+
227
+        /// <summary>
228
+        /// 获得前几行数据
229
+        /// </summary>
230
+        public DataSet GetList(int Top, string strWhere, string filedOrder)
231
+        {
232
+            StringBuilder strSql = new StringBuilder();
233
+            strSql.Append("select ");
234
+            if (Top > 0)
235
+            {
236
+                strSql.Append(" top " + Top.ToString());
237
+            }
238
+            strSql.Append(" F_Id,CallRecordsId,F_IndexId,F_Score,F_QCScore,F_Remark ");
239
+            strSql.Append(" FROM T_QC_IndexRes with(nolock)");
240
+            if (strWhere.Trim() != "")
241
+            {
242
+                strSql.Append(" where " + strWhere);
243
+            }
244
+            strSql.Append(" order by " + filedOrder);
245
+            return DbHelperSQL.Query(strSql.ToString());
246
+        }
247
+
248
+        /// <summary>
249
+        /// 获取记录总数
250
+        /// </summary>
251
+        public int GetRecordCount(string strWhere)
252
+        {
253
+            StringBuilder strSql = new StringBuilder();
254
+            strSql.Append("select count(1) FROM T_QC_IndexRes with(nolock)");
255
+            if (strWhere.Trim() != "")
256
+            {
257
+                strSql.Append(" where " + strWhere);
258
+            }
259
+            object obj = DbHelperSQL.GetSingle(strSql.ToString());
260
+            if (obj == null)
261
+            {
262
+                return 0;
263
+            }
264
+            else
265
+            {
266
+                return Convert.ToInt32(obj);
267
+            }
268
+        }
269
+        /// <summary>
270
+        /// 分页获取数据列表
271
+        /// </summary>
272
+        public DataSet GetListByPage(string strWhere, string orderby, int startIndex, int endIndex)
273
+        {
274
+            StringBuilder strSql = new StringBuilder();
275
+            strSql.Append("SELECT * FROM ( ");
276
+            strSql.Append(" SELECT ROW_NUMBER() OVER (");
277
+            if (!string.IsNullOrEmpty(orderby.Trim()))
278
+            {
279
+                strSql.Append("order by T." + orderby);
280
+            }
281
+            else
282
+            {
283
+                strSql.Append("order by T.F_Id desc");
284
+            }
285
+            strSql.Append(")AS Row, T.*  from T_QC_IndexRes T with(nolock)");
286
+            if (!string.IsNullOrEmpty(strWhere.Trim()))
287
+            {
288
+                strSql.Append(" WHERE " + strWhere);
289
+            }
290
+            strSql.Append(" ) TT");
291
+            strSql.AppendFormat(" WHERE TT.Row between {0} and {1}", startIndex, endIndex);
292
+            return DbHelperSQL.Query(strSql.ToString());
293
+        }
294
+
295
+        #endregion  BasicMethod
296
+    }
297
+}

+ 52 - 0
RMYY_CallCenter_Api.Dal/T_Sys_Login_Logs.cs

@@ -0,0 +1,52 @@
1
+using RMYY_CallCenter_Api.DB;
2
+using System;
3
+using System.Collections.Generic;
4
+using System.Data;
5
+using System.Data.SqlClient;
6
+using System.Linq;
7
+using System.Text;
8
+using System.Threading.Tasks;
9
+
10
+namespace RMYY_CallCenter_Api.Dal
11
+{
12
+   public  class T_Sys_Login_Logs
13
+    {
14
+        /// <summary>
15
+        /// 增加一条数据
16
+        /// </summary>
17
+        public int Add(RMYY_CallCenter_Api.Model.T_Sys_Login_Logs model)
18
+        {
19
+            StringBuilder strSql = new StringBuilder();
20
+            strSql.Append("insert into T_Sys_Login_Logs(");
21
+            strSql.Append("T_username,T_usercode,T_result,T_login_ip,T_channel,T_time)");
22
+            strSql.Append(" values (");
23
+            strSql.Append("@T_username,@T_usercode,@T_result,@T_login_ip,@T_channel,@T_time)");
24
+            strSql.Append(";select @@IDENTITY");
25
+            SqlParameter[] parameters = {
26
+                    new SqlParameter("@F_CustomerName", SqlDbType.NVarChar,100),
27
+                    new SqlParameter("@F_CustomerCode", SqlDbType.NVarChar,100),
28
+                    new SqlParameter("@F_Layer",SqlDbType.NVarChar,100),
29
+                    new SqlParameter("@F_Province", SqlDbType.NVarChar,100),
30
+                    new SqlParameter("@F_City", SqlDbType.Int ,4),
31
+                    new SqlParameter("@F_County", SqlDbType.DateTime)
32
+                   };
33
+            parameters[0].Value = model.T_username;
34
+            parameters[1].Value = model.T_usercode;
35
+            parameters[2].Value = model.T_result;
36
+            parameters[3].Value = model.T_login_ip;
37
+            parameters[4].Value = model.T_channel;
38
+            parameters[5].Value = model.T_time;
39
+            
40
+
41
+            object obj = DbHelperSQL.GetSingle(strSql.ToString(), parameters);
42
+            if (obj == null)
43
+            {
44
+                return 0;
45
+            }
46
+            else
47
+            {
48
+                return Convert.ToInt32(obj);
49
+            }
50
+        }
51
+    }
52
+}

+ 37 - 0
RMYY_CallCenter_Api.Model/PageData.cs

@@ -0,0 +1,37 @@
1
+using System;
2
+using System.Collections.Generic;
3
+using System.Linq;
4
+using System.Text;
5
+using System.Threading.Tasks;
6
+
7
+namespace RMYY_CallCenter_Api.Model
8
+{
9
+    public class PageData<T> where T : class, new()
10
+    {
11
+        /// <summary>
12
+        /// 总记录数
13
+        /// </summary>
14
+        public int Total { get; set; }
15
+
16
+        /// <summary>
17
+        /// 当前页数据集合
18
+        /// </summary>
19
+        public List<T> Rows { get; set; }
20
+
21
+        /// <summary>
22
+        /// 页数
23
+        /// </summary>
24
+        public int Count { get; set; }
25
+
26
+        public PageData()
27
+        {
28
+        }
29
+
30
+        public PageData(int Total, int Count, List<T> Rows = null)
31
+        {
32
+            this.Total = Total;
33
+            this.Count = Count;
34
+            this.Rows = Rows;
35
+        }
36
+    }
37
+}

+ 131 - 0
RMYY_CallCenter_Api.Model/QCModel.cs

@@ -0,0 +1,131 @@
1
+using System;
2
+using System.Collections.Generic;
3
+using System.Linq;
4
+using System.Text;
5
+using System.Threading.Tasks;
6
+
7
+namespace RMYY_CallCenter_Api.Model
8
+{
9
+   public  class QCModel
10
+    {
11
+        private string qcid;
12
+        private string qcname;
13
+        private string qcscore;
14
+        private string qcpf;
15
+        private string colspan;
16
+        private string rowspan;
17
+        private List<QCModel> qclist;
18
+
19
+        /// <summary>
20
+        /// QCid
21
+        /// </summary>
22
+        public string Qcid
23
+        {
24
+            get
25
+            {
26
+                return qcid;
27
+            }
28
+
29
+            set
30
+            {
31
+                qcid = value;
32
+            }
33
+        }
34
+
35
+        /// <summary>
36
+        /// QC名称
37
+        /// </summary>
38
+        public string Qcname
39
+        {
40
+            get
41
+            {
42
+                return qcname;
43
+            }
44
+
45
+            set
46
+            {
47
+                qcname = value;
48
+            }
49
+        }
50
+
51
+        /// <summary>
52
+        /// QC分数
53
+        /// </summary>
54
+        public string Qcscore
55
+        {
56
+            get
57
+            {
58
+                return qcscore;
59
+            }
60
+
61
+            set
62
+            {
63
+                qcscore = value;
64
+            }
65
+        }
66
+
67
+        /// <summary>
68
+        /// QC评分
69
+        /// </summary>
70
+        public string Qcpf
71
+        {
72
+            get
73
+            {
74
+                return qcpf;
75
+            }
76
+
77
+            set
78
+            {
79
+                qcpf = value;
80
+            }
81
+        }
82
+
83
+        /// <summary>
84
+        /// QC子类
85
+        /// </summary>
86
+        public List<QCModel> Qclist
87
+        {
88
+            get
89
+            {
90
+                return qclist;
91
+            }
92
+
93
+            set
94
+            {
95
+                qclist = value;
96
+            }
97
+        }
98
+
99
+        /// <summary>
100
+        /// 包含几行
101
+        /// </summary>
102
+        public string Rowspan
103
+        {
104
+            get
105
+            {
106
+                return rowspan;
107
+            }
108
+
109
+            set
110
+            {
111
+                rowspan = value;
112
+            }
113
+        }
114
+
115
+        /// <summary>
116
+        /// 包含几列
117
+        /// </summary>
118
+        public string Colspan
119
+        {
120
+            get
121
+            {
122
+                return colspan;
123
+            }
124
+
125
+            set
126
+            {
127
+                colspan = value;
128
+            }
129
+        }
130
+    }
131
+}

+ 5 - 0
RMYY_CallCenter_Api.Model/RMYY_CallCenter_Api.Model.csproj

@@ -41,6 +41,8 @@
41 41
     <Reference Include="System.Xml" />
42 42
   </ItemGroup>
43 43
   <ItemGroup>
44
+    <Compile Include="PageData.cs" />
45
+    <Compile Include="QCModel.cs" />
44 46
     <Compile Include="T_Acc_WorkOrder.cs" />
45 47
     <Compile Include="T_Call_Blacklist.cs" />
46 48
     <Compile Include="T_Call_CallRecords.cs" />
@@ -63,6 +65,9 @@
63 65
     <Compile Include="T_Msg_Chat.cs" />
64 66
     <Compile Include="T_Msg_Chat_Map.cs" />
65 67
     <Compile Include="T_Msg_NoticeInfo.cs" />
68
+    <Compile Include="T_QC_IndexBase.cs" />
69
+    <Compile Include="T_QC_IndexCategory.cs" />
70
+    <Compile Include="T_QC_IndexRes.cs" />
66 71
     <Compile Include="T_Sys_Accessories.cs" />
67 72
     <Compile Include="T_Sys_Department.cs" />
68 73
     <Compile Include="T_Sys_DictionaryBase.cs" />

+ 133 - 0
RMYY_CallCenter_Api.Model/T_QC_IndexBase.cs

@@ -0,0 +1,133 @@
1
+using System;
2
+using System.Collections.Generic;
3
+using System.Linq;
4
+using System.Text;
5
+using System.Threading.Tasks;
6
+
7
+namespace RMYY_CallCenter_Api.Model
8
+{
9
+    public class T_QC_IndexBase
10
+    {
11
+        public T_QC_IndexBase()
12
+        { }
13
+        #region Model
14
+        private int _f_indexid;
15
+        private int? _f_categoryid;
16
+        private int? _f_score = 0;
17
+        private string _f_title;
18
+        private string _f_content;
19
+        private string _f_remark;
20
+        private DateTime? _f_createon;
21
+        private int? _f_createby;
22
+        private DateTime? _f_modifyon;
23
+        private int? _f_modifyby;
24
+        private int? _f_deleteflag;
25
+        private int? _f_sort;
26
+        private DateTime? _f_deleteon;
27
+        /// <summary>
28
+        /// 
29
+        /// </summary>
30
+        public int F_IndexId
31
+        {
32
+            set { _f_indexid = value; }
33
+            get { return _f_indexid; }
34
+        }
35
+        /// <summary>
36
+        /// 指标分类Id
37
+        /// </summary>
38
+        public int? F_CategoryId
39
+        {
40
+            set { _f_categoryid = value; }
41
+            get { return _f_categoryid; }
42
+        }
43
+        /// <summary>
44
+        /// 分值
45
+        /// </summary>
46
+        public int? F_Score
47
+        {
48
+            set { _f_score = value; }
49
+            get { return _f_score; }
50
+        }
51
+        /// <summary>
52
+        /// 指标标题
53
+        /// </summary>
54
+        public string F_Title
55
+        {
56
+            set { _f_title = value; }
57
+            get { return _f_title; }
58
+        }
59
+        /// <summary>
60
+        /// 指标内容
61
+        /// </summary>
62
+        public string F_Content
63
+        {
64
+            set { _f_content = value; }
65
+            get { return _f_content; }
66
+        }
67
+        /// <summary>
68
+        /// 备注
69
+        /// </summary>
70
+        public string F_Remark
71
+        {
72
+            set { _f_remark = value; }
73
+            get { return _f_remark; }
74
+        }
75
+        /// <summary>
76
+        /// 添加时间
77
+        /// </summary>
78
+        public DateTime? F_CreateOn
79
+        {
80
+            set { _f_createon = value; }
81
+            get { return _f_createon; }
82
+        }
83
+        /// <summary>
84
+        /// 创建人
85
+        /// </summary>
86
+        public int? F_CreateBy
87
+        {
88
+            set { _f_createby = value; }
89
+            get { return _f_createby; }
90
+        }
91
+        /// <summary>
92
+        /// 修改时间
93
+        /// </summary>
94
+        public DateTime? F_ModifyOn
95
+        {
96
+            set { _f_modifyon = value; }
97
+            get { return _f_modifyon; }
98
+        }
99
+        /// <summary>
100
+        /// 修改人Id
101
+        /// </summary>
102
+        public int? F_ModifyBy
103
+        {
104
+            set { _f_modifyby = value; }
105
+            get { return _f_modifyby; }
106
+        }
107
+        /// <summary>
108
+        /// 删除标志
109
+        /// </summary>
110
+        public int? F_DeleteFlag
111
+        {
112
+            set { _f_deleteflag = value; }
113
+            get { return _f_deleteflag; }
114
+        }
115
+        /// <summary>
116
+        /// 序号
117
+        /// </summary>
118
+        public int? F_Sort
119
+        {
120
+            set { _f_sort = value; }
121
+            get { return _f_sort; }
122
+        }
123
+        /// <summary>
124
+        /// 删除时间
125
+        /// </summary>
126
+        public DateTime? F_DeleteOn
127
+        {
128
+            set { _f_deleteon = value; }
129
+            get { return _f_deleteon; }
130
+        }
131
+        #endregion Model
132
+    }
133
+}

+ 106 - 0
RMYY_CallCenter_Api.Model/T_QC_IndexCategory.cs

@@ -0,0 +1,106 @@
1
+using System;
2
+using System.Collections.Generic;
3
+using System.Linq;
4
+using System.Text;
5
+using System.Threading.Tasks;
6
+
7
+namespace RMYY_CallCenter_Api.Model
8
+{
9
+   public  class T_QC_IndexCategory
10
+    {
11
+        public T_QC_IndexCategory()
12
+        { }
13
+        #region Model
14
+        private int _f_categoryid;
15
+        private string _f_categoryname;
16
+        private int? _f_layer;
17
+        private int? _f_parentid;
18
+        private int? _f_sort;
19
+        private int? _f_score;
20
+        private DateTime? _f_createon;
21
+        private int? _f_createby;
22
+        private int? _f_deleteflag;
23
+        private DateTime? _f_deleteon;
24
+        /// <summary>
25
+        /// 
26
+        /// </summary>
27
+        public int F_CategoryId
28
+        {
29
+            set { _f_categoryid = value; }
30
+            get { return _f_categoryid; }
31
+        }
32
+        /// <summary>
33
+        /// 
34
+        /// </summary>
35
+        public string F_CategoryName
36
+        {
37
+            set { _f_categoryname = value; }
38
+            get { return _f_categoryname; }
39
+        }
40
+        /// <summary>
41
+        /// 
42
+        /// </summary>
43
+        public int? F_Layer
44
+        {
45
+            set { _f_layer = value; }
46
+            get { return _f_layer; }
47
+        }
48
+        /// <summary>
49
+        /// 
50
+        /// </summary>
51
+        public int? F_ParentId
52
+        {
53
+            set { _f_parentid = value; }
54
+            get { return _f_parentid; }
55
+        }
56
+        /// <summary>
57
+        /// 
58
+        /// </summary>
59
+        public int? F_Sort
60
+        {
61
+            set { _f_sort = value; }
62
+            get { return _f_sort; }
63
+        }
64
+        /// <summary>
65
+        /// 
66
+        /// </summary>
67
+        public int? F_Score
68
+        {
69
+            set { _f_score = value; }
70
+            get { return _f_score; }
71
+        }
72
+        /// <summary>
73
+        /// 
74
+        /// </summary>
75
+        public DateTime? F_CreateOn
76
+        {
77
+            set { _f_createon = value; }
78
+            get { return _f_createon; }
79
+        }
80
+        /// <summary>
81
+        /// 
82
+        /// </summary>
83
+        public int? F_CreateBy
84
+        {
85
+            set { _f_createby = value; }
86
+            get { return _f_createby; }
87
+        }
88
+        /// <summary>
89
+        /// 
90
+        /// </summary>
91
+        public int? F_DeleteFlag
92
+        {
93
+            set { _f_deleteflag = value; }
94
+            get { return _f_deleteflag; }
95
+        }
96
+        /// <summary>
97
+        /// 
98
+        /// </summary>
99
+        public DateTime? F_DeleteOn
100
+        {
101
+            set { _f_deleteon = value; }
102
+            get { return _f_deleteon; }
103
+        }
104
+        #endregion Model
105
+    }
106
+}

+ 70 - 0
RMYY_CallCenter_Api.Model/T_QC_IndexRes.cs

@@ -0,0 +1,70 @@
1
+using System;
2
+using System.Collections.Generic;
3
+using System.Linq;
4
+using System.Text;
5
+using System.Threading.Tasks;
6
+
7
+namespace RMYY_CallCenter_Api.Model
8
+{
9
+   public  class T_QC_IndexRes
10
+    {
11
+        public T_QC_IndexRes()
12
+        { }
13
+        #region Model
14
+        private int _f_id;
15
+        private int? _callrecordsid;
16
+        private int? _f_indexid;
17
+        private int? _f_score = 0;
18
+        private int? _f_qcscore = 0;
19
+        private string _f_remark;
20
+        /// <summary>
21
+        /// 质检结果Id
22
+        /// </summary>
23
+        public int F_Id
24
+        {
25
+            set { _f_id = value; }
26
+            get { return _f_id; }
27
+        }
28
+        /// <summary>
29
+        /// 通话记录Id
30
+        /// </summary>
31
+        public int? CallRecordsId
32
+        {
33
+            set { _callrecordsid = value; }
34
+            get { return _callrecordsid; }
35
+        }
36
+        /// <summary>
37
+        /// 指标Id
38
+        /// </summary>
39
+        public int? F_IndexId
40
+        {
41
+            set { _f_indexid = value; }
42
+            get { return _f_indexid; }
43
+        }
44
+        /// <summary>
45
+        /// 指标分值
46
+        /// </summary>
47
+        public int? F_Score
48
+        {
49
+            set { _f_score = value; }
50
+            get { return _f_score; }
51
+        }
52
+        /// <summary>
53
+        /// 质检分值
54
+        /// </summary>
55
+        public int? F_QCScore
56
+        {
57
+            set { _f_qcscore = value; }
58
+            get { return _f_qcscore; }
59
+        }
60
+        /// <summary>
61
+        /// 指标备注
62
+        /// </summary>
63
+        public string F_Remark
64
+        {
65
+            set { _f_remark = value; }
66
+            get { return _f_remark; }
67
+        }
68
+        #endregion Model
69
+    }
70
+}

+ 44 - 0
RMYY_CallCenter_Api.Model/T_Sys_Login_Logs.cs

@@ -0,0 +1,44 @@
1
+using System;
2
+using System.Collections.Generic;
3
+using System.Linq;
4
+using System.Text;
5
+using System.Threading.Tasks;
6
+
7
+namespace RMYY_CallCenter_Api.Model
8
+{
9
+   public  class T_Sys_Login_Logs
10
+    {
11
+        public string T_id { get; set; }
12
+
13
+        /// <summary>
14
+        /// 用户名字
15
+        /// </summary>
16
+        public string T_username { get; set; }
17
+
18
+        /// <summary>
19
+        /// 用户工号
20
+        /// </summary>
21
+        public string T_usercode { get; set; }
22
+
23
+        /// <summary>
24
+        /// 备注
25
+        /// </summary>
26
+        public string T_result { get; set; }
27
+
28
+        /// <summary>
29
+        /// ip  
30
+        /// </summary>
31
+        public string T_login_ip { get; set; }
32
+        /// <summary>
33
+        /// 渠道来源 1表示PC 2表示安卓 3表示IOS 4表示微信
34
+        /// </summary>
35
+        public int T_channel { get; set; } = 1;
36
+        
37
+        /// <summary>
38
+        /// 登录登出时间
39
+        /// </summary>
40
+        public DateTime T_time { get; set; }
41
+        
42
+        
43
+    }
44
+}

+ 25 - 0
RMYY_CallCenter_Api/Controllers/HomeController.cs

@@ -1,4 +1,5 @@
1 1
 using RMYY_CallCenter_Api.DB;
2
+using RMYY_CallCenter_Api.Model;
2 3
 using RMYY_CallCenter_Api.Models;
3 4
 using RMYY_CallCenter_Api.Utility;
4 5
 using System;
@@ -61,6 +62,7 @@ namespace RMYY_CallCenter_Api.Controllers
61 62
                 Dic.Add("F_DeptId", dr["F_DeptId"].ToString());
62 63
 
63 64
                 var token = FormsPrincipal<Dictionary<string, string>>.GetCookieValue(Dic["F_UserCode"], Dic);
65
+                AddLogAsync(dr["F_UserName"].ToString(), dr["F_UserCode"].ToString(), "登录成功", "", 1);
64 66
                 return Success("登录成功", token);
65 67
             }
66 68
             else
@@ -101,5 +103,28 @@ namespace RMYY_CallCenter_Api.Controllers
101 103
         {
102 104
             return Success(DingTalkHelper.SendMessageByTemplate(userid, "", msgjson, templateid));
103 105
         }
106
+        /// <summary>
107
+        /// 存储登录日志
108
+        /// </summary>
109
+        /// <param name="name"></param>
110
+        /// <param name="code"></param>
111
+        /// <param name="log"></param>
112
+        /// <param name="ip"></param>
113
+        /// <param name="channel"></param>
114
+        /// <returns></returns>
115
+        private int AddLogAsync(string name, string code, string log, string ip, int channel)
116
+        {
117
+              RMYY_CallCenter_Api.Bll.T_Sys_Login_Logs bll = new RMYY_CallCenter_Api.Bll.T_Sys_Login_Logs();
118
+            var login_log = new T_Sys_Login_Logs()
119
+            {
120
+                T_username = name,
121
+                T_usercode = code,
122
+                T_result = log,
123
+                T_login_ip = ip,
124
+                T_channel = channel,
125
+                T_time = DateTime.Now
126
+            };
127
+            return bll.Add(login_log);
128
+        }
104 129
     }
105 130
 }

+ 247 - 0
RMYY_CallCenter_Api/Controllers/Quality/DaysTalkTimeController.cs

@@ -0,0 +1,247 @@
1
+using RMYY_CallCenter_Api.Utility;
2
+using System;
3
+using System.Collections;
4
+using System.Collections.Generic;
5
+using System.Data;
6
+using System.Linq;
7
+using System.Web;
8
+using System.Web.Mvc;
9
+
10
+namespace RMYY_CallCenter_Api.Controllers.Quality
11
+{
12
+    public class DaysTalkTimeController : BaseController
13
+    {
14
+        //获取日通话时长
15
+
16
+        //获取表头
17
+        public ActionResult GetColumnList()
18
+        {
19
+            ActionResult res = NoToken("未知错误,请重新登录");
20
+
21
+            String[] str = { "日期", "呼入次数", "呼入时长", "呼出次数", "呼出时长", "呼出未接通次数", "振铃时长", "通话总时长", "平均通话时长" };
22
+            res = Success("获取日通话时长统计表头成功", str);
23
+
24
+            return res;
25
+        }
26
+
27
+        //获取数据
28
+        public ActionResult GetDataList(string stime, string etime, string usercode)
29
+        {
30
+            ActionResult res = NoToken("未知错误,请重新登录");
31
+
32
+            DataTable dtNew = new DataTable();
33
+            dtNew = getData(stime, etime, usercode);
34
+            #region
35
+            //#region 编辑表头
36
+            //DataColumn dc1 = new DataColumn("日期", Type.GetType("System.String"));
37
+            //DataColumn dc2 = new DataColumn("呼入次数", Type.GetType("System.String"));
38
+            //DataColumn dc3 = new DataColumn("呼入时长", Type.GetType("System.String"));
39
+            //DataColumn dc4 = new DataColumn("呼出次数", Type.GetType("System.String"));
40
+            //DataColumn dc5 = new DataColumn("呼出时长", Type.GetType("System.String"));
41
+            //DataColumn dc6 = new DataColumn("呼出未接通次数", Type.GetType("System.String"));
42
+            //DataColumn dc7 = new DataColumn("振铃时长", Type.GetType("System.String"));
43
+            //DataColumn dc8 = new DataColumn("通话总时长", Type.GetType("System.String"));
44
+            //DataColumn dc9 = new DataColumn("平均通话总时长", Type.GetType("System.String"));
45
+
46
+            //dtNew.Columns.Add(dc1);
47
+            //dtNew.Columns.Add(dc2);
48
+            //dtNew.Columns.Add(dc3);
49
+            //dtNew.Columns.Add(dc4);
50
+            //dtNew.Columns.Add(dc5);
51
+            //dtNew.Columns.Add(dc6);
52
+            //dtNew.Columns.Add(dc7);
53
+            //dtNew.Columns.Add(dc8);
54
+            //dtNew.Columns.Add(dc9);
55
+            //#endregion
56
+
57
+            //DateTime beginTime;
58
+            //DateTime endTime;
59
+            //string sql = "";
60
+
61
+            //int days = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);
62
+            //if (stime != null && stime != "")
63
+            //    beginTime = DateTime.Parse(stime);
64
+            //else
65
+            //    beginTime = DateTime.Parse(DateTime.Now.AddDays(-days).ToShortDateString());
66
+
67
+            //if (etime != null && etime != "")
68
+            //    endTime = DateTime.Parse(etime + " 23:59:59");
69
+            //else
70
+            //    endTime = DateTime.Parse(DateTime.Now.ToShortDateString() + " 23:59:59");
71
+
72
+            //if (usercode != null && usercode != "")
73
+            //{
74
+            //    sql += " and UserCode='" + usercode + "'";
75
+            //}
76
+
77
+            //sql += " and DATEDIFF(d,BeginTime,'" + beginTime.ToString("yyyy-MM-dd HH:mm:ss") + "')<=0";
78
+            //sql += " and DATEDIFF(d,BeginTime,'" + endTime.ToString("yyyy-MM-dd HH:mm:ss") + "')>=0";
79
+
80
+            //DataTable dt = new Bll.T_Call_CallRecords().GetList("1=1 " + sql).Tables[0];
81
+
82
+            //for (DateTime t = beginTime; t <= endTime; t = t.AddDays(1))
83
+            //{
84
+            //    string key = t.ToString("yyyyMMdd");
85
+            //    DataRow[] drsin = dt.Select("begintime >='" + t.ToString() + "' and begintime<'" + t.AddDays(1).ToString() + "' and CallType=0");
86
+            //    DataRow[] drsout = dt.Select("begintime >='" + t.ToString() + "' and begintime<'" + t.AddDays(1).ToString() + "' and CallType=1");
87
+            //    DataRow[] drswout = dt.Select("begintime >='" + t.ToString() + "' and begintime<'" + t.AddDays(1).ToString() + "' and CallType=1 and CallState=0 ");
88
+            //    int callincount = drsin.Length;
89
+            //    int calloutcount = drsout.Length;
90
+            //    int callwoutcount = drswout.Length;
91
+            //    string thsc = gettimes(dt.Select("begintime >='" + t.ToString() + "' and begintime<'" + t.AddDays(1).ToString() + "' "), 0);
92
+            //    string hrsc = gettimes(drsin, 0);
93
+            //    string hcsc = gettimes(drsout, 0);
94
+            //    string zlsc = gettimes(drswout, 1);
95
+            //    DataRow drNew = dtNew.NewRow();
96
+
97
+            //    drNew["日期"] = key;
98
+            //    drNew["呼入次数"] = callincount;
99
+            //    drNew["呼入时长"] = hrsc + "S";
100
+            //    drNew["呼出次数"] = calloutcount;
101
+            //    drNew["呼出时长"] = hcsc + "S";
102
+            //    drNew["呼出未接通次数"] = callwoutcount;
103
+            //    drNew["振铃时长"] = zlsc + "S";
104
+            //    drNew["通话总时长"] = thsc + "S";
105
+            //    if ((callincount + calloutcount) > 0)
106
+            //        drNew["平均通话总时长"] = (double.Parse(thsc) / (callincount + calloutcount)).ToString("F2") + "S";
107
+            //    else
108
+            //        drNew["平均通话总时长"] = "0S";
109
+
110
+            //    dtNew.Rows.Add(drNew);
111
+            //}
112
+            #endregion
113
+            res = Success("获取日通话时长数据成功", dtNew);
114
+
115
+            return res;
116
+        }
117
+
118
+        //导出数据
119
+        public ActionResult ExptList(string stime, string etime, string usercode)
120
+        {
121
+            ActionResult res = NoToken("未知错误,请重新登录");
122
+            if (Request.IsAuthenticated)
123
+            {
124
+                NPOIHelper npoi = new NPOIHelper();
125
+                DataTable dt = getData(stime, etime, usercode);
126
+                if (npoi.ExportToExcel("日通话时长数据", dt) == "")
127
+                {
128
+                    return Success("导出成功");
129
+                }
130
+                else
131
+                {
132
+                    return Error("导出失败");
133
+                }
134
+            }
135
+            return res;
136
+        }
137
+
138
+        private DataTable getData(string stime, string etime, string usercode)
139
+        {
140
+            DataTable dtNew = new DataTable();
141
+            #region 编辑表头
142
+            DataColumn dc1 = new DataColumn("日期", Type.GetType("System.String"));
143
+            DataColumn dc2 = new DataColumn("呼入次数", Type.GetType("System.String"));
144
+            DataColumn dc3 = new DataColumn("呼入时长", Type.GetType("System.String"));
145
+            DataColumn dc4 = new DataColumn("呼出次数", Type.GetType("System.String"));
146
+            DataColumn dc5 = new DataColumn("呼出时长", Type.GetType("System.String"));
147
+            DataColumn dc6 = new DataColumn("呼出未接通次数", Type.GetType("System.String"));
148
+            DataColumn dc7 = new DataColumn("振铃时长", Type.GetType("System.String"));
149
+            DataColumn dc8 = new DataColumn("通话总时长", Type.GetType("System.String"));
150
+            DataColumn dc9 = new DataColumn("平均通话总时长", Type.GetType("System.String"));
151
+
152
+            dtNew.Columns.Add(dc1);
153
+            dtNew.Columns.Add(dc2);
154
+            dtNew.Columns.Add(dc3);
155
+            dtNew.Columns.Add(dc4);
156
+            dtNew.Columns.Add(dc5);
157
+            dtNew.Columns.Add(dc6);
158
+            dtNew.Columns.Add(dc7);
159
+            dtNew.Columns.Add(dc8);
160
+            dtNew.Columns.Add(dc9);
161
+            #endregion
162
+
163
+            DateTime beginTime;
164
+            DateTime endTime;
165
+            //添加这个条件是通话时长比实际时长大,添加原因:排除转移给非坐席(内部号)时产生的通话时长
166
+            string sql = "  AND ISNULL(UserCode,'0') != '0' ";
167
+
168
+            int days = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);
169
+            if (stime != null && stime != "")
170
+                beginTime = DateTime.Parse(stime);
171
+            else
172
+                beginTime = DateTime.Parse(DateTime.Now.AddDays(-days).ToShortDateString());
173
+
174
+            if (etime != null && etime != "")
175
+                endTime = DateTime.Parse(etime + " 23:59:59");
176
+            else
177
+                endTime = DateTime.Parse(DateTime.Now.ToShortDateString() + " 23:59:59");
178
+
179
+            if (usercode != null && usercode != "")
180
+            {
181
+                sql += " and UserCode='" + usercode + "'";
182
+            }
183
+
184
+            sql += " and DATEDIFF(d,BeginTime,'" + beginTime.ToString("yyyy-MM-dd HH:mm:ss") + "')<=0";
185
+            sql += " and DATEDIFF(d,BeginTime,'" + endTime.ToString("yyyy-MM-dd HH:mm:ss") + "')>=0";
186
+
187
+            DataTable dt = new Bll.T_Call_CallRecords().GetList("1=1 " + sql).Tables[0];
188
+
189
+            for (DateTime t = beginTime; t <= endTime; t = t.AddDays(1))
190
+            {
191
+                string key = t.ToString("yyyyMMdd");
192
+                DataRow[] drsin = dt.Select("begintime >='" + t.ToString() + "' and begintime<'" + t.AddDays(1).ToString() + "' and CallType=0");
193
+                DataRow[] drsout = dt.Select("begintime >='" + t.ToString() + "' and begintime<'" + t.AddDays(1).ToString() + "' and CallType=1");
194
+                DataRow[] drswout = dt.Select("begintime >='" + t.ToString() + "' and begintime<'" + t.AddDays(1).ToString() + "' and CallType=1 and CallState=0 ");
195
+                int callincount = drsin.Length;
196
+                int calloutcount = drsout.Length;
197
+                int callwoutcount = drswout.Length;
198
+                string thsc = gettimes(dt.Select("begintime >='" + t.ToString() + "' and begintime<'" + t.AddDays(1).ToString() + "' "), 0);
199
+                string hrsc = gettimes(drsin, 0);
200
+                string hcsc = gettimes(drsout, 0);
201
+                string zlsc = gettimes(drswout, 1);
202
+                DataRow drNew = dtNew.NewRow();
203
+
204
+                drNew["日期"] = key;
205
+                drNew["呼入次数"] = callincount;
206
+                drNew["呼入时长"] = hrsc + "S";
207
+                drNew["呼出次数"] = calloutcount;
208
+                drNew["呼出时长"] = hcsc + "S";
209
+                drNew["呼出未接通次数"] = callwoutcount;
210
+                drNew["振铃时长"] = zlsc + "S";
211
+                drNew["通话总时长"] = thsc + "S";
212
+                if ((callincount + calloutcount) > 0)
213
+                    drNew["平均通话总时长"] = (double.Parse(thsc) / (callincount + calloutcount)).ToString("F2") + "S";
214
+                else
215
+                    drNew["平均通话总时长"] = "0S";
216
+
217
+                dtNew.Rows.Add(drNew);
218
+            }
219
+            return dtNew;
220
+        }
221
+
222
+        private string gettimes(DataRow[] drs, int type)
223
+        {
224
+            int zlsc = 0; int thsc = 0;
225
+            for (int i = 0; i < drs.Length; i++)
226
+            {
227
+                if (drs[i]["TalkLongTime"].ToString() != "")
228
+                    thsc += int.Parse(drs[i]["TalkLongTime"].ToString());
229
+                if (type == 1)
230
+                {
231
+                    if (drs[i]["RingStartTime"].ToString() != "" && drs[i]["EndTime"].ToString() != "")
232
+                    {
233
+                        DateTime rstime = DateTime.Parse(drs[i]["RingStartTime"].ToString());
234
+                        DateTime entime = DateTime.Parse(drs[i]["EndTime"].ToString());
235
+                        TimeSpan ts = entime - rstime;
236
+                        zlsc += ts.Seconds;
237
+                    }
238
+                }
239
+            }
240
+            if (type == 1)
241
+                return zlsc.ToString();
242
+            else
243
+                return thsc.ToString();
244
+        }
245
+
246
+    }
247
+}

+ 188 - 0
RMYY_CallCenter_Api/Controllers/Quality/IndexBaseController.cs

@@ -0,0 +1,188 @@
1
+using RMYY_CallCenter_Api.Utility;
2
+using System;
3
+using System.Collections.Generic;
4
+using System.Data;
5
+using System.Linq;
6
+using System.Web;
7
+using System.Web.Mvc;
8
+
9
+namespace RMYY_CallCenter_Api.Controllers.Quality
10
+{
11
+    public class IndexBaseController : BaseController
12
+    {
13
+
14
+        //获取指标列表
15
+        public ActionResult GetList(int categoryid, string key, int page = 1, int pagesize = 10)
16
+        {
17
+            string sql = "";
18
+            DataTable dt = new DataTable();
19
+
20
+            if (categoryid > 0)
21
+            {
22
+                //sql += " and (F_CategoryId=" + categoryid + " or F_CategoryId in (select F_CategoryId from T_QC_IndexCategory where F_ParentId=" + categoryid + " )) ";
23
+                sql += " and b.F_CategoryId=" + categoryid;
24
+            }
25
+
26
+            if (!string.IsNullOrEmpty(key))
27
+            {
28
+                sql += " and b.F_Title like '%" + key.Trim() + "%' ";
29
+            }
30
+
31
+            int recordCount = 0;
32
+            dt = Bll.PagerBll.GetListPager(
33
+                "T_QC_IndexBase b with(nolock) left join T_QC_IndexCategory c with(nolock) on b.F_CategoryId=c.F_CategoryId",
34
+                "b.F_IndexId",
35
+                "b.*,c.F_CategoryName",
36
+                " and b.F_DeleteFlag=0 " + sql,
37
+                "ORDER BY b.F_Sort",
38
+                pagesize,
39
+                page,
40
+                true,
41
+                out recordCount);
42
+
43
+            var obj = new
44
+            {
45
+                rows = dt,
46
+                total = recordCount
47
+            };
48
+
49
+            return Content(obj.ToJson());
50
+        }
51
+
52
+        //获取指标
53
+        public ActionResult GetIndexBase(int id)
54
+        {
55
+            if (id > 0)
56
+            {
57
+                Bll.T_QC_IndexBase dBLL = new Bll.T_QC_IndexBase();
58
+                Model.T_QC_IndexBase dModel = dBLL.GetModel(id);
59
+                if (dModel != null)
60
+                {
61
+                    return Success("获取指标成功", dModel);
62
+                }
63
+                else
64
+                {
65
+                    return Error("获取指标失败");
66
+                }
67
+            }
68
+            else
69
+            {
70
+                return Error("获取参数失败");
71
+            }
72
+        }
73
+
74
+        //添加指标
75
+        [HttpPost]
76
+        public ActionResult AddIndexBase(int cid, string title, string remark, int score = 0, int sort = 0)
77
+        {
78
+            Model.T_QC_IndexBase dModel = new Model.T_QC_IndexBase();
79
+            if (cid > 0)
80
+                dModel.F_CategoryId = cid;
81
+            else
82
+                return Error("请选择指标分类");
83
+            dModel.F_Sort = sort;
84
+            dModel.F_Score = score;
85
+
86
+            if (!string.IsNullOrWhiteSpace(title.Trim()))
87
+            {
88
+                dModel.F_Title = WebHelper.UrlDecode(title.Trim());
89
+            }
90
+            if (!string.IsNullOrWhiteSpace(remark.Trim()))
91
+            {
92
+                dModel.F_Remark = WebHelper.UrlDecode(remark.Trim());
93
+            }
94
+
95
+            dModel.F_CreateOn = DateTime.Now;
96
+            dModel.F_CreateBy = User.F_UserId;
97
+            dModel.F_DeleteFlag = 0;
98
+
99
+            bool b = new Bll.T_QC_IndexBase().Add(dModel) > 0;
100
+            if (b)
101
+            {
102
+                DB.DbHelperSQL.ExecuteSql("update T_QC_IndexCategory set F_Score=F_Score+" + dModel.F_Score + " where F_CategoryId =" + dModel.F_CategoryId);
103
+                return Success("添加成功");
104
+            }
105
+            else
106
+            {
107
+                return Success("添加失败");
108
+            }
109
+        }
110
+
111
+        //编辑指标
112
+        [HttpPost]
113
+        public ActionResult EditIndexBase(int id, int cid, int score, int sort, string title, string remark)
114
+        {
115
+            if (id > 0)
116
+            {
117
+                Bll.T_QC_IndexBase dBLL = new Bll.T_QC_IndexBase();
118
+                Model.T_QC_IndexBase dModel = dBLL.GetModel(id);
119
+                if (dModel != null)
120
+                {
121
+                    int oldscore = dModel.F_Score.Value;
122
+                    dModel.F_CategoryId = cid;
123
+                    dModel.F_Sort = sort;
124
+                    dModel.F_Score = score;
125
+                    if (!string.IsNullOrWhiteSpace(title.Trim()))
126
+                    {
127
+                        dModel.F_Title = WebHelper.UrlDecode(title.Trim());
128
+                    }
129
+                    if (!string.IsNullOrWhiteSpace(remark.Trim()))
130
+                    {
131
+                        dModel.F_Remark = WebHelper.UrlDecode(remark.Trim());
132
+                    }
133
+                    dModel.F_ModifyBy = User.F_UserId;
134
+                    dModel.F_ModifyOn = DateTime.Now;
135
+
136
+                    bool b = dBLL.Update(dModel);
137
+                    if (b)
138
+                    {
139
+                        DB.DbHelperSQL.ExecuteSql("update T_QC_IndexCategory set F_Score=F_Score+" + dModel.F_Score + "-" + oldscore + " where F_CategoryId =" + dModel.F_CategoryId);
140
+                        return Success("编辑成功");
141
+                    }
142
+                    else
143
+                    {
144
+                        return Success("编辑失败");
145
+                    }
146
+                }
147
+                else
148
+                    return Error("获取信息失败");
149
+            }
150
+            else
151
+            {
152
+                return Error("请选择要编辑的指标");
153
+            }
154
+
155
+        }
156
+
157
+        //删除指标记录
158
+        [HttpPost]
159
+        public ActionResult DelIndexBase(int id)
160
+        {
161
+            if (id > 0)
162
+            {
163
+                Bll.T_QC_IndexBase dBLL = new Bll.T_QC_IndexBase();
164
+                Model.T_QC_IndexBase dModel = dBLL.GetModel(id);
165
+                if (dModel != null)
166
+                {
167
+                    if (dBLL.Delete(id))
168
+                    {
169
+                        DB.DbHelperSQL.ExecuteSql("update T_QC_IndexCategory set F_Score=F_Score-" + dModel.F_Score + " where F_CategoryId =" + dModel.F_CategoryId);
170
+                        return Success("删除成功");
171
+                    }
172
+                    else
173
+                    {
174
+                        return Error("删除失败");
175
+                    }
176
+                }
177
+                else
178
+                {
179
+                    return Error("获取信息失败");
180
+                }
181
+            }
182
+            else
183
+            {
184
+                return Error("请选择要删除的记录");
185
+            }
186
+        }
187
+    }
188
+}

+ 159 - 0
RMYY_CallCenter_Api/Controllers/Quality/IndexCategoryController.cs

@@ -0,0 +1,159 @@
1
+using RMYY_CallCenter_Api.Utility;
2
+using System;
3
+using System.Collections.Generic;
4
+using System.Data;
5
+using System.Linq;
6
+using System.Web;
7
+using System.Web.Mvc;
8
+
9
+namespace RMYY_CallCenter_Api.Controllers.Quality
10
+{
11
+    public class IndexCategoryController : BaseController
12
+    {
13
+        // GET: IndexCategory
14
+
15
+        //获取指标分类列表
16
+        public ActionResult GetList(int page = 1, int pagesize = 10)
17
+        {
18
+            string sql = " and F_DeleteFlag=0";
19
+            int recordCount = 0;
20
+            DataTable dt = Bll.PagerBll.GetListPager(
21
+                "T_QC_IndexCategory",
22
+                "F_CategoryId",
23
+                "*",
24
+                sql,
25
+                "ORDER BY F_CategoryId ",
26
+                pagesize,
27
+                page,
28
+                true,
29
+                out recordCount);
30
+
31
+            var obj = new
32
+            {
33
+                rows = dt,
34
+                total = recordCount
35
+            };
36
+
37
+            return Content(obj.ToJson());
38
+        }
39
+
40
+        //获取指标分类列表
41
+        public ActionResult GetAllList()
42
+        {
43
+            return Success("成功", new Bll.T_QC_IndexCategory().GetList("F_DeleteFlag=0").Tables[0]);
44
+        }
45
+
46
+        //获取指标分类
47
+        public ActionResult GetIndexCategory(int id)
48
+        {
49
+            if (id > 0)
50
+            {
51
+                Bll.T_QC_IndexCategory dBll = new Bll.T_QC_IndexCategory();
52
+                Model.T_QC_IndexCategory dModel = dBll.GetModel(id);
53
+                if (dModel != null)
54
+                {
55
+                    return Success("获取指标分类成功", dModel);
56
+                }
57
+                else
58
+                {
59
+                    return Error("获取指标分类失败");
60
+                }
61
+            }
62
+            else
63
+            {
64
+                return Error("获取参数失败");
65
+            }
66
+        }
67
+
68
+        //添加指标分类
69
+        public ActionResult AddIndexCategory(string categoryName, int sort = 0, int pid = 0)
70
+        {
71
+
72
+            Model.T_QC_IndexCategory dModel = new Model.T_QC_IndexCategory();
73
+
74
+            if (!string.IsNullOrWhiteSpace(categoryName.Trim()))
75
+            {
76
+                dModel.F_CategoryName = WebHelper.UrlDecode(categoryName.Trim());
77
+            }
78
+            dModel.F_Sort = sort;
79
+            dModel.F_ParentId = pid;
80
+            dModel.F_Score = 0;
81
+            dModel.F_CreateOn = DateTime.Now;
82
+            dModel.F_CreateBy = User.F_UserId;
83
+            dModel.F_DeleteFlag = 0;
84
+
85
+            bool b = new Bll.T_QC_IndexCategory().Add(dModel) > 0;
86
+            if (b)
87
+            {
88
+                return Success("添加成功");
89
+            }
90
+            else
91
+            {
92
+                return Success("添加失败");
93
+            }
94
+        }
95
+
96
+        //编辑指标分类
97
+        public ActionResult EditIndexCategory(int id, string categoryName, int sort = 0, int pid = 0)
98
+        {
99
+            if (id > 0)
100
+            {
101
+                Bll.T_QC_IndexCategory dBll = new Bll.T_QC_IndexCategory();
102
+                Model.T_QC_IndexCategory dModel = dBll.GetModel(id);
103
+                if (dModel != null)
104
+                {
105
+                    if (!string.IsNullOrWhiteSpace(categoryName.Trim()))
106
+                    {
107
+                        dModel.F_CategoryName = WebHelper.UrlDecode(categoryName.Trim());
108
+                    }
109
+                    dModel.F_Sort = sort;
110
+                    dModel.F_ParentId = pid;
111
+                    bool b = dBll.Update(dModel);
112
+                    if (b)
113
+                    {
114
+                        return Success("编辑成功");
115
+                    }
116
+                    else
117
+                    {
118
+                        return Success("编辑失败");
119
+                    }
120
+                }
121
+                else
122
+                    return Error("获取信息失败");
123
+            }
124
+            else
125
+            {
126
+                return Error("请选择要编辑的分类");
127
+            }
128
+        }
129
+
130
+        //删除指标分类记录
131
+        public ActionResult DelIndexCategory(int id)
132
+        {
133
+
134
+            if (id > 0)
135
+            {
136
+                var n = DB.DbHelperSQL.GetSingle(" select count(1) from T_QC_IndexBase where F_CategoryId=" + id)?.ToString() ?? "0";
137
+                if (int.Parse(n) > 0)
138
+                {
139
+                    return Error("请先删除此分类下的指标");
140
+                }
141
+                else
142
+                {
143
+                    if (new Bll.T_QC_IndexCategory().Delete(id))
144
+                    {
145
+                        return Success("删除成功");
146
+                    }
147
+                    else
148
+                    {
149
+                        return Error("删除失败");
150
+                    }
151
+                }
152
+            }
153
+            else
154
+            {
155
+                return Error("请选择要删除的记录");
156
+            }
157
+        }
158
+    }
159
+}

+ 391 - 0
RMYY_CallCenter_Api/Controllers/Quality/QCManageController.cs

@@ -0,0 +1,391 @@
1
+using Newtonsoft.Json.Linq;
2
+using RMYY_CallCenter_Api.Utility;
3
+using System;
4
+using System.Collections.Generic;
5
+using System.Data;
6
+using System.Linq;
7
+using System.Web;
8
+using System.Web.Mvc;
9
+
10
+namespace RMYY_CallCenter_Api.Controllers.Quality
11
+{
12
+    public class QCManageController : BaseController
13
+    {
14
+        // GET: QCManage
15
+
16
+        //获取未质检列表
17
+        public ActionResult GetNoQCList(string phone, string usercode)
18
+        {
19
+            string sql = " and CallState=1 and TalkLongTime>0 and F_QCState=0 ";
20
+            DataTable dt = new DataTable();
21
+
22
+            string callstate = HttpUtility.UrlDecode(RequestString.GetQueryString("callstate"));
23
+            string calltype = HttpUtility.UrlDecode(RequestString.GetQueryString("calltype"));
24
+            string actiontype = HttpUtility.UrlDecode(RequestString.GetQueryString("actiontype"));
25
+            string starttime = HttpUtility.UrlDecode(RequestString.GetQueryString("starttime"));
26
+            string endtime = HttpUtility.UrlDecode(RequestString.GetQueryString("endtime"));
27
+            string tasktype = HttpUtility.UrlDecode(RequestString.GetQueryString("tasktype"));
28
+            string extnumber = HttpUtility.UrlDecode(RequestString.GetQueryString("extnumber"));
29
+            string PhoneType = HttpUtility.UrlDecode(RequestString.GetQueryString("phoneType"));
30
+            int islike = RequestString.GetInt("islike", 1);
31
+
32
+            string strpageindex = RequestString.GetQueryString("page");
33
+            int pageindex = 1;
34
+            string strpagesize = RequestString.GetQueryString("pagesize");
35
+            int pagesize = 10;
36
+
37
+            if (usercode != null && usercode.Trim() != "")
38
+            {
39
+                if (usercode.IndexOf(',') > 0)
40
+                {
41
+                    sql += " and UserCode in(" + usercode + ")";
42
+                }
43
+                else
44
+                {
45
+                    sql += " and UserCode ='" + usercode + "'";
46
+                }
47
+            }
48
+            if (PhoneType != null && PhoneType.Trim() != "")
49
+            {
50
+                sql += " and PhoneType='" + PhoneType + "'";
51
+            }
52
+
53
+            if (phone != null && phone.Trim() != "")
54
+            {
55
+                sql += " and CallNumber like '%" + phone + "%'";
56
+            }
57
+
58
+            if (calltype.Trim() != "")
59
+            {
60
+                if (calltype == "3")
61
+                {
62
+                    sql += " and CallType='1'";
63
+                    sql += " and CallRecordsId in(select F_CallRecordId from T_Bus_VisitResult WITH(NOLOCK) where F_CallRecordId !='' and F_CallRecordId is not null )";
64
+                }
65
+                else
66
+                    sql += " and CallType='" + calltype + "'";
67
+            }
68
+            if (tasktype.Trim() != "")
69
+            {
70
+                if (tasktype.Trim() == "2")
71
+                {
72
+                    sql += " and TaskType='" + tasktype + "'";
73
+                }
74
+                else if (tasktype.Trim() == "0")
75
+                {
76
+                    sql += " and (TaskType is null or TaskType!='2')";
77
+                }
78
+            }
79
+            if (actiontype.Trim() != "")
80
+            {
81
+                sql += " and ActionType=" + actiontype.Trim();
82
+            }
83
+            if (starttime.Trim() != "")
84
+            {
85
+                sql += " and BeginTime>='" + starttime + "' ";
86
+            }
87
+            if (endtime.Trim() != "")
88
+            {
89
+                sql += " and BeginTime<='" + endtime + "' ";
90
+            }
91
+            if (extnumber.Trim() != "")
92
+            {
93
+                sql += " and ExtNumber like '%" + extnumber.Trim() + "%'";
94
+            }
95
+
96
+            if (strpageindex.Trim() != "")
97
+            {
98
+                pageindex = Convert.ToInt32(strpageindex);
99
+            }
100
+
101
+            if (strpagesize.Trim() != "")
102
+            {
103
+                pagesize = Convert.ToInt32(strpagesize);
104
+            }
105
+
106
+            int recordCount = 0;
107
+            dt = Bll.PagerBll.GetListPager(
108
+                "T_Call_CallRecords WITH(NOLOCK)",
109
+                "CallRecordsId",
110
+                "*,dbo.GetUserName(UserCode) as UserName,dbo.GetDictionaryName(F_CallInType) as TypeName",
111
+                sql,
112
+                "ORDER BY CallRecordsId desc",
113
+                pagesize,
114
+                pageindex,
115
+                true,
116
+                out recordCount);
117
+
118
+            var config = new Bll.T_Sys_SystemConfig().GetModelList(" F_ParamCode='PlayPath' ").FirstOrDefault();
119
+
120
+            foreach (DataRow dr in dt.Rows)
121
+            {
122
+                string path = dr["FilePath"] != null ? dr["FilePath"].ToString() : "";
123
+                if (path != "" && config != null && !string.IsNullOrEmpty(config.F_ParamValue))
124
+                {
125
+                    var ym = config.F_ParamValue;
126
+                    if (ym.Substring(ym.Length - 1) == "/")
127
+                    {
128
+                        ym = ym.Substring(0, ym.Length - 1);
129
+                    }
130
+
131
+                    string lujing = path.Substring(path.IndexOf(':') + 1).Replace('\\', '/');
132
+                    string wlpath = ym + lujing;
133
+
134
+                    dr["FilePath"] = wlpath;
135
+                }
136
+            }
137
+
138
+            var obj = new
139
+            {
140
+                state = "success",
141
+                message = "成功",
142
+                rows = dt,
143
+                total = recordCount
144
+            };
145
+
146
+            return Content(obj.ToJson());
147
+
148
+        }
149
+
150
+        //获取已质检列表
151
+        public ActionResult GetQCList(string phone, string usercode)
152
+        {
153
+            string sql = " and CallState=1 and TalkLongTime>0 and F_QCState=1 ";
154
+            DataTable dt = new DataTable();
155
+
156
+            string callstate = HttpUtility.UrlDecode(RequestString.GetQueryString("callstate"));
157
+            string calltype = HttpUtility.UrlDecode(RequestString.GetQueryString("calltype"));
158
+            string actiontype = HttpUtility.UrlDecode(RequestString.GetQueryString("actiontype"));
159
+            string starttime = HttpUtility.UrlDecode(RequestString.GetQueryString("starttime"));
160
+            string endtime = HttpUtility.UrlDecode(RequestString.GetQueryString("endtime"));
161
+            string tasktype = HttpUtility.UrlDecode(RequestString.GetQueryString("tasktype"));
162
+            string extnumber = HttpUtility.UrlDecode(RequestString.GetQueryString("extnumber"));
163
+            string PhoneType = HttpUtility.UrlDecode(RequestString.GetQueryString("phoneType"));
164
+            int islike = RequestString.GetInt("islike", 1);
165
+
166
+            string strpageindex = RequestString.GetQueryString("page");
167
+            int pageindex = 1;
168
+            string strpagesize = RequestString.GetQueryString("pagesize");
169
+            int pagesize = 10;
170
+
171
+            if (usercode != null && usercode.Trim() != "")
172
+            {
173
+                if (usercode.IndexOf(',') > 0)
174
+                {
175
+                    sql += " and UserCode in(" + usercode + ")";
176
+                }
177
+                else
178
+                {
179
+                    sql += " and UserCode ='" + usercode + "'";
180
+                }
181
+            }
182
+            if (PhoneType != null && PhoneType.Trim() != "")
183
+            {
184
+                sql += " and PhoneType='" + PhoneType + "'";
185
+            }
186
+
187
+            if (phone != null && phone.Trim() != "")
188
+            {
189
+                sql += " and CallNumber like '%" + phone + "%'";
190
+            }
191
+            if (calltype.Trim() != "")
192
+            {
193
+                if (calltype == "3")
194
+                {
195
+                    sql += " and CallType='1'";
196
+                    sql += " and CallRecordsId in(select F_CallRecordId from T_Bus_VisitResult WITH(NOLOCK) where F_CallRecordId !='' and F_CallRecordId is not null )";
197
+                }
198
+                else
199
+                    sql += " and CallType='" + calltype + "'";
200
+            }
201
+            if (tasktype.Trim() != "")
202
+            {
203
+                if (tasktype.Trim() == "2")
204
+                {
205
+                    sql += " and TaskType='" + tasktype + "'";
206
+                }
207
+                else if (tasktype.Trim() == "0")
208
+                {
209
+                    sql += " and (TaskType is null or TaskType!='2')";
210
+                }
211
+            }
212
+            if (actiontype.Trim() != "")
213
+            {
214
+                sql += " and ActionType=" + actiontype.Trim();
215
+            }
216
+            if (starttime.Trim() != "")
217
+            {
218
+                sql += " and BeginTime>='" + starttime + "' ";
219
+            }
220
+            if (endtime.Trim() != "")
221
+            {
222
+                sql += " and BeginTime<='" + endtime + "' ";
223
+            }
224
+            if (extnumber.Trim() != "")
225
+            {
226
+                sql += " and ExtNumber like'%" + extnumber.Trim() + "%'";
227
+            }
228
+
229
+            if (strpageindex.Trim() != "")
230
+            {
231
+                pageindex = Convert.ToInt32(strpageindex);
232
+            }
233
+
234
+            if (strpagesize.Trim() != "")
235
+            {
236
+                pagesize = Convert.ToInt32(strpagesize);
237
+            }
238
+
239
+            int recordCount = 0;
240
+            dt = Bll.PagerBll.GetListPager(
241
+                "T_Call_CallRecords WITH(NOLOCK)",
242
+                "CallRecordsId",
243
+                "*,dbo.GetUserName(UserCode) as UserName,dbo.GetDictionaryName(F_CallInType) as TypeName",
244
+                sql,
245
+                "ORDER BY F_QCTime desc",
246
+                pagesize,
247
+                pageindex,
248
+                true,
249
+                out recordCount);
250
+
251
+            var config = new Bll.T_Sys_SystemConfig().GetModelList(" F_ParamCode='PlayPath' ").FirstOrDefault();
252
+
253
+            foreach (DataRow dr in dt.Rows)
254
+            {
255
+                string path = dr["FilePath"] != null ? dr["FilePath"].ToString() : "";
256
+                if (path != "" && config != null && !string.IsNullOrEmpty(config.F_ParamValue))
257
+                {
258
+                    var ym = config.F_ParamValue;
259
+                    if (ym.Substring(ym.Length - 1) == "/")
260
+                    {
261
+                        ym = ym.Substring(0, ym.Length - 1);
262
+                    }
263
+
264
+                    string lujing = path.Substring(path.IndexOf(':') + 1).Replace('\\', '/');
265
+                    string wlpath = ym + lujing;
266
+
267
+                    dr["FilePath"] = wlpath;
268
+                }
269
+            }
270
+
271
+            var obj = new
272
+            {
273
+                state = "success",
274
+                message = "成功",
275
+                rows = dt,
276
+                total = recordCount
277
+            };
278
+
279
+            return Content(obj.ToJson());
280
+
281
+        }
282
+
283
+        //获取质检详情
284
+        public ActionResult GetIndexList(int id)
285
+        {
286
+            DataTable dt = new Bll.T_QC_IndexCategory().GetList(" F_DeleteFlag=0 order by F_Sort ,F_CategoryId").Tables[0];
287
+            DataTable dtindex = new Bll.T_QC_IndexBase().GetList(" F_DeleteFlag=0 order by F_Sort ,F_CategoryId").Tables[0];
288
+            DataTable dtres = new Bll.T_QC_IndexRes().GetList(" CallRecordsId=" + id + " ").Tables[0];
289
+
290
+            List<object> list = new List<object>();
291
+            int allscore = 0;
292
+            int allpf = 0;
293
+            foreach (DataRow dr in dt.Select("F_ParentId=0"))
294
+            {
295
+                string categoryid = dr["F_CategoryId"].ToString().Trim();
296
+                DataRow[] drcs = dtindex.Select("F_CategoryId=" + categoryid);
297
+
298
+                var rowspan = drcs.Count();
299
+                int csc = int.Parse(dr["F_Score"].ToString().Trim());
300
+                allscore += csc;
301
+                if (rowspan > 1)
302
+                {
303
+                    var l = new
304
+                    {
305
+                        Qcid = categoryid,
306
+                        Qcname = dr["F_CategoryName"].ToString().Trim(),
307
+                        Qcscore = csc,
308
+                        Qcpf = 0,
309
+                        TypeName = "",
310
+                        Rowspan = rowspan,
311
+                        Colspan = 1
312
+                    };
313
+                    list.Add(l);
314
+                }
315
+
316
+                foreach (DataRow drc in drcs)
317
+                {
318
+                    string childid = drc["F_IndexId"].ToString().Trim();
319
+                    int sc = int.Parse(drc["F_Score"].ToString().Trim());
320
+                    var pfdr = dtres.Select("F_IndexId=" + childid);
321
+                    int pf = pfdr.Count() > 0 ? int.Parse(pfdr[0]["F_QCScore"].ToString()) : 0;
322
+                    allpf += pf;
323
+                    var l1 = new
324
+                    {
325
+                        Qcid = childid,
326
+                        Qcname = drc["F_Title"].ToString().Trim(),
327
+                        Qcscore = sc,
328
+                        Qcpf = pf,
329
+                        TypeName = rowspan == 1 ? dr["F_CategoryName"].ToString().Trim() : "",
330
+                        Rowspan = 1,
331
+                        Colspan = 1
332
+                    };
333
+                    list.Add(l1);
334
+                }
335
+            }
336
+
337
+            var lt = new
338
+            {
339
+                Qcid = "0",
340
+                Qcname = "总计",
341
+                Qcscore = allscore,
342
+                Qcpf = allpf,
343
+                TypeName = "",
344
+                Rowspan = 1,
345
+                Colspan = 2
346
+            };
347
+            list.Add(lt);
348
+
349
+            dtres.Clear();
350
+            dtres.Dispose();
351
+            dtindex.Clear();
352
+            dtindex.Dispose();
353
+            dt.Clear();
354
+            dt.Dispose();
355
+
356
+            return Success("质检加载成功", list);
357
+        }
358
+
359
+
360
+        //保存质检得分
361
+        public ActionResult SaveData(int id, string json)
362
+        {
363
+            if (id > 0)
364
+            {
365
+                int allscore = 0;
366
+                List<string> list = new List<string>();
367
+                list.Add("delete from T_QC_IndexRes where CallRecordsId=" + id);
368
+                foreach (var scoreinfo in json.ToObject<List<JObject>>())
369
+                {
370
+                    list.Add("insert into T_QC_IndexRes(CallRecordsId,F_IndexId,F_Score,F_QCScore) values(" + id + "," + scoreinfo["Id"].ToString() + "," + scoreinfo["Score"].ToString() + "," + scoreinfo["QCScore"].ToString() + ")");
371
+
372
+                    allscore += int.Parse(scoreinfo["QCScore"].ToString());
373
+                }
374
+                list.Add("update T_Call_CallRecords set F_QCState=1,F_QCScore=" + allscore + ",F_QCUserId=" + User.F_UserId + ",F_QCUserName='" + User.F_UserName + "',F_QCTime=getdate() where CallRecordsId=" + id);
375
+
376
+                if (DB.DbHelperSQL.ExecuteSqlTran(list) > 0)
377
+                {
378
+                    return Success("保存成功");
379
+                }
380
+                else
381
+                {
382
+                    return Error("保存失败");
383
+                }
384
+            }
385
+            else
386
+            {
387
+                return Error("保存失败");
388
+            }
389
+        }
390
+    }
391
+}

+ 312 - 0
RMYY_CallCenter_Api/Controllers/Quality/QCResultController.cs

@@ -0,0 +1,312 @@
1
+using RMYY_CallCenter_Api.DB;
2
+using RMYY_CallCenter_Api.Utility;
3
+using System;
4
+using System.Collections.Generic;
5
+using System.Data;
6
+using System.Linq;
7
+using System.Web;
8
+using System.Web.Mvc;
9
+
10
+namespace RMYY_CallCenter_Api.Controllers.Quality
11
+{
12
+    public class QCResultController : BaseController
13
+    {
14
+        //质检报表
15
+
16
+        List<string> arlist = new List<string>();
17
+        DataTable dtNew = new DataTable();
18
+        //获取表头
19
+        public ActionResult GetColumnList(string isext)
20
+        {
21
+
22
+            List<Model.QCModel> qclist = new List<Model.QCModel>();
23
+
24
+            #region 加载固定项
25
+            DataColumn dc1 = new DataColumn("QCName", Type.GetType("System.String"));
26
+            DataColumn dc2 = new DataColumn("UserName", Type.GetType("System.String"));
27
+            DataColumn dc3 = new DataColumn("UserCode", Type.GetType("System.String"));
28
+            DataColumn dc4 = new DataColumn("ZJCount", Type.GetType("System.String"));
29
+            dtNew.Columns.Add(dc1);
30
+            dtNew.Columns.Add(dc2);
31
+            dtNew.Columns.Add(dc3);
32
+            dtNew.Columns.Add(dc4);
33
+            Model.QCModel qcm1 = new Model.QCModel();
34
+            qcm1.Qcid = "cpr1";
35
+            qcm1.Qcname = "测评人";
36
+            qcm1.Rowspan = "4";
37
+            Model.QCModel qcm2 = new Model.QCModel();
38
+            qcm2.Qcid = "xm2";
39
+            qcm2.Qcname = "姓名";
40
+            qcm2.Rowspan = "4";
41
+            Model.QCModel qcm3 = new Model.QCModel();
42
+            qcm3.Qcid = "gh3";
43
+            qcm3.Qcname = "工号";
44
+            qcm3.Rowspan = "4";
45
+            Model.QCModel qcm4 = new Model.QCModel();
46
+            qcm4.Qcid = "zjts4";
47
+            qcm4.Qcname = "质检条数";
48
+            qcm4.Rowspan = "4";
49
+            qclist.Add(qcm1);
50
+            qclist.Add(qcm2);
51
+            qclist.Add(qcm3);
52
+            qclist.Add(qcm4);
53
+            #endregion
54
+            Model.QCModel qcmzf = new Model.QCModel();
55
+            qcmzf.Qcid = "zf999";
56
+            qcmzf.Qcname = "总分";
57
+            qcmzf.Rowspan = "3";
58
+
59
+            object obj = null;
60
+
61
+            DataSet ds = DbHelperSQL.Query("select F_CategoryId,F_CategoryName,F_ParentId from T_QC_IndexCategory where F_DeleteFlag=0 order by F_CategoryId asc");
62
+            DataTable dsConten = DbHelperSQL.Query("select F_IndexId,F_Content,F_Title,F_Score,F_CategoryId from T_QC_IndexBase order by F_IndexId asc").Tables[0];
63
+            if (ds != null && ds.Tables.Count > 0)
64
+            {
65
+                DataTable dt = ds.Tables[0];
66
+                DataRow[] drlist = dt.Select("F_ParentId=0");
67
+                if (drlist != null)
68
+                {
69
+                    int ctsc = 0;//总分
70
+                    for (int i = 0; i < drlist.Length; i++)
71
+                    {
72
+                        obj = DbHelperSQL.GetSingle("select count(*) from T_QC_IndexBase where F_CategoryId =" + drlist[i]["F_CategoryId"] + "");
73
+                        Model.QCModel qcml = new Model.QCModel();
74
+                        qcml.Qcid = drlist[i]["F_CategoryId"].ToString();
75
+                        qcml.Qcname = drlist[i]["F_CategoryName"].ToString();
76
+                        qcml.Colspan = obj.ToString();
77
+                        DataRow[] drlistnew = dt.Select("F_CategoryId=" + drlist[i]["F_CategoryId"]);
78
+                        if (drlistnew != null && drlist.Length > 0)
79
+                        {
80
+                            List<Model.QCModel> qcclist = new List<Model.QCModel>();
81
+                            int sc = 0;
82
+                            string strCatid = "";
83
+                            for (int n = 0; n < drlistnew.Length; n++)
84
+                            {
85
+                                Model.QCModel qccml = new Model.QCModel();
86
+                                obj = DbHelperSQL.GetSingle("select count(*) from T_QC_IndexBase where F_CategoryId=" + drlistnew[n]["F_CategoryId"]);
87
+                                qccml.Qcid = drlist[i]["F_CategoryId"].ToString() + "-" + drlistnew[n]["F_CategoryId"].ToString();
88
+                                qccml.Qcname = drlistnew[n]["F_CategoryName"].ToString();
89
+                                qccml.Colspan = obj.ToString();
90
+
91
+                                DataRow[] drContent = dsConten.Select("F_CategoryId=" + drlistnew[n]["F_CategoryId"]);
92
+                                if (drContent != null && drContent.Length > 0)
93
+                                {
94
+                                    List<Model.QCModel> qccllist = new List<Model.QCModel>();
95
+                                    for (int m = 0; m < drContent.Length; m++)
96
+                                    {
97
+                                        Model.QCModel qccmll = new Model.QCModel();
98
+                                        qccmll.Qcid = drlist[i]["F_CategoryId"].ToString() + "-" + drlistnew[n]["F_CategoryId"].ToString() + "-" + drContent[m]["F_IndexId"].ToString();
99
+                                        qccmll.Qcname = drContent[m]["F_Title"].ToString();
100
+                                        qccmll.Qcscore = drContent[m]["F_Score"].ToString();
101
+                                        if (!string.IsNullOrEmpty(drContent[m]["F_Score"].ToString()))
102
+                                        {
103
+                                            sc += int.Parse(drContent[m]["F_Score"].ToString());
104
+                                        }
105
+
106
+                                        strCatid += drContent[m]["F_IndexId"] + ",";
107
+
108
+                                        DataColumn dc = new DataColumn("Q" + drContent[m]["F_IndexId"].ToString(), Type.GetType("System.String"));
109
+                                        dtNew.Columns.Add(dc);
110
+
111
+                                        qccllist.Add(qccmll);
112
+                                    }
113
+
114
+                                    qccml.Qclist = qccllist;
115
+                                }
116
+                                qcclist.Add(qccml);
117
+                            }
118
+
119
+                            if (strCatid != "")
120
+                            {
121
+                                strCatid.Substring(0, strCatid.Length - 1);
122
+                            }
123
+                            arlist.Add(strCatid); //每一组的题id记下来,用在分数总和上。
124
+                                                  //strColom4 += "<td  align='center'style='border-top: 0px solid #CCCCCC; border-bottom: 1px solid #CCCCCC; border-left: 1px solid #CCCCCC; border-right: 1px solid #CCCCCC; padding-left: 2px; height: 18px; padding-top: 3px; padding-bottom: 3px;'>" + sc.ToString() + "</td>";
125
+                            ctsc += sc;
126
+
127
+
128
+                            qcml.Qclist = qcclist;
129
+                            qclist.Add(qcml);
130
+
131
+                            Model.QCModel qcml1 = new Model.QCModel();
132
+                            qcml1.Qcid = "fx" + drlist[i]["F_CategoryId"].ToString();
133
+                            qcml1.Qcname = "分项得分";
134
+                            qcml1.Rowspan = "3";
135
+                            qcml1.Qcscore = sc.ToString();
136
+                            qclist.Add(qcml1);
137
+                            DataColumn dcdf = new DataColumn("df" + i.ToString(), Type.GetType("System.String"));
138
+                            dtNew.Columns.Add(dcdf);
139
+                        }
140
+
141
+                    }
142
+
143
+                    qcmzf.Qcscore = ctsc.ToString();
144
+                }
145
+
146
+            }
147
+
148
+            qclist.Add(qcmzf);
149
+            DataColumn dczf = new DataColumn("AllScore", Type.GetType("System.String"));
150
+            dtNew.Columns.Add(dczf);
151
+            if (isext != null && isext.Trim() != "")
152
+            {
153
+                //导出增加显示问题和建议
154
+                Model.QCModel qcmlzj1 = new Model.QCModel();
155
+                Model.QCModel qcmlzj2 = new Model.QCModel();
156
+                qcmlzj1.Qcid = "wt99";
157
+                qcmlzj1.Qcname = "问题";
158
+                qcmlzj1.Rowspan = "4";
159
+                qclist.Add(qcmlzj1);
160
+                qcmlzj2.Qcid = "jy99";
161
+                qcmlzj2.Qcname = "建议";
162
+                qcmlzj2.Rowspan = "4";
163
+                qclist.Add(qcmlzj2);
164
+                DataColumn dcwt = new DataColumn("Question", Type.GetType("System.String"));
165
+                dtNew.Columns.Add(dcwt);
166
+                DataColumn dcjy = new DataColumn("Advise", Type.GetType("System.String"));
167
+                dtNew.Columns.Add(dcjy);
168
+            }
169
+
170
+            return Success("获取质检表头成功", qclist);
171
+
172
+
173
+        }
174
+
175
+        //获取数据
176
+        public ActionResult GetDataList(string stime, string endtime)
177
+        {
178
+
179
+            Model.PageData<object> pagedata = new Model.PageData<object>();
180
+
181
+            string dpt = RequestString.GetQueryString("dpt");
182
+            string isext = RequestString.GetQueryString("isext");
183
+
184
+            GetColumnList(isext);
185
+
186
+            string sqltimeCallRecords = "";
187
+            string strsql = "";
188
+            if (stime != null && stime.Trim() != "")
189
+            {
190
+                sqltimeCallRecords += " and CONVERT(varchar , BeginTime, 120)>=CONVERT(varchar , '" + stime.Trim() + " 00:00:01', 120) ";
191
+            }
192
+            if (endtime != null && endtime.Trim() != "")
193
+            {
194
+                sqltimeCallRecords += " and CONVERT(varchar , BeginTime, 120)<=CONVERT(varchar , '" + endtime.Trim() + " 23:59:59', 120) ";
195
+            }
196
+            if (dpt != null && dpt.ToString() != "")
197
+            {
198
+                strsql = " and UserCode in(select F_UserCode from T_Sys_UserAccount where F_DeptId=" + dpt.ToString() + ") ";
199
+            }
200
+
201
+            DataSet ds = DbHelperSQL.Query("select *,(select F_UserName from  T_Sys_UserAccount as b where b.F_UserCode=a.UserCode) as name,(select F_UserCode from  T_Sys_UserAccount as b where b.F_UserCode=a.UserCode) as wknmb from (select COUNT(*) as ct,UserCode from T_Call_CallRecords where F_QCState=1 " + sqltimeCallRecords + strsql + " group by  UserCode) as a order by wknmb asc");
202
+            DataTable dtTitle = DbHelperSQL.Query("select F_IndexId from T_QC_IndexBase where F_DeleteFlag=0").Tables[0];
203
+            if (ds != null && ds.Tables.Count > 0)
204
+            {
205
+                DataTable dt = ds.Tables[0];
206
+                string strname = "";
207
+                foreach (DataRow dr in dt.Rows)
208
+                {
209
+                    DataRow drNew = dtNew.NewRow();
210
+
211
+                    object obj = DbHelperSQL.GetSingle("select F_QCUserName from T_Call_CallRecords where UserCode='" + dr["wknmb"] + "' and F_QCState=1 " + sqltimeCallRecords);
212
+                    if (obj != null)
213
+                    {
214
+                        strname = obj.ToString();
215
+                    }
216
+                    else
217
+                    {
218
+                        strname = "";
219
+                    }
220
+                    drNew["QCName"] = strname;
221
+                    drNew["UserName"] = dr["name"].ToString();
222
+                    drNew["UserCode"] = dr["wknmb"].ToString();
223
+
224
+                    int ct = 0;
225
+                    if (dr["ct"] != null && dr["ct"].ToString() != "")
226
+                    {
227
+                        ct = int.Parse(dr["ct"].ToString());//评价数量
228
+                    }
229
+                    drNew["ZJCount"] = dr["ct"].ToString();
230
+
231
+                    double itemfs = 0;//每一大项分数和
232
+                    double ctfs = 0;//总分
233
+
234
+                    for (int i = 0; i < arlist.Count; i++)
235
+                    {
236
+                        string strList = arlist[i];
237
+                        string[] strTitleList = strList.Split(',');
238
+                        foreach (string str in strTitleList)
239
+                        {
240
+                            if (str != "")
241
+                            {
242
+                                double fs = 0;//每一项分数
243
+                                obj = DbHelperSQL.GetSingle("select sum(F_QCScore) from T_QC_IndexRes where CallRecordsId in (select CallRecordsId from T_Call_CallRecords where F_QCState=1 and UserCode='" + dr["wknmb"] + "'" + " " + sqltimeCallRecords + ") and F_IndexId=" + str);
244
+                                if (obj != null && obj.ToString() != "")
245
+                                {
246
+                                    if (ct != 0)
247
+                                    {//评价数量不为0
248
+                                        if (int.Parse(obj.ToString()) % ct == 0)
249
+                                        {
250
+                                            fs = int.Parse(obj.ToString()) / ct; //每一项分数
251
+                                        }
252
+                                        else
253
+                                        {
254
+                                            fs = double.Parse(obj.ToString()) / double.Parse(ct.ToString());
255
+                                        }
256
+                                    }
257
+                                }
258
+                                string mm = "";
259
+                                if (fs.ToString().IndexOf('.') > -1 && fs.ToString().Substring(fs.ToString().IndexOf('.') + 1).Length > 2)
260
+                                {
261
+                                    mm = fs.ToString("0.00");
262
+                                }
263
+                                else
264
+                                {
265
+                                    mm = fs.ToString();
266
+                                }
267
+                                drNew["Q" + str] = mm;
268
+                                itemfs += fs;
269
+                            }
270
+                        }
271
+                        string imm = "";
272
+                        if (itemfs.ToString().IndexOf('.') > -1 && itemfs.ToString().Substring(itemfs.ToString().IndexOf('.') + 1).Length > 2)
273
+                        {
274
+                            imm = itemfs.ToString("0.00");
275
+                        }
276
+                        else
277
+                        {
278
+                            imm = itemfs.ToString();
279
+                        }
280
+                        drNew["df" + i.ToString()] = imm;
281
+                        ctfs += itemfs;
282
+                        itemfs = 0;
283
+                    }
284
+                    drNew["AllScore"] = ((int)ctfs).ToString();
285
+                    if (isext != null && isext.Trim() != "")
286
+                    {
287
+                        string question = "";
288
+                        string advise = "";
289
+                        DataSet dss = DbHelperSQL.Query("select * from T_Call_CallRecords where UserCode='" + dr["wknmb"] + "'" + " and F_QCState=1 " + sqltimeCallRecords);
290
+                        if (dss.Tables[0].Rows.Count > 0)
291
+                        {
292
+                            for (int ii = 0; ii < dss.Tables[0].Rows.Count; ii++)
293
+                            {
294
+                                question += dss.Tables[0].Rows[ii]["F_QCQuestion"].ToString() + ";";
295
+                                advise += dss.Tables[0].Rows[ii]["F_QCAdvise"].ToString() + ";";
296
+                            }
297
+                        }
298
+                        drNew["Question"] = question;
299
+                        drNew["Advise"] = advise;
300
+                    }
301
+                    ctfs = 0;
302
+
303
+                    dtNew.Rows.Add(drNew);
304
+                }
305
+            }
306
+
307
+            return Success("获取质检数据成功", dtNew);
308
+
309
+
310
+        }
311
+    }
312
+}

+ 357 - 0
RMYY_CallCenter_Api/Controllers/Quality/SwitchedlossCallController.cs

@@ -0,0 +1,357 @@
1
+using RMYY_CallCenter_Api.Utility;
2
+using System;
3
+using System.Collections;
4
+using System.Collections.Generic;
5
+using System.Data;
6
+using System.Linq;
7
+using System.Web;
8
+using System.Web.Mvc;
9
+
10
+
11
+namespace RMYY_CallCenter_Api.Controllers.Quality
12
+{
13
+    public class SwitchedlossCallController : BaseController
14
+    {
15
+        //接通呼损统计
16
+        //获取表头
17
+        public ActionResult GetColumnList()
18
+        {
19
+            ActionResult res = NoToken("未知错误,请重新登录");
20
+
21
+            String[] str = { "日期", "接通次数", "呼损次数", "接通率", "呼损率" };
22
+            res = Success("获取接通呼损统计表头成功", str);
23
+
24
+            return res;
25
+        }
26
+
27
+        //获取数据
28
+        public ActionResult GetDataList(string stime, string endtime)
29
+        {
30
+            ActionResult res = NoToken("未知错误,请重新登录");
31
+
32
+            DataTable dtNew = new DataTable();
33
+            dtNew = GetData(stime, endtime);
34
+            #region
35
+
36
+            //#region 编辑表头
37
+            //DataColumn dc1 = new DataColumn("日期", Type.GetType("System.String"));
38
+            //DataColumn dc2 = new DataColumn("接通次数", Type.GetType("System.String"));
39
+            //DataColumn dc3 = new DataColumn("呼损次数", Type.GetType("System.String"));
40
+            //DataColumn dc4 = new DataColumn("接通率", Type.GetType("System.String"));
41
+            //DataColumn dc5 = new DataColumn("呼损率", Type.GetType("System.String"));
42
+
43
+            //dtNew.Columns.Add(dc1);
44
+            //dtNew.Columns.Add(dc2);
45
+            //dtNew.Columns.Add(dc3);
46
+            //dtNew.Columns.Add(dc4);
47
+            //dtNew.Columns.Add(dc5);
48
+            //#endregion
49
+            //string[] DataArr = GetStatisticalTime(stime, endtime).TrimStart('[').TrimEnd(']').Split(',');
50
+            //string[] CallConnectData = GetStatisticalCallConnectData(stime, endtime).TrimStart('[').TrimEnd(']').Split(',');
51
+            //string[] CallLossData = GetStatisticalCallLossData(stime, endtime).TrimStart('[').TrimEnd(']').Split(',');
52
+            //string[] CallConnectDataRate = GetStatisticalCallConnectDataRate(stime, endtime).TrimStart('[').TrimEnd(']').Split(',');
53
+            //string[] CallLossDataRate = GetStatisticalCallLossDataRate(stime, endtime).TrimStart('[').TrimEnd(']').Split(',');
54
+
55
+            //for (int i = 0; i < DataArr.Length; i++)
56
+            //{
57
+            //    DataRow drNew = dtNew.NewRow();
58
+
59
+            //    drNew["日期"] = DataArr[i];
60
+            //    drNew["接通次数"] = CallConnectData[i];
61
+            //    drNew["呼损次数"] = CallLossData[i];
62
+            //    drNew["接通率"] = CallConnectDataRate[i];
63
+            //    drNew["呼损率"] = CallLossDataRate[i];
64
+
65
+            //    dtNew.Rows.Add(drNew);
66
+            //}
67
+            #endregion
68
+            res = Success("获取接通呼损统计数据成功", dtNew);
69
+
70
+            return res;
71
+        }
72
+
73
+        //导出数据
74
+        public ActionResult ExptList(string stime, string endtime)
75
+        {
76
+            ActionResult res = NoToken("未知错误,请重新登录");
77
+            if (Request.IsAuthenticated)
78
+            {
79
+                NPOIHelper npoi = new NPOIHelper();
80
+                DataTable dt = GetData(stime, endtime);
81
+                if (npoi.ExportToExcel("接通呼损数据", dt) == "")
82
+                {
83
+                    return Success("导出成功");
84
+                }
85
+                else
86
+                {
87
+                    return Error("导出失败");
88
+                }
89
+            }
90
+            return res;
91
+        }
92
+
93
+        //获取数据源
94
+        private DataTable GetData(string stime, string endtime)
95
+        {
96
+            DataTable dtNew = new DataTable();
97
+            #region 编辑表头
98
+            DataColumn dc1 = new DataColumn("日期", Type.GetType("System.String"));
99
+            DataColumn dc2 = new DataColumn("接通次数", Type.GetType("System.String"));
100
+            DataColumn dc3 = new DataColumn("呼损次数", Type.GetType("System.String"));
101
+            DataColumn dc4 = new DataColumn("接通率", Type.GetType("System.String"));
102
+            DataColumn dc5 = new DataColumn("呼损率", Type.GetType("System.String"));
103
+
104
+            dtNew.Columns.Add(dc1);
105
+            dtNew.Columns.Add(dc2);
106
+            dtNew.Columns.Add(dc3);
107
+            dtNew.Columns.Add(dc4);
108
+            dtNew.Columns.Add(dc5);
109
+            #endregion
110
+            string[] DataArr = GetStatisticalTime(stime, endtime).TrimStart('[').TrimEnd(']').Split(',');
111
+            string[] CallConnectData = GetStatisticalCallConnectData(stime, endtime).TrimStart('[').TrimEnd(']').Split(',');
112
+            string[] CallLossData = GetStatisticalCallLossData(stime, endtime).TrimStart('[').TrimEnd(']').Split(',');
113
+            string[] CallConnectDataRate = GetStatisticalCallConnectDataRate(stime, endtime).TrimStart('[').TrimEnd(']').Split(',');
114
+            string[] CallLossDataRate = GetStatisticalCallLossDataRate(stime, endtime).TrimStart('[').TrimEnd(']').Split(',');
115
+
116
+            for (int i = 0; i < DataArr.Length; i++)
117
+            {
118
+                DataRow drNew = dtNew.NewRow();
119
+
120
+                drNew["日期"] = DataArr[i];
121
+                drNew["接通次数"] = CallConnectData[i];
122
+                drNew["呼损次数"] = CallLossData[i];
123
+                drNew["接通率"] = CallConnectDataRate[i];
124
+                drNew["呼损率"] = CallLossDataRate[i];
125
+
126
+                dtNew.Rows.Add(drNew);
127
+            }
128
+            return dtNew;
129
+        }
130
+
131
+        #region
132
+        /// <summary>
133
+        /// 获取highcharts统计中的时间轴坐标
134
+        /// </summary>
135
+        /// <param name="BeginTime"></param>
136
+        /// <param name="EndTime"></param>
137
+        /// <returns></returns>
138
+        public string GetStatisticalTime(string BeginTime, string EndTime)
139
+        {
140
+            string result = "[";
141
+
142
+            //foreach (DictionaryEntry item in GetStatistical(BeginTime, EndTime))
143
+            //{
144
+            //    //result = (JTHS)item.Value.ToString();
145
+            //    result += item.Key.ToString().TrimStart('{').TrimEnd('}') + ",";
146
+            //}
147
+            var datares = GetStatistical(BeginTime, EndTime);
148
+            ArrayList arrList = new ArrayList(datares.Keys);
149
+            arrList.Sort();
150
+            for (int i = 0; i < arrList.Count; i++)
151
+            {
152
+                result += arrList[i].ToString().TrimStart('{').TrimEnd('}') + ",";
153
+            }
154
+
155
+            result = result.TrimEnd(',');
156
+            return result + "]";
157
+        }
158
+        /// <summary>
159
+        /// 获取highcharts统计中的接通次数的数据
160
+        /// </summary>
161
+        /// <param name="BeginTime"></param>
162
+        /// <param name="EndTime"></param>
163
+        /// <returns></returns>
164
+        public string GetStatisticalCallConnectData(string BeginTime, string EndTime)
165
+        {
166
+            string result = "[";
167
+
168
+            //foreach (DictionaryEntry item in GetStatistical(BeginTime, EndTime))
169
+            //{
170
+            //    result += ((JTHS)item.Value).CallConnectCount + ",";
171
+            //}
172
+            var datares = GetStatistical(BeginTime, EndTime);
173
+            ArrayList arrList = new ArrayList(datares.Keys);
174
+            arrList.Sort();
175
+            for (int i = 0; i < arrList.Count; i++)
176
+            {
177
+                result += ((JTHS)datares[arrList[i]]).CallConnectCount.ToString("F2") + ",";
178
+            }
179
+
180
+            result = result.TrimEnd(',');
181
+            return result + "]";
182
+        }
183
+        /// <summary>
184
+        /// 获取highcharts统计中呼损次数的数据
185
+        /// </summary>
186
+        /// <param name="BeginTime"></param>
187
+        /// <param name="EndTime"></param>
188
+        /// <returns></returns>
189
+        public string GetStatisticalCallLossData(string BeginTime, string EndTime)
190
+        {
191
+            string result = "[";
192
+
193
+            //foreach (DictionaryEntry item in GetStatistical(BeginTime, EndTime))
194
+            //{
195
+            //    result += ((JTHS)item.Value).CallLossCount + ",";
196
+            //}
197
+            var datares = GetStatistical(BeginTime, EndTime);
198
+            ArrayList arrList = new ArrayList(datares.Keys);
199
+            arrList.Sort();
200
+            for (int i = 0; i < arrList.Count; i++)
201
+            {
202
+                result += ((JTHS)datares[arrList[i]]).CallLossCount.ToString("F2") + ",";
203
+            }
204
+
205
+            result = result.TrimEnd(',');
206
+            return result + "]";
207
+        }
208
+        /// <summary>
209
+        /// 获取highcharts统计中接通率数据
210
+        /// </summary>
211
+        /// <param name="BeginTime"></param>
212
+        /// <param name="EndTime"></param>
213
+        /// <returns></returns>
214
+        public string GetStatisticalCallConnectDataRate(string BeginTime, string EndTime)
215
+        {
216
+            string result = "[";
217
+
218
+            //foreach (DictionaryEntry item in GetStatistical(BeginTime, EndTime))
219
+            //{
220
+            //    result += ((JTHS)item.Value).CallConnectRate.ToString("F2") + ",";
221
+            //}
222
+            var datares = GetStatistical(BeginTime, EndTime);
223
+            ArrayList arrList = new ArrayList(datares.Keys);
224
+            arrList.Sort();
225
+            for (int i = 0; i < arrList.Count; i++)
226
+            {
227
+                result += ((JTHS)datares[arrList[i]]).CallConnectRate.ToString("F2") + ",";
228
+            }
229
+
230
+            result = result.TrimEnd(',');
231
+            return result + "]";
232
+        }
233
+
234
+        /// <summary>
235
+        /// 获取highcharts统计中呼损率数据
236
+        /// </summary>
237
+        /// <param name="BeginTime"></param>
238
+        /// <param name="EndTime"></param>
239
+        /// <returns></returns>
240
+        public string GetStatisticalCallLossDataRate(string BeginTime, string EndTime)
241
+        {
242
+            string result = "[";
243
+
244
+            var datares = GetStatistical(BeginTime, EndTime);
245
+            ArrayList arrList = new ArrayList(datares.Keys);
246
+            arrList.Sort();
247
+            //foreach (DictionaryEntry item in GetStatistical(BeginTime, EndTime))
248
+            //{
249
+            //    result += ((JTHS)item.Value).CallLossRate.ToString("F2") + ",";
250
+            //}
251
+            for (int i = 0; i < arrList.Count; i++)
252
+            {
253
+                result += ((JTHS)datares[arrList[i]]).CallLossRate.ToString("F2") + ",";
254
+            }
255
+
256
+            result = result.TrimEnd(',');
257
+            return result + "]";
258
+        }
259
+        /// <summary>
260
+        /// 获取需要统计的数据
261
+        /// </summary>
262
+        /// <param name="BeginTime"></param>
263
+        /// <param name="EndTime"></param>
264
+        /// <returns></returns>
265
+        public Hashtable GetStatistical(string BeginTime, string EndTime)
266
+        {
267
+            Hashtable tab = new Hashtable();
268
+
269
+
270
+            DateTime beginTime;
271
+            DateTime endTime;
272
+            string sql = "";
273
+            Dictionary<string, JTHS> myDic = new Dictionary<string, JTHS>();
274
+            JTHS model = null;
275
+            double callConnectRate = 0, callLossRate = 0;
276
+
277
+            int days = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);
278
+
279
+
280
+            if (BeginTime != null && BeginTime != "")
281
+                beginTime = DateTime.Parse(BeginTime);
282
+            else
283
+                beginTime = DateTime.Parse(DateTime.Now.AddDays(-days).ToShortDateString());
284
+
285
+            if (EndTime != null && EndTime != "")
286
+                endTime = DateTime.Parse(EndTime + " 23:59:59");
287
+            else
288
+                endTime = DateTime.Parse(DateTime.Now.ToShortDateString() + " 23:59:59");
289
+
290
+            sql += " and DATEDIFF(d,BeginTime,'" + beginTime.ToString("yyyy-MM-dd HH:mm:ss") + "')<=0";
291
+            sql += " and DATEDIFF(d,BeginTime,'" + endTime.ToString("yyyy-MM-dd HH:mm:ss") + "')>=0";
292
+
293
+            //DataTable dt = new Bll.T_Call_CallRecords().GetList("1=1 and BusinessType=0 and calltype=0" + sql).Tables[0];
294
+            DataTable dt = new Bll.T_Call_CallRecords().GetList("1=1 and calltype=0" + sql).Tables[0]; //BusinessType=0代表ivr中选择了转人工,calltype=1代表呼入
295
+
296
+
297
+
298
+            for (DateTime t = beginTime; t <= endTime; t = t.AddDays(1))
299
+            {
300
+                string key = t.ToString("{yyyyMMdd}");
301
+                int callConnectCount = dt.Select("begintime >='" + t.ToString() + "' and begintime<'" + t.AddDays(1).ToString() + "' and CallState=1").Length;
302
+                int callLossCount = dt.Select("begintime >='" + t.ToString() + "' and begintime<'" + t.AddDays(1).ToString() + "' and CallState=0 and dealtype=5").Length;
303
+
304
+                if ((callConnectCount + callLossCount) != 0)
305
+                {
306
+                    callConnectRate = (callConnectCount + callLossCount) == 0 ? 0 : double.Parse((callConnectCount * 100).ToString()) / (callConnectCount + callLossCount);
307
+                    callLossRate = 100 - callConnectRate;
308
+                }
309
+                else
310
+                {
311
+                    callConnectRate = 0;
312
+                    callLossRate = 0;
313
+                }
314
+
315
+                if (!myDic.ContainsKey(key))
316
+                {
317
+                    model = new JTHS();
318
+                    model.CallConnectCount = callConnectCount;
319
+                    model.CallLossCount = callLossCount;
320
+                    model.CallConnectRate = callConnectRate;
321
+                    model.CallLossRate = callLossRate;
322
+
323
+                    tab.Add(key, model);
324
+                }
325
+            }
326
+            return tab;
327
+        }
328
+        #endregion
329
+    }
330
+    /// <summary>
331
+    /// 接通呼损率统计辅助类
332
+    /// </summary>
333
+    [Serializable]
334
+    public class JTHS
335
+    {
336
+        public int CallConnectCount
337
+        {
338
+            get;
339
+            set;
340
+        }
341
+        public int CallLossCount
342
+        {
343
+            get;
344
+            set;
345
+        }
346
+        public double CallConnectRate
347
+        {
348
+            get;
349
+            set;
350
+        }
351
+        public double CallLossRate
352
+        {
353
+            get;
354
+            set;
355
+        }
356
+    }
357
+}

+ 379 - 0
RMYY_CallCenter_Api/Controllers/Quality/TalkTimeController.cs

@@ -0,0 +1,379 @@
1
+using Newtonsoft.Json.Linq;
2
+using RMYY_CallCenter_Api.DB;
3
+using RMYY_CallCenter_Api.Utility;
4
+using System;
5
+using System.Collections;
6
+using System.Collections.Generic;
7
+using System.Data;
8
+using System.Linq;
9
+using System.Web;
10
+using System.Web.Mvc;
11
+
12
+namespace RMYY_CallCenter_Api.Controllers.Quality
13
+{
14
+    public class TalkTimeController : BaseController
15
+    {
16
+        //通话时长统计
17
+
18
+        //获取表头
19
+        public ActionResult GetColumnList()
20
+        {
21
+            ActionResult res = NoToken("未知错误,请重新登录");
22
+
23
+            String[] str = { "坐席名称", "呼入次数", "呼入时长", "呼出次数", "呼出时长", "呼出未接通次数", "振铃时长", "通话总时长", "平均通话时长" };
24
+            res = Success("获取通话时长统计表头成功", str);
25
+
26
+            return res;
27
+        }
28
+
29
+        //获取数据
30
+        public ActionResult GetDataList(string stime, string endtime)
31
+        {
32
+            ActionResult res = NoToken("未知错误,请重新登录");
33
+
34
+            DataTable dtNew = new DataTable();
35
+            dtNew = GetData(stime, endtime);
36
+            #region
37
+            //DataTable dtNew = new DataTable();
38
+            //#region 编辑表头
39
+            //DataColumn dc1 = new DataColumn("坐席名称", Type.GetType("System.String"));
40
+            //DataColumn dc2 = new DataColumn("呼入次数", Type.GetType("System.String"));
41
+            //DataColumn dc3 = new DataColumn("呼入时长", Type.GetType("System.String"));
42
+            //DataColumn dc4 = new DataColumn("呼出次数", Type.GetType("System.String"));
43
+            //DataColumn dc5 = new DataColumn("呼出时长", Type.GetType("System.String"));
44
+            //DataColumn dc6 = new DataColumn("呼出未接通次数", Type.GetType("System.String"));
45
+            //DataColumn dc7 = new DataColumn("振铃时长", Type.GetType("System.String"));
46
+            //DataColumn dc8 = new DataColumn("通话总时长", Type.GetType("System.String"));
47
+            //DataColumn dc9 = new DataColumn("平均通话总时长", Type.GetType("System.String"));
48
+
49
+            //dtNew.Columns.Add(dc1);
50
+            //dtNew.Columns.Add(dc2);
51
+            //dtNew.Columns.Add(dc3);
52
+            //dtNew.Columns.Add(dc4);
53
+            //dtNew.Columns.Add(dc5);
54
+            //dtNew.Columns.Add(dc6);
55
+            //dtNew.Columns.Add(dc7);
56
+            //dtNew.Columns.Add(dc8);
57
+            //dtNew.Columns.Add(dc9);
58
+            //#endregion
59
+
60
+            //string[] CallInTime = GetCallRecordIn(stime, endtime, "0").TrimStart('[').TrimEnd(']').Split(',');
61
+            //string[] CallInTimes = GetCallRecordTotalTime(stime, endtime, "0").TrimStart('[').TrimEnd(']').Split(',');
62
+            //string[] CallOutTime = GetCallRecordOut(stime, endtime, "1","").TrimStart('[').TrimEnd(']').Split(',');
63
+            //string[] CallOutTimes = GetCallRecordTotalTime(stime, endtime, "1").TrimStart('[').TrimEnd(']').Split(',');
64
+            //string[] CallOutWTime = GetCallRecordOut(stime, endtime, "1", "0").TrimStart('[').TrimEnd(']').Split(',');
65
+            //string[] CallOutWTimes = GetCallRecordRingTime(stime, endtime).TrimStart('[').TrimEnd(']').Split(',');
66
+            //string[] CallTotalTime = GetCallRecordTotalTime(stime, endtime, "").TrimStart('[').TrimEnd(']').Split(',');
67
+            //string[] AgentArr = GetAgent().TrimStart('[').TrimEnd(']').Split(',');
68
+            //string[] AverageTime = GetCallAverageTime(stime, endtime).TrimStart('[').TrimEnd(']').Split(',');
69
+
70
+            //for (int i = 0; i < AgentArr.Length; i++)
71
+            //{
72
+            //    DataRow drNew = dtNew.NewRow();
73
+
74
+            //    drNew["坐席名称"] = AgentArr[i].Replace('\'', ' ');
75
+            //    drNew["呼入次数"] = CallInTime[i];
76
+            //    drNew["呼入时长"] = CallInTimes[i];
77
+            //    drNew["呼出次数"] = CallOutTime[i];
78
+            //    drNew["呼出时长"] = CallOutTimes[i];
79
+            //    drNew["呼出未接通次数"] = CallOutWTime[i];
80
+            //    drNew["振铃时长"] = CallOutWTimes[i];
81
+            //    drNew["通话总时长"] = CallTotalTime[i];
82
+            //    drNew["平均通话总时长"] = AverageTime[i];
83
+
84
+            //    dtNew.Rows.Add(drNew);
85
+            //}
86
+            #endregion
87
+            res = Success("获取通话时长数据成功", dtNew);
88
+
89
+            return res;
90
+        }
91
+
92
+        //导出数据
93
+        public ActionResult ExptList(string stime, string endtime)
94
+        {
95
+            ActionResult res = NoToken("未知错误,请重新登录");
96
+            if (Request.IsAuthenticated)
97
+            {
98
+                NPOIHelper npoi = new NPOIHelper();
99
+                DataTable dt = GetData(stime, endtime);
100
+                if (npoi.ExportToExcel("通话时长数据", dt) == "")
101
+                {
102
+                    return Success("导出成功");
103
+                }
104
+                else
105
+                {
106
+                    return Error("导出失败");
107
+                }
108
+            }
109
+            return res;
110
+        }
111
+
112
+        //获取数据源
113
+        private DataTable GetData(string stime, string endtime)
114
+        {
115
+            DataTable dtNew = new DataTable();
116
+            #region 编辑表头
117
+            DataColumn dc1 = new DataColumn("坐席名称", Type.GetType("System.String"));
118
+            DataColumn dc2 = new DataColumn("呼入次数", Type.GetType("System.String"));
119
+            DataColumn dc3 = new DataColumn("呼入时长", Type.GetType("System.String"));
120
+            DataColumn dc4 = new DataColumn("呼出次数", Type.GetType("System.String"));
121
+            DataColumn dc5 = new DataColumn("呼出时长", Type.GetType("System.String"));
122
+            DataColumn dc6 = new DataColumn("呼出未接通次数", Type.GetType("System.String"));
123
+            DataColumn dc7 = new DataColumn("振铃时长", Type.GetType("System.String"));
124
+            DataColumn dc8 = new DataColumn("通话总时长", Type.GetType("System.String"));
125
+            DataColumn dc9 = new DataColumn("平均通话总时长", Type.GetType("System.String"));
126
+
127
+            dtNew.Columns.Add(dc1);
128
+            dtNew.Columns.Add(dc2);
129
+            dtNew.Columns.Add(dc3);
130
+            dtNew.Columns.Add(dc4);
131
+            dtNew.Columns.Add(dc5);
132
+            dtNew.Columns.Add(dc6);
133
+            dtNew.Columns.Add(dc7);
134
+            dtNew.Columns.Add(dc8);
135
+            dtNew.Columns.Add(dc9);
136
+            #endregion
137
+
138
+            string[] CallInTime = GetCallRecordIn(stime, endtime, "0").TrimStart('[').TrimEnd(']').Split(',');
139
+            string[] CallInTimes = GetCallRecordTotalTime(stime, endtime, "0").TrimStart('[').TrimEnd(']').Split(',');
140
+            string[] CallOutTime = GetCallRecordOut(stime, endtime, "1", "").TrimStart('[').TrimEnd(']').Split(',');
141
+            string[] CallOutTimes = GetCallRecordTotalTime(stime, endtime, "1").TrimStart('[').TrimEnd(']').Split(',');
142
+            string[] CallOutWTime = GetCallRecordOut(stime, endtime, "1", "0").TrimStart('[').TrimEnd(']').Split(',');
143
+            string[] CallOutWTimes = GetCallRecordRingTime(stime, endtime).TrimStart('[').TrimEnd(']').Split(',');
144
+            string[] CallTotalTime = GetCallRecordTotalTime(stime, endtime, "").TrimStart('[').TrimEnd(']').Split(',');
145
+            string[] AgentArr = GetAgent().TrimStart('[').TrimEnd(']').Split(',');
146
+            string[] AverageTime = GetCallAverageTime(stime, endtime).TrimStart('[').TrimEnd(']').Split(',');
147
+
148
+            for (int i = 0; i < AgentArr.Length; i++)
149
+            {
150
+                DataRow drNew = dtNew.NewRow();
151
+
152
+                drNew["坐席名称"] = AgentArr[i].Replace('\'', ' ');
153
+                drNew["呼入次数"] = CallInTime[i];
154
+                drNew["呼入时长"] = CallInTimes[i];
155
+                drNew["呼出次数"] = CallOutTime[i];
156
+                drNew["呼出时长"] = CallOutTimes[i];
157
+                drNew["呼出未接通次数"] = CallOutWTime[i];
158
+                drNew["振铃时长"] = CallOutWTimes[i];
159
+                drNew["通话总时长"] = CallTotalTime[i];
160
+                drNew["平均通话总时长"] = AverageTime[i];
161
+
162
+                dtNew.Rows.Add(drNew);
163
+            }
164
+
165
+            return dtNew;
166
+        }
167
+
168
+        #region
169
+        /// <summary>
170
+        /// 获取坐席的呼出次数
171
+        /// </summary>
172
+        /// <param name="BeginTime">开始时间</param>
173
+        /// <param name="EndTime">结束时间</param>
174
+        /// <param name="Tag">1表示呼出,0表示呼入</param>
175
+        /// <returns></returns>
176
+        public string GetCallRecordOut(string BeginTime, string EndTime, string Tag, string state)
177
+        {
178
+            return GetHighChartData(BeginTime, EndTime, Tag, state);
179
+        }
180
+        /// <summary>
181
+        /// 获取通话总时长
182
+        /// </summary>
183
+        /// <param name="BeginTime">开始时间</param>
184
+        /// <param name="EndTime">结束时间</param>
185
+        /// <returns></returns>
186
+        public string GetCallRecordTotalTime(string BeginTime, string EndTime, string tag)
187
+        {
188
+            string result = "[";
189
+            string sql = "";
190
+
191
+            if (BeginTime != null && BeginTime != "")
192
+            {
193
+                sql += " and DATEDIFF(d,BeginTime,'" + BeginTime + "')<=0";
194
+            }
195
+            if (EndTime != null && EndTime != "")
196
+            {
197
+                sql += " and DATEDIFF(d,BeginTime,'" + EndTime + "')>=0";
198
+            }
199
+            if (tag != "")
200
+            {
201
+                sql += " and CallType=" + tag;
202
+            }
203
+            var userAccountList = new Bll.T_Sys_UserAccount().GetModelList(" F_SeatFlag=1");
204
+            //DataTable dt = DbHelperSQL.Query("SELECT UserId,UserCode,UserName,COUNT(*) AS calloutCount,SUM(TalkLongTime) AS TalkSummaryTime FROM T_Call_CallRecords where 1=1 " + sql + "  GROUP BY UserId,UserCode,UserName").Tables[0];
205
+            //DataTable dt = DbHelperSQL.Query("SELECT UserId,UserCode,UserName,COUNT(*) AS calloutCount FROM T_Call_CallRecords where 1=1 " + sql + "  GROUP BY UserId,UserCode,UserName").Tables[0];
206
+            var recordstr = " select users.F_UserId,users.F_UserCode,users.F_UserName,COUNT(*) AS calloutCount,SUM(TalkLongTime) AS TalkSummaryTime from T_Sys_UserAccount users left join T_Call_CallRecords records on users.F_UserCode = records.UserCode and 1=1 " + sql + " GROUP BY users.F_UserId,users.F_UserCode,users.F_UserName";
207
+            DataTable dt = DbHelperSQL.Query(recordstr).Tables[0];
208
+
209
+            foreach (Model.T_Sys_UserAccount item in userAccountList)
210
+            {
211
+                DataRow drUser = dt.AsEnumerable().FirstOrDefault(dr => dr.Field<string>("F_UserCode") == item.F_UserCode);
212
+
213
+                if (drUser != null && drUser[4].ToString() != "")
214
+                    result += drUser[4].ToString() + ",";
215
+                else
216
+                    result += "0,";
217
+            }
218
+
219
+            result = result.TrimEnd(',');
220
+            return result + "]";
221
+        }
222
+        /// <summary>
223
+        /// 获取坐席名称(x轴数据)
224
+        /// </summary>
225
+        /// <returns></returns>
226
+        public string GetAgent()
227
+        {
228
+            string result = "[";
229
+            var userAccountList = new Bll.T_Sys_UserAccount().GetModelList(" F_SeatFlag=1");
230
+            foreach (Model.T_Sys_UserAccount item in userAccountList)
231
+            {
232
+                result += "'" + item.F_UserName + "',";
233
+            }
234
+            result = result.TrimEnd(',');
235
+            return result + "]";
236
+        }
237
+        /// <summary>
238
+        /// 获取通话平均时长
239
+        /// </summary>
240
+        /// <param name="BeginTime">开始时间</param>
241
+        /// <param name="EndTime">结束时间</param>
242
+        /// <returns></returns>
243
+        public string GetCallAverageTime(string BeginTime, string EndTime)
244
+        {
245
+            string result = "[";
246
+
247
+            string[] CallInTime = GetCallRecordIn(BeginTime, EndTime, "0").TrimStart('[').TrimEnd(']').Split(',');
248
+            string[] CallOutTime = GetCallRecordOut(BeginTime, EndTime, "1", "").TrimStart('[').TrimEnd(']').Split(',');
249
+
250
+            string[] CallTotalTime = GetCallRecordTotalTime(BeginTime, EndTime, "").TrimStart('[').TrimEnd(']').Split(',');
251
+
252
+            for (int i = 0; i < CallInTime.Length; i++)
253
+            {
254
+                double subt = 0.0;
255
+                if (double.Parse(CallInTime[i]) != 0)
256
+                {
257
+                    subt += double.Parse(CallInTime[i]);
258
+                }
259
+                if (double.Parse(CallOutTime[i]) != 0)
260
+                {
261
+                    subt += double.Parse(CallOutTime[i]);
262
+                }
263
+                if (subt != 0)
264
+                    result += (double.Parse(CallTotalTime[i]) / subt).ToString("F2") + ",";
265
+                else
266
+                    result += "0,";
267
+            }
268
+            result = result.TrimEnd(',');
269
+            return result + "]";
270
+        }
271
+        /// <summary>
272
+        /// 获取坐席的呼入次数
273
+        /// </summary>
274
+        /// <param name="BeginTime">开始时间</param>
275
+        /// <param name="EndTime">结束时间</param>
276
+        /// <returns></returns>
277
+        public string GetCallRecordIn(string BeginTime, string EndTime, string Tag)
278
+        {
279
+            return GetHighChartData(BeginTime, EndTime, Tag, "");
280
+        }
281
+        /// <summary>
282
+        /// 获取呼入呼出数据
283
+        /// </summary>
284
+        /// <param name="BeginTime">开始时间</param>
285
+        /// <param name="EndTime">结束时间</param>
286
+        /// <param name="Tag">1表示呼出,0表示呼入</param>
287
+        /// <returns></returns>
288
+        private string GetHighChartData(string BeginTime, string EndTime, string Tag, string state)
289
+        {
290
+            string result = "[";
291
+            string sql = " and CallType=" + Tag; // 呼入
292
+            var userAccountList = new Bll.T_Sys_UserAccount().GetModelList(" F_SeatFlag=1");
293
+
294
+            if (!string.IsNullOrEmpty(BeginTime))
295
+            {
296
+                sql += " and BeginTime>='" + BeginTime + " 00:00:00'";
297
+                //sql += " and DATEDIFF(d,BeginTime,'" + BeginTime + "')<=0";
298
+            }
299
+            if (!string.IsNullOrEmpty(EndTime))
300
+            {
301
+                sql += " and BeginTime<='" + EndTime + " 23:59:59'";
302
+                //sql += " and DATEDIFF(d,BeginTime,'" + EndTime + "')>=0";
303
+            }
304
+            if (state.Trim() != "")
305
+            {
306
+                sql += " and CallState=" + state.Trim();
307
+            }
308
+
309
+            //DataTable dt = DbHelperSQL.Query("SELECT UserId,UserCode,UserName,COUNT(*) AS calloutCount FROM T_Call_CallRecords where 1=1 " + sql + "  GROUP BY UserId,UserCode,UserName").Tables[0];
310
+            //var recordstr = " select users.F_UserId,users.F_UserCode,users.F_UserName,COUNT(*) AS calloutCount from T_Sys_UserAccount users right join T_Call_CallRecords records on users.F_UserCode = records.UserCode and 1=1 " + sql + " GROUP BY users.F_UserId,users.F_UserCode,users.F_UserName";
311
+            //20180509 通话时长统计不对  machenyang
312
+            var recordstr = " select records.UserCode,records.UserId,records.UserName,COUNT(*) from T_Call_CallRecords records where 1=1 " + sql + "  and UserCode is not null group by records.UserCode,records.UserId,records.UserName";
313
+            DataTable dt = DbHelperSQL.Query(recordstr).Tables[0];
314
+            Dictionary<string, int> myDictionary = new Dictionary<string, int>();
315
+
316
+            foreach (Model.T_Sys_UserAccount item in userAccountList)
317
+            {
318
+                if (!myDictionary.ContainsKey(item.F_UserCode))
319
+                    myDictionary.Add(item.F_UserCode, 0);
320
+
321
+                DataRow drUser = dt.AsEnumerable().FirstOrDefault(dr => dr.Field<string>("UserCode") == item.F_UserCode);
322
+
323
+                if (drUser != null)
324
+                {
325
+                    myDictionary[item.F_UserCode] += int.Parse(drUser[3].ToString());
326
+                }
327
+            }
328
+
329
+            foreach (var item in myDictionary)
330
+            {
331
+                result += item.Value + ",";
332
+            }
333
+
334
+            result = result.TrimEnd(',');
335
+            return result + "]";
336
+        }
337
+        /// <summary>
338
+        /// 获取振铃时长
339
+        /// </summary>
340
+        /// <param name="BeginTime"></param>
341
+        /// <param name="EndTime"></param>
342
+        /// <returns></returns>
343
+        public string GetCallRecordRingTime(string BeginTime, string EndTime)
344
+        {
345
+            string result = "[";
346
+            string sql = "";
347
+
348
+            if (!string.IsNullOrEmpty(BeginTime))
349
+            {
350
+                sql += " and BeginTime>='" + BeginTime + "'";
351
+                //sql += " and DATEDIFF(d,BeginTime,'" + BeginTime + "')<=0";
352
+            }
353
+            if (!string.IsNullOrEmpty(EndTime))
354
+            {
355
+                sql += " and BeginTime<='" + EndTime + "'";
356
+                //sql += " and DATEDIFF(d,BeginTime,'" + EndTime + "')>=0";
357
+            }
358
+            //只统计呼入振铃时长
359
+            sql += " and CallType=0 ";
360
+
361
+            var userAccountList = new Bll.T_Sys_UserAccount().GetModelList(" F_SeatFlag=1");
362
+            DataTable dt = DbHelperSQL.Query("  select UserCode,COUNT(1) count,SUM(Ringtimes) as RingTimes from(SELECT UserCode, datediff(second, RingStartTime, RingEndTime) as Ringtimes FROM T_Call_CallRecords where 1 = 1 " + sql + ") t GROUP BY UserCode").Tables[0];
363
+
364
+            foreach (Model.T_Sys_UserAccount item in userAccountList)
365
+            {
366
+                DataRow drUser = dt.AsEnumerable().FirstOrDefault(dr => dr.Field<string>("UserCode") == item.F_UserCode);
367
+
368
+                if (drUser != null && drUser[2].ToString() != "")
369
+                    result += drUser[2].ToString() + ",";
370
+                else
371
+                    result += "0,";
372
+            }
373
+
374
+            result = result.TrimEnd(',');
375
+            return result + "]";
376
+        }
377
+        #endregion
378
+    }
379
+}

+ 140 - 0
RMYY_CallCenter_Api/Controllers/report/HourCallTotalController.cs

@@ -0,0 +1,140 @@
1
+using Newtonsoft.Json.Linq;
2
+using RMYY_CallCenter_Api.Utility;
3
+using System;
4
+using System.Collections.Generic;
5
+using System.Data;
6
+using System.Linq;
7
+using System.Web;
8
+using System.Web.Mvc;
9
+
10
+namespace RMYY_CallCenter_Api.Controllers.report
11
+{
12
+    public class HourCallTotalController : BaseController
13
+    {
14
+        Bll.T_Call_CallRecords bllCall = new Bll.T_Call_CallRecords();
15
+        //获取表头
16
+        public ActionResult GetColumnList()
17
+        {
18
+            #region 添加表格标题
19
+            var columns = new List<string>();
20
+            columns.Add("时间");
21
+            columns.Add("呼入量");
22
+            columns.Add("呼出量");
23
+            columns.Add("接通量");
24
+            columns.Add("未接通量");
25
+            columns.Add("接通率");
26
+            #endregion
27
+            return Success("获取工单结案率标题成功", columns);
28
+        }
29
+
30
+        //获取数据
31
+        public ActionResult GetDataList(string stime)
32
+        {
33
+            ActionResult res = NoToken("未知错误,请重新登录");
34
+            DataTable dtNew = new DataTable();
35
+            dtNew = GetData(stime);
36
+            res = Success("获取工单结案率数据成功", dtNew);
37
+
38
+            return res;
39
+        }
40
+
41
+        //获取数据源
42
+        private DataTable GetData(string stime)
43
+        {
44
+            DataTable dtNew = new DataTable();
45
+            #region 编辑表头
46
+            DataColumn dc1 = new DataColumn("时间", Type.GetType("System.String"));
47
+            DataColumn dc2 = new DataColumn("呼入量", Type.GetType("System.String"));
48
+            DataColumn dc3 = new DataColumn("呼出量", Type.GetType("System.String"));
49
+            DataColumn dc4 = new DataColumn("接通量", Type.GetType("System.String"));
50
+            DataColumn dc5 = new DataColumn("未接通量", Type.GetType("System.String"));
51
+            DataColumn dc6 = new DataColumn("接通率", Type.GetType("System.String"));
52
+
53
+            dtNew.Columns.Add(dc1);
54
+            dtNew.Columns.Add(dc2);
55
+            dtNew.Columns.Add(dc3);
56
+            dtNew.Columns.Add(dc4);
57
+            dtNew.Columns.Add(dc5);
58
+            dtNew.Columns.Add(dc6);
59
+            #endregion
60
+
61
+            string sql = " ";
62
+            var list = bllCall.DataTableToList(bllCall.GetList($" 1=1 {sql} and UserCode is not null ").Tables[0]);
63
+            int callInCount = 0, callOutCount = 0, calledCount = 0, nocalledCount = 0;
64
+            //一天24小时
65
+            for (int i = 0; i < 24; i++)
66
+            {
67
+                DateTime stimes = Convert.ToDateTime(stime + " 00:00:00").AddHours(i);
68
+                DateTime etimes = Convert.ToDateTime(stime + " 00:59:59").AddHours(i);
69
+                DataRow drNew = dtNew.NewRow();
70
+                //SELECT BeginTime, * FROM T_Call_CallRecords WHERE DATEPART(hh,BeginTime) = DATEPART(hh, DATEADD(hh,-2,GETDATE())) and DATEPART(dd,BeginTime) = DATEPART(dd, GETDATE()) and DATEPART(mm, BeginTime) = DATEPART(mm, GETDATE()) and DATEPART(yy, BeginTime) = DATEPART(yy, GETDATE())
71
+                //CallType
72
+                //CallState呼叫状态,0:未接通电话1已接通电话
73
+                var callInTimes = list.Where(x => x.CallType == 0 && x.BeginTime >= stimes && x.BeginTime <= etimes).Count();   //呼入量
74
+                var callOutTimes = list.Where(x => x.CallType == 1 && x.BeginTime >= stimes && x.BeginTime <= etimes).Count();  //呼出量
75
+                var calledTimes = list.Where(x => x.CallState == 1 && x.BeginTime >= stimes && x.BeginTime <= etimes).Count();  //接通量
76
+                var nocalledTimes = list.Where(x => x.CallState == 0 && x.BeginTime >= stimes && x.BeginTime <= etimes).Count();//未接通量
77
+
78
+                //var calledRate = list.Where(x => x.CallType == 1 && x.BeginTime >= stimes && x.BeginTime <= etimes).Count();
79
+                drNew["时间"] = (i + 1).ToString();
80
+                drNew["呼入量"] = callInTimes.ToString();
81
+                drNew["呼出量"] = callOutTimes.ToString();
82
+                drNew["接通量"] = calledTimes.ToString();
83
+                drNew["未接通量"] = nocalledTimes.ToString();
84
+                //计算未结案率
85
+                var calledTotal = calledTimes + nocalledTimes;
86
+                Double notRate = 0.00;
87
+                if (calledTotal > 0)
88
+                    notRate = (double)calledTimes / (double)calledTotal;
89
+                drNew["接通率"] = (notRate * 100).ToString("0.00") + "%";
90
+                ////统计结案,未结案数
91
+                callInCount += callInTimes;
92
+                callOutCount += callOutTimes;
93
+                calledCount += calledTimes;
94
+                nocalledCount += nocalledTimes;
95
+                dtNew.Rows.Add(drNew);
96
+            }
97
+            #region 获取一条统计信息
98
+            DataRow drzj = dtNew.NewRow();
99
+            drzj["时间"] = "总计";
100
+            drzj["呼入量"] = callInCount.ToString();
101
+            drzj["呼出量"] = callOutCount.ToString();
102
+            drzj["接通量"] = calledCount.ToString();
103
+            drzj["未接通量"] = nocalledCount.ToString();
104
+            //计算未结案率
105
+            int totalAllCount = calledCount + nocalledCount;
106
+            Double calledAllRate = 0.00;
107
+            if (totalAllCount > 0)
108
+                calledAllRate = (double)calledCount / (double)totalAllCount;
109
+            drzj["接通率"] = (calledAllRate * 100).ToString("0.00") + "%";
110
+            dtNew.Rows.Add(drzj);
111
+            #endregion
112
+            return dtNew;
113
+        }
114
+
115
+        /// <summary>
116
+        /// 导出数据
117
+        /// </summary>
118
+        /// <param name="stime"></param>
119
+        /// <param name="endtime"></param>
120
+        /// <returns></returns>
121
+        public ActionResult ExportExcel(string stime)
122
+        {
123
+            ActionResult res = NoToken("未知错误,请重新登录");
124
+            if (Request.IsAuthenticated)
125
+            {
126
+                NPOIHelper npoi = new NPOIHelper();
127
+                DataTable dt = GetData(stime);
128
+                if (npoi.ExportToExcel("通话时长数据", dt) == "")
129
+                {
130
+                    return Success("导出成功");
131
+                }
132
+                else
133
+                {
134
+                    return Error("导出失败");
135
+                }
136
+            }
137
+            return res;
138
+        }
139
+    }
140
+}

+ 248 - 0
RMYY_CallCenter_Api/Controllers/report/TotalCallController.cs

@@ -0,0 +1,248 @@
1
+using Newtonsoft.Json.Linq;
2
+using RMYY_CallCenter_Api.Utility;
3
+using System;
4
+using System.Collections.Generic;
5
+using System.Data;
6
+using System.Linq;
7
+using System.Web;
8
+using System.Web.Mvc;
9
+
10
+namespace RMYY_CallCenter_Api.Controllers.report
11
+{
12
+    public class TotalCallController : BaseController
13
+    {
14
+        //总呼叫量统计
15
+
16
+        //获取表头
17
+        public ActionResult GetColumnList()
18
+        {
19
+            ActionResult res = NoToken("未知错误,请重新登录");
20
+            if (Request.IsAuthenticated)
21
+            {
22
+                String[] str = { "月份", "日期", "总数" };
23
+                res = Success("获取总呼叫量统计表头成功", str);
24
+            }
25
+            return res;
26
+        }
27
+
28
+        //获取数据
29
+        public ActionResult GetDataList(string years)
30
+        {
31
+            ActionResult res = NoToken("未知错误,请重新登录");
32
+            if (Request.IsAuthenticated)
33
+            {
34
+                DataTable dtNew = new DataTable();
35
+                #region
36
+                DataColumn dc1 = new DataColumn("月份", Type.GetType("System.String"));
37
+                DataColumn dc2 = new DataColumn("日期", Type.GetType("System.String"));
38
+                DataColumn dc3 = new DataColumn("总数", Type.GetType("System.String"));
39
+                DataColumn dc4 = new DataColumn("Count", Type.GetType("System.String"));
40
+
41
+                dtNew.Columns.Add(dc1);
42
+                dtNew.Columns.Add(dc2);
43
+                dtNew.Columns.Add(dc3);
44
+                dtNew.Columns.Add(dc4);
45
+                #endregion
46
+                DataTable dt = new Bll.T_Call_CallRecords().GetList("1=1").Tables[0];
47
+                DateTime dtNow;
48
+                int Count = 0;
49
+                int DayCount = 0;
50
+
51
+                if (string.IsNullOrEmpty(years))
52
+                {
53
+                    dtNow = DateTime.Now;
54
+                }
55
+                else
56
+                {
57
+                    dtNow = DateTime.Parse(years + "年");
58
+                }
59
+                int monthcount = 0;
60
+                for (int i = 1; i <= 12; i++)
61
+                {
62
+                    DataRow drNew = dtNew.NewRow();
63
+
64
+                    DateTime beginTime = Convert.ToDateTime(dtNow.Year + "-" + i + "-01 00:00:00");
65
+                    int days = DateTime.DaysInMonth(dtNow.Year, beginTime.Month);
66
+                    DataRow[] dtRow = dt.Select("begintime >='" + beginTime.ToString() + "' and  beginTime<'" + beginTime.AddDays(days).AddSeconds(-1) + "'");
67
+                    if (dtRow.Length > 0)
68
+                    {
69
+                        Count += dtRow.Length;
70
+                        for (int j = 1; j <= days; j++)
71
+                        {
72
+                            DataRow dr1 = dtNew.NewRow();
73
+                            if (dtRow.CopyToDataTable().Select("begintime >='" + beginTime.AddDays(j - 1) + "' and  beginTime<'" + beginTime.AddDays(j).AddSeconds(-1) + "'").Length > 0)
74
+                            {
75
+                                DayCount += 1;
76
+
77
+                                dr1["月份"] = beginTime.Month + "月";
78
+                                dr1["日期"] = beginTime.AddDays(j - 1).ToShortDateString();
79
+                                dr1["总数"] = dtRow.CopyToDataTable().Select("begintime >='" + beginTime.AddDays(j - 1) + "' and  beginTime<'" + beginTime.AddDays(j).AddSeconds(-1) + "'").Length;
80
+                                dr1["Count"] = "1";
81
+                                dtNew.Rows.Add(dr1);
82
+                            }
83
+                        }
84
+
85
+                        if (DayCount != 0)
86
+                        {
87
+                            drNew["月份"] = beginTime.Month + "月";
88
+                            drNew["日期"] = "总计";
89
+                            drNew["总数"] = dtRow.Length;
90
+                            drNew["Count"] = DayCount.ToString();
91
+                            dtNew.Rows.Add(drNew);
92
+                        }
93
+                        DayCount = 0;
94
+                        monthcount += 1;
95
+                    }
96
+                }
97
+                if (monthcount != 0)
98
+                {
99
+                    DataRow drzj = dtNew.NewRow();
100
+                    drzj["月份"] = dtNow.Year + "年";
101
+                    drzj["日期"] = "总计";
102
+                    drzj["总数"] = Count;
103
+                    drzj["Count"] = monthcount.ToString();
104
+                    dtNew.Rows.Add(drzj);
105
+                }
106
+
107
+                res = Success("获取呼叫量数据成功", dtNew);
108
+            }
109
+            return res;
110
+        }
111
+
112
+        private DataTable GetData(string years)
113
+        {
114
+            DataTable dtNew = new DataTable();
115
+            try
116
+            {
117
+                #region
118
+                DataColumn dc1 = new DataColumn("月份", Type.GetType("System.String"));
119
+                DataColumn dc2 = new DataColumn("日期", Type.GetType("System.String"));
120
+                DataColumn dc3 = new DataColumn("总数", Type.GetType("System.String"));
121
+
122
+                dtNew.Columns.Add(dc1);
123
+                dtNew.Columns.Add(dc2);
124
+                dtNew.Columns.Add(dc3);
125
+                #endregion
126
+                DataTable dt = new Bll.T_Call_CallRecords().GetList("1=1").Tables[0];
127
+                DateTime dtNow;
128
+                int Count = 0;
129
+                int DayCount = 0;
130
+
131
+                if (string.IsNullOrEmpty(years))
132
+                {
133
+                    dtNow = DateTime.Now;
134
+                }
135
+                else
136
+                {
137
+                    dtNow = DateTime.Parse(years + "年");
138
+                }
139
+                int monthcount = 0;
140
+                for (int i = 1; i <= 12; i++)
141
+                {
142
+                    DataRow drNew = dtNew.NewRow();
143
+
144
+                    DateTime beginTime = Convert.ToDateTime(dtNow.Year + "-" + i + "-01 00:00:00");
145
+                    int days = DateTime.DaysInMonth(dtNow.Year, beginTime.Month);
146
+                    DataRow[] dtRow = dt.Select("begintime >='" + beginTime.ToString() + "' and  beginTime<'" + beginTime.AddDays(days).AddSeconds(-1) + "'");
147
+                    if (dtRow.Length > 0)
148
+                    {
149
+                        Count += dtRow.Length;
150
+                        for (int j = 1; j <= days; j++)
151
+                        {
152
+                            DataRow dr1 = dtNew.NewRow();
153
+                            if (dtRow.CopyToDataTable().Select("begintime >='" + beginTime.AddDays(j - 1) + "' and  beginTime<'" + beginTime.AddDays(j).AddSeconds(-1) + "'").Length > 0)
154
+                            {
155
+                                DayCount += 1;
156
+
157
+                                dr1["月份"] = beginTime.Month + "月";
158
+                                dr1["日期"] = beginTime.AddDays(j - 1).ToShortDateString();
159
+                                dr1["总数"] = dtRow.CopyToDataTable().Select("begintime >='" + beginTime.AddDays(j - 1) + "' and  beginTime<'" + beginTime.AddDays(j).AddSeconds(-1) + "'").Length;
160
+
161
+                                dtNew.Rows.Add(dr1);
162
+                            }
163
+                        }
164
+
165
+                        if (DayCount != 0)
166
+                        {
167
+                            drNew["月份"] = beginTime.Month + "月";
168
+                            drNew["日期"] = "总计";
169
+                            drNew["总数"] = dtRow.Length;
170
+                            dtNew.Rows.Add(drNew);
171
+                        }
172
+                        DayCount = 0;
173
+                        monthcount += 1;
174
+                    }
175
+                }
176
+                if (monthcount != 0)
177
+                {
178
+                    DataRow drzj = dtNew.NewRow();
179
+                    drzj["月份"] = dtNow.Year + "年";
180
+                    drzj["日期"] = "总计";
181
+                    drzj["总数"] = Count;
182
+                    dtNew.Rows.Add(drzj);
183
+                }
184
+            }
185
+            catch (Exception ex)
186
+            { }
187
+            return dtNew;
188
+        }
189
+
190
+        public ActionResult ExptList(string years)
191
+        {
192
+            ActionResult res = NoToken("未知错误,请重新登录");
193
+            if (Request.IsAuthenticated)
194
+            {
195
+                NPOIHelper npoi = new NPOIHelper();
196
+                DataTable dt = GetData(years);
197
+                if (npoi.ExportToExcel("总呼叫量数据", dt) == "")
198
+                {
199
+                    return Success("导出成功");
200
+                }
201
+                else
202
+                {
203
+                    return Error("导出失败");
204
+                }
205
+            }
206
+            return res;
207
+        }
208
+
209
+        //获取图形数据
210
+        public ActionResult GetChartData(string years)
211
+        {
212
+            ActionResult res = NoToken("未知错误,请重新登录");
213
+            if (Request.IsAuthenticated)
214
+            {
215
+                string[] arr = new string[12];
216
+
217
+                DataTable dt = new Bll.T_Call_CallRecords().GetList("1=1").Tables[0];
218
+                DateTime dtNow;
219
+
220
+                if (string.IsNullOrEmpty(years))
221
+                {
222
+                    dtNow = DateTime.Now;
223
+                }
224
+                else
225
+                {
226
+                    dtNow = DateTime.Parse(years + "年");
227
+                }
228
+                for (int i = 1; i <= 12; i++)
229
+                {
230
+                    DateTime beginTime = Convert.ToDateTime(dtNow.Year + "-" + i + "-01 00:00:00");
231
+                    int days = DateTime.DaysInMonth(dtNow.Year, beginTime.Month);
232
+                    DataRow[] dtRow = dt.Select("begintime >='" + beginTime.ToString() + "' and  beginTime<'" + beginTime.AddDays(days).AddSeconds(-1) + "'");
233
+                    if (dtRow.Length > 0)
234
+                    {
235
+                        arr[i - 1] = dtRow.Length.ToString();
236
+                    }
237
+                    else
238
+                    {
239
+                        arr[i - 1] = "0";
240
+                    }
241
+                }
242
+
243
+                res = Success("获取呼叫量图形数据成功", arr);
244
+            }
245
+            return res;
246
+        }
247
+    }
248
+}

+ 289 - 0
RMYY_CallCenter_Api/Controllers/report/YearContrastController.cs

@@ -0,0 +1,289 @@
1
+using Newtonsoft.Json.Linq;
2
+using RMYY_CallCenter_Api.DB;
3
+using RMYY_CallCenter_Api.Utility;
4
+using System;
5
+using System.Collections;
6
+using System.Collections.Generic;
7
+using System.Data;
8
+using System.Linq;
9
+using System.Web;
10
+using System.Web.Mvc;
11
+
12
+namespace RMYY_CallCenter_Api.Controllers.report
13
+{
14
+    public class YearContrastController : BaseController
15
+    {
16
+        //呼叫数据对比
17
+        public ActionResult GetDataList(string beginyear, string endyear)
18
+        {
19
+            ActionResult res = NoToken("未知错误,请重新登录");
20
+
21
+            ArrayList arrlist = new ArrayList();
22
+
23
+            if (beginyear != null && beginyear.Trim() != "")
24
+            {
25
+                var data = new
26
+                {
27
+                    key = beginyear + "客户呼叫数",
28
+                    value = GetKhCall(beginyear).TrimEnd(',').Split(','),
29
+                    type = 0
30
+                };
31
+                arrlist.Add(data);
32
+
33
+                var data1 = new
34
+                {
35
+                    key = beginyear + "坐席接听数",
36
+                    value = GetZxJt(beginyear).TrimEnd(',').Split(','),
37
+                    type = 0
38
+                };
39
+                arrlist.Add(data1);
40
+
41
+                var data2 = new
42
+                {
43
+                    key = beginyear + "接通率",
44
+                    value = GetJTL(beginyear).TrimEnd(',').Split(','),
45
+                    type = 0
46
+                };
47
+                arrlist.Add(data2);
48
+            }
49
+            if (endyear != null && endyear.Trim() != "")
50
+            {
51
+                var data = new
52
+                {
53
+                    key = endyear + "客户呼叫数",
54
+                    value = GetKhCall(endyear).TrimEnd(',').Split(','),
55
+                    type = 1
56
+                };
57
+                arrlist.Add(data);
58
+
59
+                var data1 = new
60
+                {
61
+                    key = endyear + "坐席接听数",
62
+                    value = GetZxJt(endyear).TrimEnd(',').Split(','),
63
+                    type = 1
64
+                };
65
+                arrlist.Add(data1);
66
+
67
+                var data2 = new
68
+                {
69
+                    key = endyear + "接通率",
70
+                    value = GetJTL(endyear).TrimEnd(',').Split(','),
71
+                    type = 1
72
+                };
73
+                arrlist.Add(data2);
74
+            }
75
+
76
+            res = Success("获取呼叫数据分析数据成功", arrlist);
77
+
78
+            return res;
79
+        }
80
+
81
+        //导出数据
82
+        public ActionResult ExptList(string beginyear, string endyear)
83
+        {
84
+            ActionResult res = NoToken("未知错误,请重新登录");
85
+            //if (Request.IsAuthenticated)
86
+            if (1 == 1)
87
+            {
88
+                NPOIHelper npoi = new NPOIHelper();
89
+                DataTable dt = GetData(beginyear, endyear);
90
+                if (npoi.ExportToExcel("呼叫数据分析数据", dt) == "")
91
+                {
92
+                    return Success("导出成功");
93
+                }
94
+                else
95
+                {
96
+                    return Error("导出失败");
97
+                }
98
+            }
99
+            return res;
100
+        }
101
+
102
+        private DataTable GetData(string beginyear, string endyear)
103
+        {
104
+            DataTable dtNew = new DataTable();
105
+            if ((beginyear != null && beginyear.Trim() != "") && (endyear != null && endyear.Trim() != ""))
106
+            {
107
+                #region 编辑表头
108
+                DataColumn dc1 = new DataColumn("月份", Type.GetType("System.String"));
109
+                DataColumn dc2 = new DataColumn(beginyear + "年客户呼叫数", Type.GetType("System.String"));
110
+                DataColumn dc3 = new DataColumn(beginyear + "年坐席接听数", Type.GetType("System.String"));
111
+                DataColumn dc4 = new DataColumn(beginyear + "年坐席接通率", Type.GetType("System.String"));
112
+                DataColumn dc5 = new DataColumn(endyear + "年客户呼叫数", Type.GetType("System.String"));
113
+                DataColumn dc6 = new DataColumn(endyear + "年坐席接听数", Type.GetType("System.String"));
114
+                DataColumn dc7 = new DataColumn(endyear + "年坐席接通率", Type.GetType("System.String"));
115
+
116
+                dtNew.Columns.Add(dc1);
117
+                dtNew.Columns.Add(dc2);
118
+                dtNew.Columns.Add(dc3);
119
+                dtNew.Columns.Add(dc4);
120
+                dtNew.Columns.Add(dc5);
121
+                dtNew.Columns.Add(dc6);
122
+                dtNew.Columns.Add(dc7);
123
+                #endregion
124
+                string[] bkhcall = GetKhCall(beginyear).Split(',');
125
+                string[] bzxjt = GetZxJt(beginyear).Split(',');
126
+                string[] bjtl = GetJTL(beginyear).Split(',');
127
+
128
+                string[] ekhcall = GetKhCall(endyear).Split(',');
129
+                string[] ezxjt = GetZxJt(endyear).Split(',');
130
+                string[] ejtl = GetJTL(endyear).Split(',');
131
+
132
+                for (int i = 0; i < 12; i++)
133
+                {
134
+                    DataRow drNew = dtNew.NewRow();
135
+                    drNew["月份"] = (i + 1).ToString() + "月";
136
+                    drNew[beginyear + "年客户呼叫数"] = bkhcall[i];
137
+                    drNew[beginyear + "年坐席接听数"] = bzxjt[i];
138
+                    drNew[beginyear + "年坐席接通率"] = bjtl[i];
139
+                    drNew[endyear + "年客户呼叫数"] = ekhcall[i];
140
+                    drNew[endyear + "年坐席接听数"] = ezxjt[i];
141
+                    drNew[endyear + "年坐席接通率"] = ejtl[i];
142
+                    dtNew.Rows.Add(drNew);
143
+                }
144
+            }
145
+
146
+            return dtNew;
147
+        }
148
+
149
+        //客户呼叫数
150
+        private string GetKhCall(string strtime)
151
+        {
152
+            DataTable dt = new DataTable();
153
+            string str = "";
154
+            for (int i = 1; i <= 12; i++)
155
+            {
156
+                string sqltimeCallRecords = "";
157
+                string strmm = i.ToString();
158
+                if (i <= 9)
159
+                {
160
+                    strmm = "0" + i;
161
+                }
162
+                if (strtime != "")
163
+                {
164
+                    sqltimeCallRecords += " and CONVERT(varchar , timecallin, 120)>=CONVERT(varchar , '" + strtime + "-" + strmm + "-01 00:00:01', 120) ";
165
+                    sqltimeCallRecords += " and CONVERT(varchar , timecallin, 120)<=CONVERT(varchar , '" + strtime + "-" + strmm + "-31 23:59:59', 120) ";
166
+                }
167
+
168
+                dt = DbHelperSQL.Query("select COUNT(*) as ct from rep_trunk_call_in  where 1=1 " + sqltimeCallRecords).Tables[0];
169
+                if (dt != null && dt.Rows.Count > 0)
170
+                {
171
+                    if (dt.Rows[0]["ct"].ToString() != "")
172
+                    {
173
+                        str += dt.Rows[0]["ct"].ToString() + ",";
174
+                    }
175
+                    else
176
+                    {
177
+                        str += "0,";
178
+                    }
179
+                }
180
+                else
181
+                {
182
+                    str += "0,";
183
+                }
184
+            }
185
+            if (str != "")
186
+            {
187
+                str.Remove(str.Length - 1);
188
+            }
189
+            return str;
190
+        }
191
+
192
+        //坐席接听数
193
+        private string GetZxJt(string strtime)
194
+        {
195
+            DataTable dt = new DataTable();
196
+            string str = "";
197
+            for (int i = 1; i <= 12; i++)
198
+            {
199
+                string sqltimeCallRecords = "";
200
+                string strmm = i.ToString();
201
+                if (i <= 9)
202
+                {
203
+                    strmm = "0" + i;
204
+                }
205
+                if (strtime != "")
206
+                {
207
+                    sqltimeCallRecords += " and CONVERT(varchar , timecallin, 120)>=CONVERT(varchar , '" + strtime + "-" + strmm + "-01 00:00:01', 120) ";
208
+                    sqltimeCallRecords += " and CONVERT(varchar , timecallin, 120)<=CONVERT(varchar , '" + strtime + "-" + strmm + "-31 23:59:59', 120) ";
209
+                }
210
+
211
+                dt = DbHelperSQL.Query("select COUNT(*) as ct from rep_trunk_call_in where PeriodTalking>0 " + sqltimeCallRecords).Tables[0];
212
+                if (dt != null && dt.Rows.Count > 0)
213
+                {
214
+                    if (dt.Rows[0]["ct"].ToString() != "")
215
+                    {
216
+                        str += dt.Rows[0]["ct"].ToString() + ",";
217
+                    }
218
+                    else
219
+                    {
220
+                        str += "0,";
221
+                    }
222
+                }
223
+                else
224
+                {
225
+                    str += "0,";
226
+                }
227
+            }
228
+            if (str != "")
229
+            {
230
+                str.Remove(str.Length - 1);
231
+            }
232
+            return str;
233
+        }
234
+
235
+        //坐席接听率
236
+        private string GetJTL(string strtime)
237
+        {
238
+            DataTable dt = new DataTable();
239
+            string str = "";
240
+            for (int i = 1; i <= 12; i++)
241
+            {
242
+                string sqltimeCallRecords = "";
243
+                string strmm = i.ToString();
244
+                if (i <= 9)
245
+                {
246
+                    strmm = "0" + i;
247
+                }
248
+                if (strtime != "")
249
+                {
250
+                    sqltimeCallRecords += " and CONVERT(varchar , timecallin, 120)>=CONVERT(varchar , '" + strtime + "-" + strmm + "-01 00:00:01', 120) ";
251
+                    sqltimeCallRecords += " and CONVERT(varchar , timecallin, 120)<=CONVERT(varchar , '" + strtime + "-" + strmm + "-31 23:59:59', 120) ";
252
+                }
253
+
254
+                dt = DbHelperSQL.Query("select COUNT(*) as ct,(select COUNT(*) from rep_trunk_call_in where PeriodTalking>0 " + sqltimeCallRecords + ") as jt from rep_trunk_call_in  where 1=1  " + sqltimeCallRecords).Tables[0];
255
+
256
+                int ibgnjt = 0;
257
+                double ibgnjtl = 0.00;
258
+
259
+                if (dt != null && dt.Rows.Count > 0)
260
+                {
261
+
262
+                    if (dt.Rows[0]["jt"].ToString() != "")
263
+                    {
264
+                        ibgnjt = int.Parse(dt.Rows[0]["jt"].ToString());
265
+                    }
266
+
267
+                    if (dt.Rows[0]["ct"].ToString() != "" && dt.Rows[0]["ct"].ToString() != "0")
268
+                    {
269
+                        ibgnjtl = ibgnjt / Convert.ToDouble(dt.Rows[0]["ct"].ToString());
270
+                        str += (ibgnjtl * 100).ToString("0.00") + ",";
271
+                    }
272
+                    else
273
+                    {
274
+                        str += "0.00,";
275
+                    }
276
+                }
277
+                else
278
+                {
279
+                    str += "0.00,";
280
+                }
281
+            }
282
+            if (str != "")
283
+            {
284
+                str.Remove(str.Length - 1);
285
+            }
286
+            return str;
287
+        }
288
+    }
289
+}

+ 8 - 0
RMYY_CallCenter_Api/RMYY_CallCenter_Api.csproj

@@ -132,6 +132,13 @@
132 132
     <Compile Include="Controllers\CarManage\T_Car_MessageController.cs" />
133 133
     <Compile Include="Controllers\CarManage\T_Car_WorkOrderController.cs" />
134 134
     <Compile Include="Controllers\information\NoticeController.cs" />
135
+    <Compile Include="Controllers\Quality\IndexBaseController.cs" />
136
+    <Compile Include="Controllers\Quality\IndexCategoryController.cs" />
137
+    <Compile Include="Controllers\Quality\QCManageController.cs" />
138
+    <Compile Include="Controllers\Quality\QCResultController.cs" />
139
+    <Compile Include="Controllers\report\HourCallTotalController.cs" />
140
+    <Compile Include="Controllers\report\TotalCallController.cs" />
141
+    <Compile Include="Controllers\report\YearContrastController.cs" />
135 142
     <Compile Include="Controllers\System\AddressBookController.cs" />
136 143
     <Compile Include="Controllers\System\KnowledgeController.cs" />
137 144
     <Compile Include="Controllers\System\SeatGroupController.cs" />
@@ -201,6 +208,7 @@
201 208
     <Folder Include="img\" />
202 209
     <Folder Include="Views\AddressBook\" />
203 210
     <Folder Include="Views\Knowledge\" />
211
+    <Folder Include="Views\SysWorkOFFDays\" />
204 212
     <Folder Include="Views\T_Acc_WorkOrder\" />
205 213
     <Folder Include="Views\T_Dis_WorkOrder\" />
206 214
     <Folder Include="Views\T_Hos_WorkOrder\" />