From 7a91da18e7c236b46094e33eb1c2e1514abbf8e3 Mon Sep 17 00:00:00 2001 From: feng <279202647@qq.com> Date: Sun, 22 May 2022 11:33:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E4=BB=BB=E5=8A=A1=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/HuiYan/teamitemsController.cs | 12 ++ src/Coldairarrow.Api/Program.cs | 2 + src/Coldairarrow.Api/appsettings.json | 20 +-- .../HuiYan/teamitemsBusiness.cs | 157 +++++++++++++++++- src/Coldairarrow.Business/MDS/userBusiness.cs | 5 + .../MDS/userdepartmentBusiness.cs | 5 + src/Coldairarrow.Entity/DTO/TaskInfoDto.cs | 18 +- .../HuiYan/IteamitemsBusiness.cs | 1 + .../MDS/IuserBusiness.cs | 3 + .../MDS/IuserdepartmentBusiness.cs | 3 + 10 files changed, 213 insertions(+), 13 deletions(-) diff --git a/src/Coldairarrow.Api/Controllers/HuiYan/teamitemsController.cs b/src/Coldairarrow.Api/Controllers/HuiYan/teamitemsController.cs index ad599a1..182e83d 100644 --- a/src/Coldairarrow.Api/Controllers/HuiYan/teamitemsController.cs +++ b/src/Coldairarrow.Api/Controllers/HuiYan/teamitemsController.cs @@ -116,6 +116,18 @@ namespace Coldairarrow.Api.Controllers.HuiYan return _teamitemsBus.GetTeamCount(); } + /// + /// 获取所有统计信息 + /// + /// + /// + /// + [HttpGet] + public AjaxResult GetTjInfo(DateTime start, DateTime end) + { + return _teamitemsBus.GetTjInfo(start,end); + } + /// /// 获取比价统计信息 diff --git a/src/Coldairarrow.Api/Program.cs b/src/Coldairarrow.Api/Program.cs index 06d11d0..088f63d 100644 --- a/src/Coldairarrow.Api/Program.cs +++ b/src/Coldairarrow.Api/Program.cs @@ -32,8 +32,10 @@ namespace Coldairarrow.Api config.UseDatabase(dbmdsOptions.ConnectionString, dbmdsOptions.DatabaseType); }); }) + .ConfigureWebHostDefaults(webBuilder => { + //.UseUrls("http://*:8080") webBuilder.UseStartup(); }) .Build() diff --git a/src/Coldairarrow.Api/appsettings.json b/src/Coldairarrow.Api/appsettings.json index 68a7afa..9e3e4f6 100644 --- a/src/Coldairarrow.Api/appsettings.json +++ b/src/Coldairarrow.Api/appsettings.json @@ -1,8 +1,8 @@ { - "urls": "http://*:5000", + "urls": "http://*:5001", "AllowedHosts": "*", - "log": { //־ - "minlevel": "Trace", //Microsoft.Extensions.Logging.LogLevel + "log": { //��־���� + "minlevel": "Trace", //�������Microsoft.Extensions.Logging.LogLevel "console": { "enabled": true }, @@ -17,7 +17,7 @@ "nodes": [ "http://elastic:123456@localhost:9200/" ], "indexformat": "colder.{0:yyyyMMdd}" }, - "overrides": [ //д־ + "overrides": [ //��д��־������� { "source": "Microsoft.AspNetCore", "minlevel": "Warning" @@ -33,12 +33,12 @@ ] }, "Cache": { - "CacheType": "Memory", //Coldairarrow.Util.CacheType - "RedisEndpoint": "127.0.0.1:6379" //Redisڵַ, https://github.com/2881099/csredis + "CacheType": "Memory", //�������Coldairarrow.Util.CacheType + "RedisEndpoint": "127.0.0.1:6379" //Redis�ڵ��ַ,������� https://github.com/2881099/csredis }, "Database": { "BaseDb": { - //"DatabaseType": "SqlServer", //EFCore.Sharding.DatabaseType + //"DatabaseType": "SqlServer", //�������EFCore.Sharding.DatabaseType //"ConnectionString": "Data Source=.;Initial Catalog=Colder.Admin.AntdVue;Integrated Security=True;Pooling=true;" //"DatabaseType": "PostgreSql", //"ConnectionString": "Server=127.0.0.1;Port=5432;Database=Colder.Admin.AntdVue;User Id=postgres;Password=postgres;" @@ -54,9 +54,9 @@ "ConnectionString": "server=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;user id=qyroot;password=kaicn1132+-;persistsecurityinfo=True;database=mds;SslMode=none;AllowLoadLocalInfile=true;ConvertZeroDateTime=True" } }, - //ѩId,,ԽΪλ,ͬIdͻIdͬʱظ - "WorkerId": 1, //Id - "WebRootUrl": "http://localhost:5000", //ӿڸַ, + //ѩ��Id,,�Խ���Ϊ��λ,��ͬ������������Id�ͻ���Id����ͬʱ�ظ� + "WorkerId": 1, //����Id + "WebRootUrl": "http://localhost:5000", //�ӿڸ���ַ, "jwt": { "secret": "D96BFA5B-F2AF-45BC-9342-5A55C3F9BBB0", "accessExpireHours": 24, diff --git a/src/Coldairarrow.Business/HuiYan/teamitemsBusiness.cs b/src/Coldairarrow.Business/HuiYan/teamitemsBusiness.cs index 6b40a98..5c2e04c 100644 --- a/src/Coldairarrow.Business/HuiYan/teamitemsBusiness.cs +++ b/src/Coldairarrow.Business/HuiYan/teamitemsBusiness.cs @@ -1,6 +1,8 @@ -using Coldairarrow.Entity.DTO; +using Coldairarrow.Business.MDS; +using Coldairarrow.Entity.DTO; using Coldairarrow.Entity.Enum; using Coldairarrow.Entity.HuiYan; +using Coldairarrow.Entity.MDS; using Coldairarrow.IBusiness; using Coldairarrow.Util; using EFCore.Sharding; @@ -19,10 +21,14 @@ namespace Coldairarrow.Business.HuiYan public class teamitemsBusiness : BaseBusiness, IteamitemsBusiness, ITransientDependency { readonly IOperator _operator; - public teamitemsBusiness(IDbAccessor db, IOperator @operator) + IuserdepartmentBusiness _iuserdepartmentBusiness; + IuserBusiness _iuserBusiness; + public teamitemsBusiness(IDbAccessor db, IOperator @operator, IuserdepartmentBusiness iuserdepartmentBusiness, IuserBusiness iuserBusiness) : base(db) { _operator = @operator; + _iuserdepartmentBusiness = iuserdepartmentBusiness; + _iuserBusiness = iuserBusiness; } #region 外部接口 @@ -349,6 +355,153 @@ namespace Coldairarrow.Business.HuiYan } + public AjaxResult GetTjInfo(DateTime start, DateTime end) + { + Expression> select = (a, b) => new TaskInfoDto + { + IsPass = b.IsQualified, + TeamId = b.TeamId, + TeamUserId = b.UserId, + TeamDate = b.CreateTime, + TeamOverDate = b.UpdateDate, + PriceTaskUserId = b.PriceTaskUserId, + TeamItemState = (TeamItemState?)b.State + }; + + select = select.BuildExtendSelectExpre(); + + var q_titem = Db.GetIQueryable(); + var q = from a in q_titem.AsExpandable() + join b in Db.GetIQueryable() on a.Id equals b.TeamItemId into ab + from b in ab.DefaultIfEmpty() + select @select.Invoke(b, a); + + var where = LinqHelper.True(); + where = where.And(c => c.CreateTime >= start && c.CreateTime <= end); + var list = q.Where(where).ToList(); + + + Expression> select2 = (a, b) => new TaskInfoDto + { + + TeamName =b==null?"未知" :b.DepartmentName + }; + + select2 = select2.BuildExtendSelectExpre(); + + var q2 = from a in list + join b in _iuserdepartmentBusiness.GetDepQueryable() on a.TeamId equals b.Id into ab + from b in ab.DefaultIfEmpty() + select @select2.Invoke(a, b); + + list = q2.ToList(); + + + Expression> select3 = (a, b) => new TaskInfoDto + { + + UserName = b == null ? "未知" : b.UserNick + }; + + select3 = select3.BuildExtendSelectExpre(); + + var q3 = from a in list + join b in _iuserBusiness.GetUserQueryable() on a.UserId equals b.Id into ab + from b in ab.DefaultIfEmpty() + select @select3.Invoke(a, b); + + list = q3.ToList(); + + + + var jtInfo = new PriceTaskInfo() + { + AuditCount = list.Count(c => c.State == PriceTaskState.已比价), + OverCount = list.Count(c => c.State == PriceTaskState.比价完成), + PassCount = list.Count(c => c.IsPass == true), + PublishCount = list.Count, + FailedCount = list.Count(c => c.IsPass == false), + NeedWorkCount = list.Count(c => c.State != PriceTaskState.比价完成) + }; + + + if (list.Count > 0) + { + jtInfo.PassRate = Math.Round(((decimal)jtInfo.PassCount / list.Count) * 100, 2); + } + + var fbList= new List(); + + var groups= list.GroupBy(c => c.TeamName).ToList(); + + foreach (var group in groups) + { + var sonList = group.ToList(); + var price = new PriceTaskInfo() + { + Title = group.Key, + AuditCount = sonList.Count(c => c.State == PriceTaskState.已比价), + OverCount = sonList.Count(c => c.State == PriceTaskState.比价完成), + PassCount = sonList.Count(c => c.IsPass == true), + PublishCount = sonList.Count, + FailedCount = sonList.Count(c => c.IsPass == false), + NeedWorkCount = sonList.Count(c => c.State != PriceTaskState.比价完成) + }; + + + + if (sonList.Count > 0) + { + price.PassRate = Math.Round(((decimal)price.PassCount / sonList.Count) * 100, 2); + } + + fbList.Add(price); + } + + var bjList = new List(); + + var bjGroup = list.GroupBy(c => c.UserName).ToList(); + + foreach (var group in bjGroup) + { + var sonList = group.ToList(); + var price = new PriceTaskInfo() + { + Title = group.Key, + AuditCount = sonList.Count(c => c.State == PriceTaskState.已比价), + OverCount = sonList.Count(c => c.State == PriceTaskState.比价完成), + PassCount = sonList.Count(c => c.IsPass == true), + PublishCount = sonList.Count, + FailedCount = sonList.Count(c => c.IsPass == false), + NeedWorkCount = sonList.Count(c => c.State != PriceTaskState.比价完成) + }; + + if (sonList.Count > 0) + { + price.PassRate = Math.Round(((decimal)price.PassCount / sonList.Count) * 100, 2); + } + bjList.Add(price); + + + } + + + var result = new + { + //待完成 + WaitOver = list.Count(c => c.TeamItemState == TeamItemState.已发布比价 &&!string.IsNullOrEmpty( c.PriceTaskUserId)&& c.State != PriceTaskState.比价完成), + //待接入 + WaitCheck= list.Count(c => c.TeamItemState == TeamItemState.已发布比价 && string.IsNullOrEmpty(c.PriceTaskUserId) ), + JT=new List() { jtInfo }, + FB=fbList, + BJ=bjList + }; + + + return Success(result) ; + + } + public AjaxResult SetState(string id, int state) { //删除 diff --git a/src/Coldairarrow.Business/MDS/userBusiness.cs b/src/Coldairarrow.Business/MDS/userBusiness.cs index 78f42b4..89f1baf 100644 --- a/src/Coldairarrow.Business/MDS/userBusiness.cs +++ b/src/Coldairarrow.Business/MDS/userBusiness.cs @@ -86,6 +86,11 @@ namespace Coldairarrow.Business.MDS } + public IQueryable GetUserQueryable() + { + return GetIQueryable(); + } + #region 私有成员 #endregion diff --git a/src/Coldairarrow.Business/MDS/userdepartmentBusiness.cs b/src/Coldairarrow.Business/MDS/userdepartmentBusiness.cs index 20ea3ce..dc7ed43 100644 --- a/src/Coldairarrow.Business/MDS/userdepartmentBusiness.cs +++ b/src/Coldairarrow.Business/MDS/userdepartmentBusiness.cs @@ -59,6 +59,11 @@ namespace Coldairarrow.Business.MDS #endregion + public IQueryable GetDepQueryable() + { + return GetIQueryable(); + } + #region 私有成员 #endregion diff --git a/src/Coldairarrow.Entity/DTO/TaskInfoDto.cs b/src/Coldairarrow.Entity/DTO/TaskInfoDto.cs index aa4cf17..1a344e5 100644 --- a/src/Coldairarrow.Entity/DTO/TaskInfoDto.cs +++ b/src/Coldairarrow.Entity/DTO/TaskInfoDto.cs @@ -1,4 +1,5 @@ -using System; +using Coldairarrow.Entity.Enum; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -20,11 +21,21 @@ namespace Coldairarrow.Entity.DTO public DateTime? TeamDate { get; set; } public DateTime? TeamOverDate { get; set; } + + public string PriceTaskUserId { get; set; } + + public TeamItemState? TeamItemState { get; set; } + + public string TeamName { get; set; } + + public string UserName { get; set; } } public class PriceTaskInfo { + public string Title { get; set; } + /// /// 待审核任务数量 /// @@ -54,5 +65,10 @@ namespace Coldairarrow.Entity.DTO /// 不合格数量 /// public int FailedCount { get; set; } + + /// + /// 未完成数量 + /// + public int NeedWorkCount { get; set; } } } diff --git a/src/Coldairarrow.IBusiness/HuiYan/IteamitemsBusiness.cs b/src/Coldairarrow.IBusiness/HuiYan/IteamitemsBusiness.cs index 2160d13..294e5d8 100644 --- a/src/Coldairarrow.IBusiness/HuiYan/IteamitemsBusiness.cs +++ b/src/Coldairarrow.IBusiness/HuiYan/IteamitemsBusiness.cs @@ -25,6 +25,7 @@ namespace Coldairarrow.Business.HuiYan AjaxResult GetTeamCount(); Task GetMyTaskInfo(int type, DateTime start, DateTime end); + AjaxResult GetTjInfo(DateTime start, DateTime end); bool UpdateTaskSuccess(List logs); } diff --git a/src/Coldairarrow.IBusiness/MDS/IuserBusiness.cs b/src/Coldairarrow.IBusiness/MDS/IuserBusiness.cs index a661cf3..b26d7c3 100644 --- a/src/Coldairarrow.IBusiness/MDS/IuserBusiness.cs +++ b/src/Coldairarrow.IBusiness/MDS/IuserBusiness.cs @@ -16,5 +16,8 @@ namespace Coldairarrow.Business.MDS Task DeleteDataAsync(List ids); IQueryable GetPriceTaskUserList(); + + + IQueryable GetUserQueryable(); } } \ No newline at end of file diff --git a/src/Coldairarrow.IBusiness/MDS/IuserdepartmentBusiness.cs b/src/Coldairarrow.IBusiness/MDS/IuserdepartmentBusiness.cs index 3453e5b..481c3b4 100644 --- a/src/Coldairarrow.IBusiness/MDS/IuserdepartmentBusiness.cs +++ b/src/Coldairarrow.IBusiness/MDS/IuserdepartmentBusiness.cs @@ -1,6 +1,7 @@ using Coldairarrow.Entity.MDS; using Coldairarrow.Util; using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; namespace Coldairarrow.Business.MDS @@ -12,5 +13,7 @@ namespace Coldairarrow.Business.MDS Task AddDataAsync(userdepartment data); Task UpdateDataAsync(userdepartment data); Task DeleteDataAsync(List ids); + + IQueryable GetDepQueryable(); } } \ No newline at end of file