159 lines
6.0 KiB
C#
159 lines
6.0 KiB
C#
using System.Text;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using NewLife;
|
|
using NewLife.Cube;
|
|
using NewLife.Web;
|
|
using XCode;
|
|
using XCode.Membership;
|
|
using Zero.Data.Projects;
|
|
using Zero.Data.WeiXin;
|
|
|
|
namespace Zero.Web.Areas.Projects.Controllers
|
|
{
|
|
[ProjectsArea]
|
|
[Menu(90)]
|
|
public class TeamController : EntityController<Team, TeamModel>
|
|
{
|
|
static TeamController() => LogOnChange = true;
|
|
|
|
protected override IEnumerable<Team> Search(Pager p)
|
|
{
|
|
var enable = p["enable"]?.ToBoolean();
|
|
|
|
var start = p["dtStart"].ToDateTime();
|
|
var end = p["dtEnd"].ToDateTime();
|
|
|
|
p.RetrieveState = true;
|
|
|
|
return Team.Search(null, null, enable, start, end, p["Q"], p);
|
|
}
|
|
|
|
protected override Int32 OnInsert(Team entity)
|
|
{
|
|
var rs = base.OnInsert(entity);
|
|
|
|
JoinTeam(entity);
|
|
entity.Update();
|
|
|
|
return rs;
|
|
}
|
|
|
|
protected override Int32 OnUpdate(Team entity)
|
|
{
|
|
var et = entity as IEntity;
|
|
if (et.Dirtys[nameof(entity.LeaderId)]) JoinTeam(entity);
|
|
|
|
// 修正成员数、产品数和版本数
|
|
entity.Refresh();
|
|
|
|
return base.OnUpdate(entity);
|
|
}
|
|
|
|
private void JoinTeam(Team entity)
|
|
{
|
|
var list = TeamMember.FindAllByTeamId(entity.ID);
|
|
|
|
// 原组长下岗
|
|
var old = list.FirstOrDefault(e => e.Leader);
|
|
if (old != null)
|
|
{
|
|
old.Leader = false;
|
|
old.Update();
|
|
}
|
|
|
|
// 更换组长
|
|
if (entity.LeaderId > 0)
|
|
{
|
|
// 新组长上岗
|
|
var tm = list.FirstOrDefault(e => e.MemberId == entity.LeaderId);
|
|
if (tm == null) list.Add(tm = new TeamMember { TeamId = entity.ID, MemberId = entity.LeaderId });
|
|
tm.Major = true;
|
|
tm.Leader = true;
|
|
tm.Enable = true;
|
|
tm.Save();
|
|
|
|
// 更新团队成员数
|
|
entity.Members = list.Count;
|
|
|
|
// 这个人不再属于其它团队的主成员
|
|
var list2 = TeamMember.FindAllByMemberId(entity.LeaderId);
|
|
foreach (var item in list2)
|
|
{
|
|
if (item.TeamId != entity.ID) item.Major = false;
|
|
}
|
|
list2.Update();
|
|
}
|
|
}
|
|
|
|
/// <summary>批量刷新</summary>
|
|
/// <returns></returns>
|
|
[HttpGet]
|
|
[EntityAuthorize(PermissionFlags.Update)]
|
|
public ActionResult Refresh()
|
|
{
|
|
var count = 0;
|
|
var ids = GetRequest("keys").SplitAsInt();
|
|
if (ids.Length > 0)
|
|
{
|
|
foreach (var id in ids)
|
|
{
|
|
var team = Team.FindByID(id);
|
|
if (team != null)
|
|
{
|
|
team.Refresh();
|
|
if (team.Update() != 0) count++;
|
|
|
|
// 机器人
|
|
var robot = RobotHelper.CreateRobot(team);
|
|
if (robot != null)
|
|
{
|
|
var prds = Product.FindAllByTeamId(team.ID).Where(e => e.Enable).ToList();
|
|
var members = TeamMember.FindAllByTeamId(team.ID).Where(e => e.Enable).OrderBy(e => e.MemberName).ToList();
|
|
var versions = VersionPlan.FindAllNotCompleted(team.ID, -1).OrderBy(e => e.StartDate).ToList();
|
|
var uri = Request.GetRawUrl();
|
|
uri = new Uri(uri, "/Projects/Product?teamId=" + team.ID);
|
|
|
|
var sb = new StringBuilder();
|
|
sb.AppendLine($"### [{team}]团队报告");
|
|
sb.AppendLine($">组长:<font color=\"#FF0033\">{team.Leader}</font>");
|
|
sb.AppendLine($">产品:<font color=\"#6600CC\">{prds.Join()}</font>");
|
|
sb.AppendLine($">成员:<font color=\"info\">{members.Where(e => e.Major).Join(",", e => e.MemberName)}</font>");
|
|
sb.AppendLine($">协助:<font color=\"info\">{members.Where(e => !e.Major).Join(",", e => e.MemberName)}</font>");
|
|
|
|
if (versions.Count > 0)
|
|
{
|
|
sb.AppendLine($">版本:");
|
|
foreach (var item in versions)
|
|
{
|
|
// 过期、未开始、正常
|
|
var color = item.EndDate.Date < DateTime.Today
|
|
? "#FF0000"
|
|
: item.StartDate.Date > DateTime.Today
|
|
? "#00CC00"
|
|
: "#3366CC";
|
|
sb.AppendLine($">\t<font color=\"{color}\">[{item.Product}] {item} ({item.StartDate:MM/dd} - {item.EndDate:MM/dd})</font>");
|
|
}
|
|
|
|
var storis = Story.Search(versions.Select(e => e.ID).ToArray());
|
|
if (storis.Count > 0)
|
|
{
|
|
sb.AppendLine($">故事:");
|
|
foreach (var item in storis)
|
|
{
|
|
sb.AppendLine($">\t[{item.Product}/{item.Version}] {item} [{item.Member}] ({item.StartDate:MM/dd} - {item.EndDate:MM/dd})");
|
|
}
|
|
}
|
|
}
|
|
|
|
sb.AppendLine($"[更多信息]({uri})");
|
|
|
|
robot.SendMarkDown(sb.ToString());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return Json(0, $"共刷新[{count}]个团队");
|
|
}
|
|
}
|
|
} |