zhangkun лет назад: 5
Родитель
Сommit
bceecc49f3
19 измененных файлов с 1021 добавлено и 694 удалено
  1. 2 1
      代码/System.Common/IRepositories/IRepository.cs
  2. 8 0
      代码/System.Common/Repositories/BaseMysqlRepository.cs
  3. 8 0
      代码/System.Common/Repositories/BaseRepository.cs
  4. 3 0
      代码/System.IRepositories/Call/ICall_CallRecordsRepository.cs
  5. 3 0
      代码/System.Model/User/T_SysUser_Grade.cs
  6. 3 0
      代码/System.Model/User/T_SysUser_TeamGrade.cs
  7. 58 0
      代码/System.Repositories/Call/Call_CallRecordsRepository.cs
  8. 97 1
      代码/TVShoppingCallCenter_ZLJ/Controllers/CallCenter/CallFunctionController.cs
  9. 3 3
      代码/TVShoppingCallCenter_ZLJ/Controllers/Order/AfterSaleController.cs
  10. 2 2
      代码/TVShoppingCallCenter_ZLJ/Controllers/Order/OrderController.cs
  11. 179 2
      代码/TVShoppingCallCenter_ZLJ/Controllers/Order/OrderFunctionController.cs
  12. 1 1
      代码/TVShoppingCallCenter_ZLJ/Controllers/Order/OrderMergeController.cs
  13. 128 25
      代码/TVShoppingCallCenter_ZLJ/Controllers/Report/GradeController.cs
  14. 149 9
      代码/TVShoppingCallCenter_ZLJ/Controllers/Report/TeamGradeController.cs
  15. 8 5
      代码/TVShoppingCallCenter_ZLJ/Controllers/System/DeptmentController.cs
  16. 4 0
      代码/TVShoppingCallCenter_ZLJ/Controllers/System/UserAccountController.cs
  17. 18 643
      代码/TVShoppingCallCenter_ZLJ/Controllers/hangfire/HangfireController.cs
  18. 345 0
      代码/TVShoppingCallCenter_ZLJ/Models/Inputs/SysUser/SysUser_TeamGradeInput.cs
  19. 2 2
      代码/TVShoppingCallCenter_ZLJ/Startup.cs

+ 2 - 1
代码/System.Common/IRepositories/IRepository.cs

@@ -121,7 +121,8 @@ namespace System.Common
121 121
 
122 122
 
123 123
         Task<int> ExecuteCommandSugar(string sql, List<SugarParameter> sugarParameter = null);
124
-     
124
+
125
+        Task<List<T>> GetModelSugar(string sql, List<SugarParameter> sugarParameter = null);
125 126
 
126 127
     }
127 128
 }

+ 8 - 0
代码/System.Common/Repositories/BaseMysqlRepository.cs

@@ -252,6 +252,14 @@ namespace System.Common
252 252
             { return await Db.Ado.GetDataTableAsync(sql, sugarParameter); }
253 253
         }
254 254
 
255
+        public async Task<List<T>> GetModelSugar(string sql, List<SugarParameter> sugarParameter = null)
256
+        {
257
+            if (sugarParameter == null)
258
+            { return await Db.Ado.SqlQueryAsync<T>(sql); }
259
+            else
260
+            { return await Db.Ado.SqlQueryAsync<T>(sql, sugarParameter); }
261
+        }
262
+
255 263
         public async Task<int> ExecuteCommandSugar(string sql, List<SugarParameter> sugarParameter = null)
256 264
         {
257 265
             if (sugarParameter == null)

+ 8 - 0
代码/System.Common/Repositories/BaseRepository.cs

@@ -249,6 +249,14 @@ namespace System.Common
249 249
             { return await Db.Ado.GetDataTableAsync(sql, sugarParameter); }
250 250
         }
251 251
 
252
+        public async Task<List<T>> GetModelSugar(string sql, List<SugarParameter> sugarParameter = null)
253
+        {
254
+            if (sugarParameter == null)
255
+            { return await Db.Ado.SqlQueryAsync<T>(sql); }
256
+            else
257
+            { return await Db.Ado.SqlQueryAsync<T>(sql, sugarParameter); }
258
+        }
259
+
252 260
         public async Task<int> ExecuteCommandSugar(string sql, List<SugarParameter> sugarParameter = null)
253 261
         {
254 262
             if (sugarParameter == null)

+ 3 - 0
代码/System.IRepositories/Call/ICall_CallRecordsRepository.cs

@@ -1,10 +1,13 @@
1 1
 using System.Common;
2 2
 using System;
3 3
 using System.Model;
4
+using System.Threading.Tasks;
4 5
 
5 6
 namespace System.IRepositories
6 7
 {
7 8
     public interface ICall_CallRecordsRepository : IRepository<T_Call_CallRecords>
8 9
     {
10
+        Task<int> GetCallNumber(string DeptCode ,int teamid,DateTime dtime);
11
+        Task<int> GetTotleCallNumber(string DeptCode, int teamid, DateTime dtime);
9 12
     }
10 13
 }

+ 3 - 0
代码/System.Model/User/T_SysUser_Grade.cs

@@ -378,6 +378,9 @@ namespace System.Model
378 378
 			set { _f_adduser = value; }
379 379
 			get { return _f_adduser; }
380 380
 		}
381
+		public DateTime? F_SureTime
382
+		{			set;			get;		}
383
+		
381 384
 		#endregion Model
382 385
 
383 386
 	}

+ 3 - 0
代码/System.Model/User/T_SysUser_TeamGrade.cs

@@ -360,6 +360,9 @@ namespace System.Model
360 360
 			set { _f_adduser = value; }
361 361
 			get { return _f_adduser; }
362 362
 		}
363
+
364
+		public DateTime? F_SureTime
365
+		{ set; get; }
363 366
 		#endregion Model
364 367
 
365 368
 	}

+ 58 - 0
代码/System.Repositories/Call/Call_CallRecordsRepository.cs

@@ -4,10 +4,68 @@ using System.Text;
4 4
 using System.IRepositories;
5 5
 using System.Model;
6 6
 using System.Common;
7
+using System.Threading.Tasks;
8
+using System.Net.Http.Headers;
9
+using SqlSugar;
10
+using System.Data;
11
+
7 12
 namespace System.Repositories
