Browse Source

加入任务统计

master
feng 3 years ago
parent
commit
7a91da18e7
  1. 12
      src/Coldairarrow.Api/Controllers/HuiYan/teamitemsController.cs
  2. 2
      src/Coldairarrow.Api/Program.cs
  3. 20
      src/Coldairarrow.Api/appsettings.json
  4. 157
      src/Coldairarrow.Business/HuiYan/teamitemsBusiness.cs
  5. 5
      src/Coldairarrow.Business/MDS/userBusiness.cs
  6. 5
      src/Coldairarrow.Business/MDS/userdepartmentBusiness.cs
  7. 18
      src/Coldairarrow.Entity/DTO/TaskInfoDto.cs
  8. 1
      src/Coldairarrow.IBusiness/HuiYan/IteamitemsBusiness.cs
  9. 3
      src/Coldairarrow.IBusiness/MDS/IuserBusiness.cs
  10. 3
      src/Coldairarrow.IBusiness/MDS/IuserdepartmentBusiness.cs

12
src/Coldairarrow.Api/Controllers/HuiYan/teamitemsController.cs

@ -116,6 +116,18 @@ namespace Coldairarrow.Api.Controllers.HuiYan
return _teamitemsBus.GetTeamCount(); return _teamitemsBus.GetTeamCount();
} }
/// <summary>
/// 获取所有统计信息
/// </summary>
/// <param name="start"></param>
/// <param name="end"></param>
/// <returns></returns>
[HttpGet]
public AjaxResult GetTjInfo(DateTime start, DateTime end)
{
return _teamitemsBus.GetTjInfo(start,end);
}
/// <summary> /// <summary>
/// 获取比价统计信息 /// 获取比价统计信息

2
src/Coldairarrow.Api/Program.cs

@ -32,8 +32,10 @@ namespace Coldairarrow.Api
config.UseDatabase<IMDSDbAccessor>(dbmdsOptions.ConnectionString, dbmdsOptions.DatabaseType); config.UseDatabase<IMDSDbAccessor>(dbmdsOptions.ConnectionString, dbmdsOptions.DatabaseType);
}); });
}) })
.ConfigureWebHostDefaults(webBuilder => .ConfigureWebHostDefaults(webBuilder =>
{ {
//.UseUrls("http://*:8080")
webBuilder.UseStartup<Startup>(); webBuilder.UseStartup<Startup>();
}) })
.Build() .Build()

20
src/Coldairarrow.Api/appsettings.json

@ -1,8 +1,8 @@
{ {
"urls": "http://*:5000", "urls": "http://*:5001",
"AllowedHosts": "*", "AllowedHosts": "*",
"log": { // "log": { //־
"minlevel": "Trace", //Microsoft.Extensions.Logging.LogLevel "minlevel": "Trace", //Microsoft.Extensions.Logging.LogLevel
"console": { "console": {
"enabled": true "enabled": true
}, },
@ -17,7 +17,7 @@
"nodes": [ "http://elastic:123456@localhost:9200/" ], "nodes": [ "http://elastic:123456@localhost:9200/" ],
"indexformat": "colder.{0:yyyyMMdd}" "indexformat": "colder.{0:yyyyMMdd}"
}, },
"overrides": [ // "overrides": [ //д־
{ {
"source": "Microsoft.AspNetCore", "source": "Microsoft.AspNetCore",
"minlevel": "Warning" "minlevel": "Warning"
@ -33,12 +33,12 @@
] ]
}, },
"Cache": { "Cache": {
"CacheType": "Memory", //Coldairarrow.Util.CacheType "CacheType": "Memory", //Coldairarrow.Util.CacheType
"RedisEndpoint": "127.0.0.1:6379" //Redis, https://github.com/2881099/csredis "RedisEndpoint": "127.0.0.1:6379" //Redisڵַ, https://github.com/2881099/csredis
}, },
"Database": { "Database": {
"BaseDb": { "BaseDb": {
//"DatabaseType": "SqlServer", //EFCore.Sharding.DatabaseType //"DatabaseType": "SqlServer", //EFCore.Sharding.DatabaseType
//"ConnectionString": "Data Source=.;Initial Catalog=Colder.Admin.AntdVue;Integrated Security=True;Pooling=true;" //"ConnectionString": "Data Source=.;Initial Catalog=Colder.Admin.AntdVue;Integrated Security=True;Pooling=true;"
//"DatabaseType": "PostgreSql", //"DatabaseType": "PostgreSql",
//"ConnectionString": "Server=127.0.0.1;Port=5432;Database=Colder.Admin.AntdVue;User Id=postgres;Password=postgres;" //"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" "ConnectionString": "server=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;user id=qyroot;password=kaicn1132+-;persistsecurityinfo=True;database=mds;SslMode=none;AllowLoadLocalInfile=true;ConvertZeroDateTime=True"
} }
}, },
//Id,,,IdId //ѩId,,ԽΪλ,ͬIdͻIdͬʱظ
"WorkerId": 1, //Id "WorkerId": 1, //Id
"WebRootUrl": "http://localhost:5000", //, "WebRootUrl": "http://localhost:5000", //ӿڸַ,
"jwt": { "jwt": {
"secret": "D96BFA5B-F2AF-45BC-9342-5A55C3F9BBB0", "secret": "D96BFA5B-F2AF-45BC-9342-5A55C3F9BBB0",
"accessExpireHours": 24, "accessExpireHours": 24,

157
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.Enum;
using Coldairarrow.Entity.HuiYan; using Coldairarrow.Entity.HuiYan;
using Coldairarrow.Entity.MDS;
using Coldairarrow.IBusiness; using Coldairarrow.IBusiness;
using Coldairarrow.Util; using Coldairarrow.Util;
using EFCore.Sharding; using EFCore.Sharding;
@ -19,10 +21,14 @@ namespace Coldairarrow.Business.HuiYan
public class teamitemsBusiness : BaseBusiness<teamitems>, IteamitemsBusiness, ITransientDependency public class teamitemsBusiness : BaseBusiness<teamitems>, IteamitemsBusiness, ITransientDependency
{ {
readonly IOperator _operator; 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) : base(db)
{ {
_operator = @operator; _operator = @operator;
_iuserdepartmentBusiness = iuserdepartmentBusiness;
_iuserBusiness = iuserBusiness;
} }
#region 外部接口 #region 外部接口
@ -349,6 +355,153 @@ namespace Coldairarrow.Business.HuiYan
} }
public AjaxResult GetTjInfo(DateTime start, DateTime end)
{
Expression<Func<pricetasklog, teamitems, TaskInfoDto>> 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<teamitems>();
var q = from a in q_titem.AsExpandable()
join b in Db.GetIQueryable<pricetasklog>() on a.Id equals b.TeamItemId into ab
from b in ab.DefaultIfEmpty()
select @select.Invoke(b, a);
var where = LinqHelper.True<TaskInfoDto>();
where = where.And(c => c.CreateTime >= start && c.CreateTime <= end);
var list = q.Where(where).ToList();
Expression<Func<TaskInfoDto, userdepartment, TaskInfoDto>> 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<Func<TaskInfoDto, user, TaskInfoDto>> 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<PriceTaskInfo>();
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<PriceTaskInfo>();
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<PriceTaskInfo>() { jtInfo },
FB=fbList,
BJ=bjList
};
return Success(result) ;
}
public AjaxResult SetState(string id, int state) public AjaxResult SetState(string id, int state)
{ {
//删除 //删除

5
src/Coldairarrow.Business/MDS/userBusiness.cs

@ -86,6 +86,11 @@ namespace Coldairarrow.Business.MDS
} }
public IQueryable<user> GetUserQueryable()
{
return GetIQueryable();
}
#region 私有成员 #region 私有成员
#endregion #endregion

