using System;
using System.Collections.Generic;
using System.Linq;
using Edu.Cache.User;
using Edu.Common.API;
using Edu.Common.Enum.Course;
using Edu.Common.Enum.OKR;
using Edu.Common.Plugin;
using Edu.Model.ViewModel.OKR;
using Edu.Module.OKR;
using Edu.WebApi.Filter;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
namespace Edu.WebApi.Controllers.OKR
{
[Route("api/[controller]/[action]")]
[ApiExceptionFilter]
[ApiController]
[EnableCors("AllowCors")]
public class OKRPeriodController : BaseController
{
///
/// OKR周期处理类对象
///
private readonly OKRPeriodModule okrPeriodModule = new OKRPeriodModule();
#region 基础配置
///
/// 获取OKR周期配置信息
///
///
[HttpPost]
public ApiResult GetOKRPeriodConfigInfo()
{
var userInfo = base.UserInfo;
var model = okrPeriodModule.GetOKRPeriodConfigInfo(userInfo.Group_Id);
return ApiResult.Success("", new
{
model.Id,
model.PeriodMonth,
StartDate = model.StartDate.HasValue ? model.StartDate.Value.ToString("yyyy年MM月") : "",
EndDate = model.EndDate.HasValue ? model.EndDate.Value.ToString("yyyy年MM月") : "",
model.BeforeNum,
model.BeforeType,
model.YearOKR,
model.DirectorAudit
});
}
///
/// 保存OKR周期配置
///
///
[HttpPost]
public ApiResult SetOKRPeriodConfigInfo()
{
var userInfo = base.UserInfo;
RB_OKR_PeriodConfig_ViewModel dmodel = JsonHelper.DeserializeObject(RequestParm.Msg.ToString());
if (dmodel.PeriodMonth <= 0)
{
return ApiResult.ParamIsNull("请选择周期长度");
}
if (!dmodel.StartDate.HasValue)
{
return ApiResult.ParamIsNull("请选择新周期生效时间");
}
if (!dmodel.EndDate.HasValue)
{
return ApiResult.ParamIsNull("请选择新周期生效时间");
}
if (dmodel.BeforeNum <= 0)
{
return ApiResult.ParamIsNull("请选择新周期出现时间");
}
if (dmodel.BeforeType <= 0)
{
return ApiResult.ParamIsNull("请选择类型");
}
if (dmodel.YearOKR <= 0)
{
return ApiResult.ParamIsNull("请选择年度是否开启");
}
if (dmodel.DirectorAudit <= 0)
{
return ApiResult.ParamIsNull("请选择主管审核是否开启");
}
if (dmodel.StartDate.Value.AddMonths((int)dmodel.PeriodMonth - 1).ToString("yyyy-MM") != dmodel.EndDate.Value.ToString("yyyy-MM"))
{
return ApiResult.ParamIsNull("时间不正确");
}
dmodel.StartDate = Convert.ToDateTime(dmodel.StartDate.Value.ToString("yyyy-MM") + "-01");
dmodel.EndDate = Convert.ToDateTime(dmodel.EndDate.Value.ToString("yyyy-MM") + "-01 23:59:59").AddMonths(1).AddDays(-1);
dmodel.Group_Id = userInfo.Group_Id;
dmodel.School_Id = userInfo.School_Id;
dmodel.CreateBy = userInfo.Id;
dmodel.CreateTime = DateTime.Now;
dmodel.UpdateBy = userInfo.Id;
dmodel.UpdateTime = DateTime.Now;
string msg = okrPeriodModule.SetOKRPeriodConfigInfo(dmodel, userInfo);
if (msg == "")
{
return ApiResult.Success();
}
else
{
return ApiResult.Failed(msg);
}
}
///
/// 获取OKR提醒列表
///
///
[HttpPost]
public ApiResult GetOKRRemindList()
{
var userInfo = base.UserInfo;
var list = okrPeriodModule.GetOKRRemindList(userInfo.Group_Id);
return ApiResult.Success("", list.Select(x => new
{
x.Id,
x.Days,
x.Time,
x.Enable,
x.Type
}));
}
///
/// 设置OKR提醒
///
///
[HttpPost]
public ApiResult SetOKRRemindInfo()
{
var userInfo = base.UserInfo;
RB_OKR_Remind_ViewModel dmodel = JsonHelper.DeserializeObject(RequestParm.Msg.ToString());
if (string.IsNullOrEmpty(dmodel.Days))
{
return ApiResult.ParamIsNull("请选择工作日");
}
if (string.IsNullOrEmpty(dmodel.Time))
{
return ApiResult.ParamIsNull("请选择时间");
}
if (dmodel.Type <= 0)
{
return ApiResult.ParamIsNull("请传递类型");
}
dmodel.Group_Id = userInfo.Group_Id;
dmodel.School_Id = userInfo.School_Id;
dmodel.CreateBy = userInfo.Id;
dmodel.CreateTime = DateTime.Now;
dmodel.UpdateBy = userInfo.Id;
dmodel.UpdateTime = DateTime.Now;
dmodel.Enable = 1;
string msg = okrPeriodModule.SetOKRRemindInfo(dmodel, userInfo);
if (msg == "")
{
return ApiResult.Success();
}
else
{
return ApiResult.Failed(msg);
}
}
///
/// 谁知OKR提醒启用
///
///
[HttpPost]
public ApiResult SetOKRRemindEnable()
{
var userInfo = base.UserInfo;
JObject prams = JObject.Parse(RequestParm.Msg.ToString());
int Type = prams.GetInt("Type", 0);
if (Type <= 0)
{
return ApiResult.ParamIsNull();
}
bool flag = okrPeriodModule.SetOKRRemindEnable(Type, userInfo);
if (flag)
{
return ApiResult.Success();
}
else
{
return ApiResult.Failed();
}
}
///
/// 获取分数配置分页列表
///
///
[HttpPost]
public ApiResult GetOKRScoreConfigPageList()
{
var userInfo = base.UserInfo;
var pageModel = JsonHelper.DeserializeObject(RequestParm.Msg.ToString());
var dmodel = JsonHelper.DeserializeObject(RequestParm.Msg.ToString());
dmodel.Group_Id = userInfo.Group_Id;
var list = okrPeriodModule.GetOKRScoreConfigPageList(pageModel.PageIndex, pageModel.PageSize, out long count, dmodel);
pageModel.Count = Convert.ToInt32(count);
pageModel.PageData = list.Select(x => new
{
x.Id,
x.Name,
x.IsDefault,
DetailList = x.DetailList.OrderBy(x => x.ScoreMin).Select(z => new
{
z.Name,
z.ScoreMin,
z.ScoreMax,
z.Color
})
});
return ApiResult.Success("", pageModel);
}
///
/// 设置分数规则
///
///
[HttpPost]
public ApiResult SetOKRScoreConfigInfo()
{
var userInfo = base.UserInfo;
RB_OKR_Score_ViewModel dmodel = JsonHelper.DeserializeObject(RequestParm.Msg.ToString());
if (string.IsNullOrEmpty(dmodel.Name))
{
return ApiResult.ParamIsNull("请传递规则名称");
}
if (dmodel.DetailList == null || !dmodel.DetailList.Any())
{
return ApiResult.ParamIsNull("请传递分数明细");
}
decimal min = 0;
foreach (var item in dmodel.DetailList)
{
if (string.IsNullOrEmpty(item.Name))
{
return ApiResult.ParamIsNull("请传递颜色名称");
}
if (item.ScoreMin < 0 || item.ScoreMin >= 1)
{
return ApiResult.ParamIsNull("分数有误");
}
if (item.ScoreMax <= 0 || item.ScoreMax > 1)
{
return ApiResult.ParamIsNull("分数有误");
}
if (item.ScoreMax < item.ScoreMin)
{
return ApiResult.ParamIsNull("分数有误");
}
if (min == 0)
{
if (item.ScoreMin < min)
{
return ApiResult.ParamIsNull("分数有交集");
}
}
else
{
if (item.ScoreMin <= min)
{
return ApiResult.ParamIsNull("分数有交集");
}
}
min = item.ScoreMax;
}
dmodel.IsDefault = 2;
dmodel.Status = 0;
dmodel.Group_Id = userInfo.Group_Id;
dmodel.School_Id = userInfo.School_Id;
dmodel.CreateBy = userInfo.Id;
dmodel.CreateTime = DateTime.Now;
dmodel.UpdateBy = userInfo.Id;
dmodel.UpdateTime = DateTime.Now;
string msg = okrPeriodModule.SetOKRScoreConfigInfo(dmodel, userInfo);
if (msg == "")
{
return ApiResult.Success();
}
else
{
return ApiResult.Failed();
}
}
///
/// 设置分数状态
///
///
[HttpPost]
public ApiResult SetOKRScoreConfigState()
{
var userInfo = base.UserInfo;
JObject parms = JObject.Parse(RequestParm.Msg.ToString());
int ScoreId = parms.GetInt("ScoreId", 0);
int Type = parms.GetInt("Type", 1);// 类型 1设置默认 2删除
if (ScoreId <= 0)
{
return ApiResult.ParamIsNull("请传递id");
}
string msg = okrPeriodModule.SetOKRScoreConfigState(ScoreId, Type, userInfo);
if (msg == "")
{
return ApiResult.Success();
}
else
{
return ApiResult.Failed();
}
}
///
/// 获取枚举列表
///
///
[HttpPost]
public ApiResult GetPeriodMonthEnumList()
{
var list = EnumHelper.EnumToList(typeof(PeriodMonthEnum));
return ApiResult.Success("", list.Select(x => new
{
x.Name,
x.Id
}));
}
///
/// 获取枚举列表
///
///
[HttpPost]
public ApiResult GetPermissionTypeEnumList()
{
var list = EnumHelper.EnumToList(typeof(PermissionTypeEnum));
return ApiResult.Success("", list.Select(x => new
{
x.Name,
x.Id
}));
}
///
/// 获取枚举列表
///
///
[HttpPost]
public ApiResult GetProgressStateEnumList()
{
var list = EnumHelper.EnumToList(typeof(ProgressStateEnum));
return ApiResult.Success("", list.Select(x => new
{
x.Name,
x.Id
}));
}
#endregion
#region 目标管理
///
/// 获取周期列表
///
///
public ApiResult GetOKRPeriodList()
{
var userInfo = base.UserInfo;
var list = okrPeriodModule.GetOKRPeriodList(userInfo.Group_Id);
return ApiResult.Success("", list.Select(x => new
{
x.Id,
x.Name,
StartDate = x.StartDate.ToString("yyyy-MM-dd HH:mm:ss"),
EndDate = x.EndDate.ToString("yyyy-MM-dd HH:mm:ss"),
x.IsCurrent,
x.IsYear
}));
}
///
/// 获取我的目标列表
///
///
[HttpPost]
public ApiResult GetOKRMyObjectiveList()
{
var userInfo = base.UserInfo;
JObject parms = JObject.Parse(RequestParm.Msg.ToString());
int PeriodId = parms.GetInt("PeriodId", 0);
if (PeriodId <= 0)
{
return ApiResult.ParamIsNull("请传递周期id");
}
var list = okrPeriodModule.GetOKRMyObjectiveList(PeriodId, userInfo);
return ApiResult.Success("", list);
}
///
/// 新增修改目标
///
///
[HttpPost]
public ApiResult SgetOKRMyObjectiveInfo()
{
var userInfo = base.UserInfo;
RB_OKR_Objective_ViewModel dmodel = JsonHelper.DeserializeObject(RequestParm.Msg.ToString());
if (string.IsNullOrEmpty(dmodel.Title))
{
return ApiResult.ParamIsNull("请输入Objective");
}
if (dmodel.PeriodId <= 0)
{
return ApiResult.ParamIsNull("请传递周期id");
}
string msg = okrPeriodModule.SetOKRMyObjectiveInfo(dmodel, userInfo);
if (msg == "")
{
return ApiResult.Success();
}
else
{
return ApiResult.Failed(msg);
}
}
///
/// 新增修改关键结果
///
///
[HttpPost]
public ApiResult SgetOKRMyKeyResultInfo()
{
var userInfo = base.UserInfo;
JObject parms = JObject.Parse(RequestParm.Msg.ToString());
int KeyResultId = parms.GetInt("KeyResultId", 0);
int ObjectiveId = parms.GetInt("ObjectiveId", 0);
string Name = parms.GetStringValue("Name");
if (string.IsNullOrEmpty(Name))
{
return ApiResult.ParamIsNull("请传递结果值");
}
if (KeyResultId <= 0 && ObjectiveId <= 0)
{
return ApiResult.ParamIsNull("结果id不正确");
}
string msg = okrPeriodModule.SetOKRMyKeyResultInfo(KeyResultId, ObjectiveId, Name, userInfo);
if (msg == "")
{
return ApiResult.Success();
}
else
{
return ApiResult.Failed(msg);
}
}
///
/// 设置目标排序
///
///
[HttpPost]
public ApiResult SgetOKRMyObjectiveSort()
{
var userInfo = base.UserInfo;
JObject parms = JObject.Parse(RequestParm.Msg.ToString());
int ObjectiveId1 = parms.GetInt("ObjectiveId1", 0);
int ObjectiveId2 = parms.GetInt("ObjectiveId2", 0);//目标的后面
if (ObjectiveId1 <= 0)
{
return ApiResult.ParamIsNull();
}
if (ObjectiveId2 < 0)
{
return ApiResult.ParamIsNull();
}
if (ObjectiveId1 == ObjectiveId2)
{
return ApiResult.Success();
}
string msg = okrPeriodModule.SetOKRMyObjectiveSort(ObjectiveId1, ObjectiveId2, userInfo);
if (msg == "")
{
return ApiResult.Success();
}
else
{
return ApiResult.Failed(msg);
}
}
///
/// 设置目标关键结果排序
///
///
[HttpPost]
public ApiResult SgetOKRMyKeyResultSort()
{
var userInfo = base.UserInfo;
JObject parms = JObject.Parse(RequestParm.Msg.ToString());
int KeyResult1 = parms.GetInt("KeyResult1", 0);
int KeyResult2 = parms.GetInt("KeyResult2", 0);//结果的后面
if (KeyResult1 <= 0)
{
return ApiResult.ParamIsNull();
}
if (KeyResult2 < 0)
{
return ApiResult.ParamIsNull();
}
if (KeyResult1 == KeyResult2)
{
return ApiResult.Success();
}
string msg = okrPeriodModule.SetgetOKRMyKeyResultSort(KeyResult1, KeyResult2, userInfo);
if (msg == "")
{
return ApiResult.Success();
}
else
{
return ApiResult.Failed(msg);
}
}
///
/// 设置目标状态
///
///
[HttpPost]
public ApiResult SgetOKRMyObjectiveState()
{
var userInfo = base.UserInfo;
JObject parms = JObject.Parse(RequestParm.Msg.ToString());
int ObjectiveId = parms.GetInt("ObjectiveId", 0);
int Type = parms.GetInt("Type", 1);// 类型 1设置默认状态 2设置自定义状态 3删除
int ProgressState = parms.GetInt("ProgressState", 0);
if (ObjectiveId <= 0)
{
return ApiResult.ParamIsNull("请传递目标id");
}
if (Type == 2 && ProgressState <= 0)
{
return ApiResult.ParamIsNull("请传递自定义状态");
}
string msg = okrPeriodModule.SetOKRMyObjectiveState(ObjectiveId, Type, ProgressState, userInfo);
if (msg == "")
{
return ApiResult.Success();
}
else
{
return ApiResult.Failed(msg);
}
}
///
/// 修改关键结果状态
///
///
[HttpPost]
public ApiResult SgetOKRMyKeyResultState()
{
var userInfo = base.UserInfo;
JObject parms = JObject.Parse(RequestParm.Msg.ToString());
int KeyResultId = parms.GetInt("KeyResultId", 0);
int Type = parms.GetInt("Type", 0);// 类型 1自定义状态 2删除 3切换为简单模式 4切换为高级模式
string ProgressState = parms.GetStringValue("ProgressState");
if (KeyResultId <= 0)
{
return ApiResult.ParamIsNull();
}
string msg = okrPeriodModule.SgetOKRMyKeyResultState(KeyResultId, Type, ProgressState, userInfo);
if (msg == "")
{
return ApiResult.Success();
}
else
{
return ApiResult.Failed(msg);
}
}
///
/// 修改目标关键结果进度
///
///
[HttpPost]
public ApiResult SgetOKRMyKeyResultProgress()
{
var userInfo = base.UserInfo;
JObject parms = JObject.Parse(RequestParm.Msg.ToString());
int KeyResultId = parms.GetInt("KeyResultId", 0);
int Type = parms.GetInt("Type", 0);// 类型 1简单模式 2高级模式
int Progress = parms.GetInt("Progress", 0);
decimal StartValue = parms.GetDecimal("StartValue");
decimal EndValue = parms.GetDecimal("EndValue");
decimal CurrentValue = parms.GetDecimal("CurrentValue");
if (KeyResultId <= 0)
{
return ApiResult.ParamIsNull();
}
return okrPeriodModule.SgetOKRMyKeyResultProgress(KeyResultId, Type, Progress, StartValue, EndValue, CurrentValue, userInfo);
}
#endregion
#region okr评论管理
///
/// 获取评论分页列表
///
///
[HttpPost]
public ApiResult GetCommentPageList()
{
var pageModel = Common.Plugin.JsonHelper.DeserializeObject(RequestParm.Msg.ToString());
var query = new RB_OKR_Comment_ViewModel()
{
School_Id = base.ParmJObj.GetInt("School_Id"),
State = base.ParmJObj.GetInt("State", 0),
PeriodId = base.ParmJObj.GetInt("PeriodId", 0)
};
query.Group_Id = base.UserInfo.Group_Id;
var list = okrPeriodModule.GetCommentPageList(pageModel.PageIndex, pageModel.PageSize, out long rowsCount, query);
foreach (var item in list)
{
if (item.CreateBy > 0)
{
item.CreateByName = UserReidsCache.GetUserLoginInfo(item.CreateBy)?.AccountName ?? "";
item.CreateByIco = UserReidsCache.GetUserLoginInfo(item.CreateBy)?.UserIcon ?? "";
}
if (item.UpdateBy > 0)
{
item.UpdateByName = UserReidsCache.GetUserLoginInfo(item.UpdateBy)?.AccountName ?? "";
}
item.CreateTimeStr = StringHelper.DateFormatToString(item.CreateTime);
}
pageModel.Count = rowsCount;
pageModel.PageData = list.Select(x => new { x.CreateByName, x.CreateByIco, x.UpdateByName, x.Content, x.CreateTimeStr });
return ApiResult.Success(data: pageModel);
}
///
/// 新增评论状态
///
///
public ApiResult SetComment()
{
var extModel = new RB_OKR_Comment_ViewModel()
{
School_Id = base.ParmJObj.GetInt("School_Id"),
PeriodId = base.ParmJObj.GetInt("PeriodId"),
Content = base.ParmJObj.GetStringValue("Content"),
};
extModel.CreateBy = base.UserInfo.Id;
extModel.State = 1;
extModel.CreateTime = System.DateTime.Now;
extModel.UpdateTime = System.DateTime.Now;
extModel.UpdateBy = base.UserInfo.Id;
extModel.Group_Id = base.UserInfo.Group_Id;
bool flag = okrPeriodModule.SetOKRComment(extModel);
return flag ? ApiResult.Success() : ApiResult.Failed();
}
///
/// 修改评论状态
///
///
public ApiResult SetCommentStatus()
{
var extModel = new RB_OKR_Comment_ViewModel()
{
Id = base.ParmJObj.GetInt("Id"),
State = base.ParmJObj.GetInt("State"),
};
if (extModel.Id <= 0)
{
return ApiResult.ParamIsNull(message: "未获取到评论编号,请刷新页面重试!");
}
if (extModel.State <= 0)
{
return ApiResult.ParamIsNull(message: "请传递评论状态!");
}
extModel.UpdateBy = base.UserInfo.Id;
bool flag = okrPeriodModule.SetOKRComment(extModel);
return flag ? ApiResult.Success() : ApiResult.Failed();
}
#endregion
}
}