8 13
 {
9 14
     public class Call_CallRecordsRepository : BaseRepository<T_Call_CallRecords>, ICall_CallRecordsRepository
10 15
     {
16
+
17
+        public async Task<int> GetCallNumber(string DeptCode, int teamid, DateTime dtime) 
18
+        {
19
+            string sql = "SELECT COUNT(1) FROM T_Call_CallRecords where  TalkLongTime>0 AND BeginTime BETWEEN @stime AND @etime ";
20
+            if (!string.IsNullOrEmpty(DeptCode))
21
+            {
22
+                sql += $" AND UserCode in (SELECT F_UserCode FROM `T_Sys_UserAccount` WHERE F_DeptId IN(SELECT F_DeptId FROM  T_Sys_Department WHERE F_DeptCode LIKE '{DeptCode}%'))";
23
+                DeptCode = "|0|1|";
24
+            }
25
+           
26
+            if (teamid>0)
27
+            {
28
+                sql += $" AND UserCode in (SELECT F_UserCode FROM `T_Sys_UserAccount` WHERE F_DeptTeamId ={teamid})";
29
+            }
30
+            List<SugarParameter> sugarParameter = new List<SugarParameter>()
31
+            {
32
+                new SugarParameter("@stime",dtime),
33
+                new SugarParameter("@etime",dtime.AddMonths(1)),
34
+            };
35
+
36
+            DataTable dt=  await GetTableSugar(sql, sugarParameter);
37
+            if (dt != null && dt.Rows.Count > 0)
38
+            {
39
+                return dt.Rows[0][0].ObjToInt();
40
+            }
41
+            return 0;
42
+        }
43
+        public async Task<int> GetTotleCallNumber(string DeptCode, int teamid, DateTime dtime)
44
+        {
45
+            string sql = "SELECT COUNT(1) FROM T_Call_CallRecords where  BeginTime BETWEEN @stime AND @etime ";
46
+            if (!string.IsNullOrEmpty(DeptCode))
47
+            {
48
+                sql += $" AND UserCode in (SELECT F_UserCode FROM `T_Sys_UserAccount` WHERE F_DeptId IN(SELECT F_DeptId FROM  T_Sys_Department WHERE F_DeptCode LIKE '{DeptCode}%'))";
49
+                DeptCode = "|0|1|";
50
+            }
51
+            
52
+            if (teamid > 0)
53
+            {
54
+                sql += $" AND UserCode in (SELECT F_UserCode FROM `T_Sys_UserAccount` WHERE F_DeptTeamId ={teamid})";
55
+            }
56
+
57
+            List<SugarParameter> sugarParameter = new List<SugarParameter>()
58
+            {
59
+                new SugarParameter("@stime",dtime),
60
+                new SugarParameter("@etime",dtime.AddMonths(1)),
61
+            };
62
+            DataTable dt = await GetTableSugar(sql, sugarParameter);
63
+            if (dt != null && dt.Rows.Count > 0)
64
+            {
65
+                return dt.Rows[0][0].ObjToInt();
66
+            }
67
+            return 0;
68
+        }
11 69
     }
12 70
 
13 71
 }

+ 97 - 1
代码/TVShoppingCallCenter_ZLJ/Controllers/CallCenter/CallFunctionController.cs

@@ -10,6 +10,8 @@ using System.Utility;
10 10
 using Microsoft.AspNetCore.Authorization;
11 11
 using Microsoft.AspNetCore.Mvc;
12 12
 using Microsoft.Extensions.Configuration;
13
+using SqlSugar;
14
+using Utility;
13 15
 
14 16
 namespace TVShoppingCallCenter_ZLJ.Controllers.CallCenter
15 17
 {
@@ -23,8 +25,12 @@ namespace TVShoppingCallCenter_ZLJ.Controllers.CallCenter
23 25
     {
24 26
         private readonly IConfiguration config;
25 27
         private readonly ISys_MobileDataRepository busMobileDataRepository;
26
-        public CallFunctionController(IConfiguration _configuration, ISys_MobileDataRepository _busMobileDataRepository)
28
+        private readonly ICall_CallRecordsRepository busCallRecordsRepository;
29
+        private readonly ICDRRepository busCdrRepository;
30
+        public CallFunctionController(ICDRRepository _busCdrRepository,ICall_CallRecordsRepository _busCallRecordsRepository,IConfiguration _configuration, ISys_MobileDataRepository _busMobileDataRepository)
27 31
         {
32
+            busCdrRepository = _busCdrRepository;
33
+            busCallRecordsRepository = _busCallRecordsRepository;
28 34
             config = _configuration;
29 35
             busMobileDataRepository = _busMobileDataRepository;
30 36
         }
@@ -94,5 +100,95 @@ namespace TVShoppingCallCenter_ZLJ.Controllers.CallCenter
94 100
         }
95 101
 
96 102
 
103
+
104
+
105
+        #region  同步通话记录
106
+        /// <summary>
107
+        /// 同步通话记录
108
+        /// </summary>
109
+        /// <returns></returns>
110
+        [NonAction]
111
+        internal async Task<string> SyncCallRecord()
112
+        {
113
+            DateTime dtime = DateTime.Now.AddYears(-10);
114
+            int maxid = 0;
115
+            T_Call_CallRecords modelCallRecord = await busCallRecordsRepository.GetFirst(q => q.CdrId > 0, o => new { o.CdrId }, OrderByType.Desc);
116
+            if (modelCallRecord != null)
117
+            {
118
+                maxid = modelCallRecord.CdrId;
119
+            }
120
+            modelCallRecord = await busCallRecordsRepository.GetFirst(q => q.CdrId > 0, o => new { o.EndTime }, OrderByType.Desc);
121
+            if (modelCallRecord != null)
122
+            {
123
+                if (modelCallRecord.EndTime != null)
124
+                    dtime = modelCallRecord.EndTime.GetValueOrDefault();
125
+            }
126
+            List<cdr> modellist = await busCdrRepository.GetListALL(q => q.id > maxid || q.end_time >= dtime);
127
+            int totle = 0;
128
+            int n = 0;
129
+            int n1 = 0;
130
+            if (modellist != null && modellist.Count > 0)
131
+            {
132
+
133
+                totle = modellist.Count;
134
+                List<T_Call_CallRecords> modelRecordList = new List<T_Call_CallRecords>();
135
+                foreach (cdr modelcdr in modellist)
136
+                {
137
+
138
+                    T_Call_CallRecords modelRecord = new T_Call_CallRecords();
139
+                    modelRecord.ActionID = modelcdr.action_id;
140
+                    modelRecord.TalkStartTime = modelcdr.answer_time;
141
+                    modelRecord.Callee = modelcdr.callee;
142
+                    modelRecord.UserCode = modelcdr.callee_agent;
143
+                    modelRecord.Caller = modelcdr.caller;
144
+                    modelRecord.CusCode = modelcdr.caller_agent;
145
+                    modelRecord.CusId = modelcdr.caller_agent;
146
+                    modelRecord.CallType = modelcdr.call_type;
147
+                    modelRecord.BeginTime = modelcdr.create_time;
148
+                    modelRecord.EndTime = modelcdr.end_time;
149
+                    //  modelcdr.hangup_cause;挂机原因不赋值  HangUpReason
150
+                    //  modelcdr.leave_path 留言 赋值给了FilePath
151
+                    modelRecord.IvrEndTime = modelcdr.hangup_time;
152
+                    modelRecord.Id = modelcdr.id;
153
+                    modelRecord.MYD = modelcdr.myd;
154
+                    modelRecord.Remark = modelcdr.note;
155
+                    modelRecord.OperateType = modelcdr.op_type;
156
+                    modelRecord.FilePath = modelcdr.record_path;
157
+                    if (string.IsNullOrEmpty(modelcdr.record_path) && !string.IsNullOrEmpty(modelcdr.leave_path))
158
+                    {
159
+                        modelRecord.FilePath = modelcdr.leave_path;
160
+                    }
161
+                    modelRecord.RingStartTime = modelcdr.ring_time;
162
+                    modelRecord.RelayNumber = modelcdr.trunk_num;
163
+                    modelRecord.CallId = modelcdr.uuid;
164
+                    modelRecord.CdrId = modelcdr.id;
165
+                    modelRecord.Location = await GetLocationFunc(modelcdr.caller, 1);
166
+                    #region 计算时长
167
+                    modelRecord.LongTime = (int)DateTimeConvert.DateDiff(DateInterval.Second, modelcdr.create_time.GetValueOrDefault(), modelcdr.end_time.GetValueOrDefault());
168
+
169
+                    if (modelcdr.answer_time != null)
170
+                        modelRecord.TalkLongTime = (int)DateTimeConvert.DateDiff(DateInterval.Second, modelcdr.answer_time.GetValueOrDefault(), modelcdr.end_time.GetValueOrDefault());
171
+                    else
172
+                        modelRecord.TalkLongTime = 0;
173
+                    #endregion
174
+                    n++;
175
+                    n1++;
176
+                    modelRecordList.Add(modelRecord);
177
+                    if (n >= 2000)
178
+                    {
179
+                        await busCallRecordsRepository.AddAndUpdateList(modelRecordList);
180
+                        modelRecordList.Clear();
181
+                        n = 0;
182
+                    }
183
+
184
+                }
185
+                //T_Call_CallRecords modelreturn= await busCallRecordsRepository.AddAndUpdateList(modelRecordList,s=>new {s.EndTime,s.TalkEndTime,s.IvrEndTime });
186
+                //T_Call_CallRecords modelreturn = 
187
+                await busCallRecordsRepository.AddAndUpdateList(modelRecordList);
188
+            }
189
+            return $"同步情况  成功/总数 = {n1}/{totle}";
190
+        }
191
+        #endregion
192
+
97 193
     }
