Commit 67f26785 authored by 黄奎's avatar 黄奎

Merge branch 'master' of http://gitlab.oytour.com/Kui2/education

parents ff2b9ea0 45036650
using Edu.Common.Plugin;
using System;
using System.Collections.Generic;
using System.Text;
namespace Edu.Common.Enum.OKR
{
/// <summary>
/// 规则类型枚举
/// </summary>
public enum RuleTypeEnum
{
/// <summary>
/// 求和
/// </summary>
[EnumField("求和")]
Sum = 1,
/// <summary>
/// 求平均
/// </summary>
[EnumField("求平均")]
Avg = 2,
/// <summary>
/// 求数量
/// </summary>
[EnumField("求数量")]
Count = 3,
/// <summary>
/// 最大值
/// </summary>
[EnumField("最大值")]
Max = 4,
/// <summary>
/// 最小值
/// </summary>
[EnumField("最小值")]
Min = 5
}
}
......@@ -26,6 +26,7 @@ namespace Edu.Education
{
new QuarzHelper().TeachingPerfTimer().GetAwaiter().GetResult();
new QuarzHelper().OKRPeriodTimer().GetAwaiter().GetResult();
new QuarzHelper().OKRPeriodRuleTimer().GetAwaiter().GetResult();
}
/// <summary>
......
......@@ -9,6 +9,7 @@ using System.Threading.Tasks;
using Edu.Module.Course;
using Edu.Module.OKR;
using System.Linq;
using System.Collections.Generic;
namespace Edu.Education.Helper
{
......@@ -83,6 +84,34 @@ namespace Edu.Education.Helper
await scheduler.ScheduleJob(job, trigger);
}
/// <summary>
/// 定时执行OKR规则
/// </summary>
/// <returns></returns>
public async Task OKRPeriodRuleTimer()
{
NameValueCollection props = new NameValueCollection
{
{ "quartz.serializer.type", "binary" }
};
StdSchedulerFactory factory = new StdSchedulerFactory(props);
IScheduler scheduler = await factory.GetScheduler();
await scheduler.Start();
IJobDetail job = JobBuilder.Create<CreateOKRPeriodRule>()
.WithIdentity("job3", "group3")
.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger3", "group3")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInHours(1)
.RepeatForever())
.Build();
await scheduler.ScheduleJob(job, trigger);
}
}
/// <summary>
......@@ -186,4 +215,32 @@ namespace Edu.Education.Helper
return null;
}
}
/// <summary>
/// 规则更新进度
/// </summary>
public class CreateOKRPeriodRule : IJob
{
/// <summary>
/// 这里是作业调度每次定时执行方法
/// </summary>
/// <param name="context"></param>
public Task Execute(IJobExecutionContext context)
{
try
{
LogHelper.Write("开始执行规则适配....");
OKRPeriodModule oKRPeriodModule = new OKRPeriodModule();
var clist = oKRPeriodModule.GetOKRKeyResultList(new Model.ViewModel.OKR.RB_OKR_KeyResult_ViewModel() { IsUseRule = 1 });
foreach (var item in clist) {
oKRPeriodModule.UpdateOKRKeyresultRuleProgress(item);
}
}
catch (Exception ex)
{
LogHelper.Write(ex, "CreateOKRPeriodRule");
}
return null;
}
}
}
......@@ -105,5 +105,20 @@ namespace Edu.Model.Entity.OKR
/// 修改时间
/// </summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 规则id
/// </summary>
public int RuleId { get; set; }
/// <summary>
/// 规则开始时间
/// </summary>
public DateTime? RuleSTime { get; set; }
/// <summary>
/// 规则结束时间
/// </summary>
public DateTime? RuleETime { get; set; }
}
}
using Edu.Common.Enum;
using Edu.Common.Enum.Course;
using Edu.Common.Enum.OKR;
using System;
using VT.FW.DB;
namespace Edu.Model.Entity.OKR
{
/// <summary>
/// okr规则实体类
/// </summary>
[Serializable]
[DB(ConnectionName = "DefaultConnection")]
public class RB_OKR_Rule
{
/// <summary>
/// id
/// </summary>
public int Id { get; set; }
/// <summary>
/// 规则名称
/// </summary>
public string RuleName { get; set; }
/// <summary>
/// 数据库
/// </summary>
public string DataBase { get; set; }
/// <summary>
/// 表名
/// </summary>
public string Table { get; set; }
/// <summary>
/// 统计字段
/// </summary>
public string Field { get; set; }
/// <summary>
/// 统计方式 枚举
/// </summary>
public RuleTypeEnum Way { get; set; }
/// <summary>
/// 状态字段
/// </summary>
public string State { get; set; }
/// <summary>
/// 身份字段
/// </summary>
public string Identity { get; set; }
/// <summary>
/// 操作时间字段
/// </summary>
public string Time { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
/// <summary>
/// 状态 1启用 2停用
/// </summary>
public int Enable { get; set; }
/// <summary>
/// 删除状态
/// </summary>
public int Status { get; set; }
/// <summary>
/// 集团id
/// </summary>
public int Group_Id { get; set; }
/// <summary>
/// 学校id
/// </summary>
public int School_Id { get; set; }
/// <summary>
/// 创建人
/// </summary>
public int CreateBy { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 修改人
/// </summary>
public int UpdateBy { get; set; }
/// <summary>
/// 修改时间
/// </summary>
public DateTime UpdateTime { get; set; }
}
}
using Edu.Common.Enum;
using Edu.Common.Enum.Course;
using System;
using VT.FW.DB;
namespace Edu.Model.Entity.OKR
{
/// <summary>
/// okr规则关联实体类
/// </summary>
[Serializable]
[DB(ConnectionName = "DefaultConnection")]
public class RB_OKR_RuleRelation
{
/// <summary>
/// id
/// </summary>
public int Id { get; set; }
/// <summary>
/// 关键结果id
/// </summary>
public int KeyResultId { get; set; }
/// <summary>
/// 类型 1部门 2人员
/// </summary>
public int Type { get; set; }
/// <summary>
/// 部门/人员id
/// </summary>
public int RelationId { get; set; }
}
}
......@@ -24,6 +24,11 @@ namespace Edu.Model.ViewModel.OKR
/// </summary>
public int IsNotLook { get; set; }
/// <summary>
/// 是否使用规则 1是
/// </summary>
public int IsUseRule { get; set; }
/// <summary>
/// 分数名称
/// </summary>
......@@ -32,5 +37,10 @@ namespace Edu.Model.ViewModel.OKR
/// 分数颜色
/// </summary>
public string ScoreColor { get; set; }
/// <summary>
/// 规则使用范围
/// </summary>
public List<RB_OKR_RuleRelation_ViewModel> RelationList { get; set; }
}
}
\ No newline at end of file
using System;
using System.Collections.Generic;
namespace Edu.Model.ViewModel.OKR
{
/// <summary>
/// OKR规则关联扩展类
/// </summary>
[Serializable]
public class RB_OKR_RuleRelation_ViewModel : Model.Entity.OKR.RB_OKR_RuleRelation
{
/// <summary>
/// ids
/// </summary>
public string KeyResultIds { get; set; }
/// <summary>
/// 关联部门/人员名称
/// </summary>
public string RelationName { get; set; }
}
}
\ No newline at end of file
using System;
using System.Collections.Generic;
namespace Edu.Model.ViewModel.OKR
{
/// <summary>
/// OKR规则扩展类
/// </summary>
[Serializable]
public class RB_OKR_Rule_ViewModel : Model.Entity.OKR.RB_OKR_Rule
{
}
}
\ No newline at end of file
......@@ -85,6 +85,14 @@ namespace Edu.Module.OKR
/// 岗位
/// </summary>
private readonly RB_PostRepository postRepository = new RB_PostRepository();
/// <summary>
/// 规则
/// </summary>
private readonly RB_OKR_RuleRepository oKR_RuleRepository = new RB_OKR_RuleRepository();
/// <summary>
/// 规则关联
/// </summary>
private readonly RB_OKR_RuleRelationRepository oKR_RuleRelationRepository = new RB_OKR_RuleRelationRepository();
#region 基础配置
......@@ -736,6 +744,460 @@ namespace Edu.Module.OKR
}
#endregion
#region 规则管理
/// <summary>
/// 获取规则分页列表
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="count"></param>
/// <param name="dmodel"></param>
/// <returns></returns>
public List<RB_OKR_Rule_ViewModel> GetOKRRulePageList(int pageIndex, int pageSize, out long count, RB_OKR_Rule_ViewModel dmodel)
{
return oKR_RuleRepository.GetPageList(pageIndex, pageSize, out count, dmodel);
}
/// <summary>
/// 获取规则信息
/// </summary>
/// <param name="RuleId"></param>
/// <returns></returns>
public RB_OKR_Rule_ViewModel GetOKRRuleModel(int RuleId) {
return oKR_RuleRepository.GetEntity<RB_OKR_Rule_ViewModel>(RuleId);
}
/// <summary>
/// 获取列表
/// </summary>
/// <param name="dmodel"></param>
/// <returns></returns>
public List<RB_OKR_Rule_ViewModel> GetOKRRuleDownLoadList(RB_OKR_Rule_ViewModel dmodel)
{
return oKR_RuleRepository.GetList(dmodel);
}
/// <summary>
/// 新增修改规则
/// </summary>
/// <param name="dmodel"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public bool SetOKRRuleInfo(RB_OKR_Rule_ViewModel dmodel, UserInfo userInfo)
{
if (dmodel.Id > 0)
{
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_OKR_Rule_ViewModel.RuleName),dmodel.RuleName },
{ nameof(RB_OKR_Rule_ViewModel.DataBase),dmodel.DataBase },
{ nameof(RB_OKR_Rule_ViewModel.Table),dmodel.Table },
{ nameof(RB_OKR_Rule_ViewModel.Field),dmodel.Field },
{ nameof(RB_OKR_Rule_ViewModel.Way),dmodel.Way },
{ nameof(RB_OKR_Rule_ViewModel.State),dmodel.State },
{ nameof(RB_OKR_Rule_ViewModel.Identity),dmodel.Identity },
{ nameof(RB_OKR_Rule_ViewModel.Time),dmodel.Time },
{ nameof(RB_OKR_Rule_ViewModel.Remark),dmodel.Remark },
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
FiledName=nameof(RB_OKR_Rule_ViewModel.Id),
FiledValue=dmodel.Id,
OperatorEnum=OperatorEnum.Equal
}
};
bool flag = oKR_RuleRepository.Update(keyValues, wheres);
if (flag) {
changeLogRepository.Insert(new Model.Entity.Log.RB_User_ChangeLog()
{
Id = 0,
Type = 1,
CreateBy = userInfo.Id,
CreateTime = DateTime.Now,
Group_Id = userInfo.Group_Id,
LogContent = "修改OKR结果规则【" + dmodel.Id + "】",
School_Id = userInfo.School_Id,
SourceId = 0
});
}
return flag;
}
else {
dmodel.Enable = dmodel.Enable == 0 ? 1 : dmodel.Enable;
int id = oKR_RuleRepository.Insert(dmodel);
bool flag = id > 0;
if (flag) {
changeLogRepository.Insert(new Model.Entity.Log.RB_User_ChangeLog()
{
Id = 0,
Type = 1,
CreateBy = userInfo.Id,
CreateTime = DateTime.Now,
Group_Id = userInfo.Group_Id,
LogContent = "新增OKR结果规则【" + id + "】",
School_Id = userInfo.School_Id,
SourceId = 0
});
}
return flag;
}
}
/// <summary>
/// 设置规则状态
/// </summary>
/// <param name="ruleId"></param>
/// <param name="type"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public string SetOKRRuleState(int ruleId, int type, UserInfo userInfo)
{
Dictionary<string, object> keyValues = new Dictionary<string, object>() { };
if (type == 1)
{
keyValues.Add(nameof(RB_OKR_Rule_ViewModel.Enable), 1);
}
else if (type == 2)
{
keyValues.Add(nameof(RB_OKR_Rule_ViewModel.Enable), 2);
}
else if (type == 3)
{
keyValues.Add(nameof(RB_OKR_Rule_ViewModel.Status), 1);
}
else {
return "状态不正确";
}
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
FiledName=nameof(RB_OKR_Rule_ViewModel.Id),
FiledValue=ruleId,
OperatorEnum=OperatorEnum.Equal
}
};
bool flag = oKR_RuleRepository.Update(keyValues, wheres);
if (flag)
{
changeLogRepository.Insert(new Model.Entity.Log.RB_User_ChangeLog()
{
Id = 0,
Type = 1,
CreateBy = userInfo.Id,
CreateTime = DateTime.Now,
Group_Id = userInfo.Group_Id,
LogContent = "修改OKR结果规则状态【" + ruleId + "】" + (type == 1 ? "启用" : type == 2 ? "禁用" : "删除"),
School_Id = userInfo.School_Id,
SourceId = 0
});
return "";
}
return "出错了,请联系管理员";
}
/// <summary>
/// 关键结果绑定规则
/// </summary>
/// <param name="dmodel"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public string SetOKRKeyResultUseRule(RB_OKR_KeyResult_ViewModel dmodel, UserInfo userInfo)
{
var ruleModel = oKR_RuleRepository.GetEntity(dmodel.RuleId);
if (ruleModel == null) { return "规则不存在"; }
if (ruleModel.Status == 1 || ruleModel.Enable == 2) { return "规则状态不正确"; }
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_OKR_KeyResult_ViewModel.RuleId),dmodel.RuleId},
{ nameof(RB_OKR_KeyResult_ViewModel.RuleSTime),dmodel.RuleSTime},
{ nameof(RB_OKR_KeyResult_ViewModel.RuleETime),dmodel.RuleETime},
{ nameof(RB_OKR_KeyResult_ViewModel.StartValue),dmodel.StartValue},
{ nameof(RB_OKR_KeyResult_ViewModel.EndValue),dmodel.EndValue},
{ nameof(RB_OKR_KeyResult_ViewModel.IsEasyMode),2},
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
FiledName=nameof(RB_OKR_KeyResult_ViewModel.Id),
FiledValue=dmodel.Id,
OperatorEnum=OperatorEnum.Equal
}
};
var trans = oKR_KeyResultRepository.DbTransaction;
try
{
bool flag = oKR_KeyResultRepository.Update(keyValues, wheres, trans);
if (flag) {
//关联表信息
var list = oKR_RuleRelationRepository.GetList(new RB_OKR_RuleRelation_ViewModel() { KeyResultId = dmodel.Id });
if (list.Any())
{
var deptList = dmodel.RelationList.Where(x => x.Type == 1).ToList();
var empList = dmodel.RelationList.Where(x => x.Type == 2).ToList();
var hdeptList = list.Where(x => x.Type == 1).ToList();
var hempList = list.Where(x => x.Type == 2).ToList();
var deptInsert = deptList.Where(y => !hdeptList.Select(x => x.RelationId).Contains(y.RelationId)).ToList();
var deptDelete = hdeptList.Where(y => !deptList.Select(x => x.RelationId).Contains(y.RelationId)).ToList();
foreach (var item in deptInsert) {
oKR_RuleRelationRepository.Insert(new Model.Entity.OKR.RB_OKR_RuleRelation()
{
Id = 0,
KeyResultId = dmodel.Id,
RelationId = item.RelationId,
Type = item.Type
}, trans);
}
foreach (var item in deptDelete) {
oKR_RuleRelationRepository.Delete(item, trans);
}
var empInsert = empList.Where(y => !hempList.Select(x => x.RelationId).Contains(y.RelationId)).ToList();
var empDelete = hempList.Where(y => !empList.Select(x => x.RelationId).Contains(y.RelationId)).ToList();
foreach (var item in empInsert) {
oKR_RuleRelationRepository.Insert(new Model.Entity.OKR.RB_OKR_RuleRelation()
{
Id = 0,
KeyResultId = dmodel.Id,
RelationId = item.RelationId,
Type = item.Type
}, trans);
}
foreach (var item in empDelete) {
oKR_RuleRelationRepository.Delete(item, trans);
}
}
else {
//直接新增
foreach (var item in dmodel.RelationList) {
oKR_RuleRelationRepository.Insert(new Model.Entity.OKR.RB_OKR_RuleRelation()
{
Id = 0,
KeyResultId = dmodel.Id,
RelationId = item.RelationId,
Type = item.Type
}, trans);
}
}
changeLogRepository.Insert(new Model.Entity.Log.RB_User_ChangeLog()
{
Id = 0,
Type = 1,
CreateBy = userInfo.Id,
CreateTime = DateTime.Now,
Group_Id = userInfo.Group_Id,
LogContent = "修改OKR结果使用规则【" + dmodel.Id + "】",
School_Id = userInfo.School_Id,
SourceId = 0
});
}
oKR_KeyResultRepository.DBSession.Commit();
return flag ? "" : "出错了,请联系管理员";
}
catch (Exception ex)
{
LogHelper.Write(ex, "SetOKRKeyResultUseRule");
oKR_KeyResultRepository.DBSession.Rollback();
return "出错了,请联系管理员";
}
}
/// <summary>
/// 获取关键结果关联部门/人员
/// </summary>
/// <param name="keyResultId"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public List<RB_OKR_RuleRelation_ViewModel> GetOKRKeyResultRuleReList(int keyResultId, UserInfo userInfo)
{
var list = oKR_RuleRelationRepository.GetList(new RB_OKR_RuleRelation_ViewModel() { KeyResultId = keyResultId });
if (list.Any()) {
var dlist = list.Where(x => x.Type == 1).ToList();
var elist = list.Where(x => x.Type == 2).ToList();
if (dlist.Any()) {
string deptIds = string.Join(",", dlist.Select(x => x.RelationId));
var d2list = departmentRepository.GetDepartmentListRepository(new Model.ViewModel.User.RB_Department_ViewModel() { Group_Id = userInfo.Group_Id, School_Id = userInfo.School_Id, QDeptIds = deptIds });
foreach (var item in dlist) {
item.RelationName = d2list.Where(x => x.DeptId == item.RelationId).FirstOrDefault()?.DeptName ?? "";
}
}
if (elist.Any()) {
string empIds = string.Join(",", elist.Select(x => x.RelationId));
var e2list = accountRepository.GetEmployeeListRepository(new Model.ViewModel.User.Employee_ViewModel() { QIds = empIds });
foreach (var item in elist) {
item.RelationName = e2list.Where(x => x.Id == item.RelationId).FirstOrDefault()?.EmployeeName ?? "";
}
}
}
return list;
}
/// <summary>
/// 获取关键结果关联部门/人员
/// </summary>
/// <param name="keyResultId"></param>
/// <returns></returns>
public List<RB_OKR_RuleRelation_ViewModel> GetOKRKeyResultRuleReList(int keyResultId)
{
var list = oKR_RuleRelationRepository.GetList(new RB_OKR_RuleRelation_ViewModel() { KeyResultId = keyResultId });
return list;
}
/// <summary>
/// 获取我负责的部门列表
/// </summary>
/// <param name="userInfo"></param>
/// <returns></returns>
public object GetOKRMyManageDepartment(UserInfo userInfo)
{
var RList = new List<object>();
var list = departmentRepository.GetDepartmentListRepository(new Model.ViewModel.User.RB_Department_ViewModel() { Group_Id = userInfo.Group_Id, ManagerIds = userInfo.Id.ToString() });
foreach (var item in list) {
var dlist = departmentRepository.GetCurrentAndChildDepartmentListRepository(item.DeptId);
foreach (var qitem in dlist) {
RList.Add(new
{
qitem.DeptId,
qitem.DeptName
});
}
}
return RList;
}
/// <summary>
/// 获取我负责的部门 树形
/// </summary>
/// <param name="userInfo"></param>
/// <returns></returns>
public object GetOKRMyManageDepartment_V2(UserInfo userInfo)
{
var RList = new List<object>();
var list = departmentRepository.GetDepartmentListRepository(new Model.ViewModel.User.RB_Department_ViewModel() { Group_Id = userInfo.Group_Id, ManagerIds = userInfo.Id.ToString() });
foreach (var item in list)
{
var dlist = departmentRepository.GetCurrentAndChildDepartmentListRepository(item.DeptId);
RList.AddRange(GetChildDepartment(item, dlist));
}
return RList;
}
/// <summary>
/// 递归获取所有子集部门
/// </summary>
/// <param name="dmodel"></param>
/// <param name="list"></param>
/// <returns></returns>
public List<object> GetChildDepartment(Model.ViewModel.User.RB_Department_ViewModel dmodel, List<Model.ViewModel.User.RB_Department_ViewModel> list) {
var ChildList = new List<object>();
var clist = list.Where(x => x.ParentId == dmodel.DeptId).ToList();
foreach (var item in clist) {
ChildList.AddRange(GetChildDepartment(item, list));
}
return new List<object>() {
new {
dmodel.DeptId,
dmodel.DeptName,
ChildList
}
};
}
/// <summary>
/// 获取我的直属下级人员
/// </summary>
/// <param name="userInfo"></param>
/// <returns></returns>
public object GetOKRMyChildEmployeeList(UserInfo userInfo)
{
var UserIdList = GetMyUnderlingUserIdList(userInfo);
var list = accountRepository.GetEmployeeListRepository(new Model.ViewModel.User.Employee_ViewModel() { QIds = string.Join(",", UserIdList) });
return list.Select(x => new
{
x.Id,
x.EmployeeName
});
}
/// <summary>
/// 取消关键结果使用规则
/// </summary>
/// <param name="keyResultId"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public string CancelOKRKeyResultUseRule(int keyResultId, UserInfo userInfo)
{
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_OKR_KeyResult_ViewModel.RuleId),0},
{ nameof(RB_OKR_KeyResult_ViewModel.RuleSTime),null},
{ nameof(RB_OKR_KeyResult_ViewModel.RuleETime),null}
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
FiledName=nameof(RB_OKR_KeyResult_ViewModel.Id),
FiledValue=keyResultId,
OperatorEnum=OperatorEnum.Equal
}
};
bool flag = oKR_KeyResultRepository.Update(keyValues, wheres);
return flag ? "" : "出错了,请联系管理员";
}
/// <summary>
/// 更新适配规则的结果进度
/// </summary>
/// <param name="dmodel"></param>
/// <returns></returns>
public bool UpdateOKRKeyresultRuleProgress(RB_OKR_KeyResult_ViewModel dmodel) {
//查询结果适配部门/人员列表
List<int> empIdList = new List<int>() { dmodel.CreateBy };
var reList = GetOKRKeyResultRuleReList(dmodel.Id);
foreach (var qitem in reList.Where(x => x.Type == 2))
{
empIdList.Add(qitem.RelationId);
}
//根据部门 获取部门下所有的人员
if (reList.Where(x => x.Type == 1).Any())
{
var em1List = GetDepartmentEmployeeList(dmodel.Group_Id, string.Join(",", reList.Where(x => x.Type == 1).Select(x => x.RelationId)));
foreach (var qitem in em1List)
{
empIdList.Add(qitem.Id);
}
}
empIdList = empIdList.Distinct().ToList();
//根据规则 查询当前结果的进度
if (empIdList.Any())
{
var ruleModel = GetOKRRuleModel(dmodel.RuleId);
string way = "";
switch (ruleModel.Way)
{
case Edu.Common.Enum.OKR.RuleTypeEnum.Avg:
way = "Avg"; break;
case Edu.Common.Enum.OKR.RuleTypeEnum.Count:
way = "Count"; break;
case Edu.Common.Enum.OKR.RuleTypeEnum.Max:
way = "Max"; break;
case Edu.Common.Enum.OKR.RuleTypeEnum.Min:
way = "Min"; break;
case Edu.Common.Enum.OKR.RuleTypeEnum.Sum:
way = "Sum"; break;
}
//组装sql语句
string sql = $@" select {way}({ruleModel.Field}) from {ruleModel.DataBase}.{ruleModel.Table}
where {ruleModel.State} and {ruleModel.Identity} in({string.Join(",", empIdList)})
and {ruleModel.Time} >='{dmodel.RuleSTime.Value.ToString("yyyy-MM-dd")}' and {ruleModel.Time} <='{dmodel.RuleETime.Value.ToString("yyyy-MM-dd HH:mm:ss")}'";
//查询sql值
var obj = oKR_RuleRepository.ExecuteScalar(sql);
decimal CurrentValue = obj == null ? 0 : Convert.ToDecimal(obj);
CurrentValue += dmodel.StartValue;
//重新更新进度,以及目标进度
SgetOKRMyKeyResultProgress(0, 2, 0, dmodel.StartValue, dmodel.EndValue, CurrentValue, new UserInfo() { Group_Id = dmodel.Group_Id }, dmodel);
}
return true;
}
#endregion
#region 目标管理
/// <summary>
......@@ -1104,7 +1566,10 @@ namespace Edu.Module.OKR
z.IsLock,
z.IsNotLook,
z.ScoreName,
z.ScoreColor
z.ScoreColor,
z.RuleId,
RuleSTime = z.RuleSTime.HasValue ? z.RuleSTime.Value.ToString("yyyy-MM-dd") : "",
RuleETime = z.RuleETime.HasValue ? z.RuleETime.Value.ToString("yyyy-MM-dd") : ""
}),
ParentList = x.ParentList.Select(y => new
{
......@@ -3009,7 +3474,10 @@ namespace Edu.Module.OKR
z.IsLock,
z.IsNotLook,
z.ScoreName,
z.ScoreColor
z.ScoreColor,
z.RuleId,
RuleSTime = z.RuleSTime.HasValue ? z.RuleSTime.Value.ToString("yyyy-MM-dd") : "",
RuleETime = z.RuleETime.HasValue ? z.RuleETime.Value.ToString("yyyy-MM-dd") : ""
}),
ParentList = x.ParentList.Select(y => new
{
......@@ -3332,6 +3800,15 @@ namespace Edu.Module.OKR
}
}
/// <summary>
/// 获取关键结果列表
/// </summary>
/// <param name="dmodel"></param>
/// <returns></returns>
public List<RB_OKR_KeyResult_ViewModel> GetOKRKeyResultList(RB_OKR_KeyResult_ViewModel dmodel) {
return oKR_KeyResultRepository.GetList(dmodel);
}
/// <summary>
/// 设置目标排序
/// </summary>
......@@ -3713,13 +4190,18 @@ namespace Edu.Module.OKR
/// <param name="currentValue"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public ApiResult SgetOKRMyKeyResultProgress(int keyResultId, int type, int progress, decimal startValue, decimal endValue, decimal currentValue, UserInfo userInfo)
public ApiResult SgetOKRMyKeyResultProgress(int keyResultId, int type, int progress, decimal startValue, decimal endValue, decimal currentValue, UserInfo userInfo, RB_OKR_KeyResult_ViewModel model = null)
{
var model = oKR_KeyResultRepository.GetEntity(keyResultId);
if (model == null || model.Status == 1)
if (model == null)
{
model = oKR_KeyResultRepository.GetEntity<RB_OKR_KeyResult_ViewModel>(keyResultId);
}
if (model == null || model.Status == 1){
return ApiResult.Failed("关键结果不存在");
}
if (keyResultId > 0 && model.RuleId > 0) {
return ApiResult.Failed("关键结果已设置规则,无法手动调整进度");
}
if (type == 1)
{
//根据进度 求高级的当前值
......@@ -3731,7 +4213,7 @@ namespace Edu.Module.OKR
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
FiledName=nameof(RB_OKR_KeyResult_ViewModel.Id),
FiledValue=keyResultId,
FiledValue=model.Id,
OperatorEnum=OperatorEnum.Equal
}
};
......@@ -3752,18 +4234,20 @@ namespace Edu.Module.OKR
}
};
oKR_ObjectiveRepository.Update(keyValues1, wheres1);
changeLogRepository.Insert(new Model.Entity.Log.RB_User_ChangeLog()
if (keyResultId > 0)
{
Id = 0,
Type = 1,
CreateBy = userInfo.Id,
CreateTime = DateTime.Now,
Group_Id = userInfo.Group_Id,
LogContent = "修改OKR目标关键结果进度【" + keyResultId + "】",
School_Id = userInfo.School_Id,
SourceId = 0
});
changeLogRepository.Insert(new Model.Entity.Log.RB_User_ChangeLog()
{
Id = 0,
Type = 1,
CreateBy = userInfo.Id,
CreateTime = DateTime.Now,
Group_Id = userInfo.Group_Id,
LogContent = "修改OKR目标关键结果进度【" + model.Id + "】",
School_Id = userInfo.School_Id,
SourceId = 0
});
}
return ApiResult.Success("", new
{
TProgress = (int)TProgress,
......@@ -3787,7 +4271,7 @@ namespace Edu.Module.OKR
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
FiledName=nameof(RB_OKR_KeyResult_ViewModel.Id),
FiledValue=keyResultId,
FiledValue=model.Id,
OperatorEnum=OperatorEnum.Equal
}
};
......@@ -3808,18 +4292,20 @@ namespace Edu.Module.OKR
}
};
oKR_ObjectiveRepository.Update(keyValues1, wheres1);
changeLogRepository.Insert(new Model.Entity.Log.RB_User_ChangeLog()
if (keyResultId > 0)
{
Id = 0,
Type = 1,
CreateBy = userInfo.Id,
CreateTime = DateTime.Now,
Group_Id = userInfo.Group_Id,
LogContent = "修改OKR目标关键结果进度【" + keyResultId + "】",
School_Id = userInfo.School_Id,
SourceId = 0
});
changeLogRepository.Insert(new Model.Entity.Log.RB_User_ChangeLog()
{
Id = 0,
Type = 1,
CreateBy = userInfo.Id,
CreateTime = DateTime.Now,
Group_Id = userInfo.Group_Id,
LogContent = "修改OKR目标关键结果进度【" + model.Id + "】",
School_Id = userInfo.School_Id,
SourceId = 0
});
}
return ApiResult.Success("", new
{
TProgress = (int)TProgress,
......@@ -4690,6 +5176,17 @@ namespace Edu.Module.OKR
};
}
/// <summary>
/// 根据部门获取部门下所有人员
/// </summary>
/// <param name="Group_Id"></param>
/// <param name="QDeptIds"></param>
/// <returns></returns>
public List<Model.ViewModel.User.Employee_ViewModel> GetDepartmentEmployeeList(int Group_Id, string QDeptIds) {
var em1List = accountRepository.GetEmployeeListRepository(new Model.ViewModel.User.Employee_ViewModel() { Group_Id = Group_Id, QDeptIds = QDeptIds });
return em1List;
}
/// <summary>
/// 获取我的直属下级
/// </summary>
......
......@@ -67,6 +67,9 @@ namespace Edu.Repository.OKR
{
where += $@" and {nameof(RB_OKR_KeyResult_ViewModel.ProgressState)} ={(int)demodel.ProgressState}";
}
if (demodel.IsUseRule == 1) {
where += $@" and {nameof(RB_OKR_KeyResult_ViewModel.RuleId)} >0";
}
string sql = $@" select * from RB_OKR_KeyResult where {where} order by Id desc";
return Get<RB_OKR_KeyResult_ViewModel>(sql).ToList();
......
using Edu.Common.Enum;
using Edu.Model.Entity.OKR;
using Edu.Model.ViewModel.OKR;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using VT.FW.DB.Dapper;
namespace Edu.Repository.OKR
{
/// <summary>
/// OKR规则关联仓储层
/// </summary>
public class RB_OKR_RuleRelationRepository : BaseRepository<RB_OKR_RuleRelation>
{
/// <summary>
/// 获取列表
/// </summary>
/// <param name="demodel"></param>
/// <returns></returns>
public List<RB_OKR_RuleRelation_ViewModel> GetList(RB_OKR_RuleRelation_ViewModel demodel)
{
string where = $@" 1=1 ";
if (demodel.KeyResultId > 0)
{
where += $@" and {nameof(RB_OKR_RuleRelation_ViewModel.KeyResultId)} ={demodel.KeyResultId}";
}
if (!string.IsNullOrEmpty(demodel.KeyResultIds))
{
where += $@" and {nameof(RB_OKR_RuleRelation_ViewModel.KeyResultId)} in({demodel.KeyResultIds})";
}
string sql = $@" select * from RB_OKR_RuleRelation where {where} order by Id desc";
return Get<RB_OKR_RuleRelation_ViewModel>(sql).ToList();
}
}
}
using Edu.Common.Enum;
using Edu.Model.Entity.OKR;
using Edu.Model.ViewModel.OKR;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using VT.FW.DB.Dapper;
namespace Edu.Repository.OKR
{
/// <summary>
/// OKR规则仓储层
/// </summary>
public class RB_OKR_RuleRepository : BaseRepository<RB_OKR_Rule>
{
/// <summary>
/// 获取分页列表
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="rowsCount"></param>
/// <param name="demodel"></param>
/// <returns></returns>
public List<RB_OKR_Rule_ViewModel> GetPageList(int pageIndex, int pageSize, out long rowsCount, RB_OKR_Rule_ViewModel demodel)
{
string where = $@" 1=1 and Status =0";
if (demodel.Group_Id > 0)
{
where += $@" and {nameof(RB_OKR_Rule_ViewModel.Group_Id)} ={demodel.Group_Id}";
}
if (!string.IsNullOrEmpty(demodel.RuleName))
{
where += $@" and {nameof(RB_OKR_Rule_ViewModel.RuleName)} like '%{demodel.RuleName}%'";
}
if (demodel.Way > 0)
{
where += $@" and {nameof(RB_OKR_Rule_ViewModel.Way)} ={demodel.Way}";
}
if (demodel.Enable > 0)
{
where += $@" and {nameof(RB_OKR_Rule_ViewModel.Enable)} ={demodel.Enable}";
}
string sql = $@" select * from RB_OKR_Rule where {where} order by Id desc";
return GetPage<RB_OKR_Rule_ViewModel>(pageIndex, pageSize, out rowsCount, sql).ToList();
}
/// <summary>
/// 获取列表
/// </summary>
/// <param name="demodel"></param>
/// <returns></returns>
public List<RB_OKR_Rule_ViewModel> GetList(RB_OKR_Rule_ViewModel demodel)
{
string where = $@" 1=1 and Status =0";
if (demodel.Group_Id > 0)
{
where += $@" and {nameof(RB_OKR_Rule_ViewModel.Group_Id)} ={demodel.Group_Id}";
}
if (!string.IsNullOrEmpty(demodel.RuleName))
{
where += $@" and {nameof(RB_OKR_Rule_ViewModel.RuleName)} like '%{demodel.RuleName}%'";
}
if (demodel.Way > 0)
{
where += $@" and {nameof(RB_OKR_Rule_ViewModel.Way)} ={demodel.Way}";
}
if (demodel.Enable > 0)
{
where += $@" and {nameof(RB_OKR_Rule_ViewModel.Enable)} ={demodel.Enable}";
}
string sql = $@" select * from RB_OKR_Rule where {where} order by Id desc";
return Get<RB_OKR_Rule_ViewModel>(sql).ToList();
}
}
}
......@@ -1222,6 +1222,260 @@ namespace Edu.WebApi.Controllers.OKR
#endregion
#endregion
#region 规则管理
/// <summary>
/// 获取规则分页列表
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetOKRRulePageList() {
var userInfo = base.UserInfo;
var pageModel = JsonHelper.DeserializeObject<ResultPageModel>(RequestParm.Msg.ToString());
var dmodel = JsonHelper.DeserializeObject<RB_OKR_Rule_ViewModel>(RequestParm.Msg.ToString());
dmodel.Group_Id = userInfo.Group_Id;
var list = okrPeriodModule.GetOKRRulePageList(pageModel.PageIndex, pageModel.PageSize, out long count, dmodel);
pageModel.Count = Convert.ToInt32(count);
pageModel.PageData = list.Select(x => new
{
x.Id,
x.RuleName,
x.DataBase,
x.Table,
x.Field,
x.Way,
x.State,
x.Identity,
x.Time,
x.Remark,
x.Enable,
CreateTime = x.CreateTime.ToString("yyyy-MM-dd")
});
return ApiResult.Success("", pageModel);
}
/// <summary>
/// 获取规则列表
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetOKRRuleDownLoadList() {
var userInfo = base.UserInfo;
var dmodel = JsonHelper.DeserializeObject<RB_OKR_Rule_ViewModel>(RequestParm.Msg.ToString());
dmodel.Group_Id = userInfo.Group_Id;
var list = okrPeriodModule.GetOKRRuleDownLoadList(dmodel);
return ApiResult.Success("", list.Select(x => new
{
x.Id,
x.RuleName,
}));
}
/// <summary>
/// 新增修改规则信息
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetOKRRuleInfo() {
var userInfo = base.UserInfo;
RB_OKR_Rule_ViewModel dmodel = JsonHelper.DeserializeObject<RB_OKR_Rule_ViewModel>(RequestParm.Msg.ToString());
if (string.IsNullOrEmpty(dmodel.RuleName)) {
return ApiResult.ParamIsNull("请输入规则名称");
}
if (string.IsNullOrEmpty(dmodel.DataBase)) {
return ApiResult.ParamIsNull("请输入数据库名称");
}
if (string.IsNullOrEmpty(dmodel.Table)) {
return ApiResult.ParamIsNull("请输入表名");
}
if (string.IsNullOrEmpty(dmodel.Field)) {
return ApiResult.ParamIsNull("请输入统计字段");
}
if (string.IsNullOrEmpty(dmodel.State)) {
return ApiResult.ParamIsNull("请输入状态字段");
}
if (string.IsNullOrEmpty(dmodel.Identity)) {
return ApiResult.ParamIsNull("请输入身份字段");
}
if (string.IsNullOrEmpty(dmodel.Time)) {
return ApiResult.ParamIsNull("请输入操作时间字段");
}
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;
bool flag = okrPeriodModule.SetOKRRuleInfo(dmodel, userInfo);
if (flag)
{
return ApiResult.Success();
}
else {
return ApiResult.Failed();
}
}
/// <summary>
/// 设置规则状态
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetOKRRuleState() {
var userInfo = base.UserInfo;
JObject parms = JObject.Parse(RequestParm.Msg.ToString());
int RuleId = parms.GetInt("RuleId", 0);
int Type = parms.GetInt("Type", 0);//类型 1启用 2禁用 3删除
string msg = okrPeriodModule.SetOKRRuleState(RuleId, Type, userInfo);
if (msg == "")
{
return ApiResult.Success();
}
else {
return ApiResult.Failed(msg);
}
}
/// <summary>
/// 获取枚举列表
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetRuleTypeEnumList()
{
var list = EnumHelper.EnumToList(typeof(RuleTypeEnum));
return ApiResult.Success("", list.Select(x => new
{
x.Name,
x.Id
}));
}
/// <summary>
/// 设置关键结果使用规则
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetOKRKeyResultUseRule()
{
var userInfo = base.UserInfo;
RB_OKR_KeyResult_ViewModel dmodel = JsonHelper.DeserializeObject<RB_OKR_KeyResult_ViewModel>(RequestParm.Msg.ToString());
if (dmodel.Id <= 0) {
return ApiResult.ParamIsNull("请传递关键结果id");
}
if (dmodel.RuleId <= 0) {
return ApiResult.ParamIsNull("请传递规则Id");
}
if (!dmodel.RuleSTime.HasValue) {
return ApiResult.ParamIsNull("请选择规则适配开始时间");
}
if (!dmodel.RuleETime.HasValue) {
return ApiResult.ParamIsNull("请选择规则适配结束时间");
}
if (dmodel.StartValue < 0) {
return ApiResult.ParamIsNull("请输入结果的起始值");
}
if (dmodel.EndValue <= 0) {
return ApiResult.ParamIsNull("请输入结果的目标值");
}
if (dmodel.RelationList == null || !dmodel.RelationList.Any()) {
return ApiResult.ParamIsNull("请选择适配部门/直属人员");
}
foreach (var item in dmodel.RelationList) {
if (item.RelationId <= 0) {
return ApiResult.ParamIsNull("关联部门/直属人员有误");
}
}
dmodel.RuleSTime = Convert.ToDateTime(dmodel.RuleSTime.Value.ToString("yyyy-MM-dd"));
dmodel.RuleETime = Convert.ToDateTime(dmodel.RuleETime.Value.ToString("yyyy-MM-dd") + " 23:59:59");
string msg = okrPeriodModule.SetOKRKeyResultUseRule(dmodel, userInfo);
if (msg == "")
{
return ApiResult.Success();
}
else
{
return ApiResult.Failed(msg);
}
}
/// <summary>
/// 取消使用规则
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult CancelOKRKeyResultUseRule() {
var userInfo = base.UserInfo;
JObject parms = JObject.Parse(RequestParm.Msg.ToString());
int KeyResultId = parms.GetInt("KeyResultId", 0);
string msg = okrPeriodModule.CancelOKRKeyResultUseRule(KeyResultId, userInfo);
if (msg == "")
{
return ApiResult.Success();
}
else
{
return ApiResult.Failed(msg);
}
}
/// <summary>
/// 获取结果 规则关联人员/部门列表
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetOKRKeyResultRuleReList() {
var userInfo = base.UserInfo;
JObject parms = JObject.Parse(RequestParm.Msg.ToString());
int KeyResultId = parms.GetInt("KeyResultId", 0);
if (KeyResultId <= 0) {
return ApiResult.ParamIsNull("请传递关键结果id");
}
var list = okrPeriodModule.GetOKRKeyResultRuleReList(KeyResultId, userInfo);
return ApiResult.Success("", list.Select(x => new
{
x.Id,
x.Type,
x.RelationId,
x.RelationName
}));
}
/// <summary>
/// 获取我负责的部门
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetOKRMyManageDepartment() {
var userInfo = base.UserInfo;
var list = okrPeriodModule.GetOKRMyManageDepartment_V2(userInfo);
return ApiResult.Success("", list);
}
/// <summary>
/// 获取我的直属下级
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetOKRMyChildEmployeeList()
{
var userInfo = base.UserInfo;
var list = okrPeriodModule.GetOKRMyChildEmployeeList(userInfo);
return ApiResult.Success("", list);
}
#endregion
#region 统计模块
/// <summary>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment