using Edu.Cache.User;
using Edu.Common.API;
using Edu.Common.Plugin;
using Edu.Model.CacheModel;
using Edu.Model.ViewModel.OKR;
using Edu.Repository.Log;
using Edu.Repository.OKR;
using Edu.Repository.User;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using VT.FW.DB;
using System.Threading;
using System.Threading.Tasks;
using Edu.Model.ViewModel.User;
namespace Edu.Module.OKR
{
///
/// OKR处理类
///
public class OKRPeriodModule
{
///
/// 评论
///
private readonly RB_OKR_CommentRepository oKR_CommentRepository = new RB_OKR_CommentRepository();
///
/// 结果
///
private readonly RB_OKR_KeyResultRepository oKR_KeyResultRepository = new RB_OKR_KeyResultRepository();
///
/// 目标
///
private readonly RB_OKR_ObjectiveRepository oKR_ObjectiveRepository = new RB_OKR_ObjectiveRepository();
///
/// 对齐
///
private readonly RB_OKR_ObjectiveRelationRepository oKR_ObjectiveRelationRepository = new RB_OKR_ObjectiveRelationRepository();
///
/// 周期配置
///
private readonly RB_OKR_PeriodConfigRepository oKR_PeriodConfigRepository = new RB_OKR_PeriodConfigRepository();
///
/// 周期
///
private readonly RB_OKR_PeriodRepository oKR_PeriodRepository = new RB_OKR_PeriodRepository();
///
/// 周期权限
///
private readonly RB_OKR_PermissionRepository oKR_PermissionRepository = new RB_OKR_PermissionRepository();
///
/// 提醒
///
private readonly RB_OKR_RemindRepository oKR_RemindRepository = new RB_OKR_RemindRepository();
///
/// 评分明细
///
private readonly RB_OKR_ScoreDetailRepository oKR_ScoreDetailRepository = new RB_OKR_ScoreDetailRepository();
///
/// 评分
///
private readonly RB_OKR_ScoreRepository oKR_ScoreRepository = new RB_OKR_ScoreRepository();
///
/// 关注
///
private readonly RB_OKR_AttentionRepository oKR_AttentionRepository = new RB_OKR_AttentionRepository();
///
/// 用户日志
///
private readonly RB_User_ChangeLogRepository changeLogRepository = new RB_User_ChangeLogRepository();
///
/// 更新通知
///
private readonly RB_OKR_UpdateNotificationRepository oKR_UpdateNotificationRepository = new RB_OKR_UpdateNotificationRepository();
///
/// 账户
///
private readonly RB_AccountRepository accountRepository = new RB_AccountRepository();
///
/// 部门
///
private readonly RB_DepartmentRepository departmentRepository = new RB_DepartmentRepository();
///
/// 岗位
///
private readonly RB_PostRepository postRepository = new RB_PostRepository();
///
/// 规则
///
private readonly RB_OKR_RuleRepository oKR_RuleRepository = new RB_OKR_RuleRepository();
///
/// 规则关联
///
private readonly RB_OKR_RuleRelationRepository oKR_RuleRelationRepository = new RB_OKR_RuleRelationRepository();
///
/// 修改历史
///
private readonly RB_OKR_UpdateHistoryRepository oKR_UpdateHistoryRepository = new RB_OKR_UpdateHistoryRepository();
///
/// 周期默认所有人可见权限
///
private readonly RB_OKR_PeriodPermissionRepository oKR_PeriodPermissionRepository = new RB_OKR_PeriodPermissionRepository();
///
/// 关注事项
///
private readonly RB_OKR_MatterRepository oKR_MatterRepository = new RB_OKR_MatterRepository();
///
/// 用户最后更新进度时间
///
private readonly RB_OKR_UpdateProgressRepository oKR_UpdateProgressRepository = new RB_OKR_UpdateProgressRepository();
#region 基础配置
///
/// 获取周期配置
///
///
///
public RB_OKR_PeriodConfig_ViewModel GetOKRPeriodConfigInfo(int group_Id)
{
return oKR_PeriodConfigRepository.GetList(new RB_OKR_PeriodConfig_ViewModel() { Group_Id = group_Id }).FirstOrDefault() ?? new RB_OKR_PeriodConfig_ViewModel();
}
///
/// 获取周期配置列表
///
///
public List GetOKRPeriodConfigList()
{
return oKR_PeriodConfigRepository.GetList(new RB_OKR_PeriodConfig_ViewModel() { });
}
///
/// 保存OKR周期配置
///
///
///
///
public string SetOKRPeriodConfigInfo(RB_OKR_PeriodConfig_ViewModel dmodel, UserInfo userInfo)
{
if (dmodel.Id > 0)
{
var model = oKR_PeriodConfigRepository.GetEntity(dmodel.Id);
Dictionary keyValues = new Dictionary() {
{ nameof(RB_OKR_PeriodConfig_ViewModel.PeriodMonth), dmodel.PeriodMonth},
{ nameof(RB_OKR_PeriodConfig_ViewModel.StartDate), dmodel.StartDate},
{ nameof(RB_OKR_PeriodConfig_ViewModel.EndDate), dmodel.EndDate},
{ nameof(RB_OKR_PeriodConfig_ViewModel.BeforeNum), dmodel.BeforeNum},
{ nameof(RB_OKR_PeriodConfig_ViewModel.BeforeType), dmodel.BeforeType},
{ nameof(RB_OKR_PeriodConfig_ViewModel.YearOKR), dmodel.YearOKR},
{ nameof(RB_OKR_PeriodConfig_ViewModel.DirectorAudit), dmodel.DirectorAudit},
{ nameof(RB_OKR_PeriodConfig_ViewModel.UpdateBy), dmodel.UpdateBy},
{ nameof(RB_OKR_PeriodConfig_ViewModel.UpdateTime), dmodel.UpdateTime},
};
List wheres = new List() {
new WhereHelper(){
FiledName=nameof(RB_OKR_PeriodConfig_ViewModel.Id),
FiledValue=dmodel.Id,
OperatorEnum=OperatorEnum.Equal
},
new WhereHelper(){
FiledName=nameof(RB_OKR_PeriodConfig_ViewModel.Group_Id),
FiledValue=userInfo.Group_Id,
OperatorEnum=OperatorEnum.Equal
}
};
bool flag = oKR_PeriodConfigRepository.Update(keyValues, wheres);
if (flag)
{
#region 是否需要重新生成周期
if (model.PeriodMonth != dmodel.PeriodMonth || model.StartDate != dmodel.StartDate || model.EndDate != dmodel.EndDate)
{
//更新所有历史周期
oKR_PeriodRepository.SetPeriodHistory(userInfo.Group_Id);
var nlist = oKR_PeriodRepository.GetList(new RB_OKR_Period_ViewModel() { Group_Id = dmodel.Group_Id, Name = dmodel.StartDate.Value.ToString("yyyy年MM月") + "-" + dmodel.EndDate.Value.ToString("yyyy年MM月") });
if (nlist.Any())
{
var nmodel = nlist.FirstOrDefault();
Dictionary keyValues1 = new Dictionary() {
{ nameof(RB_OKR_Period_ViewModel.IsNormal),1}
};
List wheres1 = new List() {
new WhereHelper(){
FiledName=nameof(RB_OKR_Period_ViewModel.Id),
FiledValue=nmodel.Id,
OperatorEnum=OperatorEnum.Equal
}
};
oKR_PeriodRepository.Update(keyValues1, wheres1);
}
else
{
//生成对应期数
oKR_PeriodRepository.Insert(new Model.Entity.OKR.RB_OKR_Period()
{
Id = 0,
IsYear = 2,
Status = 0,
Name = dmodel.StartDate.Value.ToString("yyyy年MM月") + "-" + dmodel.EndDate.Value.ToString("yyyy年MM月"),
StartDate = dmodel.StartDate.Value,
EndDate = dmodel.EndDate.Value,
Group_Id = dmodel.Group_Id,
School_Id = dmodel.School_Id,
CreateBy = dmodel.CreateBy,
CreateTime = DateTime.Now,
UpdateBy = dmodel.UpdateBy,
UpdateTime = DateTime.Now,
IsNormal = 1
});
}
}
if (dmodel.YearOKR == 1)
{
//今年
var nlist = oKR_PeriodRepository.GetList(new RB_OKR_Period_ViewModel() { Group_Id = dmodel.Group_Id, Name = dmodel.StartDate.Value.Year + "年度OKR" });
if (!nlist.Any())
{
oKR_PeriodRepository.Insert(new Model.Entity.OKR.RB_OKR_Period()
{
Id = 0,
IsYear = 1,
Status = 0,
Name = dmodel.StartDate.Value.Year + "年度OKR",
StartDate = Convert.ToDateTime(dmodel.StartDate.Value.Year + "-01-01"),
EndDate = Convert.ToDateTime(dmodel.StartDate.Value.Year + "-01-01 23:59:59").AddYears(1).AddDays(-1),
Group_Id = dmodel.Group_Id,
School_Id = dmodel.School_Id,
CreateBy = dmodel.CreateBy,
CreateTime = DateTime.Now,
UpdateBy = dmodel.UpdateBy,
UpdateTime = DateTime.Now,
IsNormal = 1
});
}
if (dmodel.StartDate.Value.Year != dmodel.EndDate.Value.Year)
{
//明年
var nextlist = oKR_PeriodRepository.GetList(new RB_OKR_Period_ViewModel() { Group_Id = dmodel.Group_Id, Name = dmodel.StartDate.Value.Year + "年度OKR" });
if (!nextlist.Any())
{
oKR_PeriodRepository.Insert(new Model.Entity.OKR.RB_OKR_Period()
{
Id = 0,
IsYear = 1,
Status = 0,
Name = dmodel.EndDate.Value.Year + "年度OKR",
StartDate = Convert.ToDateTime(dmodel.EndDate.Value.Year + "-01-01"),
EndDate = Convert.ToDateTime(dmodel.EndDate.Value.Year + "-01-01 23:59:59").AddYears(1).AddDays(-1),
Group_Id = dmodel.Group_Id,
School_Id = dmodel.School_Id,
CreateBy = dmodel.CreateBy,
CreateTime = DateTime.Now,
UpdateBy = dmodel.UpdateBy,
UpdateTime = DateTime.Now,
IsNormal = 1
});
}
}
}
//看最新的天数 是否满足生成下一周期
if (dmodel.BeforeType == 1)
{
//天
var ds = dmodel.EndDate.Value - DateTime.Now;
if (ds.TotalDays < dmodel.BeforeNum)
{
//生成下一个周期
CreatePeriodNext(dmodel);
}
}
else
{
//月
var ds = DateTime.Now.AddMonths(dmodel.BeforeNum);
if (ds > dmodel.EndDate)
{
//生成下一个周期
CreatePeriodNext(dmodel);
}
}
#endregion
//记录日志
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周期配置",
School_Id = userInfo.School_Id,
SourceId = 0
});
}
return flag ? "" : "失败了,请联系管理";
}
else
{
//验证是否存在
var model = oKR_PeriodConfigRepository.GetList(new RB_OKR_PeriodConfig_ViewModel() { Group_Id = userInfo.Group_Id }).FirstOrDefault();
if (model != null)
{
return "已存在配置";
}
bool flag = oKR_PeriodConfigRepository.Insert(dmodel) > 0;
if (flag)
{
//生成对应期数
oKR_PeriodRepository.Insert(new Model.Entity.OKR.RB_OKR_Period()
{
Id = 0,
IsYear = 2,
Status = 0,
Name = dmodel.StartDate.Value.ToString("yyyy年MM月") + "-" + dmodel.EndDate.Value.ToString("yyyy年MM月"),
StartDate = dmodel.StartDate.Value,
EndDate = dmodel.EndDate.Value,
Group_Id = dmodel.Group_Id,
School_Id = dmodel.School_Id,
CreateBy = dmodel.CreateBy,
CreateTime = DateTime.Now,
UpdateBy = dmodel.UpdateBy,
UpdateTime = DateTime.Now,
IsNormal = 1
});
if (dmodel.YearOKR == 1)
{
//今年
string YearName = dmodel.StartDate.Value.Year + "年度OKR";
if (!oKR_PeriodRepository.GetList(new RB_OKR_Period_ViewModel() { Group_Id = dmodel.Group_Id, IsNormal = 1, Name = YearName }).Any())
{
oKR_PeriodRepository.Insert(new Model.Entity.OKR.RB_OKR_Period()
{
Id = 0,
IsYear = 1,
Status = 0,
Name = YearName,
StartDate = Convert.ToDateTime(dmodel.StartDate.Value.Year + "-01-01"),
EndDate = Convert.ToDateTime(dmodel.StartDate.Value.Year + "-01-01 23:59:59").AddYears(1).AddDays(-1),
Group_Id = dmodel.Group_Id,
School_Id = dmodel.School_Id,
CreateBy = dmodel.CreateBy,
CreateTime = DateTime.Now,
UpdateBy = dmodel.UpdateBy,
UpdateTime = DateTime.Now,
IsNormal = 1
});
}
if (dmodel.StartDate.Value.Year != dmodel.EndDate.Value.Year)
{
//明年
string YearName1 = dmodel.EndDate.Value.Year + "年度OKR";
if (!oKR_PeriodRepository.GetList(new RB_OKR_Period_ViewModel() { Group_Id = dmodel.Group_Id, IsNormal = 1, Name = YearName1 }).Any())
{
oKR_PeriodRepository.Insert(new Model.Entity.OKR.RB_OKR_Period()
{
Id = 0,
IsYear = 1,
Status = 0,
Name = YearName1,
StartDate = Convert.ToDateTime(dmodel.EndDate.Value.Year + "-01-01"),
EndDate = Convert.ToDateTime(dmodel.EndDate.Value.Year + "-01-01 23:59:59").AddYears(1).AddDays(-1),
Group_Id = dmodel.Group_Id,
School_Id = dmodel.School_Id,
CreateBy = dmodel.CreateBy,
CreateTime = DateTime.Now,
UpdateBy = dmodel.UpdateBy,
UpdateTime = DateTime.Now,
IsNormal = 1
});
}
}
}
//看最新的天数 是否满足生成下一周期
if (dmodel.BeforeType == 1)
{
//天
var ds = dmodel.EndDate.Value - DateTime.Now;
if (ds.TotalDays < dmodel.BeforeNum)
{
//生成下一个周期
CreatePeriodNext(dmodel);
}
}
else
{
//月
var ds = DateTime.Now.AddMonths(dmodel.BeforeNum);
if (ds > dmodel.EndDate)
{
//生成下一个周期
CreatePeriodNext(dmodel);
}
}
//记录日志
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周期配置",
School_Id = userInfo.School_Id,
SourceId = 0
});
}
return flag ? "" : "失败了,请联系管理";
}
}
///
/// 创建下一个周期
///
///
public void CreatePeriodNext(RB_OKR_PeriodConfig_ViewModel dmodel, bool IsCreateYear = false)
{
DateTime STime = Convert.ToDateTime(dmodel.EndDate.Value.AddDays(1).ToString("yyyy-MM-dd"));
DateTime ETime = Convert.ToDateTime(STime.AddMonths((int)dmodel.PeriodMonth).AddDays(-1).ToString("yyyy-MM-dd") + " 23:59:59");
//验证一下 当前时间周期是否存在
string Name = STime.ToString("yyyy年MM月") + "-" + ETime.ToString("yyyy年MM月");
if (!oKR_PeriodRepository.GetList(new RB_OKR_Period_ViewModel() { Group_Id = dmodel.Group_Id, IsNormal = 1, Name = Name }).Any())
{
bool flag = oKR_PeriodRepository.Insert(new Model.Entity.OKR.RB_OKR_Period()
{
Id = 0,
IsYear = 2,
Status = 0,
Name = Name,
StartDate = STime,
EndDate = ETime,
Group_Id = dmodel.Group_Id,
School_Id = dmodel.School_Id,
CreateBy = dmodel.CreateBy,
CreateTime = DateTime.Now,
UpdateBy = dmodel.UpdateBy,
UpdateTime = DateTime.Now,
IsNormal = 1
}) > 0;
if (flag && IsCreateYear && dmodel.YearOKR == 1)
{
DateTime YearStart = Convert.ToDateTime(ETime.Year + "-01-01");
if (STime <= YearStart && YearStart < ETime)
{
string YearName = YearStart.Year + "年度OKR";
if (!oKR_PeriodRepository.GetList(new RB_OKR_Period_ViewModel() { Group_Id = dmodel.Group_Id, IsNormal = 1, Name = YearName }).Any())
{
//跨年了 直接新增该年 年度周期
oKR_PeriodRepository.Insert(new Model.Entity.OKR.RB_OKR_Period()
{
Id = 0,
IsYear = 1,
Status = 0,
Name = YearName,
StartDate = YearStart,
EndDate = Convert.ToDateTime(YearStart.Year + "-01-01 23:59:59").AddYears(1).AddDays(-1),
Group_Id = dmodel.Group_Id,
School_Id = dmodel.School_Id,
CreateBy = dmodel.CreateBy,
CreateTime = DateTime.Now,
UpdateBy = dmodel.UpdateBy,
UpdateTime = DateTime.Now,
IsNormal = 1
});
}
}
}
}
}
///
/// 获取提醒设置列表
///
///
///
public List GetOKRRemindList(int group_Id)
{
var list = oKR_RemindRepository.GetList(new RB_OKR_Remind_ViewModel() { Group_Id = group_Id });
for (var i = 1; i <= 4; i++)
{
var model = list.Where(x => x.Type == i).FirstOrDefault();
if (model == null)
{
list.Add(new RB_OKR_Remind_ViewModel()
{
Days = "",
Time = "",
Type = i
});
}
}
return list.OrderBy(x => x.Type).ToList();
}
///
/// 设置OKR提现
///
///
///
///
public string SetOKRRemindInfo(RB_OKR_Remind_ViewModel dmodel, UserInfo userInfo)
{
var model = oKR_RemindRepository.GetList(new RB_OKR_Remind_ViewModel() { Group_Id = userInfo.Group_Id, Type = dmodel.Type }).FirstOrDefault();
if (model == null)
{
bool flag = oKR_RemindRepository.Insert(dmodel) > 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提醒设置",
School_Id = userInfo.School_Id,
SourceId = 0
});
}
return flag ? "" : "出错啦,请联系管理员";
}
else
{
Dictionary keyValues = new Dictionary() {
{ nameof(RB_OKR_Remind_ViewModel.Days),dmodel.Days},
{ nameof(RB_OKR_Remind_ViewModel.Time),dmodel.Time},
{ nameof(RB_OKR_Remind_ViewModel.UpdateBy),dmodel.UpdateBy},
{ nameof(RB_OKR_Remind_ViewModel.UpdateTime),dmodel.UpdateTime}
};
List wheres = new List() {
new WhereHelper(){
FiledName=nameof(RB_OKR_Remind_ViewModel.Id),
FiledValue= model.Id,
OperatorEnum=OperatorEnum.Equal
}
};
bool flag = oKR_RemindRepository.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提醒设置",
School_Id = userInfo.School_Id,
SourceId = 0
});
}
return flag ? "" : "出错啦,请联系管理员";
}
}
///
/// 设置提醒状态
///
///
///
///
public bool SetOKRRemindEnable(int type, UserInfo userInfo)
{
var model = oKR_RemindRepository.GetList(new RB_OKR_Remind_ViewModel() { Group_Id = userInfo.Group_Id, Type = type }).FirstOrDefault();
if (model == null)
{
return false;
}
else
{
Dictionary keyValues = new Dictionary() {
{ nameof(RB_OKR_Remind_ViewModel.Enable),model.Enable == 1 ? 2 : 1}
};
List wheres = new List() {
new WhereHelper(){
FiledName=nameof(RB_OKR_Remind_ViewModel.Id),
FiledValue= model.Id,
OperatorEnum=OperatorEnum.Equal
}
};
bool flag = oKR_RemindRepository.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提醒启用禁用",
School_Id = userInfo.School_Id,
SourceId = 0
});
}
return flag;
}
}
///
/// 获取分数配置
///
///
///
///
///
///
public List GetOKRScoreConfigPageList(int pageIndex, int pageSize, out long count, RB_OKR_Score_ViewModel dmodel)
{
var list = oKR_ScoreRepository.GetPageList(pageIndex, pageSize, out count, dmodel);
if (list.Any())
{
string ids = string.Join(",", list.Select(x => x.Id));
var dlist = oKR_ScoreDetailRepository.GetList(new RB_OKR_ScoreDetail_ViewModel() { ScoreIds = ids });
foreach (var item in list)
{
item.DetailList = dlist.Where(x => x.ScoreId == item.Id).ToList();
}
}
return list;
}
///
/// 保存分数配置
///
///
///
///
public string SetOKRScoreConfigInfo(RB_OKR_Score_ViewModel dmodel, UserInfo userInfo)
{
if (dmodel.Id > 0)
{
Dictionary keyValues = new Dictionary() {
{ nameof(RB_OKR_Score_ViewModel.Name),dmodel.Name}
};
List wheres = new List() {
new WhereHelper(){
FiledName=nameof(RB_OKR_Score_ViewModel.Id),
FiledValue=dmodel.Id,
OperatorEnum=OperatorEnum.Equal
}
};
bool flag = oKR_ScoreRepository.Update(keyValues, wheres);
if (flag)
{
var list = oKR_ScoreDetailRepository.GetList(new RB_OKR_ScoreDetail_ViewModel() { ScoreId = dmodel.Id });
//删除后 再新增
oKR_ScoreDetailRepository.DeleteBatch(list);
foreach (var item in dmodel.DetailList)
{
oKR_ScoreDetailRepository.Insert(new Model.Entity.OKR.RB_OKR_ScoreDetail()
{
Id = 0,
Color = item.Color,
Name = item.Name,
ScoreId = dmodel.Id,
ScoreMax = item.ScoreMax,
ScoreMin = item.ScoreMin
});
}
//日志记录
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
{
int Id = oKR_ScoreRepository.Insert(dmodel);
if (Id > 0)
{
//增加明细
foreach (var item in dmodel.DetailList)
{
oKR_ScoreDetailRepository.Insert(new Model.Entity.OKR.RB_OKR_ScoreDetail()
{
Id = 0,
Color = item.Color,
Name = item.Name,
ScoreId = Id,
ScoreMax = item.ScoreMax,
ScoreMin = item.ScoreMin
});
}
//日志记录
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 Id > 0 ? "" : "出错了,请联系管理员";
}
}
///
/// 设置分数配置状态
///
///
///
///
///
public string SetOKRScoreConfigState(int scoreId, int type, UserInfo userInfo)
{
if (type == 1)
{
var model = oKR_ScoreRepository.GetEntity(scoreId);
if (model == null) { return "分数规则不存在"; }
Dictionary keyValues = new Dictionary() {
{ nameof(RB_OKR_Score_ViewModel.IsDefault),model.IsDefault==1?2:1}
};
List wheres = new List() {
new WhereHelper(){
FiledName=nameof(RB_OKR_Score_ViewModel.Id),
FiledValue=scoreId,
OperatorEnum=OperatorEnum.Equal
}
};
bool flag = oKR_ScoreRepository.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分数配置【" + scoreId + "】默认状态",
School_Id = userInfo.School_Id,
SourceId = 0
});
}
return flag ? "" : "出错了,请联系管理员";
}
else if (type == 2)
{
Dictionary keyValues = new Dictionary() {
{ nameof(RB_OKR_Score_ViewModel.Status),1}
};
List wheres = new List() {
new WhereHelper(){
FiledName=nameof(RB_OKR_Score_ViewModel.Id),
FiledValue=scoreId,
OperatorEnum=OperatorEnum.Equal
}
};
bool flag = oKR_ScoreRepository.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分数配置【" + scoreId + "】",
School_Id = userInfo.School_Id,
SourceId = 0
});
}
return flag ? "" : "出错了,请联系管理员";
}
else
{
return "类型不正确";
}
}
///
/// 获取更新历史分页列表
///
///
///
///
///
///
public List GetOKRObjectiveUpdateHistoryList(int pageIndex, int pageSize, out long count, RB_OKR_UpdateHistory_ViewModel dmodel)
{
return oKR_UpdateHistoryRepository.GetPageList(pageIndex, pageSize, out count, dmodel);
}
#endregion
#region 规则管理
///
/// 获取规则分页列表
///
///
///
///
///
///
public List GetOKRRulePageList(int pageIndex, int pageSize, out long count, RB_OKR_Rule_ViewModel dmodel)
{
return oKR_RuleRepository.GetPageList(pageIndex, pageSize, out count, dmodel);
}
///
/// 获取规则信息
///
///
///
public RB_OKR_Rule_ViewModel GetOKRRuleModel(int RuleId)
{
return oKR_RuleRepository.GetEntity(RuleId);
}
///
/// 获取列表
///
///
///
public List GetOKRRuleDownLoadList(RB_OKR_Rule_ViewModel dmodel)
{
return oKR_RuleRepository.GetList(dmodel);
}
///
/// 新增修改规则
///
///
///
///
public bool SetOKRRuleInfo(RB_OKR_Rule_ViewModel dmodel, UserInfo userInfo)
{
if (dmodel.Id > 0)
{
Dictionary keyValues = new Dictionary() {
{ 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 wheres = new List() {
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;
}
}
///
/// 设置规则状态
///
///
///
///
///
public string SetOKRRuleState(int ruleId, int type, UserInfo userInfo)
{
Dictionary keyValues = new Dictionary() { };
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 wheres = new List() {
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 "出错了,请联系管理员";
}
///
/// 关键结果绑定规则
///
///
///
///
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 keyValues = new Dictionary() {
{ 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 wheres = new List() {
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 "出错了,请联系管理员";
}
}
///
/// 获取关键结果关联部门/人员
///
///
///
///
public List 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, IsLeave = 1 });
foreach (var item in elist)
{
var emModel = e2list.Where(x => x.Id == item.RelationId).FirstOrDefault();
item.RelationName = emModel?.EmployeeName ?? "";
item.UserIcon = emModel?.UserIcon ?? "";
item.PostName = emModel?.PostName ?? "";
item.DeptName = emModel?.DeptName ?? "";
}
}
}
return list;
}
///
/// 获取关键结果关联部门/人员
///
///
///
public List GetOKRKeyResultRuleReList(int keyResultId)
{
var list = oKR_RuleRelationRepository.GetList(new RB_OKR_RuleRelation_ViewModel() { KeyResultId = keyResultId });
return list;
}
///
/// 获取我负责的部门列表
///
///
///
public object GetOKRMyManageDepartment(UserInfo userInfo)
{
var RList = new List