5
src/Coldairarrow.Business/MDS/userdepartmentBusiness.cs

@ -59,6 +59,11 @@ namespace Coldairarrow.Business.MDS
#endregion #endregion
public IQueryable<userdepartment> GetDepQueryable()
{
return GetIQueryable();
}
#region 私有成员 #region 私有成员
#endregion #endregion

18
src/Coldairarrow.Entity/DTO/TaskInfoDto.cs

@ -1,4 +1,5 @@
using System; using Coldairarrow.Entity.Enum;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
@ -20,11 +21,21 @@ namespace Coldairarrow.Entity.DTO
public DateTime? TeamDate { get; set; } public DateTime? TeamDate { get; set; }
public DateTime? TeamOverDate { 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 class PriceTaskInfo
{ {
public string Title { get; set; }
/// <summary> /// <summary>
/// 待审核任务数量 /// 待审核任务数量
/// </summary> /// </summary>
@ -54,5 +65,10 @@ namespace Coldairarrow.Entity.DTO
/// 不合格数量 /// 不合格数量
/// </summary> /// </summary>
public int FailedCount { get; set; } public int FailedCount { get; set; }
/// <summary>
/// 未完成数量
/// </summary>
public int NeedWorkCount { get; set; }
} }
} }

1
src/Coldairarrow.IBusiness/HuiYan/IteamitemsBusiness.cs

@ -25,6 +25,7 @@ namespace Coldairarrow.Business.HuiYan
AjaxResult GetTeamCount(); AjaxResult GetTeamCount();
Task<PriceTaskInfo> GetMyTaskInfo(int type, DateTime start, DateTime end); Task<PriceTaskInfo> GetMyTaskInfo(int type, DateTime start, DateTime end);
AjaxResult GetTjInfo(DateTime start, DateTime end);
bool UpdateTaskSuccess(List<pricetasklog> logs); bool UpdateTaskSuccess(List<pricetasklog> logs);
} }

3
src/Coldairarrow.IBusiness/MDS/IuserBusiness.cs

@ -16,5 +16,8 @@ namespace Coldairarrow.Business.MDS
Task DeleteDataAsync(List<string> ids); Task DeleteDataAsync(List<string> ids);
IQueryable<UserRoleDto> GetPriceTaskUserList(); IQueryable<UserRoleDto> GetPriceTaskUserList();
IQueryable<user> GetUserQueryable();
} }
} }

3
src/Coldairarrow.IBusiness/MDS/IuserdepartmentBusiness.cs

@ -1,6 +1,7 @@
using Coldairarrow.Entity.MDS; using Coldairarrow.Entity.MDS;
using Coldairarrow.Util; using Coldairarrow.Util;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Coldairarrow.Business.MDS namespace Coldairarrow.Business.MDS
@ -12,5 +13,7 @@ namespace Coldairarrow.Business.MDS
Task AddDataAsync(userdepartment data); Task AddDataAsync(userdepartment data);
Task UpdateDataAsync(userdepartment data); Task UpdateDataAsync(userdepartment data);
Task DeleteDataAsync(List<string> ids); Task DeleteDataAsync(List<string> ids);
IQueryable<userdepartment> GetDepQueryable();
} }
} }
Loading…
Cancel
Save