98 194
 }

+ 3 - 3
代码/TVShoppingCallCenter_ZLJ/Controllers/Order/AfterSaleController.cs

@@ -474,7 +474,7 @@ namespace TVShoppingCallCenter_ZLJ.Controllers.Order
474 474
                 { modelAfterSale.F_Customer = input.F_Customer; }
475 475
                 else
476 476
                 { modelAfterSale.F_Customer = modelOrder.F_Customer; }
477
-
477
+                 
478 478
                 if (!string.IsNullOrEmpty(input.F_ReturnDes))
479 479
                 { modelAfterSale.F_ReturnDes = input.F_ReturnDes; }
480 480
                 if (!string.IsNullOrEmpty(input.F_ReturnType))
@@ -1338,7 +1338,7 @@ namespace TVShoppingCallCenter_ZLJ.Controllers.Order
1338 1338
                 {
1339 1339
                     return Error("请选择货仓");
1340 1340
                 }
1341
-                modelOrder.F_FlowNum = Guid.NewGuid().ToString().Replace("-", "");
1341
+                modelOrder.F_FlowNum = DateTime.Now.ToString("yyMMddHHmmss") + "U" + UserLogin.UserId + "R" + new Random().Next(9);
1342 1342
                 string strStock = await busOrderFunctionController.ChangeStockOne(modelOrder, 1, modelDetailList);
1343 1343
                 if (strStock != "1")
1344 1344
                 { return Error(strStock); }
@@ -1622,7 +1622,7 @@ namespace TVShoppingCallCenter_ZLJ.Controllers.Order
1622 1622
 
1623 1623
 
1624 1624
 
1625
-                modelOrder.F_FlowNum = Guid.NewGuid().ToString().Replace("-", "");
1625
+                modelOrder.F_FlowNum = DateTime.Now.ToString("yyMMddHHmmss") + "U" + UserLogin.UserId + "R" + new Random().Next(9);
1626 1626
                 string strStock = await busOrderFunctionController.ChangeStockOne(modelOrder, 1, modelDetailList);
1627 1627
                 if (strStock != "1")
1628 1628
                 { modelOrder.F_State = 0; }

+ 2 - 2
代码/TVShoppingCallCenter_ZLJ/Controllers/Order/OrderController.cs

@@ -349,7 +349,7 @@ namespace TVShoppingCallCenter_ZLJ.Controllers.Order
349 349
                     {
350 350
                         modelOrder.F_UseScore = 0;
351 351
                     }
352
-                    modelOrder.F_FlowNum = UserLogin.UserCode + "T" + DateTime.Now.ToString("yyMMddhhmmss") + new Random().Next(9);
352
+                    modelOrder.F_FlowNum =  DateTime.Now.ToString("yyMMddHHmmss")+"U" + UserLogin.UserId +"R"+ new Random().Next(9);
353 353
                     string strStock = await busOrderFunctionController.ChangeStockOne(modelOrder, 1, modelDetailList);
354 354
                     if (strStock != "1")
355 355
                     { return Error(strStock); }
@@ -670,7 +670,7 @@ namespace TVShoppingCallCenter_ZLJ.Controllers.Order
670 670
                 {
671 671
                     return Error("收件人详细地址不能为空");
672 672
                 }
673
-                modelOrder.F_FlowNum =UserLogin.UserCode+"T"+DateTime.Now.ToString("yyMMddhhmmss") +new Random().Next(9);
673
+                modelOrder.F_FlowNum = DateTime.Now.ToString("yyMMddHHmmss") + "U" + UserLogin.UserId + "R" + new Random().Next(9);
674 674
 
675 675
                 if (modelscore.F_Start == 1)
676 676
                 {

Разница между файлами не показана из-за своего большого размера
+ 179 - 2
代码/TVShoppingCallCenter_ZLJ/Controllers/Order/OrderFunctionController.cs


+ 1 - 1
代码/TVShoppingCallCenter_ZLJ/Controllers/Order/OrderMergeController.cs

@@ -474,7 +474,7 @@ namespace TVShoppingCallCenter_ZLJ.Controllers.Order
474 474
 
475 475
                                 setStockModel.store = m.F_Stock;
476 476
                                 setStockModel.dts = stockChangeModels;
477
-                                setStockModel.masterid = m.F_FlowNum + "-hb" + new Random().Next(1, 10);
477
+                                setStockModel.masterid = m.F_FlowNum;
478 478
                                 setStockModel.remark = "合并审核减库存";
479 479
                                 #endregion
480 480
 

+ 128 - 25
代码/TVShoppingCallCenter_ZLJ/Controllers/Report/GradeController.cs

@@ -1,6 +1,7 @@
1 1
 using System;
2 2
 using System.Collections.Generic;
3 3
 using System.Common;
4
+using System.Common.Helpers;
4 5
 using System.IRepositories;
5 6
 using System.Linq;
6 7
 using System.Linq.Expressions;
@@ -31,8 +32,10 @@ namespace TVShoppingCallCenter_ZLJ.Controllers.CallCenter
31 32
         private readonly ISys_DeptTeamRepository busDeptTeamRepository;
32 33
         private readonly ISys_DepartmentRepository busDepartmentRepository;
33 34
         private readonly IBus_OrderRepository bus_OrderRepository;
34
-        public GradeController(IBus_OrderRepository _bus_OrderRepository,ISys_DepartmentRepository _busDepartmentRepository,ISys_DeptTeamRepository _busDeptTeamRepository,IBus_AfterSaleRepository _busAfterSaleRepository,ISys_UserAccountRepository _busUserAccountRepository,ISysUser_GradeRepository _busGradeRepository, IConfiguration _configuration)
35
+        private readonly ICall_CallRecordsRepository busCallRecordsRepository;
36
+        public GradeController(ICall_CallRecordsRepository _busCallRecordsRepository,IBus_OrderRepository _bus_OrderRepository,ISys_DepartmentRepository _busDepartmentRepository,ISys_DeptTeamRepository _busDeptTeamRepository,IBus_AfterSaleRepository _busAfterSaleRepository,ISys_UserAccountRepository _busUserAccountRepository,ISysUser_GradeRepository _busGradeRepository, IConfiguration _configuration)
35 37
         {
38
+            busCallRecordsRepository = _busCallRecordsRepository;
36 39
             bus_OrderRepository = _bus_OrderRepository;
37 40
             busDepartmentRepository = _busDepartmentRepository;
38 41
             busDeptTeamRepository = _busDeptTeamRepository;
@@ -44,14 +47,35 @@ namespace TVShoppingCallCenter_ZLJ.Controllers.CallCenter
44 47
 
45 48
 
46 49
         /// <summary>
47
-        ///  获取个人绩效列表
50
+        /// 生成个人绩效列表
48 51
         /// </summary>
49
-        /// <param name="input"></param>
52
+        /// <param name="date"></param>
53
+        /// <param name="usercode"></param>
54
+        /// <param name="teamid"></param>
55
+        /// <param name="deptid"></param>
56
+        /// <param name="isstrong">1强制更新</param>
50 57
         /// <returns></returns>
51 58
         [HttpPost("add")]
52
-        public async Task<IActionResult> Add(SysUser_GradeInput input)
59
+        public async Task<IActionResult> Add(string date = "", string usercode = "", int teamid = 0, int deptid = 0, int isstrong = 0)
53 60
         {
61
+            string str = await UpdateGrade(date, usercode, teamid, deptid, isstrong);
62
+            return Success("成功", str);
63
+
64
+        }
65
+
54 66
 
67
+        /// <summary>
68
+        ///  获取个人绩效列表
69
+        /// </summary>
70
+        /// <param name="input"></param>
71
+        /// <returns></returns>
72
+        [HttpPost("getlistbypage")]
73
+        public async Task<IActionResult> GetListByPage(SysUser_GradeInput input)
74
+        {
75
+            if (UserLogin.RoleCode == "XS")
76
+            {
77
+                input.F_UserCode = UserLogin.UserCode;
78
+            }
55 79
             List<IConditionalModel> ConditionalModels = new List<IConditionalModel>();
56 80
             #region 筛选条件
57 81
             if (input.SearchStartTime != null)
@@ -77,50 +101,119 @@ namespace TVShoppingCallCenter_ZLJ.Controllers.CallCenter
77 101
             #endregion
78 102
 
79 103
             int count = 0;
80
-            PageData<T_SysUser_Grade> pagelist = await busGradeRepository.GetListByPage(ConditionalModels, new MyPageModel { PageCount = count, PageIndex = input.pageindex, PageSize = input.pagesize }, " F_TotleMoney DESC");
104
+            PageData<T_SysUser_Grade> pagelist = await busGradeRepository.GetListByPage(ConditionalModels, new MyPageModel { PageCount = count, PageIndex = input.pageindex, PageSize = input.pagesize }, " F_Month DESC, F_TotleMoney DESC");
81 105
             return Success("成功", pagelist);
82 106
 
83 107
         }
84 108
 
85 109
 
110
+
86 111
         /// <summary>
87
-        ///  获取个人绩效列表
112
+        /// 获取单个信息
88 113
         /// </summary>
89
-        /// <param name="input"></param>
114
+        /// <param name="id"></param>
90 115
         /// <returns></returns>
91
-        [HttpPost("getlistbypage")]
92
-        public async Task<IActionResult> GetListByPage(SysUser_GradeInput input)
116
+        [HttpPost("getdetail")]
117
+        public async Task<IActionResult> GetDetail(string id)
93 118
         {
119
+            if (string.IsNullOrEmpty(id))
120
+            {
121
+                return Error("id不能为空");
122
+            }
123
+           T_SysUser_Grade model = await busGradeRepository.GetSingle(q=>q.F_Id== id);
124
+            if(model==null)
125
+            {
126
+                return Error("找不到数据");
127
+            }
128
+            return Success("成功", model);
94 129
 
95
-            List<IConditionalModel> ConditionalModels = new List<IConditionalModel>();
96
-            #region 筛选条件
97
-            if (input.SearchStartTime != null)
130
+        }
131
+
132
+
133
+
134
+        /// <summary>
135
+        /// 获取单个信息
136
+        /// </summary>
137
+        /// <param name="id"></param>
138
+        /// <returns></returns>
139
+        [HttpPost("delete")]
140
+        public async Task<IActionResult> Delete(string id)
141
+        {
142
+            if (string.IsNullOrEmpty(id))
98 143
             {
99
-                ConditionalModels.Add(new ConditionalModel { FieldName = "F_Month", ConditionalType = ConditionalType.GreaterThanOrEqual, FieldValue = input.SearchStartTime.GetValueOrDefault().ToString("yyyyMM") });
144
+                return Error("id不能为空");
100 145
             }
101
-            if (input.SearchEndTime != null)
146
+            if (await busGradeRepository.Delete(q => q.F_Id == id))
102 147
             {
103
-                ConditionalModels.Add(new ConditionalModel { FieldName = "F_Month", ConditionalType = ConditionalType.LessThanOrEqual, FieldValue = input.SearchEndTime.GetValueOrDefault().ToString("yyyyMM") });
148
+                return Success("成功");
104 149
             }
105
-            if (!string.IsNullOrEmpty(input.F_UserCode))
150
+            return Error("失败");
151
+        }
152
+
153
+
154
+
155
+        /// <summary>
156
+        /// 编辑
157
+        /// </summary>
158
+        /// <param name="id"></param>
159
+        /// <returns></returns>
160
+        [HttpPost("update")]
161
+        public async Task<IActionResult> Update(SysUser_GradeInput input)
162
+        {
163
+            if (UserLogin.RoleCode == "XS" || UserLogin.RoleCode == "SH" || UserLogin.RoleCode == "KG")
106 164
             {
107
-                ConditionalModels.Add(new ConditionalModel { FieldName = "F_UserCode", ConditionalType = ConditionalType.Equal, FieldValue = input.F_UserCode });
165
+                return Error("没有权限");
108 166
             }
109
-            if (input.F_DeptId > 0)
167
+            T_SysUser_Grade model  = await busGradeRepository.GetSingle(q => q.F_Id == input.F_Id);
168
+            if (model.F_State != 1)
110 169
             {
111
-                ConditionalModels.Add(new ConditionalModel { FieldName = "F_DeptId", ConditionalType = ConditionalType.Equal, FieldValue = input.F_DeptId.ToString() });
170
+                return Error("只有有异议绩效才可以编辑修改");
112 171
             }
113
-            if (input.F_TeamId > 0)
172
+            ModelConvertHelper<T_SysUser_Grade,SysUser_GradeInput>.ModeToModel(model, input);
173
+            model.F_State = 0;
174
+            if (await busGradeRepository.Update(model))
114 175
             {
115
-                ConditionalModels.Add(new ConditionalModel { FieldName = "F_TeamId", ConditionalType = ConditionalType.Equal, FieldValue = input.F_TeamId.ToString() });
176
+                return Success("成功");
116 177
             }
117
-            #endregion
178
+            return Error("失败");
179
+        }
180
+
118 181
 
119
-            int count = 0;
120
-            PageData<T_SysUser_Grade> pagelist = await busGradeRepository.GetListByPage(ConditionalModels, new MyPageModel { PageCount = count, PageIndex = input.pageindex, PageSize = input.pagesize }, " F_TotleMoney DESC");
121
-            return Success("成功", pagelist);
122 182
 
183
+        /// <summary>
184
+        /// 申诉/确认
185
+        /// </summary>
186
+        /// <param name="id"></param>
187
+        /// <returns></returns>
188
+        [HttpPost("updatestate")]
189
+        public async Task<IActionResult> UpdateState(string id, int state,string remark)
190
+        {
191
+            if (UserLogin.RoleCode != "XS")
192
+            {
193
+                    return Error("没有权限");
194
+            }
195
+            T_SysUser_Grade model = await busGradeRepository.GetSingle(q => q.F_Id == id);
196
+            if (model.F_State == 5)
197
+            { return Error("绩效已锁定"); }
198
+            if (UserLogin.UserCode == model.F_UserCode)
199
+            {
200
+                if(state==1)
201
+                    model.F_StateReamrk += $"【{remark}】";
202
+                model.F_State = state;
203
+                model.F_SureTime = DateTime.Now;
204
+            }
205
+            else
206
+            {
207
+                return Error("只能自己确认绩效状态"); 
208
+            }
209
+
210
+            if (await busGradeRepository.Update(model))
211
+            {
212
+                return Success("成功");
213
+            }
214
+            return Error("失败");
123 215
         }
216
+
124 217
         #region 方法
125 218
         /// <summary>
126 219
         /// 更新员工绩效
@@ -266,6 +359,16 @@ namespace TVShoppingCallCenter_ZLJ.Controllers.CallCenter
266 359
                     modelGrade.F_AlongMoney = await bus_OrderRepository.AlongMoney(modelUser.F_UserId, MonthTimeStart);
267 360
                     modelGrade.F_SignRate = modelGrade.F_SendTotleNumber > 0 ? (modelGrade.F_SignNumber.ObjToDecimal() / modelGrade.F_SendTotleNumber).ToString("P2") : "—";
268 361
 
362
+                    modelGrade.F_TaskNumber = 0;
363
+                    modelGrade.F_TaskOverNumber = modelGrade.F_SignNumber + modelGrade.F_ErrorMoney + modelGrade.F_AfterMoney + modelGrade.F_LastSignMoney;
364
+                    modelGrade.F_TaskRate = "—";
365
+
366
+                    modelGrade.F_CallNumber = await busCallRecordsRepository.GetCount(q=>q.UserCode== modelUser.F_UserCode&&q.TalkLongTime>0&&q.BeginTime> MonthTimeStart&&q.BeginTime< MonthTimeStart.AddMonths(1));
367
+                    modelGrade.F_CallTotleNumber = await busCallRecordsRepository.GetCount(q => q.UserCode == modelUser.F_UserCode  && q.BeginTime > MonthTimeStart && q.BeginTime < MonthTimeStart.AddMonths(1));
368
+
369
+                    modelGrade.F_CallNumber = modelGrade.F_CallNumber == 0 ? 1 : modelGrade.F_CallNumber;
370
+                    modelGrade.F_CallSingleMoney = modelGrade.F_TaskOverNumber / modelGrade.F_CallNumber;
371
+
269 372
                     modellist.Add(modelGrade);
270 373
                     n++;
271 374
                 }

+ 149 - 9
代码/TVShoppingCallCenter_ZLJ/Controllers/Report/TeamGradeController.cs

@@ -1,6 +1,7 @@
1 1
 using System;
2 2
 using System.Collections.Generic;
3 3
 using System.Common;
4
+using System.Common.Helpers;
4 5
 using System.IRepositories;
5 6
 using System.Linq;
6 7
 using System.Linq.Expressions;
@@ -29,8 +30,10 @@ namespace TVShoppingCallCenter_ZLJ.Controllers.CallCenter
29 30
         private readonly ISysUser_TeamGradeRepository busTeamGradeRepository;
30 31
         private readonly ISys_DepartmentRepository busDepartmentRepository;
31 32
         private readonly ISys_DeptTeamRepository busDeptTeamRepository;
32
-        public TeamGradeController(ISys_DeptTeamRepository _busDeptTeamRepository,ISys_DepartmentRepository _busDepartmentRepository,ISysUser_TeamGradeRepository _busTeamGradeRepository,ISysUser_GradeRepository _busGradeRepository, IConfiguration _configuration)
33
+        private readonly ICall_CallRecordsRepository busCallRecordsRepository;
34
+        public TeamGradeController(ICall_CallRecordsRepository _busCallRecordsRepository, ISys_DeptTeamRepository _busDeptTeamRepository, ISys_DepartmentRepository _busDepartmentRepository, ISysUser_TeamGradeRepository _busTeamGradeRepository, ISysUser_GradeRepository _busGradeRepository, IConfiguration _configuration)
33 35
         {
36
+            busCallRecordsRepository = _busCallRecordsRepository;
34 37
             busDeptTeamRepository = _busDeptTeamRepository;
35 38
             busDepartmentRepository = _busDepartmentRepository;
36 39
             busTeamGradeRepository = _busTeamGradeRepository;
@@ -38,13 +41,33 @@ namespace TVShoppingCallCenter_ZLJ.Controllers.CallCenter
38 41
             config = _configuration;
39 42
         }
40 43
 
44
+
45
+
46
+        /// <summary>
47
+        /// 生成团队绩效列表
48
+        /// </summary>
49
+        /// <param name="date"></param>
50
+        /// <param name="usercode"></param>
51
+        /// <param name="teamid"></param>
52
+        /// <param name="deptid"></param>
53
+        /// <param name="isstrong">1强制更新</param>
54
+        /// <returns></returns>
55
+        [HttpPost("add")]
56
+        public async Task<IActionResult> Add(string date = "", int teamid = 0, int deptid = 0, int isstrong = 0)
57
+        {
58
+            string str = await UpdateTeamGrade(date, teamid, deptid, isstrong);
59
+            return Success("成功", str);
60
+
61
+        }
62
+
63
+
41 64
         /// <summary>
42
-        /// 
65
+        ///  获取团队绩效列表
43 66
         /// </summary>
44 67
         /// <param name="input"></param>
45 68
         /// <returns></returns>
46 69
         [HttpPost("getlistbypage")]
47
-        public async Task<IActionResult> GetListByPage(SysUser_GradeInput input)
70
+        public async Task<IActionResult> GetListByPage(SysUser_TeamGradeInput input)
48 71
         {
49 72
 
50 73
             List<IConditionalModel> ConditionalModels = new List<IConditionalModel>();
@@ -57,10 +80,6 @@ namespace TVShoppingCallCenter_ZLJ.Controllers.CallCenter
57 80
             {
58 81
                 ConditionalModels.Add(new ConditionalModel { FieldName = "F_Month", ConditionalType = ConditionalType.LessThanOrEqual, FieldValue = input.SearchEndTime.GetValueOrDefault().ToString("yyyyMM") });
59 82
             }
60
-            if (!string.IsNullOrEmpty(input.F_UserCode))
61
-            {
62
-                ConditionalModels.Add(new ConditionalModel { FieldName = "F_UserCode", ConditionalType = ConditionalType.Equal, FieldValue = input.F_UserCode });
63
-            }
64 83
             if (input.F_DeptId > 0)
65 84
             {
66 85
                 ConditionalModels.Add(new ConditionalModel { FieldName = "F_DeptId", ConditionalType = ConditionalType.Equal, FieldValue = input.F_DeptId.ToString() });
@@ -72,13 +91,117 @@ namespace TVShoppingCallCenter_ZLJ.Controllers.CallCenter
72 91
             #endregion
73 92
 
74 93
             int count = 0;
75
-            PageData<T_SysUser_Grade> pagelist = await busGradeRepository.GetListByPage(ConditionalModels, new MyPageModel { PageCount = count, PageIndex = input.pageindex, PageSize = input.pagesize }, " F_TotleMoney DESC");
94
+            PageData<T_SysUser_TeamGrade> pagelist = await busTeamGradeRepository.GetListByPage(ConditionalModels, new MyPageModel { PageCount = count, PageIndex = input.pageindex, PageSize = input.pagesize }, "  F_Month DESC, F_TotleMoney DESC ");
76 95
             return Success("成功", pagelist);
77 96
 
78 97
         }
79 98
 
80 99
 
81 100
 
101
+        /// <summary>
102
+        /// 获取单个信息
103
+        /// </summary>
104
+        /// <param name="id"></param>
105
+        /// <returns></returns>
106
+        [HttpPost("getdetail")]
107
+        public async Task<IActionResult> GetDetail(string id)
108
+        {
109
+            if (string.IsNullOrEmpty(id))
110
+            {
111
+                return Error("id不能为空");
112
+            }
113
+            T_SysUser_TeamGrade model = await busTeamGradeRepository.GetSingle(q => q.F_Id == id);
114
+            if (model == null)
115
+            {
116
+                return Error("找不到数据");
117
+            }
118
+            return Success("成功", model);
119
+
120
+        }
121
+
122
+
123
+
124
+        /// <summary>
125
+        /// 删除单个信息
126
+        /// </summary>
127
+        /// <param name="id"></param>
128
+        /// <returns></returns>
129
+        [HttpPost("delete")]
130
+        public async Task<IActionResult> Delete(string id)
131
+        {
132
+            if (string.IsNullOrEmpty(id))
133
+            {
134
+                return Error("id不能为空");
135
+            }
136
+            if (await busTeamGradeRepository.Delete(q => q.F_Id == id))
137
+            {
138
+                return Success("成功");
139
+            }
140
+            return Error("失败");
141
+        }
142
+
143
+
144
+
145
+        /// <summary>
146
+        /// 编辑
147
+        /// </summary>
148
+        /// <param name="id"></param>
149
+        /// <returns></returns>
150
+        [HttpPost("update")]
151
+        public async Task<IActionResult> Update(SysUser_TeamGradeInput input)
152
+        {
153
+            if (UserLogin.RoleCode == "XS" || UserLogin.RoleCode == "SH" || UserLogin.RoleCode == "KG")
154
+            {
155
+                return Error("没有权限");
156
+            }
157
+            T_SysUser_TeamGrade model = await busTeamGradeRepository.GetSingle(q => q.F_Id == input.F_Id);
158
+            if (model.F_State == 5)
159
+            {
160
+                return Error("已锁定绩效不能修改");
161
+            }
162
+            ModelConvertHelper<T_SysUser_TeamGrade, SysUser_TeamGradeInput>.ModeToModel(model, input);
163
+            model.F_State = 4;
164
+            if (await busTeamGradeRepository.Update(model))
165
+            {
166
+                return Success("成功");
167
+            }
168
+            return Error("失败");
169
+        }
170
+
171
+
172
+
173
+        /// <summary>
174
+        /// 申诉/确认
175
+        /// </summary>
176
+        /// <param name="id"></param>
177
+        /// <returns></returns>
178
+        [HttpPost("updatestate")]
179
+        public async Task<IActionResult> UpdateState(string id, int state, string remark)
180
+        {
181
+            if (UserLogin.RoleCode == "XS" || UserLogin.RoleCode == "SH" || UserLogin.RoleCode == "KG")
182
+            {
183
+                return Error("没有权限");
184
+            }
185
+            T_SysUser_TeamGrade model = await busTeamGradeRepository.GetSingle(q => q.F_Id == id);
186
+            if (model.F_State == 5)
187
+            { return Error("绩效已锁定不能更改"); }
188
+            if (!string.IsNullOrEmpty(remark))
189
+            {
190
+                model.F_StateReamrk += $"【{remark}】";
191
+            }
192
+
193
+            model.F_State = state;
194
+            model.F_SureTime = DateTime.Now;
195
+
196
+
197
+            if (await busTeamGradeRepository.Update(model))
198
+            {
199
+                return Success("成功");
200
+            }
201
+            return Error("失败");
202
+        }
203
+
204
+
82 205
         #region 方法
83 206
         /// <summary>
84 207
         /// 更新团队绩效
@@ -238,6 +361,12 @@ namespace TVShoppingCallCenter_ZLJ.Controllers.CallCenter
238 361
                         modelGrade.F_TaskOverNumber = modelGrade.F_SignNumber + modelGrade.F_ErrorMoney + modelGrade.F_AfterMoney + modelGrade.F_LastSignMoney;
239 362
                         modelGrade.F_TaskRate = modelGrade.F_TaskNumber == 0.00M ? "—" : (modelGrade.F_TaskOverNumber / modelGrade.F_TaskNumber).ToString("#0.00");
240 363
 
364
+                        modelGrade.F_CallNumber = await busCallRecordsRepository.GetCallNumber("", modelTeam.F_Id, MonthTimeStart);
365
+                        modelGrade.F_CallTotleNumber = await busCallRecordsRepository.GetTotleCallNumber("", modelTeam.F_Id, MonthTimeStart);
366
+
367
+                        modelGrade.F_CallNumber = modelGrade.F_CallNumber == 0 ? 1 : modelGrade.F_CallNumber;
368
+                        modelGrade.F_CallSingleMoney = modelGrade.F_TaskOverNumber / modelGrade.F_CallNumber;
369
+
241 370
                         modellist.Add(modelGrade);
242 371
                         nteam++;
243 372
                     }
@@ -295,13 +424,24 @@ namespace TVShoppingCallCenter_ZLJ.Controllers.CallCenter
295 424
                         modelGrade.F_TaskNumber = modeldepttemp.F_TargetMoney;
296 425
                         modelGrade.F_TaskOverNumber = modelGrade.F_SignNumber + modelGrade.F_ErrorMoney + modelGrade.F_AfterMoney + modelGrade.F_LastSignMoney;
297 426
                         modelGrade.F_TaskRate = modelGrade.F_TaskNumber == 0.00M ? "—" : (modelGrade.F_TaskOverNumber / modelGrade.F_TaskNumber).ToString("#0.00");
427
+
428
+                        modelGrade.F_CallNumber = await busCallRecordsRepository.GetCallNumber(modeldepttemp.F_DeptCode, 0, MonthTimeStart);
429
+                        modelGrade.F_CallTotleNumber = await busCallRecordsRepository.GetTotleCallNumber(modeldepttemp.F_DeptCode, 0, MonthTimeStart);
430
+
431
+                        modelGrade.F_CallNumber = modelGrade.F_CallNumber == 0 ? 1 : modelGrade.F_CallNumber;
432
+                        modelGrade.F_CallSingleMoney = modelGrade.F_TaskOverNumber / modelGrade.F_CallNumber;
433
+
298 434
                         modellist.Add(modelGrade);
299 435
                         ndept++;
300 436
                     }
301
-                    #endregion
437
+
438
+
302 439
                     await busTeamGradeRepository.AddMany(modellist);
303 440
                 }
441
+               
304 442
             }
443
+            #endregion
444
+
305 445
             return $"同步情况  部门/团队 = {ndept}/{nteam}";
306 446
         }
307 447
 

+ 8 - 5
代码/TVShoppingCallCenter_ZLJ/Controllers/System/DeptmentController.cs

@@ -73,7 +73,7 @@ namespace TVShoppingCallCenter_ZLJ.Controllers.System
73 73
                     DepartmentDto modelout = new DepartmentDto();
74 74
 
75 75
                     ModelConvertHelper<DepartmentDto, T_Sys_Department>.ModeToModelDefault(modelout, model);
76
-                    List<T_Sys_Department> modelListChild = await _sys_departmentRepository.GetListALL(q => q.F_ParentId == model.F_DeptId);
76
+                    List<T_Sys_Department> modelListChild = await _sys_departmentRepository.GetListALL(q => q.F_ParentId == model.F_DeptId&& q.F_State== (int)EnumDelState.Enabled);
77 77
                     if (modelListChild != null && modelListChild.Count > 0)
78 78
                     {
79 79
                         modelout.children =await ConvertAsync(modelListChild);
@@ -156,7 +156,7 @@ namespace TVShoppingCallCenter_ZLJ.Controllers.System
156 156
         /// <param name="input"></param>
157 157
         /// <returns></returns>
158 158
         [HttpPost("adddept")]
159
-        public async Task<IActionResult> AddDept(string deptname,int parentid=0,int sort=1,int islock=0,decimal targetmoney=0.00M)
159
+        public async Task<IActionResult> AddDept(string deptname,int parentid=0,int sort=1,decimal targetmoney=0.00M)
160 160
         {
161 161
             if (string.IsNullOrEmpty(deptname))
162 162
                 return Error("请输入部门名称");
@@ -175,7 +175,7 @@ namespace TVShoppingCallCenter_ZLJ.Controllers.System
175 175
             entity_dept.F_Sort = sort;
176 176
             entity_dept.F_CreateOn = DateTime.Now.ToLocalTime();
177 177
             entity_dept.F_CreateBy = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
178
-            entity_dept.F_Lock = islock;
178
+            //entity_dept.F_Lock = islock;
179 179
             entity_dept.F_TargetMoney = targetmoney;
180 180
             var res = await _sys_departmentRepository.Add(entity_dept);
181 181
             if (res > 0)
@@ -234,7 +234,7 @@ namespace TVShoppingCallCenter_ZLJ.Controllers.System
234 234
         /// <param name="input"></param>
235 235
         /// <returns></returns>
236 236
         [HttpPost("editdept")]
237
-        public async Task<IActionResult> EditDept(int deptid,string deptname, int parentid = 0, int sort = 1, int islock = 0, decimal targetmoney = 0.00M)
237
+        public async Task<IActionResult> EditDept(int deptid,string deptname, int parentid = 0, int sort = 1, decimal targetmoney = 0.00M)
238 238
         {
239 239
             if (string.IsNullOrEmpty(deptname))
240 240
                 return Error("请输入部门名称");
@@ -243,6 +243,10 @@ namespace TVShoppingCallCenter_ZLJ.Controllers.System
243 243
             var entity_dept = await _sys_departmentRepository.GetSingle(x => x.F_DeptId == deptid && x.F_State == (int)EnumDelState.Enabled);
244 244
             if (entity_dept != null)
245 245
             {
246
+                if (entity_dept.F_Lock == 1)
247
+                {
248
+                    return Error("锁定部门不能编辑");
249
+                }
246 250
                 var parentcode = "|0|";
247 251
                 if (parentid > 0)
248 252
                 {
@@ -261,7 +265,6 @@ namespace TVShoppingCallCenter_ZLJ.Controllers.System
261 265
                 entity_dept.F_LastModifyBy = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
262 266
 
263 267
 
264
-                entity_dept.F_Lock = islock;
265 268
                 entity_dept.F_TargetMoney = targetmoney;
266 269
                 if (await _sys_departmentRepository.Update(entity_dept))
267 270
                 {

+ 4 - 0
代码/TVShoppingCallCenter_ZLJ/Controllers/System/UserAccountController.cs

@@ -133,6 +133,10 @@ namespace TVShoppingCallCenter_ZLJ.Controllers
133 133
             {
134 134
                 return Error("账号已经存在");
135 135
             }
136
+            if (await _sys_useraccountRepository.GetCount(p =>( p.F_Mobile == input.mobile||p.F_Telephone== input.mobile) && p.F_DeleteFlag == (int)EnumUserCountState.Enabled) > 0)
137
+            {
138
+                return Error("手机号已经存在");
139
+            }
136 140
             #endregion
137 141
             var model = new T_Sys_UserAccount();
138 142
             model.F_UserCode = input.usercode;

Разница между файлами не показана из-за своего большого размера
+ 18 - 643
代码/TVShoppingCallCenter_ZLJ/Controllers/hangfire/HangfireController.cs


+ 345 - 0
代码/TVShoppingCallCenter_ZLJ/Models/Inputs/SysUser/SysUser_TeamGradeInput.cs

@@ -0,0 +1,345 @@
1
+using System;
2
+using System.Collections.Generic;
3
+using System.Linq;
4
+using System.Threading.Tasks;
5
+
6
+namespace TVShoppingCallCenter_ZLJ.Models.Inputs
7
+{
8
+	/// <summary>
9
+	/// 绩效表输入
10
+	/// </summary>
11
+	[Serializable]
12
+	public partial class SysUser_TeamGradeInput : BaseInput
13
+	{
14
+		public SysUser_TeamGradeInput()
15
+		{ }
16
+		#region Model
17
+		private string _f_id;
18
+		private string _f_username;
19
+		private int? _f_userid;
20
+		private string _f_usercode;
21
+		private DateTime _f_addtime;
22
+		private string _f_dept;
23
+		private int _f_deptid;
24
+		private string _f_post;
25
+		private int _f_postid;
26
+		private string _f_type;
27
+		private string _f_month;
28
+		private int _f_sendtotlenumber = 0;
29
+		private decimal _f_totlemoney = 0.00M;
30
+		private int _f_signnumber = 0;
31
+		private decimal _f_signmoney = 0.00M;
32
+		private int _f_nosignnumber = 0;
33
+		private decimal _f_nosignmoney;
34
+		private int _f_refusenumber = 0;
35
+		private decimal _f_refusemoney = 0.00M;
36
+		private string _f_signrate;
37
+		private decimal _f_errormoney = 0.00M;
38
+		private int _f_errornumber;
39
+		private int? _f_afternumber;
40
+		private decimal _f_aftermoney = 0.00M;
41
+		private decimal _f_alongmoney = 0.00M;
42
+		private int _f_tasknumber;
43
+		private int _f_taskovernumber;
44
+		private string _f_taskrate;
45
+		private decimal? _f_agentsignmoney;
46
+		private int? _f_teamid = 0;
47
+		private string _f_team;
48
+		private int _f_state;
49
+		private string _f_statereamrk;
50
+		private int? _f_backnumber;
51
+		private decimal? _f_backmoney = 0M;
52
+		private int? _f_adduser;
53
+		/// <summary>
54
+		/// 绩效表ID
55
+		/// </summary>
56
+		public string F_Id
57
+		{
58
+			set { _f_id = value; }
59
+			get { return _f_id; }
60
+		}
61
+		/// <summary>
62
+		/// 员工姓名
63
+		/// </summary>
64
+		public string F_UserName
65
+		{
66
+			set { _f_username = value; }
67
+			get { return _f_username; }
68
+		}
69
+		/// <summary>
70
+		/// 员工ID
71
+		/// </summary>
72
+		public int? F_UserId
73
+		{
74
+			set { _f_userid = value; }
75
+			get { return _f_userid; }
76
+		}
77
+		/// <summary>
78
+		/// 员工工号
79
+		/// </summary>
80
+		public string F_UserCode
81
+		{
82
+			set { _f_usercode = value; }
83
+			get { return _f_usercode; }
84
+		}
85
+		/// <summary>
86
+		/// 添加时间
87
+		/// </summary>
88
+		public DateTime F_AddTime
89
+		{
90
+			set { _f_addtime = value; }
91
+			get { return _f_addtime; }
92
+		}
93
+		/// <summary>
94
+		/// 部门
95
+		/// </summary>
96
+		public string F_Dept
97
+		{
98
+			set { _f_dept = value; }
99
+			get { return _f_dept; }
100
+		}
101
+		/// <summary>
102
+		/// 部门ID
103
+		/// </summary>
104
+		public int F_DeptId
105
+		{
106
+			set { _f_deptid = value; }
107
+			get { return _f_deptid; }
108
+		}
109
+		/// <summary>
110
+		/// 职位
111
+		/// </summary>
112
+		public string F_Post
113
+		{
114
+			set { _f_post = value; }
115
+			get { return _f_post; }
116
+		}
117
+		/// <summary>
118
+		/// 职务ID
119
+		/// </summary>
120
+		public int F_PostId
121
+		{
122
+			set { _f_postid = value; }
123
+			get { return _f_postid; }
124
+		}
125
+		/// <summary>
126
+		/// 统计类型:当月业绩
127
+		/// </summary>
128
+		public string F_Type
129
+		{
130
+			set { _f_type = value; }
131
+			get { return _f_type; }
132
+		}
133
+		/// <summary>
134
+		/// 统计月份 例如:202007
135
+		/// </summary>
136
+		public string F_Month
137
+		{
138
+			set { _f_month = value; }
139
+			get { return _f_month; }
140
+		}
141
+		/// <summary>
142
+		/// 发货单总数
143
+		/// </summary>
144
+		public int F_SendTotleNumber
145
+		{
146
+			set { _f_sendtotlenumber = value; }
147
+			get { return _f_sendtotlenumber; }
148
+		}
149
+		/// <summary>
150
+		/// 总金额
151
+		/// </summary>
152
+		public decimal F_TotleMoney
153
+		{
154
+			set { _f_totlemoney = value; }
155
+			get { return _f_totlemoney; }
156
+		}
157
+		/// <summary>
158
+		/// 签收单数
159
+		/// </summary>
160
+		public int F_SignNumber
161
+		{
162
+			set { _f_signnumber = value; }
163
+			get { return _f_signnumber; }
164
+		}
165
+		/// <summary>
166
+		/// 签收金额
167
+		/// </summary>
168
+		public decimal F_SignMoney
169
+		{
170
+			set { _f_signmoney = value; }
171
+			get { return _f_signmoney; }
172
+		}
173
+		/// <summary>
174
+		/// 未签收单数
175
+		/// </summary>
176
+		public int F_NoSignNumber
177
+		{
178
+			set { _f_nosignnumber = value; }
179
+			get { return _f_nosignnumber; }
180
+		}
181
+		/// <summary>
182
+		/// 未签收金额
183
+		/// </summary>
184
+		public decimal F_NoSignMoney
185
+		{
186
+			set { _f_nosignmoney = value; }
187
+			get { return _f_nosignmoney; }
188
+		}
189
+		/// <summary>
190
+		/// 拒收单数
191
+		/// </summary>
192
+		public int F_RefuseNumber
193
+		{
194
+			set { _f_refusenumber = value; }
195
+			get { return _f_refusenumber; }
196
+		}
197
+		/// <summary>
198
+		/// 拒收金额
199
+		/// </summary>
200
+		public decimal F_RefuseMoney
201
+		{
202
+			set { _f_refusemoney = value; }
203
+			get { return _f_refusemoney; }
204
+		}
205
+		/// <summary>
206
+		/// 签收率
207
+		/// </summary>
208
+		public string F_SignRate
209
+		{
210
+			set { _f_signrate = value; }
211
+			get { return _f_signrate; }
212
+		}
213
+		/// <summary>
214
+		/// 录错信息金额
215
+		/// </summary>
216
+		public decimal F_ErrorMoney
217
+		{
218
+			set { _f_errormoney = value; }
219
+			get { return _f_errormoney; }
220
+		}
221
+		/// <summary>
222
+		/// 录错信息单数
223
+		/// </summary>
224
+		public int F_ErrorNumber
225
+		{
226
+			set { _f_errornumber = value; }
227
+			get { return _f_errornumber; }
228
+		}
229
+		/// <summary>
230
+		/// 售后单数
231
+		/// </summary>
232
+		public int? F_AfterNumber
233
+		{
234
+			set { _f_afternumber = value; }
235
+			get { return _f_afternumber; }
236
+		}
237
+		/// <summary>
238
+		/// 售后金额
239
+		/// </summary>
240
+		public decimal F_AfterMoney
241
+		{
242
+			set { _f_aftermoney = value; }
243
+			get { return _f_aftermoney; }
244
+		}
245
+		/// <summary>
246
+		/// 特殊金额(归属个人的金额,单独计算)
247
+		/// </summary>
248
+		public decimal F_AlongMoney
249
+		{
250
+			set { _f_alongmoney = value; }
251
+			get { return _f_alongmoney; }
252
+		}
253
+		/// <summary>
254
+		/// 任务数
255
+		/// </summary>
256
+		public int F_TaskNumber
257
+		{
258
+			set { _f_tasknumber = value; }
259
+			get { return _f_tasknumber; }
260
+		}
261
+		/// <summary>
262
+		/// 任务完成数
263
+		/// </summary>
264
+		public int F_TaskOverNumber
265
+		{
266
+			set { _f_taskovernumber = value; }
267
+			get { return _f_taskovernumber; }
268
+		}
269
+		/// <summary>
270
+		/// 任务完成比例
271
+		/// </summary>
272
+		public string F_TaskRate
273
+		{
274
+			set { _f_taskrate = value; }
275
+			get { return _f_taskrate; }
276
+		}
277
+		/// <summary>
278
+		/// 改代收金额
279
+		/// </summary>
280
+		public decimal? F_AgentSignMoney
281
+		{
282
+			set { _f_agentsignmoney = value; }
283
+			get { return _f_agentsignmoney; }
284
+		}
285
+		/// <summary>
286
+		/// 团队id 0个人
287
+		/// </summary>
288
+		public int? F_TeamId
289
+		{
290
+			set { _f_teamid = value; }
291
+			get { return _f_teamid; }
292
+		}
293
+		/// <summary>
294
+		/// 团队名称
295
+		/// </summary>
296
+		public string F_Team
297
+		{
298
+			set { _f_team = value; }
299
+			get { return _f_team; }
300
+		}
301
+		/// <summary>
302
+		/// 0待确认 1有异议  4已确认 5最终已确认
303
+		/// </summary>
304
+		public int F_State
305
+		{
306
+			set { _f_state = value; }
307
+			get { return _f_state; }
308
+		}
309
+		/// <summary>
310
+		/// 有异议或者审核的备注
311
+		/// </summary>
312
+		public string F_StateReamrk
313
+		{
314
+			set { _f_statereamrk = value; }
315
+			get { return _f_statereamrk; }
316
+		}
317
+		/// <summary>
318
+		/// 售后退款单数  售后状态 236
319
+		/// </summary>
320
+		public int? F_BackNumber
321
+		{
322
+			set { _f_backnumber = value; }
323
+			get { return _f_backnumber; }
324
+		}
325
+		/// <summary>
326
+		/// 售后退款金额 售后状态 236
327
+		/// </summary>
328
+		public decimal? F_BackMoney
329
+		{
330
+			set { _f_backmoney = value; }
331
+			get { return _f_backmoney; }
332
+		}
333
+		/// <summary>
334
+		/// 添加人,默认0 系统
335
+		/// </summary>
336
+		public int? F_AddUser
337
+		{
338
+			set { _f_adduser = value; }
339
+			get { return _f_adduser; }
340
+		}
341
+		#endregion Model
342
+
343
+	}
344
+}
345
+

+ 2 - 2
代码/TVShoppingCallCenter_ZLJ/Startup.cs

@@ -249,8 +249,8 @@ namespace TVShoppingCallCenter_ZLJ
249 249
                     Authorization = new[] { new HangfireAuthorizationFilter() }
250 250
                 });//启动hangfire面板 有可选参数
251 251
 
252
-            RecurringJob.AddOrUpdate<HangfireController>(a => a.AddOrder(), Cron.Daily, TimeZoneInfo.Local, "daily");
253
-            RecurringJob.AddOrUpdate<HangfireController>(a => a.SyncCallRecord(), Cron.Minutely, TimeZoneInfo.Local, "minutely");
252
+            RecurringJob.AddOrUpdate<HangfireController>(a => a.DailyRecurring(), Cron.Daily, TimeZoneInfo.Local, "daily");
253
+            RecurringJob.AddOrUpdate<HangfireController>(a => a.MinutelyRecurring(), Cron.Minutely, TimeZoneInfo.Local, "minutely");
254 254
             //秒 分 时 日   *每
255 255
             RecurringJob.AddOrUpdate<HangfireController>(a => a.Month12Recurring(), "0 0 0 12 * ?", TimeZoneInfo.Local, "month12");
256 256
             #region steeltoe